Skip to content

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控制展示几行