MySQL约束

本文介绍了MySQL中的四种主要约束:主键约束确保数据的唯一性和标识性,非空约束保证字段不为空,默认约束定义列的默认值,唯一约束则要求列值的唯一,允许一个空值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导言

上一节提到了MySQL的主键约束,这一节再来讲一讲MySQL的其他约束。本节将针对MySQL的主键约束、唯一约束、默认约束、非空约束进行讲解。

1. 主键约束

主键约束的关键字为PRIMARY KEY,主键约束所约束的是一个列或多个列的组合。被约束的一列或多列具有唯一性,可以通过主键来标识某一行。主键约束遵循以下规则:

  • 主键值必须唯一,且不为NULL
  • 每个表中只能定义一个主键
  • 复合主键需要满足最小化原则,即复合主键不能包含多余的、不必要的列。

如果主键为表中的某一列而非多列,则可以直接用primary key修饰该字段。

CREATE TABLE IF NOT EXISTS emp_primary_key_test (
   id INT(11) NOT NULL PRIMARY KEY,
   name VARCHAR(50)
  )ENGINE=InnoDB DEFAULT CHARSET=utf8;

也可以直接用PRIMARY KEY单独指定主键:

CREATE TABLE emp_primary_key_test (
  id int(11) NOT NULL,
  name varchar(50) DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

如果需要使用复合主键,直接在PRIMARY KEY后的括号中指定多个即可,注意用逗号分割。

2. 非空约束

非空约束,即指定表中的字段不能为空,用NOT NULL关键字指定。

CREATE TABLE emp_not_null_test (
  id int(11) NOT NULL,
  name varchar(50) NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

上述SQL语句指定了name字段不为空。

mysql> insert into emp_not_null_test(id,name) values (1,NULL);
1048 - Column 'name' cannot be null

3. 默认约束

默认约束,即用来指定表中某列的默认值,用DEFAULT关键字指定。

CREATE TABLE emp_default_test (
  id int(11) NOT NULL,
  name varchar(50) DEFAULT '菜虚鲲',
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

直接插入两条不带name的数据

mysql> insert into emp_default_test(id) values (1),(2);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

name字段被指定了默认值

mysql> select * from emp_default_test;
+----+-----------+
| id | name      |
+----+-----------+
|  1 | 菜虚鲲 |
|  2 | 菜虚鲲 |
+----+-----------+
2 rows in set (0.00 sec)

4. 唯一约束

唯一约束,即要求某一列唯一,允许为空,但只能出现一个空值,用UNIQUE关键字指定。
假设要求不能重名:

CREATE TABLE emp_unique_test (
  id int(11) NOT NULL,
  name varchar(50) UNIQUE,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

先插入一条名为’哈哈’的数据

mysql> insert into emp_unique_test(id,name) values(1,'哈哈');
Query OK, 1 row affected (0.00 sec)

再插入一条名为’哈哈’的数据

mysql> insert into emp_unique_test(id,name) values(2,'哈哈');
1062 - Duplicate entry '哈哈' for key 'name'
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值