mysql字段约束操作

字段常用约束如下表:

约束 名称
primary key 主键
unique key 唯一约束
null 空约束
default 默认值
auto_increment 自增长约束
comment 注释
foreign key 外键约束

主键(primary key)

能唯一标识记录的字段,可以作为主键。一个表只能有一个主键。主键具有唯一性。声明字段时,用 primary key 标识。也可以在字段列表之后声明,在字段列表后声明主键时主键可以由多个字段组成,声明主键的字段值不能为null。
ex:

--创建一张名为lesson的课表设置主键是lesson_id
create table if not exists lesson(
lesson_id int not null primary key auto_increment,
name varchar(40) not null unique key comment '课名称'
)
--另一种写法方式
create temporary table if not exists lesson(
  id int not null,
  name varchar(40) not null comment '课程名称',
  primary key(id),
  unique key(name)
)

唯一约束(unique key)

使得字段的值不能重复。具有唯一性。

空约束(null)

null不是数据类型,是列的一个属性。表示当前列是否可以为空。null表示什么都没有。null意思是允许列为空。not null是不允许列为空。列的默认值为null。
ex:

--创建一张表名为student(name,age)
create temporary table if not exists student(
 name varchar(20) null,
 age int not null default 18
)
--向学生表中插入一条数据,此时表示将name字段的值设为null, 取决于该字段是否允许为null
replace into student set name=null,age=18;

默认值(default)

字段的默认值。
ex:

--创建一张班级表,名为clazz包含班级名,班级人数(人数默认30人)
create temporary table clazz(
 name varchar(20) not null comment '班级名称',
 student_num int not null default 30
);
-- 表示强制使用默认
insert into clazz values ('一年级二班', default);

--为班级表增加开班时间字段
alter table if exists clazz add column start_time timestamp default current_timestamp;

自增长约束(auto_increment)

自增长必须为索引(主键或unique),一张表中只能存在一个字段为自动增长。默认从1开始自增长。可以通过表属性 auto_increment = 初始值进行设置或 alter table tbl auto_increment = 初始值来更改自增长的初始值;

注释(comment)

表、列都可以设置注释(comment),注释就是对表、列的意思的进行解释
ex:

create temporary table if not exists teacher(
name varchar(45) not null comment '教师姓名'
)engine=innodb comment='教师信息表'  charset utf8 collate utf8_general_ci;

外键约束(foreign key)

格式: foreign key(外键字段) references 主表(关联字段) [restrict|cascade|set null| no action | set default]

用于限制主表与从表数据完整性。作用:保持数据一致性,完整性,主要目的是控制存储在外键表(从表)中的数据。
ex:

-- 将表t1的t1_id外键关联到表t2的id字段。 每个外键都有一个名字,可以通过 constraint 指定存在外键的表,称之为从表(子表),外键指向的表,称之为主表(父表)。
alter table t1 add constraint t1_t2_fk foreign key (t1_id) references t2(id);

MySQL中,可以对InnoDB引擎使用外键约束:
语法:foreign key (外键字段) references 主表名 (关联字段) [主表记录删除动作] [主表记录更新动作]
此时需要检测一个从表的外键需要约束为主表的已存在的值。外键在没有关联的情况下,可以设置为null.前提是该外键列,没有not null。可以不指定主表记录更改或更新时的动作,那么此时主表的操作被拒绝。如果指定了 on update 或 on delete:在删除或更新时,有如下几个操作可以选择:
cascade,级联操作。主表数据被更新(主键值更新),从表也被更新(外键值更新)。主表记录被删除,从表相关记录也被删除。
set null,设置为null。主表数据被更新(主键值更新),从表的外键被设置为null。主表记录被删除,从表相关记录外键被设置成null。但注意,要求该外键列,没有not null属性约束。
restrict,拒绝父表删除和更新。
set default 设置为默认值,主表数据被更新(主键值更新),从表的外键被设置为默认值。主表记录被删除,从表相关记录外键被设置成默认值。但注意,要求该外键列设置default属性约束。

ps:注意,外键只被InnoDB存储引擎所支持。其他引擎是不支持的。

你可能感兴趣的:(mysql字段约束操作)