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  
  • 相关阅读:
    51 Nod 1086 多重背包问题(单调队列优化)
    51 Nod 1086 多重背包问题(二进制优化)
    51 Nod 1085 01背包问题
    poj 2559 Largest Rectangle(单调栈)
    51 Nod 1089 最长回文子串(Manacher算法)
    51 Nod N的阶乘的长度 (斯特林近似)
    51 Nod 1134 最长递增子序列(经典问题回顾)
    51 Nod 1020 逆序排列
    PCA-主成分分析(Principal components analysis)
    Python中cPickle
  • 原文地址:https://www.cnblogs.com/saolv/p/7193914.html
Copyright © 2011-2022 走看看