您当前的位置: 首页 >  sql

宝哥大数据

暂无认证

  • 2浏览

    0关注

    1029博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

MySQL02--约束

宝哥大数据 发布时间:2016-12-18 11:10:54 ,浏览量:2

一、约束

1、约束的分类: & emsp;约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。

在MySQL中,通常有这几种约束: 这里写图片描述 2、建立含约束的表 为了方便介绍这几种约束, 创建一个数据, 创建相应的表:

#创建sql文件
vi  MySQL-03-01.sql
CREATE DATABASE mysql_shiyan;

use mysql_shiyan;

CREATE TABLE department
(
  dpt_name   CHAR(20) NOT NULL,
  people_num INT(10) DEFAULT '10',
  CONSTRAINT dpt_pk PRIMARY KEY (dpt_name)
 );

CREATE TABLE employee
(
  id      INT(10) PRIMARY KEY,
  name    CHAR(20),
  age     INT(10),
  salary  INT(10) NOT NULL,
  phone   INT(12) NOT NULL,
  in_dpt  CHAR(20) NOT NULL,
  UNIQUE  (phone),
  CONSTRAINT emp_fk FOREIGN KEY (in_dpt) REFERENCES department(dpt_name)
 );

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) REFERENCES department(dpt_name),
  CONSTRAINT proj_pk PRIMARY KEY (proj_num,proj_name)
 );

执行这个文件:

source /home/shiyanlou/SQL3/MySQL-03-01.sql

这里写图片描述

二、主键(PRIMARY KEY)

  主键使用用来约束一行数据,保证数据的惟一性, 主键不可以为空, 不可重复。 这里写图片描述

三、默认值约束(DEFAULT)

  默认约束规定,当有默认约束的列, 插入空值,该怎么办。 如:phone_num有默认约束(DEFAULT), 这里写图片描述 DEFAULT约束只会在使用INSERT语句时体现出来,INSERT语句中,如果被DEFAULT约束的位置没有值,那么这个位置将会被DEFAULT的值填充,如语句:

INSERT INTO department(dpt_name,people_num) VALUES('dpt1',11);
INSERT INTO department(dpt_name) VALUES('dpt2');  #people_num为空

输入命令“SELECT * FROM department;”,可见表中第二行的people_num被DEFAULT的值(10)填充: 这里写图片描述

四、唯一约束(UNIUQE)

  唯一约束,是保证一列的所有值不能重复, 即惟一性。 这里写图片描述

五、外键约束(FOREIGN KEY)

  外检约束, 既能够保证数据完整性, 又能表现表之间的关系。 1、一个表可以有多个外键,每个外键必须REFERENCES(参考)另一个表的主键,被外键约束的列,取值必须在它参考的列中有对应值。 这里写图片描述 2、在INSERT时,如果被外键约束的值没有在参考列中有对应,比如以下命令,参考列(department表的dpt_name)中没有dpt3,则INSERT失败:

INSERT INTO employee VALUES(02,'Jack',30,3500,114114,'dpt3');

3、可见之后将dpt3改为dpt2(department表中有dpt2),则插入成功: 这里写图片描述

六、非空约束(NOT NULL)

非空约束,听名字就能理解,被非空约束的列,在插入值时必须非空。 这里写图片描述 在MySQL中违反非空约束,不会报错,只会有警告,比如以下语句:

INSERT INTO employee(id,name,salary,phone,in_dpt) VALUES(03,'Jim',3400,119119,'dpt2');  #INSERT成功 age为空,因为没有非空约束,表中显示NULL
INSERT INTO employee(id,name,age,phone,in_dpt) VALUES(04,'Bob',23,123456,'dpt1'); #警告 salary被非空约束,值为空,表中显示0

结果如图,出现警告,但还是插入数据成功: 这里写图片描述 此时employee表的内容为: 这里写图片描述

关注
打赏
1587549273
查看更多评论
立即登录/注册

微信扫码登录

0.0416s