要么不做,要做就做用户

“要么不做 要做就做用户”
这句话是在白鸦的《设计网事》中的一句话,当时只是感觉说的挺有道理,没有太大的感触,直到后来偶尔发生的
一件事:

当时我们在给一个客户做一个训练系统,负责人不是我,是公司的另外一个同事,当时我们把系统交付给客户以后,
客户对我们的主页面做了修改(客户方有一定的技术实力),同事拿出来给我们看;发现,客户把主页面用FLASH
重新写了一遍:
原来我们提供给用户使用的答题页面,都是很简单的选择和勾选操作,我们觉得软件做到这样就好了,用户能用不
就行了,当然,也不是太差;
而客户边做的修改呢,就是把所有的答题的页面都用FLASH写成了游戏,比如说,有A,B,C,D四个选项的题目,做
成了打地鼠游戏,有四个地鼠,要用锤子打中才能答题(难度不大);

最开始我们公司同事们都觉得这个挺无聊的,只有很无聊的人才想出这样的点子来;但是,当平静下来,开始重新
审视新页面的时候,才发觉我们犯了多么严重的问题:
“我们根本没有深入的分析过用户的群体特点”

先说下,我们的用户群体:这个训练系统的用户群体呢主要是一些年轻人,20岁左右,甚至更小,他们对没有意思
的东西根本不感兴趣。

虽然客户方的修改不是很大,可能就是一个小小的改动,但是对整个系统的用户体验提升却是不可估量的。
教我概念设计的老师 solar 曾经说过“如果有可能,请尽量让自己设计出来有那么点意思...”

 
懒羊羊头上顶了一坨便便 , 哈哈...
 
羊在,便便在,即使换了马甲,哈哈哈...
在这件事情之后,我一直都在思考,为什么客户能发现的问题我们却发现不了?这不是能力或者实力的问题,而是 态度! 第一,在我们的意识中从来就没有想过要给客户提供一个好用而且易用的系统,而只是觉得,业务系统嘛,能满足 业务需求不就可以了么?! 第二,从来不适用自己做出来的系统! 这是一个很严重的问题,如果连自己都没有用过的系统,如何保证质量?! 第三,混乱的过程管理!其实我们公司一直都有软件质量管理体系,而且一直在做,但是也只是浮于表面,应付审 查之类的,而从来没有在实际上项目中应用过,有的时候我只有看到同事在忙活着质量体系的各种文档的时候才意 识到公司是有质量管理体系的,但是这种想法也只是一闪而过,根本没有想过这个质量管理体系是规范自己的工作 的,甚至不觉得和自己有任何的关系。 现在想想白鸦的话“要么不做,要做就做用户” 是多么的正确,如果这个世界只有偏执狂才能生存,那么我们恐怕 早被淘汰了几十次啦...

http://www.douban.com/note/145818346/

<think>好的,我现在需要回答用户的问题:“COMMIT在数据库中是什么的”。首先,我要确认用户的基础知识水平,可能他们对数据库事务有一定了解,但清楚COMMIT的具体作用。接下来,我需要明确COMMIT的定义、用途以及它在事务处理中的重要性。 首先,回忆数据库事务的基本概念。事务是作为单个逻辑工作单元执行的一系列操作,要么全部成功,要么全部失败。这里的关键是ACID属性:原子性、一致性、隔离性、持久性。COMMIT与原子性和持久性密切相关。 用户可能想知道,为什么需要COMMIT命令。这时候需要解释,在事务过程中,所有的修改最初可能只存在于内存或临时存储中,直到显式提交后,这些修改才会永久保存到数据库。如果没有COMMIT,事务中的操作可能会被保存,导致数据丢失。 接着,要比较COMMIT和ROLLBACK的区别。ROLLBACK用于撤销未提交的事务,而COMMIT则是确认事务的完成。用户可能对这两个命令的关系感兴趣,所以需要明确它们的同作用。 然后,考虑COMMIT的实际应用场景。例如,在银行转账中,必须确保扣款和入款两个操作都成功,否则整个事务回滚。这时候COMMIT的作用就是确保两个操作都完成后才永久生效。 还需要提到自动提交模式,有些数据库默认每个语句自动提交,而有些则需要显式COMMIT。用户可能需要知道同数据库的默认行为,比如MySQL的自动提交设置,或者Oracle中需要手动提交的情况。 此外,事务的持久性是通过COMMIT实现的。提交后,即使系统崩溃,数据也会丢失。这涉及到日志机制,数据库在提交时将变更写入日志文件,确保持久性。 用户可能有疑问,如果提交会怎样。这时需要解释,未提交的事务对其他用户可能可见,取决于隔离级别。同时,长时间未提交的事务可能导致锁的问题,影响其他操作。 最后,可能需要给出一个简单的示例,比如使用SQL语句开始事务,执行更新操作,然后提交。这有助于用户直观理解COMMIT的使用方法。 总结一下,回答的结构应该是先定义COMMIT,解释其在事务中的作用,讨论ACID属性中的相关部分,比较ROLLBACK,说明使用场景,提到自动提交和同数据库的行为,以及持久性和日志机制。同时,用示例加深理解,并指出常见问题,如未提交的影响。</think>在数据库中,`COMMIT` 是用于 **永久保存事务中所有操作** 的关键命令。以下是它的核心作用和原理: --- ### **1. 事务的原子性与持久性** - **原子性**:事务中的操作要么全部成功(`COMMIT`),要么全部撤销(`ROLLBACK`)。 $$ \text{例如:转账操作} \begin{cases} \text{账户A扣款} \\ \text{账户B入款} \end{cases} \xrightarrow{\text{COMMIT}} \text{两者同时生效} $$ - **持久性**:`COMMIT` 后数据变更将永久写入数据库(即使系统崩溃也会丢失)。 --- ### **2. 工作流程** 1. **事务开始**:隐式(如执行第一条SQL)或显式(`BEGIN TRANSACTION`)。 2. **执行操作**:增删改查(如 `UPDATE`、`INSERT`)。 3. **提交确认**:`COMMIT` 将内存中的变更写入磁盘。 4. **结束事务**:释放资源(如锁)。 ```sql BEGIN TRANSACTION; -- 显式开始事务 UPDATE accounts SET balance = balance - 100 WHERE id = 1; -- 扣款 UPDATE accounts SET balance = balance + 100 WHERE id = 2; -- 入款 COMMIT; -- 确认所有操作生效 ``` --- ### **3. 未提交的影响** - **其他会话可见**:未提交的修改对其他用户/事务隔离(取决于隔离级别)。 - **锁持有**:可能导致阻塞,影响并发性能。 - **数据丢失风险**:若崩溃或断开连接,未提交的操作会被自动回滚。 --- ### **4. 对比 `ROLLBACK`** | 命令 | 行为 | 场景举例 | |------------|-------------------------------|--------------------------| | `COMMIT` | 提交所有变更,永久生效 | 确认转账成功 | | `ROLLBACK` | 撤销未提交的变更,恢复到事务前状态 | 转账失败时回滚避免数据错误 | --- ### **5. 自动提交模式** - **默认行为**:某些数据库(如MySQL)默认启用自动提交(每条SQL单独提交)。 - **关闭自动提交**:需显式事务控制(适用于批量操作): ```sql SET autocommit = 0; -- MySQL中关闭自动提交 -- 执行多条SQL... COMMIT; -- 手动提交 ``` --- ### **6. 实际应用场景** - **金融交易**:确保扣款和入款同时成功。 - **批量数据处理**:避免部分失败导致数据一致。 - **数据修复**:通过事务测试修改,确认无误后提交。 --- ### **总结** `COMMIT` 是数据库事务的 **最终确认键**,它保证了操作的完整性和数据的安全性。合理使用 `COMMIT` 和 `ROLLBACK` 可有效管理复杂业务逻辑中的数据一致性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值