#常见约束
/*
含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性
分类:六大约束
NOT NULL:非空,用于保证该字段的值不能为空,比如姓名、学号等
default:默认,用于保证该字段有默认值,比如性别
primary key:主键,用于保证该字段的值具有唯一性,并且非空,比如学号等
unique:唯一,用于保证该字段的值具有唯一性,可以为空,比如座位号
check:检查约束【mysql中不支持】,比如年龄、性别
foreign key:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值,在从表添加外键约束,用于引用主表中某列的值,比如员工表的部门编号,员工表的工种编号
添加约束的时机:
1.创建表时
2.修改表时
约束的添加分类:
列级约束:
六大约束语法上都支持,但外键约束没有效果
表级约束:
除了非空、默认,其他的都支持
主键和唯一的大对比:
保证唯一性 是否允许为空 一个表中可以有多少个 是否允许组合
主键 Y N 至多有一个 可以,不推荐
唯一 Y Y 可以有多个 可以,不推荐
外键:
1、要求在从表设置外键关系
2、从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
3、主表的关联列必须是一个key(一般是主键、唯一键)
4、插入数据时,先插入主表,再插入从表
5、删除数据时,先删除从表,再删除主表
*/
CREATE TABLE 表名(
字段名 字段类型 列级约束,
表级约束
)
#一、创建表时添加约束
/*
语法:
直接在字段名和类型后面追加 约束类型即可
只支持:
*/
#1.添加列级约束
create table stuinfo (
id int primary key, #主键
stuName varchar(20) not null unique, #非空、唯一
gender char(1) check(gender='男' OR gender ='女'), #检查约束
seat int unique, #唯一约束
age int default 18, #默认约束
majorId int foreign key references major (id) #外键
)
create table major (
id int primary key,
majorName varchar (20)
)
desc stuinfo #查看表结构
show index from stuinfo #查看stuinfo表中所有的索引,包括主键、外键、唯一
#2、添加表级约束
/*
语法:在各个字段的最下面
【constraint 约束名】 约束类型(字段名)
*/
create table stuinfo (
id int
stuName varchar(20)
gender char(1)
seat int,
age int ,
majorId int
constraint pk primary key (id), #主键
constraint uq unique (seat), #唯一键
constraint ck check (gender = '男' or gender = '女'), #检查
constraint fk_stuinfo_major foreign key(majorid) references major(id) #外键
)
#通用的写法:
create table if not exists stuinfo (
id int primary key,
stuname varchar(20) not null,
sex char (1).
age int default 18,
seat int unique,
majorid int,
constraint fk_stuinfo_major foreign key(majorid) references major(id)
)
#二、修改表时添加约束
/*
1、添加列级约束
alter table 表名 modify coulumn 字段名 字段类型 新约束
2、添加表级约束
alter table 表名 add 【constraint 约束名】约束类型(字段名)【外键的引用】
*/
create table stuinfo (
id int ,
stuname ,
sex char (1).
age int ,
seat int,
majorid int,
)
#1.添加非空约束
alter table stuinfo modify column stuname varchar(20) not null;
#2.添加默认约束
alter table stuinfo modify column age int default 18;
#3.添加主键
#列级约束
alter table stuinfo modify column id int primary key;
#表级约束
alter table stuinfo add primary key(id)
#4.添加唯一键
#列级约束
alter table stuinfo modify column seat int unique;
#表级约束
alter table stuinfo add unique(seat)
#5.添加外键
alter table stuinfo add constraint fk_stuinfo_major foreign key (majorid) references major(id)
#三、修改表时删除约束
#1.删除非空约束
alter table stuinfo modify column stuname varchar(20) null
#2.删除默认约束
alter table stuinfo modify column age int
#3.删除主键
alter table stuinfo drop primary key
#4.删除唯一
alter table stuinfo drop index seat
#5.删除外键
alter table stuinfo drop foreign key fk_stuinfo_major
#标识列
/*
又称为自增长列
含义:可以不用手动的插入值,系统提供默认的序列值
特点:
1、标识列必须和主键搭配吗?不一定,但要求是一个key
2、一个表中可以有几个标识列?至多一个!
3、标识列的类型?只能是数值型
4、标识列可以通过set auto_increment_increment=3设置步长,可以通过手动插入值,设置起始值
*/
#一、创建表时设置标识列
create table tab_identity (
//id int primary key,
id int primary key auto_increment,
name varchar(20),
)
insert into tab_identity values(1,'John')
insert into tab_identity(id, name) values(null,'John')
insert into tab_identity(name) values('John')
set auto_increment_increment=3
#二、修改表时设置标识列
alter table tab_identity modify column id int primary key auto_increment;
#三、修改表时删除表时列
alter table tab_identity modify column id int ;
网友评论