7.设置表的约束
对于已经创建好的表,虽然字段的数据类型决定了所能存储的数据类型,但是表中所储存的数据是否合法并没有进行检查,在使用MySQL时,如果像针对表中的数据做一些完整性检查操作,可以通过表的约束来完成。
MySQL支持的完整性约束
完整性约束
完整性约束关键字 | 含义 |
---|---|
NOT NULL | 约束字段不能为空值 |
DEFAULT | 设置字段的默认值 |
UNQUE KEY(UK) | 约束字段的值是唯一 |
PRIMARY KEY(PK) | 约束字段为表的主键,可以作为该表的唯一标识 |
AUTO_INCREMENT | 约束字段的值为自动增加 |
FOREIGN KEY(FK) | 约束字段为表的外键 |
设置非空约束(NOT NULL)
CREATE TABLE table_name(
属性名 数据类型 NOT NULL,
)
设置字段的默认值:当为数据库插入一条新记录是,如果没有为某个字段赋值,那末数据库系统会自动为这个字段插入默认值。为了达到这种效果,通过数据库关键字DEFAULT来设置
CREATE TABLE table_name(
属性名 数据类型 DEFAULT 默认值,
)
设置唯一约束:(UNQUE,UK)当数据库表中的某个字段上的内容不允许重复是,则可以是使用UK进行设置。即UK约束在创建数据库表时为某些字段加上“UNUQUE”约束条件,保证所有记录中该字段上的值不重复。
CREATE TABLE t_dept(
deptno INT,
dname VARCHAR(20) UNIQUE,
loc VARCHAR(40)
);
如果想给字段dname上的UK约束设置一个名字,可以执行SQL语句CONSTRAINT,创建表t_dept具体语句如下
CREATE TABLE t_dept(
deptno INT,
dname VARCHAR(20),
loc VARCHAR(40),
CONSTRAINT uk_dname UNIQUE(dname)
)l
设置主键约束:在数据库表中设置主键是为了便于数据库管理系统快速查找导表中的记录。在具体设置主键约束时必须满足主键字段时唯一、非空由于逐渐时单一字段也可以是多个字段,所以分为单字段主键和多字段主键。
CREATE TABLE table_name(
属性名 数据类型 PRIMARY KRY,
)
设置多字段主键:当主键是由多个字段组合而成时,则需要通过SQL语句CONSTRAINT来实现
CREATE TABLE table_name(
属性名 数据类型
CONSTRAINT 约束名 PRIMARY KEY(属性名,属性名)
)
具体步骤:
CREATE TABLE t_dept(
deptno INT,
dname VARCHAR(20),
loc VARCHAR(40),
CONSTARINT pk_dname_deptno PRIMARY KEY(deptno,dname)
);
设置字段自动增加:(AUTO_INCREMENT)当数据库插入数据时会自动生成唯一ID,一个数据库表只能有一个字段使用该约束。
CREATE TABLE table_name(
属性名 数据类型 AUTO_INCREMENT,
);
设置外键约束:前面介绍的完整性约束都是在单表中进行设置,而这里介绍的外键约束则保证多个表(通常为连两个表)之间的参照完整性,机构监狱两个表之间的参照关系。
设置外键约束的两个表之间具有父子关系,即子表中某个字段的取值范围由父表决定。例如,表示一种部门和雇员关系,即每个部门有多少雇员,首先应该有两个表:部门表和雇员表,然后雇员表中有一个表示部门编号的字段deptno,其依赖与部门表的主键,这样字段deptno就是雇员表的外键,通过该字段部门表和雇员表建立了联系。
在具体设置pk约束时,设置fk约束的字段必须依赖于数据库中已经存在的父表的主键,同时外键可以为null。
CREATE TABLE table_name(
属性名 数据类型,
属性名 数据类型
CONSTRAINT 外键约束名 FOREIGN KEY(属性名1)REFERENCES 表名 (属性名2)
)
具体操作如下
CREATE DATABASE company;
USE company;
CREATE TABLE t_dept(
deptno INT PRIMARY KEY,
dname VARCHAR(20),
loc VARCHAR(40),
);
CREATE TABLE t_employee(
empno INT PERIMARY KEY,
ename VARCHAR(20),
job VARCHAR(40),
MGR INT,
Hiredate DATE,
sal DOUBLE(10,2)
comm DOUBLE(10,2)
deptno INT,
CONSTRAINT fk deptno FOREIGN KEY(deptno) PEFERENCES t_dept(deptno)
)