mysql 为什么要设置复合主键

mysql 为什么要设置复合主键,第1张

不光是mysql,任何比较完善的关系型database都可以设置复合主键,设置复合主键的原因是当一个列不足以用来表示一条记录的唯一性的时候,就需要设置多个列为复合主键,来标识一条记录的唯一性。

不一定的,MySQL 每张表只能有1个自动增长字段,这个自动增长字段即可作为主键,也可以用作非主键使用,但是请注意将自动增长字段当做非主键使用时必须必须为其添加唯一索引,否则系统将会报错。例如:
-- 将自动增长字段设置为主键
create table t1 (id int auto_increment Primary key,sid int);
-- 将自动增长字段设置为非主键,注意必须显式添加Unique键
create table t2 (sid int primary key,id int auto_increment Unique);
-- 将自动增长字段设置为非主键如果未添加唯一索引将会报错,如下面语句
create table t3 (sid int primary key,id int auto_increment);

联合主键建立外键跟简单主键一样的,示例:
mysql> create table tb_key1(id int, itemid int, memo
-> \c
mysql> create table tb_key1(id int, itemid int, memo varchar(20),
-> primary key(id,itemid)
-> );
Query OK, 0 rows affected (009 sec)
mysql> create table tb_key2(newid int, itemid int, name varchar(50),
-> foreign key (newid,itemid) references tb_key1(id,itemid)
-> );
Query OK, 0 rows affected (008 sec)
mysql> create table tb_key3(myid int,remark varchar(100),
-> foreign key(myid) references tb_key1(id)
-> );
Query OK, 0 rows affected (013 sec)
mysql>

一、mysql 表中如果是单主键的话,那这个主键也会被 系统默认建为 索引
二、mysql 表中如果是复合主键的话,那系统会遵循左对齐原则,即如复合主键 a 和 b字段和c字段, 默认建的主键索引是abc即主键全有,把所有主键全部建立在一个单独的主键索引中。

添加字段的语句应该类似ALTER TABLE tbl ADD COLUMNS (字段名 数据类型);
如果没有主键,那就可以ALTER TABLE tbl ADD PRIMARY KEY();
至于有的话,我也不太清楚了。
我本机没有数据库,上面的是凭印象写出来的,不对勿怪……


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13341490.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-18
下一篇 2023-07-18

发表评论

登录后才能评论

评论列表(0条)

保存