gpt4 book ai didi

mysql - MySQL创建 “before insert”触发器失败并引发触发器错误

转载 作者:行者123 更新时间:2023-12-03 09:01:00 25 4
gpt4 key购买 nike

我已经使用innodb引擎在表上的触发器之前成功创建了一个插入,该引擎通过在不存在的表上执行插入来“引发”错误。问题是,当我尝试在生产服务器上运行数据库创建脚本时,它失败了,因为插入表不存在。但是,同一脚本在我的工作站上运行良好,这使我认为存在一个MySQL配置设置,该设置导致创建脚本失败。

我的问题提出的问题是生产服务器是否正在编译触发器而我的工作站是否正在编译(或在运行时进行编译)。在生产环境中,我希望在创建时编译SQL。

最佳答案

我模拟触发器中引发错误的方法是DECLARE一个整数变量并将字符串存储在其中。如果您有SQL_MODE = STRICT_ALL_TABLES,则会引发错误。否则会发出警告。

use test;

drop table if exists foo;
create table foo (id serial primary key, bar varchar(10));

drop trigger if exists RaiseError;

delimiter //

create trigger RaiseError before insert on foo
for each row
begin
declare bar int;
if new.bar = 'boom' then
set bar = 'You cannot store that value!';
end if;
end //

delimiter ;

set sql_mode = strict_all_tables;

insert into foo (bar) values ('boom');

注意,我将本地变量命名为与要测试的列栏相同的名称。这样,变量名将出现在错误消息中,与列相同:

ERROR 1366 (HY000): Incorrect integer value: 'You cannot store that value!' for column 'bar' at row 1

关于mysql - MySQL创建 “before insert”触发器失败并引发触发器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3632553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com