我必须创建一个表,如下所示
借款人(客户、贷款)
客户可以贷款,如果他们没有采取超过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))
);
但我错了
[root@localhost:3306] ERROR 1146: Table 'test.borrower' doesn't exist
有人能告诉我怎么修正这个错误吗??
最佳答案
它给出错误的原因是因为CHECK
约束引用了正在创建的表,但它在解析语句时不存在。
但我有个坏消息要告诉你…mysql忽略CHECK
约束。只允许作为语法与其他数据库中的CREATE语句兼容。
参见mysql documentation for CREATE TABLE:
check子句已被分析,但被所有存储引擎忽略。
您必须使用触发器,但请注意不能从触发器引发异常。最好的方法是当你发现一个问题时,做一些像executeSELECT * FROM TOO_MANY_LOANS
这样的事情,并希望调用者找出错误“没有这样的表太多贷款”的真正含义。