mysql 强制抛出异常 sql中引发异常
若不想使用存储过程、函数等方式,可以通过 返回多余一行但仅期望返回一行的数据来实现
select (select 1 from dual) -- 不会抛出异常 select (select 1 from dual union all select 1 from dual) -- 会抛出异常 select (select 1, 2 from dual) -- 会抛出异常
其中 dual 为mysql自带的虚表,可以将dual换成业务表的子查询 就可以根据业务逻辑判断是否抛出异常了
使用场景
当某个查询条件成立时,插入数据,否则抛出异常
-- 1.普通插入语句 向数据库中插入id=1的数据 insert into table(id, name) valuse(1, 'lin');
-- 2.目标 当数据库中没有id=2的数据时插叙上面这条id=1的数据 -- 3.探索实现方式 通过exists关键词 同一条语句处理 满足事务特性 insert into table(id, name) select * from (select 1,'lin') t --注意:每个派生出来的表都要有自己的别名 where exists (select (select 1 from dual union all select id from table where id=2)); -- 4.经验证:上面这种写法 不会抛异常,因为exitsts是判断是否存在,最少返回一行数据,我认为可能只是查询出了一条数据就返回了,没有进行合并操作 -- 5.最终版 抛出异常 去掉exists 通过where后的条件抛出异常 insert into table(id, name) select * from (select 1,'lin') t where (select (select 1 from dual union all select id from table where id=2));
注意:如果select 的字段中有相同的值,需要加上别名,否则会报错
浙公网安备 33010602011771号