MySQL 约束

一.MySQL约束

1、主键约束
  • 主键,又称主码,是表中一列或多列的组合。
  • 主键约束(Primary Key ConstraINT)要求主键列的数据唯一,并且不允许为空。
  • 主键能够唯一地标识表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度。
  • 主键和记录之间的关系如同身份证和人之间的关系,它们之间是一一对应的。主键分为两种类型:单字段主键和多字段联合主键。
a. 单字段主键

主键由一个字段组成,SQL语句格式分为以下两种情况:

# 在定义列的同时指定主键
字段名 数据类型 PRIMARY KEY [默认值]

CREATE TABLE tb_emp2
(
  id INT PRIMARY KEY,
  name VARCHAR(25),
  deptId INT,
  salary FLOAT
);
# 在定义完所有列之后指定主键
[CONSTRAINT <约束名>] PRIMARY KEY [字段名]

CREATE TABLE tb_emp3
(
  id INT,
  name VARCHAR(25),
  deptId INT,
  salary FLOAT,
  PRIMARY KEY(id)
);
b. 多字段联合主键
#主键由多个字段联合组成
PRIMARY KEY [字段1, 字段2,…,字段n]

CREATE TABLE tb_emp4
(
  name VARCHAR(25),
  deptId INT,
  salary FLOAT,
  PRIMARY KEY(name,deptId)
);
2、外键约束
  • 外键:用来在两个表的数据之间建立连接,可以是一列或者多列。虽然可以不是本表的主键,但要对应另外一个表的主键。一个表可以有一个或多个外键。
  • 作用:是保证数据引用的一致性,完整性。定义外键后,不允许删除在另一个表中具有关联关系的行
  • 主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的那个表即是主表
  • 从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的那个表即是从表
  • 例如,部门表tb_dept的主键是id,在员工表tb_emp5中有一个键deptId与这个id关联。
[CONSTRAINT <外键名>] FOREIGN KEY 字段名1 [ ,字段名2,…]
REFERENCES <主表名> 主键列1 [ ,主键列2,…]

# 主表
CREATE TABLE tb_dept1
(
  id INT PRIMARY KEY,
  name VARCHAR(22) NOT NULL,
  location VARCHAR(50)
);

# 从表
CREATE TABLE tb_emp5
(
  id INT PRIMARY KEY,
  name VARCHAR(25),
  deptId INT,
  salary FLOAT,
  CONSTRAINT fk_emp_dept1 FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
);
3、非空约束

非空约束(Not Null ConstraINT)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统会报错。

字段名 数据类型 not null

CREATE TABLE tb_emp6
(
  id INT PRIMARY KEY,
  name VARCHAR(25) NOT NULL,
  deptId INT,
  salary FLOAT
);
4、唯一约束

唯一性约束(Unique ConstraINT)要求该列唯一,允许为空,但只能出现一个空值。

唯一性约束可以确保一列或者几列不出现重复值。

UNIQUE和PRIMARY KEY的区别:

  • 一个表中可以有多个字段声明为UNIQUE,但只能有一个PRIMARY KEY;
  • 声明为PRIMAY KEY的列不允许有空值,但是声明为UNIQUE的字段允许空值的存在。
a.在定义完列之后直接指定唯一约束
字段名 数据类型 UNIQUE

CREATE TABLE tb_dept2
(
  id INT PRIMARY KEY,
  name VARCHAR(22) UNIQUE,
  location VARCHAR(50)
);
b.在定义完所有列之后指定唯一约束
[CONSTRAINT <约束名>] UNIQUE(<字段名>)

CREATE TABLE tb_dept3
(
  id INT PRIMARY KEY,
  name VARCHAR(22),
  location VARCHAR(50),
	CONSTRAINT STH UNIQUE(name)
);
5、默认约束

默认约束(Default ConstraINT)指定某列的默认值

字段名 数据类型 DEFAULT 默认值

CREATE TABLE tb_emp7
(
  id INT PRIMARY KEY,
  name VARCHAR(25) NOT NULL,
  deptId INT DEFAULT 1111,
  salary FLOAT
);
6、自增约束

在MySQL中AUTO_INCREMENT的初始值是1,每新增一条记录,字段值自动加1。

一个表只能有一个字段使用AUTO_INCREMENT约束,且该字段必须为主键的一部分。

AUTO_INCREMENT约束的字段可以是任何整数类型(TINYINT、SMALLIN、INT、BIGINT等)

字段名 数据类型 AUTO_INCREMENT

CREATE TABLE tb_emp8
(
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(25) NOT NULL,
  deptId INT,
  salary FLOAT
);

你可能感兴趣的:(MySQL,mysql,数据库,sql)