本教程中所使用的数据库的建表语句都在“SQL教程——索引”这篇文章中,点击链接直达:索引&建表语句
摘要:本文主要介绍SQL的DDL语法
目录
常见的约束类型
含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确性和可靠性
分类:六大约束
-
not null:非空,用于保证该字段的值不能为空
比如姓名,学号等
-
default:默认,用于保证该字段的默认值
比如性别,成绩
-
unique:唯一,用于保存该字段的值具有唯一性,可以为空
比如座位号
-
check:检查约束【MySQL中不支持】
-
primary key:主键,用于保证该字段的值具有唯一性,并且非空
比如学号,员工编号等
-
foreign key:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
在从表中添加限制,用于引用主表中某列的值
添加约束的时机:
-
创建表时
-
修改表时
约束的添加分类:
-
列级约束:六大约束语法上都支持,但外键约束没有效果。
-
表级约束:除了非空、默认,其它都支持。
主键和唯一的大对比:
保证唯一性 是否允许为空 一个表中可以有多个 是否允许组合
主键 √ x 只有一个 √,但不推荐
唯一 √ √ 可以有多个 √,但不推荐
外键:
-
要求在从表设置外键关系
-
从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求。
-
主表的关联列必须是一个key(一般是主键或是唯一)
-
插入数据时,先插入主表,再插入从表
删除数据时,先删除从表,再删除主表
insert into major values(1, 'java');
insert into major values(2, 'h5');
create table 表名(
字段名 字段类型 列级约束,
字段名 字段类型,
表级约束
);
一、创建表时添加约束
1.添加列级约束
create table stunifo(
id int primary key, #主键
stuName varchar(20) not null, #非空
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 varhcar(20)
);
#查看stuinfo表中所有的索引,包括主键,外键和唯一
show index from stuinfo;
2.添加表级约束
dop table if exists stuinfo;
create table stunifo(
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)
);
通用写法:
二、删除表时删除约束
1.删除非空约束
alter table stuinfo modify column stuname varhcar(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
show index from stuinfo
三、表示列
含义:可以不用手动插入值,系统提供的默认的序列值
特点:
-
标识列所在的列必须是一个key(primary key 或者 unique)
-
一张表至多有一个标识列
-
标识列的类型必须是数值型
-
标识列可以通过set auto_increment_increment = 3; 来设置步长
可以通过手动插入值来设置起始值
id int primary key auto_increment;