• MYSQL学习之——约束


    MYSQL学习之——约束

    这个东西看起来好像是新开的一章,没有见过,但是前面的那个

    CREATE TABLE employee(
    	字段1 value1 comment1 约束1,
    	字段2 value2 comment2 约束2,
    	...
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5

    看到这个没有,创建表的时候就可以给字段添加约束,那么字段有哪些约束呢?

    约束说起来就是让这个字段有什么能力,或者不让这个字段有什么能力。先一一介绍再写成表格。

    1.限制值的约束
    非空约束

    	NOT NULL
    
    • 1

    如果一个字段的约束是NOT NULL ,那就不能有NULL值(突然想起来HashTable不能有null的key和value,但hashmap既可以有null的key也可以有null的value)

    唯一约束

    UNIQUE
    
    • 1

    一个字段一旦被这个UNIQUE给束缚住了,完了,每个值只能出现一次(底层不会使用set实现的吧!当然hashset是基于hashmap实现的)

    这个字段常用于身份证啊,唯一识别码之类的。

    默认约束

    DEFAULT
    
    • 1

    如果字段被默认约束给约束了,那么其中为null的值都会被自动填充为默认值。
    比如:employee表有3个字段(字段1,字段2,字段3(DEFAULT))

    INSERT INTO employ (字段1,字段2)然后(值1,值2);
    
    • 1

    插入一条数据的时候没有给字段3赋值,但因为字段3被默认约束限制,那么其会填充上默认值而不是 NULL

    自动增长

    AUTO_INCREMENT
    
    • 1

    就是如果使用这个约束,那么其中的值会自增加,比如说id,张三的数据进来id是1,李四的数据进来id就是2;

    主键约束

    PRIMARY KEY
    
    • 1

    主键是一行数据的非空表示,非空且唯一。
    ps:一般只能有一个主键哈。

    外键约束

    FOREIGN KEY
    
    • 1

    这个外键约束是涉及到多表查询的,通过外键建立起两张表的连接。
    如:
    表BOOk(id,单价,类型)
    表BORROW(借书人,BOOK_id,借书时间)
    我们就可以吧BOOK表中的id的约束设置为外键

    ALTER TABLE 
    	表名
    ADD CONSTRAINT
    	外键名 
    FOREIGN KEY
    	外键添加在哪一个字段上
    REFERENCES
    	主表(主表列名)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    BOOK这个例子就是

    ALTER TABLE
    	BOOK
    ADD CONSTRAINT
    	borrow_id
    FOREIGN KEY
    	id
    REFERENCE
    	BORROW(BOOK_id)
    	;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    检查约束

    CHECK
    
    • 1

    这个是什么约束?保证字段值满足某一个条件,好像目前没有用到呢,先这样来看!

    添加约束

    ALTER TABLE 表名 ADD CONSTRAIN 字段名 字段类型 约束;
    
    • 1

    修改约束是怎么说

    	ALTER TABLE EMPLOYEE ADD CONSTRANIT 字段名 新字段类型 COMMENT 约束;
    	eg:
    			给employee表中的id添加主键约束
    			ALTER TABLE employee MODIFY id char(20) primary key;
    
    • 1
    • 2
    • 3
    • 4

    删除约束

    ALTER TABLE 表名 DROP  约束;
    eg:
    	ALTER TABLE 
    		employee
    	DROP
    		PRIMARY KEY;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    外键的特殊性

    1.创表添加外键
    CREATE TABLE 表名(
    字段1 字段类型 约束,
    字段2 字段类型 约束,
    …【这里没有,哦】
    CONSTRAINT 外键名 FOREIGN KEY (字段1) REFERENCES 主表(字段)
    );
    PS:子表的外键一定要加到外边的主键上面去,否则不能添加主键。

    CREATE TABLE Vendors (
    	-- 供应商ID:主键列,自增长
    	vend_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '供应商ID',
    	-- 供应商名:可变字符,非空
    	vend_name VARCHAR (30) NOT NULL COMMENT '供应商名',
    	-- 供应商地址
    	vend_address VARCHAR (100) NOT NULL COMMENT '地址',
    	-- 供应商城市
    	vend_city VARCHAR (20) NOT NULL COMMENT '城市',
    	-- 供应商州
    	vend_state VARCHAR (20) NOT NULL COMMENT '州',
    	-- 供应商邮编
    	vend_zip VARCHAR (20) NOT NULL COMMENT '邮编',
    	-- 供应商国家
    	vend_country VARCHAR (20) NOT NULL COMMENT '国家'
    );
    
    
    -- 产品目录表
    CREATE TABLE Products (
    	-- 产品ID:主键列,自增长
    	prod_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    	-- 供应商ID:外键
    	vend_id INT NOT NULL COMMENT '供应商ID',
    	-- 产品名
    	prod_name VARCHAR (30) NOT NULL COMMENT '产品名',
    	-- 产品价格
    	prod_price DOUBLE NOT NULL COMMENT '产品价格',
    	-- 产品描述
    	prod_desc VARCHAR (100) COMMENT '产品描述',
    	FOREIGN KEY (vend_id) REFERENCES Vendors (vend_id)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    2. 平常添加外键

    ALTER TABLE 表名
    ADD CONSTRAINT
    	外键名
    FOREIGN KEY
    	字段名
    REFERENCES
    	主表(字段名)
    	;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3.删除字段名

    ALTER TABLE 表名
    DROP FOREIGN KEY 
    	外键名
    	;
    
    • 1
    • 2
    • 3
    • 4

    4.添加行为约束
    这个行为约束就是,当主表删除或更新数据的时候,子表如果没有修改就不能更新NO ACTION&RESTRICT/或者也更新CASCADE/或者设为NULL

    PS:常用的约束就是上面的这些,多个约束之间可以用空格隔开。

  • 相关阅读:
    Hive分区表和分桶表
    c语言基础
    【owt-server】m88分支和m59-server
    Leetcode 71. 简化路径
    前端周刊第三十期
    用FPGA CORDIC IP核实现信号的相位检测,计算相位角
    国家开放大学 平时作业训练题
    适合新手自学的网络安全基础技能“蓝宝书”:《CTF那些事儿》
    第10讲:深入理解 AQS 和 CAS 原理
    【Axure高保真原型】曲线图组和堆叠曲线图
  • 原文地址:https://blog.csdn.net/qq_42477169/article/details/132740153