2022年01月19日整理发布:mysql主键非空约束怎么设置
向您解释如何设置mysql主键非null约束。相信朋友们也应该很关心这个话题。现在,我们来谈谈如何为我的朋友设置mysql主键非null约束。边肖还收集了关于如何设置mysql主键非空约束的信息。我希望你看到后会喜欢。
在mysql中,可以使用“CREATE TABLE”语句中的“字段名数据类型主键”语句设置主键约束,使用“字段名数据类型NOT null”语句设置非NULL约束。
Mysql主键约束
PRIMARY KEY的全称是“primary key constraint”,这是MySQL中最常用的约束。一般来说,为了方便DBMS更快地找到表中的记录,会在表中设置一个主键。
使用主键时,应注意以下几点:
每个表只能定义一个主键。
主键值必须唯一标识表中的每一行,并且不能为空,也就是说,表中不能存在具有相同主键值的两行数据。这是唯一性原则。
字段名在联合主键字段表中只能出现一次。
联合主键不能包含不必要的冗余字段。当删除联合主键的某个字段时,如果剩余字段组成的主键仍然满足唯一性原则,则联合主键不正确。这就是最小化原则。
创建表时设置主键约束。
创建数据表时设置主键约束可以为表中的一个字段设置主键,也可以为表中的多个字段设置联合主键。但是无论使用哪种方法,一个表中只能有一个主键。下面分别说明单字段主键和多字段联合主键的设置方法。
1)设置单字段主键
使用PRIMARY KEY关键字在CREATE TABLE语句中指定主键。
定义字段时,按如下方式指定主键的语法格式:
字段名数据类型主键[默认值]示例1
在test_db数据库中创建tb_emp3数据表。以ID为主键的SQL语句及运行结果如下。
mysql CREATE TABLE tb_emp3
- (
- id INT(11)主键,
-姓名VARCHAR(25岁),
- deptId INT(11),
-工资浮动
- );
查询正常,0行受影响(0.37秒)
MySQL desc TB _ EMP 3;
- - - - - -
|字段|类型|空|键|默认|额外|
- - - - - -
| id | int(11) | NO | PRI | NULL | |
|名称| varchar(25) | YES | | NULL | |
| deptId | int(11) | YES | | NULL | |
|工资|浮动|是|空| |
- - - - - -
集合中的4行(0.14秒)或在所有字段定义如下后指定主键的语法格式:
[约束约束名称]主键[字段名]示例2
在test_db数据库中创建tb_emp4数据表。以ID为主键的idSQL语句及运行结果如下。
mysql CREATE TABLE tb_emp4
- (
- id INT(11),
-姓名VARCHAR(25岁),
- deptId INT(11),
-工资浮动,
-主键(标识)
- );
查询正常,0行受影响(0.37秒)
MySQL desc TB _ EMP 4;
- - - - - -
|字段|类型|空|键|默认|额外|
- - - - - -
| id | int(11) | NO | PRI | NUL
L | | | name | varchar(25) | YES | | NULL | | | deptId | int(11) | YES | | NULL | | | salary | float | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 4 rows in set (0.14 sec)2)在创建表时设置联合主键
所谓的联合主键就是这个主键是由一张表中多个字段组成的。
比如设置学生选课数据表时使用学生编号做主键还是用课程编号做主键呢如果用学生编号做主键那么一个学生就只能选择一门课程。如果用课程编号做主键那么一门课程只能有一个学生来选。显然这两种情况都是不符合实际情况的。
实际上设计学生选课表要限定的是一个学生只能选择同一课程一次。因此学生编号和课程编号可以放在一起共同作为主键这也就是联合主键了。
主键由多个字段联合组成语法格式如下:
PRIMARY KEY [字段1字段2…,字段n]注意:当主键是由多个字段组成时不能直接在字段名后面声明主键约束。
例 3
创建数据表 tb_emp5假设表中没有主键 id为了唯一确定一个员工可以把 name、deptId 联合起来作为主键SQL 语句和运行结果如下。
mysql> CREATE TABLE tb_emp5 -> ( -> name VARCHAR(25), -> deptId INT(11), -> salary FLOAT, -> PRIMARY KEY(id,deptId) -> ); Query OK, 0 rows affected (0.37 sec) mysql> DESC tb_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 数据表的表结构SQL 语句和运行结果如下所示。
mysql> DESC tb_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 TABLE tb_emp2 -> ADD PRIMARY KEY(id); Query OK, 0 rows affected (0.94 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> DESC tb_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 非空约束(NOT NULL)指字段的值不能为空。对于使用了非空约束的字段如果用户在添加数据时没有指定值数据库系统就会报错。可以通过 CREATE TABLE 或 ALTER TABLE 语句实现。在表中某个列的定义后加上关键字 NOT NULL 作为限定词来约束该列的取值不能为空。比如在用户信息表中如果不添加用户名那么这条用户信息就是无效的这时就可以为用户名字段设置非空约束。
在创建表时设置非空约束
创建表时可以使用 NOT NULL 关键字设置非空约束具体的语法格式如下:
<字段名> <数据类型> NOT NULL例 1
创建数据表 tb_dept4指定部门名称不能为空SQL 语句和运行结果如下所示。
mysql> CREATE TABLE tb_dept4 -> ( -> id INT(11) PRIMARY KEY, -> name VARCHAR(22) NOT NULL, -> location VARCHAR(50) -> ); Query OK, 0 rows affected (0.37 sec) mysql> DESC tb_dept3; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(22) | NO | | NULL | | | location | varchar(50) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 3 rows in set (0.06 sec)在修改表时添加非空约束
如果在创建表时忘记了为字段设置非空约束也可以通过修改表进行非空约束的添加。
修改表时设置非空约束的语法格式如下:
ALTER TABLE <数据表名> CHANGE COLUMN <字段名> <字段名> <数据类型> NOT NULL;例 2
修改数据表 tb_dept4指定部门位置不能为空SQL 语句和运行结果如下所示。
mysql> ALTER TABLE tb_dept4 -> CHANGE COLUMN location -> location VARCHAR(50) NOT NULL; Query OK, 0 rows affected (0.15 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> DESC tb_dept4; +----------+-------------+------+-----+----------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+----------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(22) | NO | | NULL | | | location | varchar(50) | NO | | NULL | | +----------+-------------+------+-----+----------+-------+ 3 rows in set (0.00 sec)推荐教程:mysql视频教程
以上就是mysql主键非空约束怎么设置的详细内容!
来源:php中文网
免责声明:本文由用户上传,与本网站立场无关。财经信息仅供读者参考,并不构成投资建议。投资者据此操作,风险自担。 如有侵权请联系删除!
-
万象汽车试驾,轻松搞定试驾。只需几步,即可开启您的驾驶体验之旅。首先,通过官网或APP预约试驾时间,选择心...浏览全文>>
-
北汽瑞翔试驾流程主要包括以下几个步骤:首先,客户到达4S店后,由销售顾问接待并了解客户需求。随后,销售顾...浏览全文>>
-
试驾MG4 EV全攻略:MG4 EV是一款主打年轻、智能与续航的纯电车型。外观时尚,车身紧凑,适合城市通勤。内饰...浏览全文>>
-
预约试驾奥迪SQ5 Sportback,可线上与线下结合操作。首先,访问奥迪官网或官方APP,选择“试驾预约”,填写个...浏览全文>>
-
红旗试驾预约通常需要以下条件:1 年龄要求:申请人需年满18周岁,部分门店可能要求20岁以上。2 驾驶证...浏览全文>>
-
特斯拉试驾全攻略试驾特斯拉前,建议提前在官网预约,选择最近的体验中心。到店后,工作人员会引导你完成基础...浏览全文>>
-
宝马预约试驾全攻略想要体验宝马的驾驶乐趣?提前预约试驾是关键。首先,访问宝马官网或使用“宝马中国”官方A...浏览全文>>
-
道郎格试驾,感受豪华与科技的完美融合。一进入车内,高端质感扑面而来,真皮座椅、精致内饰,尽显奢华。智能...浏览全文>>
-
预约奇瑞新能源试驾,新手可按以下步骤操作:1 选择车型:登录奇瑞官网或官方App,浏览新能源车型,如艾瑞...浏览全文>>
-
奔驰GLE试驾预约,开启非凡旅程。作为豪华SUV的典范,GLE集优雅设计与强大性能于一身,为您带来前所未有的驾驶...浏览全文>>
- 特斯拉试驾全攻略
- 宝马预约试驾全攻略
- 奔驰GLE试驾预约,畅享豪华驾乘,体验卓越性能
- 零跑C16试驾全攻略
- 试驾海豚,轻松几步,畅享豪华驾乘
- 奇瑞预约试驾的流程及注意事项
- 小鹏G7试驾,新手必知的详细步骤
- 如何在 IPHONE 16E 和 IPHONE 16 之间进行选择
- 这个隐藏的 ANDROID 设置可以释放大屏幕的全部潜力
- 三星 ONE UI 7 更新:比预期更早到来
- IPHONE 15 PRO 和 PRO MAX 将很快获得视觉智能
- 使用这些必备的 ANDROID 应用程序改变你的主屏幕
- PS5 PRO 销量与 PS4 PRO 竞争
- 超薄 Galaxy S25 Edge揭晓其新功能
- Android 15 QPR2 Beta 2.1 将修复与崩溃相关的问题
- Garmin 的 Fenix 7 Pro Sapphire Solar 降至 591 美元
- Galaxy S25 Ultra 的 S Pen 可能会失去蓝牙功能
- 惠普在 CES 上推出搭载 Copilot+ 的全新一体机和迷你电脑
- 首批 Galaxy S25 系列壁纸来了 但只有两张
- 1,000 马力的 911 Turbo S GT-R 与杜卡迪一较高下