MySQL的觸發器具有隱含的事務支持,所以觸發器不能使用顯式或隱式開始或結束交易,如START TRANSACTION
,COMMIT
,或ROLLBACK
語句。
在MySQL中無需啓用將值插入到主鍵列中 - 這已被允許。你可以,但是,切換外鍵約束檢查和唯一索引檢查:
http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html
http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_unique_checks
一種常見的方式做,這是存儲在用戶變量的現有值,更改設置,然後恢復你的腳本後設置齊全:
SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
-- Your SQL statements here.
SET [email protected]_FOREIGN_KEY_CHECKS;
SET [email protected]_UNIQUE_CHECKS;
我不知道爲什麼你需要做的是,在你的觸發,所以你的MySQL觸發器將是這個樣子:
DELIMITER |
CREATE TRIGGER T1 AFTER INSERT ON A FOR EACH ROW
BEGIN
INSERT INTO B (id, text) VALUES (NEW.id, NEW.text);
INSERT INTO C (id, text) VALUES (NEW.id, NEW.text);
END;|
DELIMITER ;
這裏有一個快速測試的結果:
CREATE TABLE `A` (
`id` int(11) NOT NULL auto_increment,
`text` varchar(255) default NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `B` (
`id` int(11) NOT NULL auto_increment,
`text` varchar(255) default NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `C` (
`id` int(11) NOT NULL auto_increment,
`text` varchar(255) default NULL,
PRIMARY KEY (`id`)
);
DELIMITER |
CREATE TRIGGER T1 AFTER INSERT ON A FOR EACH ROW
BEGIN
INSERT INTO B (id, text) VALUES (NEW.id, NEW.text);
INSERT INTO C (id, text) VALUES (NEW.id, NEW.text);
END;|
DELIMITER ;
INSERT INTO `A` (id, text) VALUES (1, 'Line 1');
INSERT INTO `A` (id, text) VALUES (2, 'Line 3');
INSERT INTO `A` (id, text) VALUES (3, 'Line 3');
SELECT * FROM `A`;
+----+--------+
| id | text |
+----+--------+
| 1 | Line 1 |
| 2 | Line 3 |
| 3 | Line 3 |
+----+--------+
SELECT * FROM `B`;
+----+--------+
| id | text |
+----+--------+
| 1 | Line 1 |
| 2 | Line 3 |
| 3 | Line 3 |
+----+--------+
SELECT * FROM `C`;
+----+--------+
| id | text |
+----+--------+
| 1 | Line 1 |
| 2 | Line 3 |
| 3 | Line 3 |
+----+--------+
如果你想類似的東西TRY
... CATCH
,你需要使用處理程序來代替:
http://dev.mysql.com/doc/refman/5.1/en/declare-handler.html
這裏的關於MySQL觸發器的文檔:
http://dev.mysql.com/doc/refman/5.1/en/commit.html
MSSQL(2005+)> MySQL – Dubs 2010-06-28 14:44:23
如果您現在正在MSSQL SeErver中執行此操作,那麼您做錯了。這是一種觸發不可行的做法。 Identity uinisert應該只是偶爾使用將舊有記錄移到新位置的dba。 如果您必須打開插入記錄的idntity插入,您不應在第二個表中具有身份。 – HLGEM 2010-06-28 17:22:05