DDL(Data Definition Language)語句,如CREATE TABLE、ALTER TABLE、DROP TABLE等,會隱式地提交事務,即使它們發生在BEGIN和ROLLBACK語句之間。這意味著一旦執行了DDL語句,之前的所有未提交的事務都會被自動提交,且DDL語句本身也不可回滾。
假設有以下的場景:
-
在一個事務中,我們創建了一個名為
students
的表:BEGIN; CREATE TABLE students ( id INT, name VARCHAR(50) );
這里的
CREATE TABLE
語句是一個DDL語句,它會隱式地提交事務。因此,在執行完這個語句之后,該事務會自動提交。 -
接下來,在同一個事務中,我們插入一條數據到
students
表中:INSERT INTO students (id, name) VALUES (1, 'Alice');
-
然后,我們決定修改表結構,增加一個新的列:
ALTER TABLE students ADD COLUMN age INT;
這里的
ALTER TABLE
語句也是一個DDL語句,它同樣會隱式地提交事務。因此,在執行完這個語句之后,之前插入的數據將被自動提交。 -
最后,我們決定回滾整個事務:
ROLLBACK;
盡管我們使用了
ROLLBACK
語句,但由于DDL語句不可回滾,事務中的所有修改都已經被提交,包括新增的students
表和插入的數據。
綜上所述,DDL語句在執行時會隱式地提交事務,并且無法回滾。因此,在使用DDL語句時需要特別小心,確保在執行之前仔細考慮其影響。