SQL创建CUSTOMER表设置级联规则时ON关键字附近语法错误求助
问题排查与解决方案
错误原因
- 主键约束定义存在语法错误:
PRIMARY KEY(id)后多写了多余逗号,ON UPDATE CASCADE、ON DELETE CASCADE属于当前主键约束的配置项,不能用逗号和前面的主键定义分隔。此外SQL Server的主键约束本身无需配置级联更新/删除,级联操作属于外键约束的常用配置,此处两行级联配置属于冗余内容,可直接删除。 - 多约束之间缺少分隔符:主键约束结束后、两个CHECK约束之间都没有添加逗号,SQL要求多个并列的约束定义必须用逗号分隔。
- 可选优化:原有年龄判断逻辑仅对年份做差值,容易出现未过生日就被判定为满21岁的误差,可以替换为
DATEDIFF(YEAR, DateofBirth, GETDATE()) > 21让判断更精准。
修正后的SQL代码
CREATE TABLE CUSTOMER ( id CHAR(9) NOT NULL, CustomerName CHAR(50) NOT NULL, Address VARCHAR(100) NOT NULL, Contact CHAR(8) NOT NULL, DateofBirth DATE NOT NULL, Occupation VARCHAR(30) NOT NULL, CONSTRAINT CUSTOMER_PK PRIMARY KEY(id), CONSTRAINT CHECK (ID LIKE '[ST][0-9][0-9][0-9][0-9][0-9][0-9][0-9][A-Z]'), CONSTRAINT CHECK (DATEDIFF(YEAR, DateofBirth, GETDATE()) > 21) );
内容的提问来源于stack exchange,提问作者Ang Yi Khoon
相关产品推荐
相关产品推荐

