mysql中的多主键

阅读: 评论:0

mysql中的多主键

mysql中的多主键

mysql中的多主键

2013年11月10日 23:57:54 DevonLiu02 阅读数 2274

最近在学习mysql的时候发现关于多主键的一个问题。
google中的一个结果得到说 主键 就是unique 和 not null的结合,但经过试验之后发现,在细节上,二者是有差异的。

假设这样一个情况:
一个用户表,用户ID和用户名都是唯一的。
也就是说,一个ID只能出现一次,用户名也是只能出现一次,那么这个时候可能的建表语句就是这样:

 

 
  1. CREATE TABLE `user` (

  2. `userid` SMALLINT UNSIGNED AUTO_INCREMENT,

  3. `username` CHAR(16) NOT NULL,

  4. `password` char(40) NOT NULL,

  5. PRIMARY KEY (`userid`, `username`)

  6. );

但是实际上,这样建出来的表不能实现我们的需求
插入以下数据将会是正常的
  

idusername
1mike
2mike
2alice


 




数据中可以看到, 表中同时存在了2个同样的id和2个同样的username 这并不是我们想要的
这种主键称为 联合主键, 联合主键就是由1个以上的字段构成的唯一标识.

这种主键通常用在多对多的关系表中, 例如

一位老师可以教多门课程, 一门课程可以由多个老师来授课. 那么这种情况就可以考虑使用联合主键,  设置 PRIMARY KEY (course_id, teach_id) 这样就可以保证数据不会冗余。在这种情况下插入相同的(course_id, teach_id) 将会出错

 

course_idteach_id
11
12
21
11 (错误)

 

   





那么回到一开始的问题,要怎样确保userid和username都唯一?

建表语句如下

 

 
  1. CREATE TABLE `user` (

  2. `userid` SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

  3. `username` CHAR(16) NOT NULL,

  4. `password` char(40) NOT NULL,

  5. UNIQUE(`username`)

  6. );



使用 unique语句来确保username的唯一性, 这样同时也保证了userid唯一性
小结: mysql中没有多主键,只有联合主键。也就是说不能够同时存在多个独立的primary key,但可以有多个unique.

本文发布于:2024-01-30 21:25:03,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170662110422945.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:主键   mysql
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23