如何添加两个外键?如何添加关联两表的第二个外键并解决语法错误?
解决MariaDB添加外键的语法错误与多外键设置方法
嘿,我来帮你搞定这个外键的问题!你遇到的1064语法错误,根源是外键定义的写法不完整,咱们先把这个错误修复,再讲清楚怎么添加多个外键、以及关联不同表的第二个外键。
先修复你的语法错误
你给出的SQL片段里,外键定义有两个明显的问题:
CONSTRAINT关键字后面没有指定约束名称(虽然数据库可以自动生成,但规范写法应该给个清晰的名字,方便后续维护)- 外键定义的结尾缺少闭合的括号,导致语法不完整
咱们把你的代码改成正确的版本:
CREATE TABLE Charges( ChID INT NOT NULL PRIMARY KEY, -- 建议给表设置主键,这是表的基础要求 Title VARCHAR(50) NOT NULL, Amount INT NOT NULL, -- 这里注意:INT(255)没有实际意义,INT的取值范围和括号里的数字无关,直接写INT就行 Description VARCHAR(255) NOT NULL, EmpID INT, -- 用来关联Employee表的外键列 -- 正确的外键约束写法 CONSTRAINT fk_Charges_Employee FOREIGN KEY(EmpID) REFERENCES Employee(EmpID) );
如何添加多个外键(包括关联另一张表的第二个外键)
如果你的Charges表需要同时关联Employee和另一张表(比如Clients表),只需要在CREATE TABLE时依次定义多个外键约束即可,每个约束之间用逗号分隔。
举个完整的例子,假设要给Charges表加两个外键:一个关联Employee的EmpID,另一个关联Clients的ClientID:
CREATE TABLE Charges( ChID INT NOT NULL PRIMARY KEY, Title VARCHAR(50) NOT NULL, Amount INT NOT NULL, Description VARCHAR(255) NOT NULL, EmpID INT, -- 关联Employee的列 ClientID INT, -- 关联Clients的列 -- 第一个外键:关联Employee表 CONSTRAINT fk_Charges_Employee FOREIGN KEY(EmpID) REFERENCES Employee(EmpID), -- 第二个外键:关联Clients表 CONSTRAINT fk_Charges_Client FOREIGN KEY(ClientID) REFERENCES Clients(ClientID) );
要是表已经创建好了,怎么添加外键?
如果Charges表已经存在,想要后续添加外键,用ALTER TABLE语句就行:
- 添加第一个外键(关联Employee):
ALTER TABLE Charges ADD CONSTRAINT fk_Charges_Employee FOREIGN KEY(EmpID) REFERENCES Employee(EmpID);
- 添加第二个外键(关联Clients):
ALTER TABLE Charges ADD CONSTRAINT fk_Charges_Client FOREIGN KEY(ClientID) REFERENCES Clients(ClientID);
额外注意事项
- 外键列的数据类型必须和被引用表的主键/唯一键列完全一致,比如Employee.EmpID是INT,那Charges.EmpID也必须是INT,不能是INT(10)或者BIGINT
- 被引用的列必须是被引用表的主键或者唯一索引,否则外键约束无法创建
- 如果希望外键列不能为空,记得给列加上
NOT NULL约束,比如EmpID INT NOT NULL
内容的提问来源于stack exchange,提问作者Tautvy Da
相关产品推荐
相关产品推荐

