主题
SQL约束
一、主键约束(唯一+非空)
1.创建主键约束
1.1 创建表时填加主键
在建表时指定某个字段为主键
sql
create table if not exists 库.表名 (
id int primary key,
user_name varchar(20)
);在建表时,在声明区域去描述主键
sql
create table if not exists 库.表名 (
p_id int,
p_name varchar(20),
[constraint] primary key (列名) # constraint 可省略
);1.2 已有表时添加主键
sql
# 语法:
alter table 库.表名 add primary key (主键列名);2删除主键约束
sql
# 语法:
alter table 库.表名 drop primary key; # 删除主键的唯一性
alter table 库.表名 change 主键的列名 主键的列名 主键数据类型; # 删除主键的非空性3.自动增长列
sql
# 自动增长列(auto_increment)
# 不能单独使用,不属于约束,需要结合主键使用
# 建表的时候需要设置自动增长列
create table 库.表名 (
c_id int primary key auto_increment,
c_name varchar(20)
);注:
a.如果设置了自动增长列的主键,传递为null的数据时会自动基于上一条数据+1,如果第一次插入,默认是从1开始的!
b.如果自己赋值了, 按照赋值的来, 前提要保证主键的唯一性,下一个会自动基于上一条数据+1
sql
# 修改这个自动增长的默认值
# 语法:
alter table 库.表名 auto_increment = 初始值二、其他约束
1.非空约束
非空约束:约束这一列的内容不能出现null(not null)
1.1 创建
创表时添加
sql
# 语法:
create table 库.表名 (
o_id int primary key auto_increment,
data_time datetime not null
);已有表时添加
sql
# 语法:
alter table 库.表名
change 列名 列名 数据类型 not null;1.2 删除
sql
# 语法:
alter table 库.表名
change 列名 列名 数据类型;2.唯一约束
唯一约束:被标记的列, 必须保证唯一性, 不能有重复值 但是可以为NULL。唯一约束是一种键。唯一约束只能检测值是否重复,不能检测null是否重复。
2.1 创建
创表时添加(两种方式:在字段后面声明和在constraint区域声明)
sql
# 语法:
create table 库.表名 (
p_id int primary key auto_increment,
p_sn varchar(20) unique,
p_mac varchar(20),
p_price decimal(10, 2),
[constraint] unique (列名)
);已有表时添加
sql
# 语法:
alter table 库.表名
add unique (列名); # 用add添加,更推荐
alter table 库.表名
change p_sn p_sn varchar(20) unique; # 用change添加,不专业2.2 删除(删除键不能用change ,要用drop key)
sql
# 语法:
alter table 库.表名
drop key 约束名;3.默认值约束
在插入数据时,若没有写对应的内容,默认就插入这个值
3.1添加
创表时添加
sql
# 语法:
create table 库.表名 (
user_id int primary key auto_increment,
user_name varchar(20) default '默认内容',
city varchar(20) default '默认内容'
);已有表时添加
sql
# 语法:
alter table 库.表名
change 列名 列名 数据类型 default '默认内容';1.2 删除
sql
# 语法:
alter table 库.表名
change 列名 列名 数据类型;4.外键约束
三、联合
1.联合主键
每一个字段不为空 2.联合的内容拼接起来不重复
1.1 创建
创表时在constraint区域创建
sql
create table 库.表名 (
area varchar(6),
birth varchar(8),
code varchar(4),
constraint primary key (area, birth, code)
);已有表时添加
sql
# 语法:
alter table 库.表名 add primary key(area, birth, code);1.2删除
sql
alter table 库.表名
drop primary key; # 删除唯一
alter table 库.表名
change 列名 列名 数据类型; #删除非空2联合唯一
1.1 创建(在constraint区域创建)
sql
create table 库.表名 (
area varchar(6),
birth varchar(8),
code varchar(4),
constraint 联合唯一名称 unique (area, birth, code)
);1.2删除
sql
alter table 库.表名
drop key 联合唯一名称;3.备注
和注释不一样,注释是代码书写过程中给程序员看的,备注是给使用这个库的人看的
sql
create table 库.表名(
id int comment '测试的id' #字段的备注
) comment '测试的数据表'; #表的备注DQL
一、简单查询
sql
# 语法:
select *(表示所有的列)|要展示的某列的列名|也可以任意几列,逗号隔开 from 要查询的表名 where 条件; # select控制展示几列,where控制展示几行