如题,表建立如下
create table zd(firstname char(6), name varchar(20), sex enum("男","女") ) 已经插入了几行数据
建立的触发器
delimiter $$
create trigger trzd before insert on zd
for each row begin
declare _tem varchar(20);
select concat(new.name,”君”) into _tem from zd;
set new.`name`=_tem;
end;
$$
然后再执行
insert zd values(“le”,”刘咪”,”女”);
本人希望插入后的名称为 刘咪君
提示结果大于一行。问一下,该怎么样修改呢?(机怎么取得插入的那行数据)。
还有是,倘若不用delimiter $$,就会语法错误,建立不了触发器。这是为什么呢?
解决方案
25
delimiter $$
create trigger trzd before insert on zd
for each row begin
set new.`name`= concat(new.name,”君”) ;
end;
$$
create trigger trzd before insert on zd
for each row begin
set new.`name`= concat(new.name,”君”) ;
end;
$$
25
delimiter 是告诉MySQL解释器,该段命令能否已经结束了,MySQL数据库能否可以执行了。
默认情况下,delimiter是分号;。在命令行客户端中,假如有一行命令以分号结束,那么回车后,MySQL将会执行该命令。
但有时候,不希望MySQL这么做。在为可能输入较多的语句,且语句中包含有分号, 在分号时, 语句还没有完成,需要继续等待下面的执行命令, 这时候, 通过开始的 delimiter $$ 相似定义, 在系统执行到 $$ 符号时, 才会开始执行命令.
默认情况下,delimiter是分号;。在命令行客户端中,假如有一行命令以分号结束,那么回车后,MySQL将会执行该命令。
但有时候,不希望MySQL这么做。在为可能输入较多的语句,且语句中包含有分号, 在分号时, 语句还没有完成,需要继续等待下面的执行命令, 这时候, 通过开始的 delimiter $$ 相似定义, 在系统执行到 $$ 符号时, 才会开始执行命令.
20
for each row — 表明是行级触发的,假如你一个 insert 有多行,则会触发多次
new.name 中的 NEW, 表示的就是你插入的行,所以不需要后面的 FROM
new.name 中的 NEW, 表示的就是你插入的行,所以不需要后面的 FROM