• MYSQL约束03约束1


    1、约束概念

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

    2、分类:

      1. 主键约束:primary key

      2. 非空约束:not null

      3. 唯一约束:unique

      4. 外键约束:foreign key

    3、非空约束:not null,某一列的值不能为null

      1. 创建表时添加约束    

       CREATE TABLE stu(
            id INT,
            NAME VARCHAR(20) NOT NULL -- name为非空
       );

      2. 创建表完后,添加非空约束

       ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;

      3. 删除name的非空约束

       ALTER TABLE stu MODIFY NAME VARCHAR(20);

    4、唯一约束:unique,某一列的值不能重复

      1. 注意:唯一约束可以有NULL值,但是只能有1条记录为null。

      2. 在创建表时,添加唯一约束

       CREATE TABLE stu(
          id INT,
          phone_number VARCHAR(20) UNIQUE -- 手机号
       );

      3. 删除唯一约束

       ALTER TABLE stu MODIFY phone_number VARCHAR(20); -- 删除不了唯一约束
       ALTER TABLE stu DROP INDEX phone_number;

      4. 在表创建完后,添加唯一约束

       ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE; -- 如果phone_number列存在重复值则添加唯一约束失败

    5、主键约束:primary key

      1. 注意:

        a. 含义:非空且唯一

        b. 一张表只能由一个字段为主键  

        c. 主键就是表中记录的唯一标识

      2. 在创建表时,添加主键约束

       CREATE TABLE stu(

          id INT PRIMARY KEY , -- 给id添加主键约束
          NAME VARCHAR(20)
       );

      3. 删除主键

       ALTER TABLE stu MODIFY id INT; -- 并不会删除主键
       ALTER TABLE stu DROP PRIMARY KEY;

      4. 创建完表后,添加主键

       ALTER TABLE stu MODIFY id INT PRIMARY KEY; -- 如果id存在重复的值则不能添加主键

      5. 自动增长

       a. 概念:如果某一列是数值类型的,使用 auto_increment 可以来完成值的自动增长。

       b. 在创建表时,添加主键约束,并且完成逐渐自增长

        CREATE TABLE stu(

            id INT PRIMARY KEY AUTO_INCREMENT, -- 给id添加主键约束
            NAME VARCHAR(20)
        );

        注意:

        INSERT INTO stu VALUES (10,'ccc');
        INSERT INTO stu VALUES (NULL,'ccc'); -- id=11,因为id只跟上一条记录的id值有关系,id=上一条记录的id+1

       c. 删除自动增长

        ALTER TABLE stu MODIFY id INT; 
        INSERT INTO stu VALUES (NULL,'ccc'); -- 删除主键后执行报id不能为null
        INSERT INTO stu VALUES (12,'ccc'); -- 插入成功

       d. 添加自动增长

        ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;

      自动增长一般跟主键连到一起去使用,也可以不和主键连到一起使用,只是比较少。

    6、外键约束:foreign key,让表与表产生关系,从而保证数据的正确性。

      1. 在创建表时,可以添加外键

       CREATE TABLE 表名(

          ...
          外键列
          CONSTRAINT 新起的外键名称 FOREIGN KEY (从表外键列名称) REFERENCES 主表名称(主表列名称)
       );

      练习:

    -- 创建部门表(id,dep_name,dep_location) 
    -- 一方,主表 
    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_dep_fk FOREIGN KEY (dep_id) REFERENCES department (id)  -- 需要先创建部门表
    ); 

        注意:添加外键后,删除department表的主键值时若主键值在从表存在时会报异常,同理employee表添加不存在的外键值时也会报异常。

      2. 删除外键

       语法:ALTER TABLE 从表名 DROP FOREIGN KEY 新起的外键名称;   

        ALTER TABLE employee DROP FOREIGN KEY emp_dep_fk;

      3. 创建表后,添加外键

       语法:ALTER TABLE 从表名 ADD CONSTRAINT 新起的外键名称 FOREIGN KEY (从表外键列名称) REFERENCES 主表(主表列名称);

       ALTER TABLE employee ADD CONSTRAINT emp_dep_fk FOREIGN KEY (dep_id) REFERENCES department(id); -- 当employee表中dept_id值含有department中id不存在的数据时添加外键失败

      4. 级联操作

       a. 添加级联操作,级联更新,级联删除

        ALTER TABLE 从表名 ADD CONSTRAINT 新起的外键名称 FOREIGN KEY (从表外键列名称) REFERENCES 主表(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE ;

       b. 分类:

        级联更新:ON UPDATE CASCADE,表示主表主键值更新,对应从表的外键值自动更新

        级联删除:ON DELETE CASCADE,表示主表主键值删除,则对应的从表的外键值所在的记录删除 

      实际的开发中级联操作比较谨慎。

  • 相关阅读:
    《程序员你伤不起》读书总结
    03SpringBoot用JdbcTemplates访问Mysql
    02Spring Boot配置文件详解
    01构建第一个SpringBoot工程
    java基础-04泛型
    java集合-HashSet源码解析
    java集合-HashMap源码解析
    java基础-03基本语法
    java基础-02数据类型
    java基础-01基本概念
  • 原文地址:https://www.cnblogs.com/ajing2018/p/15690784.html
Copyright © 2020-2023  润新知