zoukankan      html  css  js  c++  java
  • MySQL学习笔记7——约束

    约束

    约束
    *约束是添加在列上的,用来约束列的!
    
    1.主键约束(唯一标识)
    
     ***非空***
     ***唯一***
     ***被引用***
     
     *当表的某一列被指定为主键后,该列就不能为空,不能有重复值出现。
     *创建表时指定主键的两种方式:
      >CREATE TABLE stu(
        sid    CHAR(6) PRIMARY KEY,
        sname VARCHAR(20),
        age INT,
        gender VARCHAR(10)
       );
      指定sid列为主键列,即为sid列添加主键约束
      >CREATE TABLE stu(
        sid    CHAR(6),
        sname VARCHAR(20),
        age INT,
        gender VARCHAR(10),
        PRIMARY KEY(sid)
       );
     *修改表时指定主键:ALTER TABLE stu ADD PRIMARY KEY(sid);
     *删除主键:ALTER TABLE stu DROP PRIMARY KEY;
    
    2.主键自增长
    
     *因为主键列的特性是:必须唯一、不能为空,所以我们通常会指定主键列为整型,然后设置其自动增长,这样可以保证在插入数据时主键列的唯一和非空特性。
     *创建表时指定主键自增长
      >CREATE TABLE stu(
        sid    INT PRIMARY KEY AUTO_INCREMENT,
        sname VARCHAR(20),
        age INT,
        gender VARCHAR(10)
       );
     *修改表时设置主键自增长:ALTER TABLE stu CHANGE sid sid INT AUTO_INCREMENT;
     *修改表时删除主键自增长:ALTER TABLE stu CHANGE sid sid INT;
    
    3.非空约束
    
     *因为某些列不能设置为NULL值,所以可以对列添加非空约束。
     *例如:
      >CREATE TABLE stu(
        sid    INT PRIMARY KEY AUTO_INCREMENT,
        sname VARCHAR(20) NOT NULL,
        age INT,
        gender VARCHAR(10)
      );
     *NOT NULL是对sname列设置了非空约束
    
    4.唯一约束
    
     *数据库中的某些列不能设置重复的值,所以可以对列添加唯一约束。
     *例如:
      >CREATE TABLE stu(
        sid    INT PRIMARY KEY AUTO_INCREMENT,
        sname VARCHAR(20) NOT NULL UNIQUE,
        age INT,
        gender VARCHAR(10)
      );
     *UNIQUE是对sname列设置了唯一约束
     
    5.概念模型
    
     当我们要完成一个软件系统时,需要把系统中的实体抽取出来,形成概念模型。
     例如部门、员工都是系统中的实体,概念模型中的实体最终会成为Java中的类、数据库中的表。
     实体之间还存在着关系,关系有三种:
     *1对多:例如每个员工都从属一个部门,而一个部门可以有多个员工,其中员工是多,部门是1。
     *1对1:例如老公和老婆是一对一的关系,一个老公和只能有一个老婆,一个老婆只能有一个老公。
     *多对多:老师和学生的关系就是多对多,一个老师可以有多个学生,一个学生可以有多个老师。
     
    6.外键约束
    
     *外键必须是另一个表的主键的值
     *外键可以重复
     *外键可以为空
     *一张表可以有多个外键!
      >CREATE TABLE emp(
        empno INT PRIMARY KEY AUTO_INCREMENT,
        ename VARCHAR(50),
        dno INT,
        CONSTRAINT id_fk FOREIGN KEY(dno) REFERENCES dept(deptno)
      );
     id_fk是外键约束名,FOREIGN KEY(dno)表示这张表的外键是dno,REFERENCES dept(deptno)表示dept表中deptno是主键。
     也可以在创建好两张表后再添加外键约束
     ALTER TABLE emp ADD CONSTRAINT id_fk FOREIGN KEY(dno) REFERENCES dept(deptno);
     
    7.数据库一对一关系
     在表中建立一对一关系比较特殊,需要让其中一张表的主键,既是主键又是外键。
     CREATE TABLE husband(
        hid INT PRIMARY KEY,
        ...
     );
     CREATE TABLE wife(
        wid INT PRIMARY KEY,
        ...
        CONSTRAINT fk_wife_wid FOREIGN KEY(wid) REFERENCES husband(hid)
     );
     其中wife表wid既是主键,又是相对husband表的外键。
     所以如果在wife表中有一条记录wid为1,那么wife表中的其他记录的wid就不能再是1了,因为wid是主键。
     同时husband.hid中必须存在1这个值,因为wid是外键,这样就完成了1对1的关系了。
    
    8.数据库多对多关系
     在表中建立多对多关系需要使用中间表,即需要三张表,在中间表中使用两个外键,分别引用两个表的主键。
      >CREATE TABLE student(
        sid int PRIMARY KEY,
        ...
      );
       CREATE TABLE teacher(
        tid int PRIMARY KEY,
        ...
      );
       CREATE TABLE stu_tea(
        sid INT,
        tid INT,
        CONSTRAINT fk_stu_tea_sid FOREIGN KEY(sid) REFERENCES student(sid),
        CONSTRAINT fk_stu_tea_tid FOREIGN KEY(tid) REFERENCES student(tid)
      );
     这时在stu_tea这个中间表中的每条记录都是来说明student和teacher表的关系的。
  • 相关阅读:
    FJNU 1151 Fat Brother And Geometry(胖哥与几何)
    FJNU 1157 Fat Brother’s ruozhi magic(胖哥的弱智术)
    FJNU 1159 Fat Brother’s new way(胖哥的新姿势)
    HDU 3549 Flow Problem(最大流)
    HDU 1005 Number Sequence(数列)
    Tickets(基础DP)
    免费馅饼(基础DP)
    Super Jumping! Jumping! Jumping!(基础DP)
    Ignatius and the Princess IV(基础DP)
    Keywords Search(AC自动机)
  • 原文地址:https://www.cnblogs.com/silentteller/p/11823943.html
Copyright © 2011-2022 走看看