# MySQL COMMIT / ROLLBACK / TRUNCATE / DELETE **COMMIT**: 提交數據。一但執行 COMMIT,則數據就被永久的保留在數據庫中,意味著數據不可以回滾。 * 範例 ```sql= START TRANSACTION; DELETE FROM orderitems WHERE order_num = 20010; DELETE FROM orders WHERE order_num = 20010; COMMIT; ``` 在这个例子中,从系统中完全删除订单20010。因为涉及更新两个数据库表orders和orderItems,所以使用事务处理块来保证订单不被部分删除。最后的COMMIT语句仅在不出错时写出更改。如果第一条DELETE起作用,但第二条失败,则DELETE不会提交(实际上,它是被自动撤销的)。 **ROLLBACK**: 回滾數據。一但執行 ROLLBACK,則可以實現數據庫的回滾,回滾到最近的一次 COMMIT 之後。 ### 使用保留點 `SAVEPOINT` `ROLLBACK TO` ### 對比 TRUNCATE TABLE 和 DELETE FROM 相同點:都可以實現對表中所有數據的刪除,同時保留表結構。 不同點: 1. TRUNCATE TABLE:一旦執行此操作,表數據全部清除。同時,數據是不可以回滾的。 2. DELETE FROM:一旦執行此操作,表數據可以全部清除(不帶WHERE)。同時,數據是可以實現回滾的。 ### DDL 和 DML 的說明 1. DDL(CREATE 、 DROP 、 ALTER、TRUNCATE 等)的操作一旦執行,就不可回滾。指令SET autocommit = FALSE對DDL操作失效。(因為在執行完DDL操作之後,一定會執行一次COMMIT。而此COMMIT操作不受 SETautocommit = FALSE影響。) 2. DML(INSERT 、 DELETE 、 UPDATE 、 SELECT等)的操作默認情況,一旦執行,也是不可回滾的。但是,如果在執行DML之前,執行 SET autocommit = FALSE,則執行的DML操作就可以實現回滾。 ###### tags: `MySQL`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up