mysql> drop function f;
query ok, 0 rows affected (0.00 sec)
mysql> create procedure p ()
-> begin
-> /* this procedure does nothing */ <--
-> end;//
query ok, 0 rows affected (0.00 sec)
alter 'cache index' call commit create delete
drop 'flush privileges' grant insert kill
lock optimize repair replace revoke
rollback savepoint 'select from table'
'set system variable' 'set transaction'
show 'start transaction' truncate update
create trigger <觸發(fā)器名稱> <--
{ before | after }
{ insert | update | delete }
on <表名稱>
for each row
<觸發(fā)器sql語句>
create trigger <觸發(fā)器名稱>
{ before | after } <--
{ insert | update | delete }
on <表名稱>
for each row
<觸發(fā)的sql語句>
create trigger <觸發(fā)器名稱>
{ before | after }
{ insert | update | delete } <--
on <表名稱>
for each row
<觸發(fā)的sql語句>
create trigger <觸發(fā)器名稱>
{ before | after }
{ insert | update | delete }
on <表名稱> <--
for each row
<觸發(fā)的sql語句>
create trigger <觸發(fā)器名稱>
{ before | after }
{ insert | update | delete }
on <表名稱>
for each row <--
<觸發(fā)的sql語句>
create trigger <觸發(fā)器名稱>
{ before | after }
{ insert | update | delete }
on <表名稱>
for each row
<觸發(fā)的sql語句> <--
grant create trigger on <表名稱> to <用戶或用戶列表>;
revoke create trigger on <表名稱> from <用戶或用戶列表>;
create trigger t21_au
before update on t22
for each row
begin
set @old = old . s1;
set @new = new.s1;
end;//
create table t22 (s1 integer)//
create trigger t22_bi
before insert on t22
for each row
begin
set @x = 'trigger was activated!';
set new.s1 = 55;
end;//
mysql> insert into t22 values (1)//
mysql> select @x, t22.* from t22//
+------------------------+------+
| @x | s1 |
+------------------------+------+
| trigger was activated! | 55 |
+------------------------+------+
1 row in set (0.00 sec)
create table t25
(s1 int, s2 char(5), primary key (s1),
check (left(s2,1)='a'))
engine=innodb;
create table t25
(s1 int, s2 char(5),
primary key (s1))
engine=innodb//
create trigger t25_bi
before insert on t25
for each row
if left(new.s2,1)<>'a' then set new.s1=0; end if;//
create trigger t25_bu
before update on t25
for each row
if left(new.s2,1)<>'a' then set new.s1=0; end if;//
insert into t25 values (0,'a') /* priming the pump */ //
insert into t25 values (5,'b') /* gets error '23000' */ //
don't believe the old mysql manual
該拋棄舊的mysql的手冊了
我在這里警告大家不要相信過去的mysql手冊中所說的了。我們已經去掉了關于觸發(fā)器的錯誤的語句,但是仍舊有很多舊版本的手冊在網上,舉個例子,這是一個德國的url上的:
http://dev.mysql.com/doc/mysql/de/ansi_diff_triggers.html.
這個手冊上說觸發(fā)器就是存儲過程,忘掉吧,你也已經看見了,觸發(fā)器就是觸發(fā)器,而存儲過程還是存儲過程。
手冊上還說觸發(fā)器可以從其他表上來刪除,或者是當你刪除一個事務的時候激發(fā),無論他說的是什么意思,忘掉吧,mysql不會去實現這些的。
最后關于說使用觸發(fā)器會對查詢速度產生影響的說法也是錯的,觸發(fā)器不會對查詢產生任何影響。
bugs
(不好的東西就不翻譯了)
on december 14 2004, i did an "advanced search" in http://bugs.mysql.com for 'trigger' or
'triggers', i found that there were 17 active bugs as of that date. of course they might disappear
before you read this, but just in case they haven't, i'll mention the important ones. if they're still
there, you'll have to work around them when you're trying triggers.
bug#5859 drop table does not drop triggers.
(刪除表的時候沒有自動刪除觸發(fā)器)
when you drop a table, dropping the table's triggers should be automatic.
bug#5892 triggers have the wrong namespace.
(觸發(fā)器的命名空間有錯,你必須在前面加上表的名字才能刪除觸發(fā)器,下面是例子)
you have to say "drop trigger <table name> . <trigger name>".
the correct way is "drop trigger <trigger name>".
bug#5894 triggers with altered tables cause corrupt databases.
(觸發(fā)器對表的改變可能會造成數據庫數據被破壞)
do not alter a table that has a trigger on it, until you know this is fixed.
conclusion 最后
到了書的最后,我認為不需要給大家復習或者是重溫一下了,因為相信大家可以很輕松的記住上面所說的。
新聞熱點
疑難解答
圖片精選