我正在编写迁移测试以确保用户是由迁移创建的。如果用户不存在,测试应该抛出错误。起初,我以为我可以使用除以零错误来得到我想要的:
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 有条件地抛出运行时异常?