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表的关系的。
原文地址:https://www.cnblogs.com/silentteller/p/11823943.html