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表的关系的。
  • 相关阅读:
    java实现第二届蓝桥杯四方定理
    java实现第二届蓝桥杯四方定理
    java实现第二届蓝桥杯四方定理
    JPos学习
    Java图片缩略图裁剪水印缩放旋转压缩转格式-Thumbnailator图像处理
    java使用Thumbnailator操作图片
    Python的另一种开发环境--Anaconda中的Spyder
    Java多线程干货系列—(四)volatile关键字
    Java多线程干货系列—(二)synchronized
    Java多线程干货系列—(一)Java多线程基础
  • 原文地址:https://www.cnblogs.com/silentteller/p/11823943.html
Copyright © 2011-2022 走看看