MYSQL——约束

作者: So_ProbuING | 来源:发表于2019-06-25 15:26 被阅读0次

    约束

    概念

    约束是对表中的数据进行限定,从而保证数据的正确性、有效性和完整性

    分类

    • 主键约束:primary key
    • 非空约束:not null
    • 唯一约束:unique
    • 外键约束:foreign key

    非空约束

    添加方式

    1. 在创建表的时候添加约束
    CREATE TABLE stu1(
                                id INT,
                                name varchar(20) NOT NULL -- 非空约束
    );
    

    2.创建表后通过修改表添加非空约束

    ALTER TABLE stu1 MODIFY name varchar(20) NOT NULL;
    

    唯一约束

    被unique修饰的列的值是不能重复的

    创建表

    CREATE TABLE stu1(
                                id INTEGER,
                                phone_number varchar(20) UNIQUE -- 手机号唯一约束
    );
    

    在mysql中 null值不属于重复的值,可以有多个Null

    修改表

    ALTER TABLE stu1 DROP INDEX phone_number;
    

    主键约束

    概念

    • 使用主键 primary key 非空且唯一
    • 一张表只能有一个字段为主键
    • 主键就是表中记录的唯一标识

    创建表时,添加主键约束

    CREATE TABLE stu1(
                        id integer PRIMARY KEY, -- 主键约束
                        name varchar(20)
    );
    

    创建完表后,添加主键

    ALTER TABLE stu1 MODIFY id INTEGER PRIMARY KEY;
    

    删除主键

    ALTER TABLE stu1 DROP PRIMARY KEY;
    

    主键约束——自动增长

    基本概念

    如果某一列是数值类型的,使用auto_increment 可以来完成值得自动增长

    创建

    • 创建表时,添加主键约束,并且指定自增长
    CREATE TABLE stu1(id INTEGER PRIMARY KEY AUTO_INCREMENT,
                                            NAME VARCHAR(20)
    );
    

    自动增长只和上一条记录有关

    • 创建表后添加自增长
    ALTER TABLE stu1 MODIFY id INTEGER AUTO_INCREMENT;
    

    删除自增长

    ALTER TABLE stu1 MODIFY id INTEGER;
    主键无法被删除,但是可以删除自增长属性
    

    外键约束

    语法

    CREATE TABLE 表名(
    ... 常规列创建
    外键列
    constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
    );

    ### 创建表时指定外键
    -- 创建部门表
    create table department(
    id int primary key auto_increment,
    dep_name varchar(20),
    dep_location varchar(20)
    );
    -- 创建员工表(id,name,age,dep_id)
    -- 多方,从表
    create table employee(
    id int primary key auto_increment,
    name varchar(20),
    age int,
    dep_id int, -- 外键对应主表的主键
    CONSTRAINT emp_dept_id_fk FOREIGN KEY (dep_id) REFERENCES department(id) -- 添加外键约束 外键为部门表的id字段
    );
    

    删除外键

    ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

    ALTER TABLE employee DROP FOREIGN KEY emp_dept_id_fk;
    

    创建表之后添加外键

    ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);

    ALTER TABLE employee ADD CONSTRAINT emp_dept_id_fk FOREIGN KEY (dep_id) REFERENCES department(id);
    

    外键可以为NULL 但是不可以为不存在的外键值

    级联操作

    级联操作需要添加外键的时候设置级联操作

    设置级联更新

    ALTER TABLE employee ADD CONSTRAINT emp_dept_id_fk FOREIGN KEY (dep_id) REFERENCES department(id) 
    ON UPDATE CASCADE;
    

    设置级联删除

    ALTER TABLE employee ADD CONSTRAINT emp_dept_id_fk FOREIGN KEY (dep_id) REFERENCES department(id) 
    ON UPDATE CASCADE ON DELETE CASCADE;
    

    设置级联删除后,外键关联的数据被删除后,关联被删除的对应值也会跟着删除

    相关文章

      网友评论

        本文标题:MYSQL——约束

        本文链接:https://www.haomeiwen.com/subject/ahhnqctx.html