SQL创建外键引用报错error near foreign: syntax(1)
报错原因
抛出error near foreign: syntax(1)是因为外键约束的语法写错了:
- 单字段行级外键定义时,不需要加
FOREIGN KEY关键字,直接在字段类型后写REFERENCES 关联表(关联字段)即可。你在列定义行里额外写了FOREIGN KEY,SQL解析器无法识别行内的这个关键字,直接触发语法错误。 FOREIGN KEY关键字仅用于表级外键定义,也就是所有字段声明完成后,单独写约束规则:FOREIGN KEY (当前表字段) REFERENCES 关联表(关联字段)。
另外还有一个逻辑问题:原代码直接往Student表插入关联课程编号为11的学生记录,但Course表中没有提前插入Ccode=11的课程数据,就算语法修正后,也会触发外键一致性校验失败。
修正后可直接运行的代码
CREATE TABLE Course ( Ccode integer check(Ccode between 0 and 99) PRIMARY KEY, Course varchar(10) NOT NULL ); CREATE TABLE Student ( RollNo integer check(RollNo between 0 and 99999) PRIMARY KEY, Name varchar(10) NOT NULL, CourseCode integer REFERENCES Course(Ccode), Mark1 integer check(Mark1 between 0 and 100), Mark2 integer check(Mark2 between 0 and 100) ); -- 先插入被关联的课程数据 INSERT INTO Course VALUES (11, 'Computer'); INSERT INTO Student VALUES (1111, 'Aries', 11, 100, 100); SELECT * FROM Student;
如果你习惯用表级约束写法,也可以把Student表的外键定义改成如下格式,效果完全一致:
CREATE TABLE Student ( RollNo integer check(RollNo between 0 and 99999) PRIMARY KEY, Name varchar(10) NOT NULL, CourseCode integer, Mark1 integer check(Mark1 between 0 and 100), Mark2 integer check(Mark2 between 0 and 100), FOREIGN KEY (CourseCode) REFERENCES Course(Ccode) );
内容的提问来源于stack exchange,提问作者John Mellow
相关产品推荐
相关产品推荐

