我正在编写一个迁移测试,以确保迁移创建了一个用户。如果该用户不存在,则测试应该抛出一个错误。起初,我认为我可以只使用除零错误来获得我想要的结果:
SET SESSION sql_mode = 'error_for_division_by_zero';
SELECT 1/COUNT(*) FROM mysql.user WHERE user = 'foo';
然而,如果foo
不存在,这并不会引发错误。事实证明,error_for_division_by_zero
仅影响INSERT
和UPDATE
语句。
然后,我想也许我可以只调用一些带有错误数量参数的函数:
SELECT IF(COUNT(*) = 1, 1, date_format(1, 2, 3))
FROM mysql.user WHERE user = 'foo';
即使foo
存在,但由于解析器注意到参数计数不正确,因此甚至在该情况下也会失败。
我可以编写一个模拟引发异常的函数,但我试图避免这样做。是否有没有办法强制MySQL有条件地抛出运行时异常?
SIGNAL
仅在SQL条件(IF()
,CASE
或类似条件)的情况下运行。你知道有没有例子吗? - theory