MySQL创建主键[通俗易懂]

MySQL创建主键[通俗易懂]MySQL InnoDB 存储引擎是必须要有一个主键的,主键可以是一个字段或者多个字段,通常建议:主键就一个、主键字段和业务无关、主键字段最好是自增且字段较小(原因:索引原理)。 创建主键的三种方式…

MySQL创建主键

MySQL InnoDB 存储引擎是必须要有一个主键的,主键可以是一个字段或者多个字段,通常建议:主键就一个、主键字段和业务无关、主键字段最好是自增且字段较小(原因:索引原理)。

创建主键的三种方式:

  1. 在建表语句字段后指定 PRIMARY KEY 关键字设置主键,这种方式只能定义主键为一个字段的情况,如下所示:
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT "自增主键",
`name` varchar(32) DEFAULT "" COMMENT "名字"
) ENGINE=InnoDB CHARSET=utf8 COMMENT ="用户信息表";

代码100分

  1. 在建表语句之后,指定 PRIMARY KEY(column1,column2),这种方式可以定义主键为多个字段的情况,如下所示:
代码100分CREATE TABLE `t_user` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT "自增主键",
`name` varchar(32) DEFAULT "" COMMENT "名字",
PRIMARY KEY (`id`)
) ENGINE=InnoDB CHARSET=utf8 COMMENT ="用户信息表";

我个人开发中更常用这种方式

  1. 上面的两个建表语句,如果不在建表的时候就指定主键,会报错 Incorrect table definition; there can be only one auto column and it must be defined as a key,这个报错并非是 InnoDB 强制约束建表语句一定要指定主键,而是因为建表语句中存在自增 AUTO_INCREMENT 的字段,导致建表语句就必须指定主键,去掉自增建表语句不指定主键也是可以的,然后使用 ALTER TABLE 添加主键(这种方式开发用得很少,DBA重建索引可能会用到),如下所示:
CREATE TABLE MEIZU_OPENROM.`t_user` (
`id` int(11) NOT NULL COMMENT "主键",
`name` varchar(32) DEFAULT "" COMMENT "名字"
) ENGINE=InnoDB CHARSET=utf8 COMMENT ="用户信息表";

ALTER TABLE `t_user` ADD PRIMARY KEY (`id`);

主键一旦创建,就不能再次添加,一个表如果已经存在主键,再次执行 ALTER TABLE .. ADD PRIMARY KEY (..),会提示定义多个主键的错误: Error Code: 1068. Multiple primary key defined

针对第三种建表的情况,如果建表的时候不指定主键,根据索引原理,MySQL InnoDB 存储引擎是必须要有一个主键的,那么,默认会使用什么作为主键呢?默认是不会有主键的,结果就是 insert 可以插入数据,但是 selectupdate 会报错,只有当添加主键之后,才可以selectupdate

Tips:查看索引

查看当前表建立了哪些索引:

代码100分show index from table_name

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8250.html

(0)
上一篇 2023-03-04
下一篇 2023-03-04

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注