加载中...

MySQL(三)--表的约束及创建表


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

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

修改表结构:点击参考


文章作者: 无夜
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 无夜 !
评论
  目录