• sql之约束


    专栏目录请点击

    列级约束

    列级约束一般在定义列的时候就直接把约束定义上

    CREATE TABLE studentinfo (
    	id INT PRIMARY KEY, # 主键
    	stuName VARCHAR(20) NOT NULL, # 非空约束
    	gender CHAR(1) CHECK(gender="男" OR gender="女"), # 检查
    	age INT DEFAULT 18, # 默认约束
    	majorId INT REFERENCES magor(id) # 外键
    )
    
    DESC studentinfo;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    通过desc我们可以看到相关的表结构

    在这里插入图片描述
    或者使用SHOW INDEX FROM studentinfo;来查看所有的索引,包括主键、外键、唯一值

    表级约束

    表级约束需要在表的所有的字段下面定义约束,语法如下

    [CONSTRAINT 约束名] 约束类型(字段名)
    
    • 1

    如上的表格,可以也可以用一下定义

    CREATE TABLE studentinfo (
    	id INT, # 主键
    	stuName VARCHAR(20), # 非空约束
    	gender CHAR(1) , # 检查
    	age INT DEFAULT 18, # 默认约束
    	majorId INT  # 外键
    	
    	CONSTRAINT pk PRIMARY KEY(id), # 主键
    	CONSTRAINT uq UNIQUE(stuName), # 唯一
    	CONSTRAINT ck CHECK(gender="男" OR gender="女") # 检查
    	CONSTRAINT fk_student_major FOREIGN KEY(majorId) REFERENCES major(id) # 外键
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    主键与唯一键

    类型保证唯一性是否允许为空数量是否允许组合
    主键最多有一个可以,但不推荐
    唯一键可以有多个可以,但不推荐

    外键

    1. 在从表中设置外键关系
    2. 从表的外键列的类型和主表的关联列额类型要求一致或者兼容,名称无要求
    3. 主表的关联列必须是一个key(一般是主键或者唯一)
    4. 插入数据的时候要先插入主表在插入从表,删除数据的时候,要先删除从表,在删除主表

    标识列

    标识列又称自增长列,可以不用手动插入值,系统提供默认的序列值

    特点

    1. 标识列不一定和主键搭配,但是要求是一个key
    2. 一个表最多有一个标识列
    3. 标识列的类型只能是数值
    4. 标识列可以通过SET auto_increment_incremenet=2;来设置步长

    创建表时

    在创建表的时候设置标识列

    CREATE TABLE studentinfo (
    	id INT PRIMARY KEY AUTO_INCREMENT, # 主键
    	// ...
    )
    
    • 1
    • 2
    • 3
    • 4

    修改表时

    修改

    ALTER TABLE studentinfo MODIFY COLUMN id INT PRIMARY KEY AUTO_INCREMENT;
    
    • 1

    删除

    也相当于修改列

    ALTER TABLE studentinfo MODIFY COLUMN id INT PRIMARY KEY;
    
    • 1

    约束的增删

    修改表时添加

    1. 添加主键约束
    ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name)
    
    • 1

    CONSTRAINT是可以添加,也可以不添加。如果添加的话,表示为约束起名字的意思。

    ALTER TABLE user2 ADD CONSTRAINT pk_user2_id PRIMARY KEY(id);
    
    • 1
    1. 添加唯一约束
    ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type](index_col_name,)
    
    • 1
    ALTER TABLE user2 ADD UNIQUE(username);
    
    • 1
    1. 添加外键约束
    ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,) reference_definition
    
    • 1
    ALTER TABLE user2 ADD foregin KEY(pid) REFERENCES provinces(id);
    
    • 1
    1. 添加默认约束
    ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,) reference_definition
    
    • 1
    ALTER TABLE user2 ALTER age SET DEFAULT 15;
    
    • 1

    修改表时删除

    1. 删除非空约束
    ALTER TABLE studentinfo MODIFY COLUMN stuName VARCHAR(20) NULL;
    
    • 1
    1. 删除默认约束
    ALTER TABLE studentinfo MODIFY COLUMN age INT;
    
    • 1
    1. 删除主键
    ALTER TABLE studentinfo DROP PRIMARY KEY;
    
    • 1
    1. 删除唯一
    ALTER TABLE studentinfo DROP INDEX `name`;
    
    • 1
    1. 删除外键
    ALTER TABLE studentinfo DROP FOREIGN KEY;
    
    • 1
  • 相关阅读:
    STM32CubeMX学习笔记-RTC实时时钟使用
    Mysql(事务)
    01 - Linux系统概要(再论计算机系统)
    Unity 3D脚本语言的类型
    高精度隧道施工人员定位安全管理解决方案
    (五)Ansible-playbook
    SpringCloud之nacos
    机器学习笔记之高斯混合模型(三)EM算法求解高斯混合模型(E步操作)
    富满FM5001H电源IC移动风扇IC
    大数据-玩转数据-Flink恶意登录监控
  • 原文地址:https://blog.csdn.net/youhebuke225/article/details/126963731