zoukankan      html  css  js  c++  java
  • MySQL 的约束

    • 约束是添加在列上, 用来约束列的!

    1. 主键约束(表中的某行的唯一标识)

    1. 主键的特点:
      • 非空
      • 唯一
      • 被引用
    2. 创建表时, 指定主键的两种方式:
    // 需求: 指定 sid 列为主键列, 即为 sid 列添加主键约束
    // 第一种方式:
        CREATE TABLE stu(
            sid   CHAR(6) PRIMARY KEY,
            sname  VARCHAR(20),
            age    INT,
            gender VARCHAR(10)
        );
    
    // 第二种方式:
        CREATE TABLE stu(
            sid     CHAR(6),
            sname   VARCHAR(20),
            age     INT,
            gender  VARCHAR(10),
            PRIMARY KEY(sid)
        );
    
    1. 修改表时,指定主键: ALTER TABLE stu ADD PRIMARY KEY(sid);
    2. 删除主键: ALTER TABLE stu DROP PRIMARY KEY;

    2. 主键自增长

    1. 因为主键列的特性是: 必须唯一, 不能为空, 所以我们通常会指定主键类型为整型, 然后设置其自动增长,
      这样可以保证在插入数据时, 主键列的唯一和非空特性.
    2. 创建表时,指定主键自增长
        CREATE TABLE stu(
                sid     INT PRIMARY KEY AUTO_INCREMENT,
                sname   VARCHAR(20),
                age     INT,
                gender  VARCHAR(10)
        );
    
    1. 修改表时, 设置主键自增长: ALTER TABLE stu CHANGE sid sid INT AUTO_INCREMENT;
    2. 修改表时, 删除主键自增长: ALTER TABLE stu CHANGE sid sid INT;

    3. 非空约束

    1. 因为某些列不能设置为 NULL 值, 所以可以对列添加非空约束.
    // 示例: 对 sname 列设置非空约束
        CREATE TABLE stu(
                sid     INT PRIMARY KEY AUTO_INCREMENT,
                sname   VARCHAR(20) NOT NULL,
                age     INT,
                gender  VARCHAR(20)
        );
    
    

    4. 唯一约束

    1. 数据库某些值不能设置重复的值, 所以可以对列添加唯一约束.
        // 示例: 对 sname 列设置唯一约束
            CREATE TABLE stu(
                    sid     INT PRIMARY KEY AUTO_INCREMENT,
                    sname   VARCHAR(20) UNIQUE,
                    age     INT,
                    gender  VARCHAR(20)
            );
    

    5. 概念模型

    当我们要完成一个软件体统时, 需要把系统中的实体抽取出来, 形成概念模型.
    例如部门, 员工都是系统中的实体. 概念模型中的实体最终都会称为 JAVA 中的 domain类(对象模型), 数据库中的表(关系模型).

    5.1 实体之间的关系有三种:

    • 1 对多: 例如每个员工都从属一个部门, 而一个部门可以有多个员工, 其中员工是多方, 而部门是一方;
    • 1 对 1 : 例如老公和老婆就是一对一的关系.(不常见)
    • 多对多 : 老师和学生的关系就是多对多, 一个老师可以有多个学生, 一个学生可以有多个老师.

    5.2 对象模型和关系模型

    1. 对象模型(Java 中的类): 可以双向关联, 而且引用的是对象, 而不是一个主键!
    2. 关系模型(数据库中的表): 只能多方引用一方, 而且引用的只是主键, 而不是一整行记录.
    3. java 中的类,使用成员变量来完成关系, 一般都是双向关联!!
    // 实体之间的关系, java 代码体现
        // 多对一关系:
        class Employee{  // 多方关联一方, 即员工关联部门
            ...
            private Department department;
        }
    
        class Department{ // 一方关联多方, 即部门关联员工
            ...
            private List<Employee> employee;
        }
    
        // 多对多
        class Student{ // 学生关联老师
            ...
            private List<Teacher> teacher;
        }
    
        class Teacher{
            ...
            private List<Student> student;
        }
    

    6. 外键约束

    1. 外键特点:
      • 外键必须是另一张表的主键的值(即外键要引用主键)
      • 外键可以重复
      • 外键可以为空
      • 一张表中可以有多个外键!!
    2. 创建表时, 指定外键约束:
    CREATE TABLE emp(
        empno       INT PRIMARY KEY AUTO_INCREMENT,
        ename       VARCHAR(50),
        dno         INT,
        CONSTRAINT  fk_emp_dept  FOREIGN KEY(dno)  REFERENCES dept(deptno)
    )
    
    // fk_emp_dept : 约束名称
    //            fk, 表示 foreign key;  
    //            emp, 表示从表, 即多方;  
    //            dept, 表示主表, 即一方
    // dno: 表示本表中作为外键的列
    // dept(deptno): 表示引用的是 dept表的 deptno列
    
    1. 修改表时, 添加外键约束:
      ALTER TABLE emp ADD CONSTRAINT fk_emp_dept FOREIGN KEY(dno) REFERENCES dept(deptno);
    2. 修改表时, 删除外键约束:
      ALTER TABLE emp DROP FOREIGN KEY fk_emp_deptno;

    7. 数据库中一对一关系

    // 在表中建立一对一关系比较特殊, 需要让从表的主键, 也是外键.
        CREATE TABLE husband(
            hid     INT PRIMARY KEY,
            ...
        );
    
        CREATE TABLE wife(
            wid     INT PRIMARY KEY,
            ...
            CONSTRAINT fk_wife_hid FOREIGN KEY(wid) REFERENCES husband(hid)
        );
    
        /*
         *  其中, wife 表的 wid 键既是主键,又是相对 husband 表的外键!
         *  husband.hid 是主键, 不能重复!
         *  wife.wid 是主键,不能重复, 又是外键, 必须来自 husband.hid.
         *  所以如果 wife 表中有一条记录的 wid 为 1, 那么 wife 表中的其他记录的 wid 就不能再是1了,因为它是主键.
         *  同时, 在 husband.hid 中必须存在 1 这个值, 因为 wid 是外键, 这就完成了一对一关系.
         */
    

    8. 数据库中多对多关系

    1. 在表中建立多对多关系需要使用中间表, 即需要三张表, 在中间表中使用两个外键, 分别引用其他两个表的主键.
    CREATE TABLE student( // 学生表
        sid     INT PRIMARY KEY,
        ...
    );
    
    CREATE TABLE teacher( // 教师表
        tid     INT PRIMARY KEY,
        ...
    );
    
    CREATE TABLE stu_tea(
        sid     INT,
        tid     INT,
        CONSTRAINT fk_student FOREIGN KEY(sid) REFERENCES student(sid),
        CONSTRAINT fk_teacher FOREIGN KEY(tid) REFERENCES teacher(tid)
    );
    
    // 这时, 在 stu_tea 这个中间表中的每条记录都是说明 student 和 teacher 表的关系.
    // 例如, stu_tea 表中的记录: sid 为100, tid 为 201, 说明编号为 100 的学生有一个编号为 201 的老师.
    
    

    参考资料:

  • 相关阅读:
    IOS中浏览器修改document.title不起作用
    he content must be served over HTTPS 解决方案
    Nuxt开发经验分享
    Nuxt插件-axios封装
    requestAnimationFrame & 定时器
    Vue 组件中data为什么是函数
    js-鸡兔同笼方程
    css技巧-清明追思-网站置灰
    详细分享TortoiseGit配置密钥的方法
    js
  • 原文地址:https://www.cnblogs.com/linkworld/p/7617243.html
Copyright © 2011-2022 走看看