MySQL表的约束及创建表
约束方法
# 约束
# unsigned 设置某一个数字无符号
# not null 某一个字段不能为空
# default 给某个字段设置默认值
# unique 设置某一个字段不能重复
# 联合唯一
# auto_increment 设置某一个int类型的字段 自动增加
# auto_increment自带not null效果
# 设置条件 int unique
# primary key 设置某一个字段非空且不能重复
# 约束力相当于 not null + unique
# 一张表只能由一个主键
# foreign key 外键
# references
# 级联删除和更新
-- 表约束定义方法1
create table 表名(
字段1 属性类型 约束条件,
字段2 属性类型 约束条件
);
-- 表约束定义方法2,适用于联合字段:unique,primary key
create table 表名(
字段1 属性类型,
字段2 属性类型 ,
字段3 属性类型 ,
约束条件(字段1,字段2)
);
not null,字段不能为空
-- 创建表 t1 且 id 字段不能为空 create table t1( id int not null, user char(8), pwd char(16) ); -- 创建表 t2 且 id,user 字段不能为空 -- 方法一: create table t2( id int not null, user char(8) not null, pwd char(16) );
default,给某一个字段设置默认值
-- 创建表 t1 且设置字段 age和gender 的默认值 -- 通常情况下默认值与不能为空联合使用 create table t1( id int not null, name char(12) not null, age int default 18, gender enum('male','female') not null default 'male' );
unique,设置某一个字段不能重复
-- 创建表 t1 且 username 字段不能重复 create table t3( id int unique, username char(12) unique, password char(18) ); -- 联合唯一:两个字段完全相同才算重复,允许单个字段重复 -- 创建表 t2 且不允许 id和user 同时重复,允许单个字段重复 create table t4( id int, user char(12), pwd char(18), unique(id,user) );
auto_increment,设置某一个int类型的字段 自动增加
# auto_increment 自带 not null 属性 # 自增字段必须是数字,且必须是唯一的!!! # 自增字段的设置条件:int unique
-- 创建表 t1 且 id 自增 create table t1( id int unique auto_increment, username char(10), password char(18) );
primary key,主键
# primary key,设置某一个字段为主键 # 主键的字段效果:非空且不能重复 # 约束力相当于:not null + unique # 注意: # 一张表只能设置一个主键 # 如果一张表没有设置主键,将把第一个设置为not null unique的字段默认为主键
create table t6( id int not null unique, -- 你指定的第一个非空且唯一的字段会被定义成主键 name char(12) not null unique ); create table t6( id int primary key, -- 你指定的第一个非空且唯一的字段会被定义成主键 name char(12) not null unique ); # 联合主键: create table t4( id int, ip char(15), server char(10), port int, primary key(ip,port) );
foreign key,外键
# 外键是一个表关联另一个表 # 使用外键的要求: # 相关联的两个字段的类型必须相同 # 外键一般为另一个表的主键 # mysql中的外键在关联的表中必须具有unique # 创建外键的方法: # 需要先创建外键关联的表,然后才能创建外键 # 创建外键的语法: # 普通方法 # foreign key(当前表要做外键的字段) references 要关联的表(要关联的表中的字段) # 级联删除和更新的方法 # foreign key(当前表要做外键的字段) references 要关联的表(要关联的表中的字段) on update cascade on delete set null
-- 创建一个员工表 create table staff( id int primary key auto_increment, age int, gender enum('male','female'), salary float(8,2), -- 一共8位,小数占两位 post_id int, foreign key(post_id) references post(pid) -- post_id是外键,关联post表中的 pid 字段 ); -- 创建一个部门表 create table post( pid int primary key, postname char(10) not null unique, phone_num char(11) ); -- 如果你想更新部门表中在使用的数据会因员工表在使用而无法操作 -- 需要使用级联删除和更新
-- foreign key级联删除和更新: 级联更新和删除会随着你的子表变化而变化 -- 创建一个员工表 create table staff( id int primary key auto_increment, age int, gender enum('male','female'), salary float(8,2), # 一共8位,小数占两位 post_id int, foreign key(post_id) references post(pid) on update cascade on delete set null ); -- 创建一个部门表 create table post( pid int primary key, postname char(10) not null unique, phone_num char(11) );
修改表结构
语法:
1. 修改表名
ALTER TABLE 表名
RENAME 新表名;
2. 增加字段
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件…],
ADD 字段名 数据类型 [完整性约束条件…];
3. 删除字段
ALTER TABLE 表名
DROP 字段名;
4. 修改字段
ALTER TABLE 表名
MODIFY 字段名 数据类型 [完整性约束条件…];
ALTER TABLE 表名
CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
ALTER TABLE 表名
CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
5.修改字段排列顺序/在增加的时候指定字段位置
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件…] FIRST;
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名;
ALTER TABLE 表名
CHANGE 字段名 旧字段名 新字段名 新数据类型 [完整性约束条件…] FIRST;
ALTER TABLE 表名
MODIFY 字段名 数据类型 [完整性约束条件…] AFTER 字段名;
级联删除和更新设置的对应属性:点击参考
修改表结构:点击参考