我必须创建一个如下表
借款人(客户编号,贷款编号)
如果客户没有超过3笔贷款,则可以申请贷款。
我创建的表如下
create table borrower(
customerno int(5),
LoanNo int(5),
primary key(customerno,loanno),
check( customerno not in
(select customerno from borrower group by customerno having count(loanno)>=4))
);
Run Code Online (Sandbox Code Playgroud)
但它给了我一个错误说
[root@localhost:3306] ERROR 1146: Table 'test.borrower' doesn't exist
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我如何修复这个错误吗?
它给出错误的原因是因为CHECK约束引用了正在创建的表,但在解析语句时它不存在。
但我有一些坏消息要告诉你... mysql 忽略CHECK约束。允许将其作为语法仅是为了与其他数据库的创建语句兼容。
有关 CREATE TABLE 的信息,请参阅mysql 文档:
CHECK 子句被所有存储引擎解析但忽略。
您必须使用触发器,但请注意,您不能从触发器引发异常。您可以期望的最好结果是,当您检测到问题时,执行类似执行的操作SELECT * FROM TOO_MANY_LOANS,并希望调用者弄清楚错误“No such table TOO_MANY_LOANS”的真正含义。