zoukankan      html  css  js  c++  java
  • MYSQL数据库-约束

    MYSQL中,常用的几种约束:

    约束类型:主键默认值唯一外键非空
    关键字: PRIMARY KEY DEFAULT UNIQUE FOREIGN KEY

    NOT NULL

    ===================================================

    主键(PRIMARY KEY)是用于约束表中的一行,作为这一行的标识符,在一张表中通过主键就能准确定位到一行,因此主键十分重要。主键要求这一行的数据不能有重复且不能为空。

    还有一种特殊的主键——复合主键。主键不仅可以是表中的一列,也可以由表中的两列或多列来共同标识。复合主键见project表,proj_num和proj_name共同构成了该表的主键。而前面的constraint表示给约束起个名字,就像这张表里的,复合主键的名字叫做proj_pt。这个不重要,可不起名字

    CREATE TABLE project
    (
    proj_num   INT(10) NOT NULL,
    proj_name  CHAR(20) NOT NULL,
    start_date DATE NOT NULL,
    end_date   DATE DEFAULT '2015-04-01',
    of_dpt     CHAR(20),
    CONSTRAINT proj_pk PRIMARY KEY (proj_num,proj_name)
    );

    ===================================================

    默认值约束(DEFAULT)很简单,不解释了

    ===================================================

    唯一约束(UNIQUE)比较简单,它规定一张表中指定的一列的值必须不能有重复值,即这一列每个值都必须是唯一的。

    如employee表中的phone

    ===================================================

    外键(FOREIGN KEY)

    一个表可以有多个外键,每个外键必须REFERENCES(参考)另一个表的主键

    如employee表有外键约束in_dpt(这个表是员工表,in_dpt字段为员工所在部门,它参考department表(部门表)的主键dpt_name)。

    被外键约束的值必须在参考列中有对应。就比如在这个例子中,员工表中的外键字段只能添加部门表中存在的数据.

    把employee称为从表,department为主表

    默认情况下(声明外键的语句中没有on delete cascade或on delete cascade set null),部门表中的数据如果被员工表中的数据使用了,则部门表的这个数据不可以删除

    而级联删除指的是:删除主表的数据时,关联的从表数据也删除。

    那么就需要在建立外键约束的后面增加on delete cascade或on delete set null, 前者是级联删除,

      后者是将从表的关联列的值设置为null

    ===================================================

    非空约束(NOT NULL),听名字就能理解,被非空约束的列,在插入值时必须非空。

    在MySQL中违反非空约束,不会报错,只会有警告.

     1 CREATE DATABASE mysql_shiyan;
     2 
     3 use mysql_shiyan;
     4 
     5 CREATE TABLE department
     6 (
     7   dpt_name   CHAR(20) NOT NULL,
     8   people_num INT(10) DEFAULT '10',
     9   CONSTRAINT dpt_pk PRIMARY KEY (dpt_name)
    10  );
    11 
    12 CREATE TABLE employee
    13 (
    14   id      INT(10) PRIMARY KEY,
    15   name    CHAR(20),
    16   age     INT(10),
    17   salary  INT(10) NOT NULL,
    18   phone   INT(12) NOT NULL,
    19   in_dpt  CHAR(20) NOT NULL,
    20   UNIQUE  (phone),
    21   CONSTRAINT emp_fk FOREIGN KEY (in_dpt) REFERENCES department(dpt_name) on delete cascade
    22  );
    23  
  • 相关阅读:
    封装aixos拦截器
    vue路由传参的三种基本方式
    vue里的路由钩子
    箭头函数特点
    webstorm激活码
    vue-cli2使用less
    vue-cli2使用rem适配
    XfZGkvBaeh
    python解析excel中图片+提取图片
    python解析谷歌在线表格链接,转化为数组形式,图片转化为链接
  • 原文地址:https://www.cnblogs.com/saolv/p/7193914.html
Copyright © 2011-2022 走看看