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

创建主键的三种方式:

在建表语句字段后指定 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 ='用户信息表';

在建表语句之后,指定 PRIMARY KEY(column1,column2),这种方式可以定义主键为多个字段的情况,如下所示: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 ='用户信息表';

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

上面的两个建表语句,如果不在建表的时候就指定主键,会报错 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 可以插入数据,但是 select 和 update 会报错,只有当添加主键之后,才可以select 和 update。

Tips:查看索引

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

show index from table_name

来源:oschina

链接:https://my.oschina.net/calmsnow/blog/4290435

mysql教程 主键_MySQL创建主键相关推荐

  1. mysql主外键添加_mysql 增加外键:(+创建主键)

    MySQL是开源免费的数据库软件,是一款很优秀的软件,作为我们的学生或者科研人员在开发软件的时候,最好用也是最省钱的.所以MySQL学好是至关重要的! SQL语言包含4个部分: ※ 数据定义语言(DD ...

  2. mysql创建主键约束_mysql添加主键约束

    主键约束:唯一,不重复,不能为空  primary key 一个表中有且只有一个主键约束 1.创建表的同时创建主键约束 格式一: create table 表名( 列名1  数据类型 primary ...

  3. MySQL添加列、删除列,创建主键等常用操作总结

    MySQL添加列.删除列,创建主键等常用操作总结 一. 列常用操作 ① 添加新的一列test_column,并将其作为主键,FIRST将其放在表中第一行,auto_increement是自动增长 al ...

  4. mysql添加列、删除列,创建主键、备份等常用操作总结

    mysql添加列.删除列,创建主键.备份等常用操作总结 一. 列常用操作 ① 添加新的一列test_column,并将其作为主键,FIRST将其放在表中第一行,auto_increement是自动增长 ...

  5. GAUSS创建主键,删除主键

    创建主键 GAUSS200,oracle主键添加语句通常紧跟在建表语句之后,也可以直接嵌在列声明⾥创建,创建主键时会⾃动在该列上创建索引. ⽅法⼀.使⽤add constraint ⽅法添加主键约束 ...

  6. 创建主键报错:Incorrect column specifier for column ‘id‘

    创建主键报错:Incorrect column specifier for column 'id' mysql使用语句创建表将一个字段属性设置主键时,该字段的类型只能是int类型的,varchar类型 ...

  7. oracle创建主键sql语句,Oracle创建主键自增表(sql语句实现)及触发器应用

    Oracle创建主键自增表(sql语句实现)及触发器应用 1.创建表 复制代码 代码如下: createtableTest_Increase( useridnumber(10)NOTNULLprima ...

  8. 14.3.4 创建主键索引

    14.3.4 创建主键索引 主键索引是特殊类型的唯一索引,与唯一索引不同的是,主键索引不仅具有唯一性,而且不能为空,而唯一索引中的列的数据可能为空. 例如,创建数据表t4,并为t4数据表中的id字段创 ...

  9. SQL2K数据库开发八之表操作创建主键

    1.使用Transact-SQL语句在表中创建主键时,可以在创建表的语句中定义列时使用如下语法: 2.在查询分析器中输入如下的语句,可以创建一个表Suppliers,该表中的SupplierID列被定 ...

最新文章

  1. pku1384---Piggy-Bank(动态规划)
  2. Android10.0 开机广播BOOT_COMPLETED发送流程分析
  3. 压缩感知 的自我理解
  4. 【双百解法】剑指 Offer 11. 旋转数组的最小数字
  5. 安装了silverlight还是提示_win10系统安装.netframework3.5方法
  6. Linux最终将会领先于Windows、Mac OS!
  7. python白森_氧气恋人小说-江白森修辞在线阅读-829阅读网
  8. MaxCompute Mars 完全指南
  9. LAMP组合之服务分离部署
  10. SQL SERVER 备份数据库到指定路径语句
  11. ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 14. ASP.NET Core Identity 入门
  12. Oracle EBS Interface/API(35) -创建供应商地点API
  13. wow语音聊天服务器无法使用,无法正常使用《星际争霸II》语音聊天
  14. 湖南大学 实验八 青蛙与蚊子
  15. 几个学习Silverlight及Silverlight示例的网站
  16. 5G图传设备VR+5G直播4K+5G直播
  17. Linux 常用基本命令 rmdir rm
  18. 移动支付线上线下支付场景
  19. Github无法ping通的解决策略
  20. comsol流体仿真 ,流固耦合,圆管内流体驱动物块的移动和 流体驱动扇叶的转动

热门文章

  1. 没有shell63号单元_在ANSYS中选择合适的单元类型
  2. slf4j工具类封装
  3. slf4j导入那个依赖_SLF4J简介与使用(整合log4j)
  4. C++结构体定义(链表等)
  5. 100个python算法超详细讲解:冒泡排序
  6. HDMI 延长器芯片
  7. ssh卡在debug1: SSH2_MSG_KEXINIT sent解决方法
  8. ArcPy 使用Shp批量裁剪栅格 Clip
  9. 阿里巴巴电子商务网站Linux应用案例
  10. c语言中如何将字符串转成16进制,用c语言写一个函数把十进制转换成十六进制,该如何处理...