mysql - 限制器澄清 MySQL
问题描述
Delimiter$$
CREATE TRIGGER after_finisher_update
AFTER UPDATE ON Booklist1
FOR EACH ROW
BEGIN
UPDATE Booklist1
SET Finished = 'yes'
WHERE Current_Page = Page_Count
END $$
我有一个包含多个列的表,这些列形成了一个书单(标题、作者......等)。一旦current_page = page_count,我希望我的“完成”列(默认为否)切换到“是”。
- 有人可以解释一下 delimiter 的含义和 delimiter$$ 的含义吗?
- 当我以 END$$(从上面的代码中省略)结束时,我的终端功能不正确。无论我输入什么,都会进入控制台并逐字返回,但什么也不做。有谁知道这个错误?我试着查了一下,但什么也没找到。其他条目也会发生这种情况。
谢谢你。
解决方案
mysql使用 ; 标记语句的结束。
当您定义一个过程、函数或触发器时,您将使用多个语句。
您需要告诉 mysql function/procedure/trigger statement 的结尾在哪里。
如果类型分隔符 //我将使用//来指示语句的结束。
所以这个块:
select now() ;
do sleep(1) ;
select now() ;
可以替换为:
delimiter //
select now() //
do sleep(1) //
select now() //
delimiter ;
使用$$作为分隔符创建触发器的示例:
delimiter $$
create trigger trg_table_insert after insert on table
for each row
begin
insert into table_log ( dml_type , col_a,col_b , col_c ) value ( 'I', new.col_a,new.col_b,new.col_c );
end
$$
delimiter ;
并且 每次我将分隔符恢复为; .
^^^^^^^ 你这样做是为了拥有 mysql 的常规行为。
推荐阅读
- javascript - 在 Apple 上使用 Acrobat Javascript 打开 pdf
- ios - 创建时位于关键窗口之外的 iOS TableView 单元格不会触发 didSelect
- c# - LINQ 不会使用 EF Core 对组产生 COUNT() 查询
- angular - 什么是 RxJS 中的订阅以及 Observables 如何与它们交互?
- android - 到 Python 服务器的 Android 套接字连接
- oracle - insert all and inner join in oracle
- sbt - 如何在 sbt 1.0.x 中发布自定义工件
- wpf - MaterialDesignInXAML 文本框字体颜色为白色(背景颜色)
- java - 扫描仪“没有下一行”-错误
- ios - Alamofire 中的 TimeoutInterval