mysql主键怎么用 mysql主键的作用及其特征

mysql设置主键的代码是什么?mysql设置主键的代码是PRIMARY KEY (主键字段) 。
如:CREATE TABLE Customer (SID integer,Last_Name varchar(30),First_Name varchar(30),PRIMARY KEY (SID)) 。
主关键字(主键,primary key)是被挑选出来,作表的行的唯一标识的候选关键字 。一个表只有一个主关键字 。主关键字又可以称为主键 。
扩展资料:
永远也不要更新主键 。实际上,因为主键除了唯一地标识一行之外,再没有其他的用途了,所以也就没有理由去对它更新 。如果主键需要更新 , 则说明主键应对用户无意义的原则被违反了 。
主键应当由计算机自动生成 。如果由人来对主键的创建进行干预,就会使它带有除了唯一标识一行以外的意义 。一旦越过这个界限,就可能产生人为修改主键的动机,这样 , 这种系统用来链接记录行、管理记录行的关键手段就会落入不了解数据库设计的人的手中 。
MySQL之主键主键是一个索引mysql主键怎么用 , mysqlmysql主键怎么用的索引是B+树mysql主键怎么用,Mysql会按照键值mysql主键怎么用的大小进行顺序存放,如果mysql主键怎么用我们设置自增id为主键,这个时候主键是按照一种紧凑的接近顺序写入的方式进行存储数据 。如果我们用其他字段作为主键的话,此时Mysql不得不为了将新记录插到合适位置而移动数据,甚至目标页面可能已经被回写到磁盘上而从缓存中清掉,此时又要从磁盘上读回来,这增加了很多额外的开销,同时频繁的移动、分页操作造成了大量的碎片 。
- 考虑性能消耗
- 考虑资源消耗
- 考虑分库分表
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 联合索引 。
`api_id` bigint(20) NOT NULL, --api_id单独索引
PRIMARY KEY (`id`),
KEY `index_app_permission_lianhe` (`permission_id`,`app_id`) USING BTREE,
KEY `index_api_id_dange` (`api_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
主键索引,单独索引,组合索引使用场景及优化
表button 有3个索引 , 分别是:id主键 , 联合索引(permission_id,app_id),api_id(单列索引)
button_name 无索引
查询where条件中:
主键索引:
1、主键索引与联合索引同时存在,使用主键索引
2、主键索引与单个索引同时存在 , 使用主键索引
结论:只要主键索引在,使用主键索引 。
联合索引 :
1、联合索引与单列索引列 同时存在,使用单列索引
2、联合索引中列顺序颠倒无影响 。
3、联合索引实行最左侧原则,即:单独查询条件中只有permission_id可以使用联合索引 , 单独查询条件中只有app_id不实用联合索引 。
4、如果查询条件中只有app_id,但是select 条件中有 permission_id,则也使用联合索引 。
5、select id,app_id from button where app_id=1001; 使用联合索引
6、explain select id,app_id,button_name from button where app_id=1001;不使用联合索引
结论:索引优先级:主键索引,单列索引,组合索引
联合索引中遵从最左侧列原则 。
当查询条件和返回结果中仅仅包含联合索引中索引项,也使用联合索引 。如第4条 。
当查询条件中出现联合索引中非最左侧索引列 , 返回结果中含义联合索引中的列或者主键则也使用联合索引 。

推荐阅读