数据表创建——列的完整性约束
完整性约束条件是对
字段进行限制
,要求用户对该属性进行操作符合特定的要求。如果不满足完整性约束条件,数据库系统将不再执行用户操作
设置表字段的主键约束(PRIMARY KEY、PK)
- 主键能唯一标识该表中的每条信息。
- 主键和记录的关系,如同身份证和人的关系。
- 主键的主要目的是帮助数据库管理系统以最快的速度查找到表的某一条信息。逐渐必须满足的条件就是主键必须是唯一的,表中任意两条记录的主键字段的值不能相同,并且是NOT NULL
1、单字段主键
-
CREATE TABLE tablename( propName propType PRIMARY KEY,... ); CREATE TABLE tablename( propName propType,... PRIMARY KEY(propType) );
-
创建表school,设置id字段为PK约束,再查看class表信息
create database school; use school; create table class(id int PRIMARY KEY, name varchar(128),teacher varchar(64)); desc class;#查询表class 的定义,=> describe class show create table class; insert into class VALUES(1,'一班','martin'); insert into class VALUES(1,'二班','rock'); #因主键约束,插入失败
-
Mysql支持给主键设置名字
-
CREATE TABLE tablename{ propName propType,...... CONSTRAINT pk_name PRIMARY KEY(propType) };
-
-
给id字段一个PK约束设置一个名字,可以执行SQL语句CONSTRAINT
create database school; use school; create table class(id int,name varchar(128),teacher varchar(64),CONSTRAINT id_pk PRIMARY KEY(id)); desc class; show create table class; insert into class VALUES(1,'一班','martin'); insert into class VALUES(1,'二班','rock'); #因主键约束,插入失败
2、多字段主键
主键是由多个属性组合而成时,在属性定义完之后统一设置主键。
CREATE TABLE tablename(
propName1 propType,
propName2 propType,
......
[CONSTRINT pk_name]PRIMARY KEY(propName1,propName2)
);
-
多字段主键的设置
create database school; use school; create table class3(id int,name varchar(128),teacher varchar(64),CONSTRINT id_pk PRIMARY KEY(id,name)); desc class3;#查询表class3的定义 describe class3; insert into class VALUES(1,'一班','martin'); insert into class VALUES(1,'一班','rock');#联合主键约束,插入失败
设置表字段的外键约束(FOREIGN KEY,FK)
外键是表的一个特殊字段,外键约束是为了保证多个表(通常是两个表)之间的参照完整性,即构建两个表的字段之间的参照关系。
设置外键约束的两个表之间具有父子关系,即子表中某个字段的取值范围由父表决定。 在具体设置FK约束时,设置FK约束的字段必须依赖于数据库中已经存在的父表的主键同时外键可以为空(NULL)
CREATE TABLE tablename_1(
propName1 propType,
propName2 propType,
...
[CONSTRAINT fk_name]FOREIGN KEY(propName1) REFERENCES table2_name(table2_column)
);
#tablename_1参数是要设置外键的表名
#propName1参数是要设置外键的字段
#tablename_2是父表的名称
#table2_column是父表设置主键约束的字段名
-
use school; create table class(id int PRIMARY KEY,name varchar(128),teacher varchar(64));#创建表class desc class; #describe class; create table student(id int PRIMARY KEY AUTO_INCREMENT,name varchar(64) NOT NULL,class_id int,sex enum('M','F'),FOREIGN KEY(class_id) REFERENCES class(id));#创建表student,class_id为表class id字段的外键 insert into student(name,class_id,sex)values('小红',2,'M');#插入,主键自增长auto increment insert into student(name,sex)values('小军','M');#插入记录,允许外键为空
设置表字段的非空约束(NOT NULL,NK)
NK约束在创建数据库表时为某些字段上加上“NOT NULL“约束条件,保证所有记录中的该字段都有值
CREATE TABLE tablename(
propName propType NOT NULL,......
);
设置表字段唯一约束(UNIQUE,UK)
UK约束在创建数据库时为某些字段加上”UNIQUE“约束条件,保证所有记录中该字段上的值不重复
CREATE TABLE tablename(
propName propType UNIQUE,......
);
unique允许受约束的字段出现多个空值NULL,不算重复
设置表字段值自动增加(AUTO_INCREMENT)
设置AUTO_INCREMENT约束后的字段会生成唯一的ID,因此该字段也经常会同时设置成PK主键
CREATE TABLE tablename(
propName propType AUTO_INCREMENT,......
);
mysql8 中,AUTO_INCREMENT 必须设为键(主键、外键和唯一键均可)! 否则会报错!
设置表字段的默认值(DEFAULT)
当为数据库中插入一条记录时,如果没有为某个字段赋值,数据库系统就会自动为这个字段插入默认值
CREATE TABLE tablename(
propName propType DEFAULT defaultvalue,...
);
如果没有设置,则默认为空
调整列的完整性约束
主键PK、外键FK、唯一键UK
-
新增
- alter table [table_name] add constraint [constraint_name] [unique key| primary key| foreign key]
-
删除
-
通过如下命令查询键值的约束名:
-
show index 或者 keys from 表名
-
-
执行如下命令删除:
-
主键:alter table 表名 drop primary key;
外键或唯一键:alter table 表名 drop index 约束名;
-
-
-
修改
- 先删除、在新增即可
修改默认值DEFAULT、自增长和NK
alter table 表名 modify 列名 类定义
create database school;
use school;
create table class(id int PAIMARY KEY AUTO_INCREMENT,name varchar(128) UNIQUE,teacher varchar(64));
alter table class modify teacher varchar(64) DEFAULT 'Martin' NOT NULL;
#设置默认值和非空
alter table class modify teacher varchar(64);
#取消默认值和非空