“主键(PRIMARY KEY)”的完整称呼是“主键约束”。MySQL 主键约束是一个列或者列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。

选取设置主键约束的字段

主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。主键应该遵守下面的规则:

每个表只能定义一个主键。

主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在两行数据有相同的主键值。这是唯一性原则。

一个列名只能在复合主键列表中出现一次。

复合主键不能包含不必要的多余列。当把复合主键的某一列删除后,如果剩下的列构成的主键仍然满足唯一性原则,那么这个复合主键是不正确的。这是最小化原则。

在创建表时设置主键约束

在 CREATE TABLE 语句中,主键是通过 PRIMARY KEY 关键字来指定的。

在定义列的同时指定主键,语法规则如下:

PRIMARY KEY [默认值]

【实例 1】在 test_db 数据库中创建 tb_emp 3 数据表,其主键为 id,输入的 SQL 语句和运行结果如下所示。

mysql> CREATE TABLEtb_emp3->(-> id INT(11) PRIMARY KEY,-> name VARCHAR(25),-> deptId INT(11),-> salary FLOAT

->);

Query OK,0 rows affected (0.37sec)

mysql> DESCtb_emp3;+--------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+--------+-------------+------+-----+---------+-------+

| id | int(11) | NO | PRI | NULL | |

| name | varchar(25) | YES | | NULL | |

| deptId | int(11) | YES | | NULL | |

| salary | float | YES | | NULL | |

+--------+-------------+------+-----+---------+-------+

4 rows in set (0.14 sec)

在定义完所有列之后,指定主键的语法格式为:

[CONSTRAINT ] PRIMARY KEY [字段名]

【实例 2】在 test_db 数据库中创建 tb_emp 4 数据表,其主键为 id,输入的 SQL 语句和运行结果如下所示。

mysql> CREATE TABLEtb_emp4->(-> id INT(11),-> name VARCHAR(25),-> deptId INT(11),-> salary FLOAT,-> PRIMARY KEY(id)->);

Query OK,0 rows affected (0.37sec)

mysql> DESCtb_emp4;+--------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+--------+-------------+------+-----+---------+-------+

| id | int(11) | NO | PRI | NULL | |

| name | varchar(25) | YES | | NULL | |

| deptId | int(11) | YES | | NULL | |

| salary | float | YES | | NULL | |

+--------+-------------+------+-----+---------+-------+

4 rows in set (0.14 sec)

在创建表时设置复合主键

主键由多个字段联合组成,语法规则如下:

PRIMARY KEY [字段1,字段2,…,字段n]

【实例 3】创建数据表 tb_emp5,假设表中没有主键 id,为了唯一确定一个员工,可以把 name、deptId 联合起来作为主键,输入的 SQL 语句和运行结果如下所示。

mysql> CREATE TABLEtb_emp5->(-> name VARCHAR(25),-> deptId INT(11),-> salary FLOAT,-> PRIMARY KEY(name,deptId)->);

Query OK,0 rows affected (0.37sec)

mysql> DESCtb_emp5;+--------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+--------+-------------+------+-----+---------+-------+

| name | varchar(25) | NO | PRI | NULL | |

| deptId | int(11) | NO | PRI | NULL | |

| salary | float | YES | | NULL | |

+--------+-------------+------+-----+---------+-------+

3 rows in set (0.14 sec)

在修改表时添加主键约束

在修改数据表时添加主键约束的语法规则为:

ALTER TABLE ADD PRIMARY KEY();

查看 tb_emp2 数据表的表结构,如下所示。

mysql> DESCtb_emp2;+--------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+--------+-------------+------+-----+---------+-------+

| id | int(11) | NO | | NULL | |

| name | varchar(30) | YES | | NULL | |

| deptId | int(11) | YES | | NULL | |

| salary | float | YES | | NULL | |

+--------+-------------+------+-----+---------+-------+

4 rows in set (0.14 sec)

【实例 4】修改数据表 tb_emp2,将字段 id 设置为主键,输入的 SQL 语句和运行结果如下所示。

mysql> ALTER TABLEtb_emp2-> ADD PRIMARY KEY(id);

Query OK,0 rows affected (0.94sec)

Records:0 Duplicates: 0 Warnings: 0mysql> DESCtb_emp2;+--------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+--------+-------------+------+-----+---------+-------+

| id | int(11) | NO | PRI | NULL | |

| name | varchar(30) | YES | | NULL | |

| deptId | int(11) | YES | | NULL | |

| salary | float | YES | | NULL | |

+--------+-------------+------+-----+---------+-------+

4 rows in set (0.12 sec)

mysql中的主键关键字_MySQL主键(PRIMARY KEY)相关推荐

  1. mysql 主键理解_MySQL主键的理解

    MySQL主键的理解 主键(primary key)没有着明确的概念定义,其是索引的一种,并且是唯一性索引的一种,且必须定义为"PRIMARY KEY",主键不能重复,一个表只能有 ...

  2. mysql中的外键约束_MySQL外键约束

    在本教程中,您将了解MySQL外键(foreign key)以及如何在MySQL中创建,添加和删除外键约束. MySQL外键简介 外键表示一个表中的一个字段被另一个表中的一个字段引用.外键对相关表中的 ...

  3. mysql一对一外键约束_MySQL数据库之-foreign key 外键(一对多、多对多、一对一)、修改表、复制表...

    我们在同一数据库创建的表时候,很多时候会出现相同数据的冗余问题,也就是说几个id会有一个或者同n个相同字段,这样就导致数据表结构数据重复冗余, 冗余还无所谓,关键是如果我要改其中一个相同的字段信息,其 ...

  4. mysql中的merge into,SQL Server 2008中利用merge into关键实现insert/update自动匹配(类似于MySQL中的For Update关键字)...

    SQL Server 2008中利用merge into关键实现insert/update自动匹配(类似于MySQL中的For Update关键字) 语法请参考: 按照语法编写语句 DECLARE @ ...

  5. mysql唯一索引的关键字,什么是mysql中唯一索引的关键字

    什么是mysql中唯一索引的关键字 发布时间:2020-07-20 09:09:40 来源:亿速云 阅读:77 作者:Leah 本篇文章为大家展示了什么是mysql中唯一索引的关键字,代码简明扼要并且 ...

  6. 无法在表 'Test' 中可为空的列上定义 PRIMARY KEY 约束

    如果您建的表中该列不为空的话那么就可以利用下述语句将该列设置为主键 建立一个表 test create table Test( autoid int not null)--其中autoid 列不为空 ...

  7. mysql主键索引_mysql主键与索引

    一.概念: 1.主键(primary key)能够唯一标识表中某一行的属性或属性组.一个表只能有一个主键,但可以有多个候选索引.主键常常与外键构成参照完整性约束,防止出现数据不一致.主键可以保证记录的 ...

  8. mysql 主外键 策略_mysql外键策略

    1.外键 建表时添加外键:constraint 外键名 foreign key 从表字段 references 主表字段 级联操作 create table dage( create table xi ...

  9. mysql 主键作用_mysql主键有什么用?

    创建一个表,创建主键是个良好的习惯或应当作为规范,若预测可能累计大量数据,必须设置主键,并且应当选择合适的主键,否则你会严重影响到count查询,insert,delete.下面本篇文章就来给大家介绍 ...

最新文章

  1. 【Qt】Qt动态库和静态库的创建和使用
  2. 这一年,宇宙“面目”愈发清晰
  3. Java中的微信支付(2):API V3 微信平台证书的获取与刷新
  4. 别把机器学习和人工智能搞混了!
  5. 一个炒鸡好用的pdf阅读器
  6. Redis(案例一:注册登录-图形验证码+谷歌开源Kaptcha)
  7. 编译我的hello.ko
  8. 实践 | Element UI + Vue 管理系统首页
  9. ds--8600使用手册_我如何用57行代码复制一个价值8600万美元的项目
  10. matlab中离散数值求解器在哪,matlab - 在ode MATLAB求解器上使用中间值 - SO中文参考 - www.soinside.com...
  11. 胆大,心黑,脸皮厚,某大佬透露的把妹绝招
  12. CentOS 7 设置 DNS
  13. 基于python 爬虫_基于python的爬虫(一)
  14. NTKO文档控件常见报错信息集合
  15. 韩信点兵问题(C语言)
  16. 学大伟业 Day 5 培训总结
  17. 【20保研】西安交通大学软件学院2019年全国优秀大学生夏令营通知
  18. Python让Excel飞起来—批量处理工作薄和工作表
  19. 踩坑:使用jquery的data()方法获取不到自定义属性的值
  20. 春节消费观察:四种愉悦感,抓住女人心

热门文章

  1. 【口语英语】小学英语1-6年级听力必备知识汇总,建议收藏!
  2. unity快速库存系统快速开发插件(Ultimate Inventory System)(二)
  3. python四五事_python函数(四)
  4. MRI基础知识以及AD
  5. 全网最详细解释memcached中的flags含义
  6. 关于php的搞笑段子,笑死人的笑话搞笑段子10个 搞笑笑话笑死人不偿命
  7. 怎么部署个人云服务器?保姆级教程
  8. Oracle中单引号的使用
  9. 山西大学计算机学院复试,2019山西大学计算机与信息技术学院硕士研究生复试录取细则...
  10. 苹果手机没声音了显示耳机模式_降噪耳机哪家强?苹果Apple,1MORE,OPPO对决(兼聊索尼、Bose)...