MySQL之约束

文章目录

    • 约束
      • 主键约束
        • 添加单列主键
        • 添加多列主键(联合主键)
        • 修改表结构以添加主键
        • 删除主键约束
      • 自增长约束
      • 非空约束
      • 唯一约束
      • 默认约束
      • 零填充约束

约束

我们在之前创建表的时候有提到过约束条件(constraint),他的作用就是用于约束表中的数据,例如非空性,唯一性等,约束的分类也很多有如下

中文 关键字
主键约束 primary key(PK)
自增长约束 auto_increment
非空约束 not null
唯一性约束 unique
默认约束 default
零填充约束 zerofill
外键约束 foreign key(FK)

主键约束

主键约束(primary key)形象化的来理解就是使用某一列或者几列作为这个表的标识,可以提高表的查询速度,主键约束其实就相当于唯一约束加上非空约束的组合,不允许重复也不允许出现空值,而且每个表最多只有一个主键,当主键约束被创建时,系统默认会在所在的列和列组合上建立对应的唯一索引,这里也是简单理解为可以用于快速查询的功能

添加单列主键

创建单列主键有两种方式,一种是在定义字段的同时指定主键,一种是定义完字段之后指定主键

第一种

create table 表名(
   ...
   <字段名> <数据类型> primary key 
   ...
)

例如

create table emp1(
    eid int primay key,
    name VARCHAR(20),
    deptId int,
    salary double
);

第二种

create table 表名(
   ...
   [constraint <约束名>] primary key [字段名]
);

例如

create table emp2(
    eid INT,
    name VARCHAR(20),
    deptId INT,
    salary double,
    constraint  pk1 primary key(id)
 );
添加多列主键(联合主键)

所谓的联合主键,就是这个主键是由一张表中多个字段组成的。当主键是由多个字段组成时,就不能直接在字段名后面声明主键约束。而一张表只能有一个主键,联合主键也是一个主键

create table 表名(
   ...
   primary key (字段1,字段2,…,字段n)
);

例如

create table emp3( 
  name varchar(20), 
  deptId int, 
  salary double, 
  primary key(name,deptId) 
);
修改表结构以添加主键

主键约束不仅可以在创建表的同时创建,也可以在修改表时添加

create table 表名(
   ...
);
alter table <表名> add primary key(字段列表);

例如

create table emp4(
  eid int, 
  name varchar(20), 
  deptId int, 
  salary double, 
);
alter table emp4 add primary key(eid);
删除主键约束
alter table <数据表名> drop primary key;

例如

alter table emp1 drop primary key;

alter table emp5 drop primary key;

自增长约束

这个约束就类似于序号,不需要用户自行赋值,数据库系统会自动进行增长,通过给字段添加相应关键字即可

字段名 数据类型 auto_increment

例如

create table t_user1( 
  id int primary key auto_increment, 
  name varchar(20) 
);

需要注意的是,初始值为1,每新增一条记录,字段会自动添加1,一个表中只能有一个自增长约束,并且该字段必须有唯一的索引,以避免重复,自增长字段也具有非空性,并且只能是整数类型,同时也受到数据大小的限制,当超出上限时会自动失效

那么我们也可以给定一个初始值,例如

create table t_user2 ( 
  id int primary key auto_increment, 
  name varchar(20)
)auto_increment=100;

或者

create table t_user3 ( 
  id int primary key auto_increment, 
  name varchar(20)
);

alter table t_user2 auto_increment=100;

我们之前在讲delete和truncate可以删除表中的数据,delete数据之后自动增长从断点开始,也就是他的自增长是延续的,truncate数据之后自动增长从默认起始值开始,相当于重新标号

非空约束

非空约束(not null)就是这个字段的值不能为空,否则报错

<字段名><数据类型> not null;
alter table 表名 modify 字段 类型 not null;

例如

create table t_user6 ( 
  id int , 
  name varchar(20) not null, 
  address varchar(20) not null 
);

或者

create table t_user7 ( 
  id int , 
  name varchar(20) , -- 指定非空约束 
  address varchar(20) -- 指定非空约束 
); 
alter table t_user7 modify name varchar(20) not null; 
alter table t_user7 modify address varchar(20) not null;

删除

-- alter table 表名 modify 字段 类型 
alter table t_user7 modify name varchar(20) ; 
alter table t_user7 modify address varchar(20) ;

唯一约束

唯一约束(Unique Key)就是这个字段的值不能重复出现

<字段名> <数据类型> unique
alter table 表名 add constraint 约束名 unique();

例如

create table t_user8 ( 
 id int , 
 name varchar(20) , 
 phone_number varchar(20) unique -- 指定唯一约束 
);
create table t_user9 ( 
  id int , 
  name varchar(20) , 
  phone_number varchar(20) -- 指定唯一约束 
); 
alter table t_user9 add constraint unique_ph unique(phone_number);

删除

-- alter table <表名> drop index <唯一约束名>;
alter table t_user9 drop index unique_ph;

默认约束

默认约束(default)就是用来给字段指定默认值

<字段名> <数据类型> default <默认值>;
alter table 表名 modify 列名 类型 default 默认值; 

例如

create table t_user10 ( 
  id int , 
  name varchar(20) , 
  address varchar(20) default ‘北京’ -- 指定默认约束 
);
create table t_user11 ( 
  id int , 
  name varchar(20) , 
  address varchar(20)  
);
alter table t_user11 modify address varchar(20) default  ‘北京’;

删除

alter table t_user11 modify column address varchar(20) default null;

零填充约束

零填充约束(zerofill)会在插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应的0,默认为int(10),并且是无符号整数

create table t_user12 ( 
  id int zerofill , -- 零填充约束
  name varchar(20)   
);

删除

alter table t_user12 modify id int;

你可能感兴趣的:(MySQL,mysql,数据库,sql)