mysql联合主键怎么用 联合主键sql语句

mysql的联合主键与复合主键区别复合主键就是指你表的主键含有一个以上的字段组成。例如; create table test ( name varchar(19), id number, value varchar(10), primary key (id,name) ) 上面的id和name字段组合起来就是你test表的复合主键 (若其一为单索引字段时 , 左边的id才会有索引) 它的出现是因为你的name字段可能会出现重名,所以要加上ID字段这样就可以保证你记录的唯一性 一般情况下,主键的字段长度和字段数目要越少越好
联合主键,顾名思义就是多个主键联合形成一个主键组合,体现在联合 。(主键原则上是唯一的,别被唯一值所困扰 。) 索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件 。简单的例子 主键A跟主键B组成联合主键 主键A跟主键B的数据可以完全相同(困扰吧,没关系),联合就在于主键A跟主键B形成的联合主键是唯一的 。
联合主键体现在多个表上,复合主键体现在一个表中的多个字段
复合主键:
mysql 联合主键联合主键:把两个列看成是一个整体 , 这个整体是不为空,唯一,不重复
1.创建表的同时创建联合主键
语法1
语法2
2.针对已经存在表,添加联合主键
MySQL - InnoDB主键索引、普通索引、唯一索引、联合索引主键一般有几种选择:
一般DBA会推荐InnoDB表必须建主键mysql联合主键怎么用,而且推荐使用整型的自增主键 。
三种选择的优先级是 自增id业务整型字段UUID 。
如果使用UUID作为主键,那么B+树的聚集索引的key就是UUID,UUID通常会比整型字段要长,而且字符串的比较是需要逐个字节比较 , 所以得出两个缺点
比起自增id , 虽然都是整型,但是业务字段有可能不是按顺序插入到表,考虑下图 。
此时要插入索引值为4的节点,而B+树每页最多存放两个节点,插入4节点后,树变为
B+树特点是,所有节点从左右往右排好序 , 自增id插入B+是有序的,只会在节点放满mysql联合主键怎么用了之后 , 才会新增一个页去存放,比起非自增id,会减少页分裂次数,提高性能 。
对非主键进行索引,就是普通索引 。
与聚集索引一样,每个普通索引建立后 , 会用一个B+树进行维护,但是叶子节点并非存储索引对应行的所有记录,而是只存储了主键值,此时得到主键值后,再回到聚集索引上查找一次,即可得到数据记录,即回表 。
这个不带行数据完整信息的索引,就叫二级索引(secondary index) , 也叫辅助索引 。
对多个字段同时建索引,就是联合索引 。
当查询条件同时涉及多个字段,就可以使用联合索引 。
联合索引会根据字段的出现顺序在B+树中排好序,例如先入name排序 , 当name相同时就使用age,直到比较出大小为止 。利用这个特性,可以使用最左前缀原则优化SQL 。
mysql联合惟一键怎么设置如果是对多个列增加 UNIQUE 约束,通过 ADD UNIQUE KEY 处理 。
mysql CREATE TABLE test_unique(
-idINT,
-nameVARCHAR(10),
-valueVARCHAR(10)
- );
Query OK, 0 rows affected (0.08 sec)
mysql ALTER TABLE test_unique
-ADD UNIQUE KEY(name, value);
Query OK, 0 rows affected (0.13 sec)
Records: 0Duplicates: 0Warnings: 0
mysql 主键索引,联合索引,单列索引使用场景表button
CREATE TABLE `button` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,--主键索引
`button_name` varchar(45) NOT NULL COMMENT '功能名称',
`app_id` bigint(20) NOT NULL,
`permission_id` bigint(20) DEFAULT NULL,-- permission_id 和 app_id 联合索引 。

推荐阅读