表的约束及创建表
约束方法:
# 约束 # 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,字段不能为空
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#创建表 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,给某一个字段设置默认值
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 创建表 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,设置某一个字段不能重复
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 创建表 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
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 创建表 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的字段默认为主键
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 创建一个员工表 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) ); # 如果你想更新部门表中在使用的数据会因员工表在使用而无法操作 # 需要使用级联删除和更新
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 级联更新和删除会随着你的子表变化而变化 # 创建一个员工表 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 字段名;
级联删除和更新设置的对应属性:点击参考
修改表结构:点击参考