MySQL中使用ALTER TABLE添加外键求助(已创建主键)
帮你搞定MySQL外键创建的问题
嘿,看你已经完成了CUSTOMER表的主键创建,卡在加外键这一步了对吧?我来给你一步步讲清楚怎么操作~
首先先确认你已经完成的操作是没问题的,先把你写的SQL整理一下:
DROP TABLE IF EXISTS CUSTOMER; CREATE TABLE CUSTOMER ( CUS_CODE int, CUS_LNAME varchar(15), CUS_FNAME varchar(15), CUS_INITIAL varchar(1), CUS_AREACODE varchar(3), CUS_PHONE varchar(8), CUS_BALANCE float(8) ); ALTER TABLE CUSTOMER ADD CONSTRAINT pk_cust_code primary key(CUS_CODE);
接下来创建外键的核心语法是这样的,我给你拆解清楚:
ALTER TABLE 你的子表名 ADD CONSTRAINT 外键约束名(建议用fk_前缀,方便识别) FOREIGN KEY (子表里要关联的字段名) REFERENCES 父表名(父表里被关联的字段名);
几个必须注意的关键点(踩过坑的人提醒你😉):
- 父表必须已经存在,而且父表里被关联的字段必须是主键或者唯一约束,不然MySQL不认
- 子表的关联字段和父表的关联字段数据类型要完全一致,比如父表是
varchar(3),子表也得是varchar(3),不能一个是int一个是varchar - 如果你的CUSTOMER表已经有数据了,那这些数据里的关联字段值必须都能在父表找到,不然会报错说外键约束失败
给你举个实际的例子
比如假设你有一个用来存州/省信息的STATE表:
CREATE TABLE STATE ( STATE_CODE varchar(2) PRIMARY KEY, STATE_NAME varchar(20) NOT NULL );
现在要给CUSTOMER表加一个关联STATE表的外键,首先得先给CUSTOMER表加一个存州代码的字段(如果还没加的话):
ALTER TABLE CUSTOMER ADD COLUMN CUS_STATE varchar(2);
然后再创建外键约束:
ALTER TABLE CUSTOMER ADD CONSTRAINT fk_customer_state FOREIGN KEY (CUS_STATE) REFERENCES STATE(STATE_CODE);
要是你是要关联其他表,只要把上面的表名、字段名换成你实际用的就行啦~
如果创建的时候报错,先检查我上面说的三个关键点,大概率是数据类型不匹配或者子表有无效数据的问题。
内容的提问来源于stack exchange,提问作者Aubrianna Makayla Brown
相关产品推荐
相关产品推荐

