mysql中的多主键 | 您所在的位置:网站首页 › sql设置两个主键语句 › mysql中的多主键 |
mysql中的多主键
2013年11月10日 23:57:54 DevonLiu02 阅读数 2274 最近在学习mysql的时候发现关于多主键的一个问题。 google中的一个结果得到说 主键 就是unique 和 not null的结合,但经过试验之后发现,在细节上,二者是有差异的。 假设这样一个情况: 一个用户表,用户ID和用户名都是唯一的。 也就是说,一个ID只能出现一次,用户名也是只能出现一次,那么这个时候可能的建表语句就是这样:
CREATE TABLE `user` ( `userid` SMALLINT UNSIGNED AUTO_INCREMENT, `username` CHAR(16) NOT NULL, `password` char(40) NOT NULL, PRIMARY KEY (`userid`, `username`) ); 但是实际上,这样建出来的表不能实现我们的需求 插入以下数据将会是正常的 idusername1mike2mike2alice数据中可以看到, 表中同时存在了2个同样的id和2个同样的username 这并不是我们想要的 这种主键称为 联合主键, 联合主键就是由1个以上的字段构成的唯一标识. 这种主键通常用在多对多的关系表中, 例如 一位老师可以教多门课程, 一门课程可以由多个老师来授课. 那么这种情况就可以考虑使用联合主键, 设置 PRIMARY KEY (course_id, teach_id) 这样就可以保证数据不会冗余。在这种情况下插入相同的(course_id, teach_id) 将会出错 course_idteach_id11122111 (错误)
那么回到一开始的问题,要怎样确保userid和username都唯一? 建表语句如下
CREATE TABLE `user` ( `userid` SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, `username` CHAR(16) NOT NULL, `password` char(40) NOT NULL, UNIQUE(`username`) ); 使用 unique语句来确保username的唯一性, 这样同时也保证了userid唯一性 小结: mysql中没有多主键,只有联合主键。也就是说不能够同时存在多个独立的primary key,但可以有多个unique. |
CopyRight 2018-2019 实验室设备网 版权所有 |