编写触发器更改插入的名字后面加个'君'字

西落兮 2016-07-13 12:38:01
如题,表建立如下
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 $$,就会语法错误,建立不了触发器。这是为什么呢?
...全文
104 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
西落兮 2016-07-13
  • 打赏
  • 举报
回复
谢谢大家了!
zjcxc 2016-07-13
  • 打赏
  • 举报
回复
for each row --- 表明是行级触发的,如果你一个 insert 有多行,则会触发多次 new.name 中的 NEW, 表示的就是你插入的行,所以不需要后面的 FROM
道玄希言 2016-07-13
  • 打赏
  • 举报
回复
delimiter 是告诉MySQL解释器,该段命令是否已经结束了,MySQL数据库是否可以执行了。 默认情况下,delimiter是分号;。在命令行客户端中,如果有一行命令以分号结束,那么回车后,MySQL将会执行该命令。 但有时候,不希望MySQL这么做。在为可能输入较多的语句,且语句中包含有分号, 在分号时, 语句还没有完成,需要继续等待下面的执行命令, 这时候, 通过开始的 delimiter $$ 类似定义, 在系统执行到 $$ 符号时, 才会开始执行命令.
ACMAIN_CHM 2016-07-13
  • 打赏
  • 举报
回复
delimiter $$ create trigger trzd before insert on zd for each row begin set new.`name`= concat(new.name,'君') ; end; $$

56,682

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧