表的约束及创建表

约束方法:

# 约束
    # 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)
);
not null

 

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'
);
default

 

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) 
);
unique

 

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)
);
auto_increment

 

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)
);
primary key

 

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)
);
foreign key级联删除和更新

 

修改表结构

语法:
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 字段名;

 

 

级联删除和更新设置的对应属性:点击参考

修改表结构:点击参考

 

posted @ 2019-11-30 17:02  无夜。  阅读(316)  评论(0编辑  收藏  举报