mysql 外键能重复吗_mysql 作为外键的值不能重复吗

8f6cc70f5392355de80106625c1c2422.png

幕布斯7119047

CREATETABLE`student`(`id`int(10)unsignedNOTNULLPRIMARYKEY,`name`varchar(50)NOTNULLDEFAULT'')ENGINE=InnoDBDEFAULTCHARSET=utf8COLLATE=utf8_general_ci;CREATETABLE`course`(`id`int(10)unsignedNOTNULLPRIMARYKEY,`name`varchar(50)NOTNULLDEFAULT'')ENGINE=InnoDBDEFAULTCHARSET=utf8COLLATE=utf8_general_ci;CREATETABLE`score`(`student_id`int(10)unsigned,`course_id`int(10)unsigned,`score`int(3)NOTNULL,INDEXstu_idx(student_id),INDEXcou_idx(course_id),FOREIGNKEY(`student_id`)REFERENCES`student`(`id`),FOREIGNKEY(`course_id`)REFERENCES`course`(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8COLLATE=utf8_general_ci;INSERTINTO`student`(`id`,`name`)VALUES(1,'张三');INSERTINTO`student`(`id`,`name`)VALUES(2,'李四');INSERTINTO`course`(`id`,`name`)VALUES(1,'语文');INSERTINTO`course`(`id`,`name`)VALUES(2,'数学');INSERTINTO`score`(`student_id`,`course_id`,`score`)VALUES(1,1,'80');INSERTINTO`score`(`student_id`,`course_id`,`score`)VALUES(1,2,'82');INSERTINTO`score`(`student_id`,`course_id`,`score`)VALUES(2,1,'90');INSERTINTO`score`(`student_id`,`course_id`,`score`)VALUES(2,2,'92');再插入一条相同的记录,并不会出错:INSERTINTO`score`(`student_id`,`course_id`,`score`)VALUES(2,2,'92');如果你在成绩表score中加入了唯一约束UNIQUEKEY(`student_id`,`course_id`)则会出错:Duplicateentry'2-2'forkey'student_id'插入一个student表中没有的学生编号(3),因为外键约束,会出错:INSERTINTO`score`(`student_id`,`course_id`,`score`)VALUES(3,2,'92');出错:Cannotaddorupdateachildrow:aforeignkeyconstraintfails(`yabase`.`score`,CONSTRAINT`score_ibfk_1`FOREIGNKEY(`student_id`)REFERENCES`student`(`id`))MySQL的MyISAM引擎不支持外键,可见外键不是数据库必须的,外键约束其实可以在应用程序层面实现.还有,表连接也不需要外键参与,所以,像下面关系,其实并不需要外键约束:文章表post分类表tag关系表relation

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值