ENUM约束

--使用ENUM来限制用户输入
CREATE TABLE Student
(
StudentID INT AUTO_INCREMENT PRIMARY KEY,
ClassID INT,
StudentName VARCHAR(200),
Sex ENUM('Male','Female')
)

默认值约束

--创建表时指定默认值
CREATE TABLE Student
(
StudentID INT AUTO_INCREMENT PRIMARY KEY,
ClassID INT,
StudentName VARCHAR(200) DEFAULT ''
) --创建表后再创建默认约束
CREATE TABLE Student
(
StudentID INT AUTO_INCREMENT PRIMARY KEY,
ClassID INT,
StudentName VARCHAR(200)
) ALTER TABLE Student
ALTER COLUMN StudentName SET DEFAULT '' --查看默认约束
SHOW CREATE TABLE Student;

外键约束

MYSQL 对外键约束只支持即时检查(immediate check), 与SQL SERVER 相同。

ORACLE 对外键约束支持延时检查(deferred check)。

在创建外键约束时,MYSQL 默认为外键约束列添加索引,以避免外键约束带来的死锁问题。

--创建被引用的班级表
CREATE TABLE Class
(
ClassID INT AUTO_INCREMENT PRIMARY KEY,
ClassName VARCHAR(200)
); --创建学生表时外键引用班级表
CREATE TABLE Student
(
StudentID INT AUTO_INCREMENT PRIMARY KEY,
ClassID INT,
StudentName VARCHAR(200),
FOREIGN KEY(ClassID) REFERENCES Class(ClassID)
) --创建学生表,然后再增加外键
CREATE TABLE Student
(
StudentID INT AUTO_INCREMENT PRIMARY KEY,
ClassID INT,
StudentName VARCHAR(200),
);
ALTER TABLE Student ADD FOREIGN KEY(ClassID) REFERENCES Class(ClassID); --查看外键
SELECT *
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA='testdb1'
AND TABLE_NAME='Student' \G *************************** 1. row ***************************
CONSTRAINT_CATALOG: def
CONSTRAINT_SCHEMA: testdb1
CONSTRAINT_NAME: student_ibfk_1
UNIQUE_CONSTRAINT_CATALOG: def
UNIQUE_CONSTRAINT_SCHEMA: testdb1
UNIQUE_CONSTRAINT_NAME: PRIMARY
MATCH_OPTION: NONE
UPDATE_RULE: RESTRICT
DELETE_RULE: RESTRICT
TABLE_NAME: student
REFERENCED_TABLE_NAME: class

在数据导入过程中,为提高导入效率,可以先禁用外键检查,导入完后再开启。

--禁用外键检查
SET @@foreign_key_checks=0; --启用外键检查
SET @@foreign_key_checks=1;

唯一约束

--创建学生表时外键引用班级表
CREATE TABLE Student
(
StudentID INT AUTO_INCREMENT PRIMARY KEY,
ClassID INT,
StudentName VARCHAR(200),
UNIQUE KEY (StudentName)
) --创建表后再增加唯一约束
CREATE TABLE Student
(
StudentID INT AUTO_INCREMENT PRIMARY KEY,
ClassID INT,
StudentName VARCHAR(200)
)
ALTER TABLE Student ADD UNIQUE KEY(StudentName); --查看约束
SELECT *
FROM information_schema.TABLE_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA='testdb1'
AND TABLE_NAME='Student' \G *************************** 1. row ***************************
CONSTRAINT_CATALOG: def
CONSTRAINT_SCHEMA: testdb1
CONSTRAINT_NAME: PRIMARY
TABLE_SCHEMA: testdb1
TABLE_NAME: student
CONSTRAINT_TYPE: PRIMARY KEY
*************************** 2. row ***************************
CONSTRAINT_CATALOG: def
CONSTRAINT_SCHEMA: testdb1
CONSTRAINT_NAME: StudentName
TABLE_SCHEMA: testdb1
TABLE_NAME: student
CONSTRAINT_TYPE: UNIQUE

MySQL Others--约束(Constraint)示例的更多相关文章

  1. MySql常见约束

    含义:一种限制,用于限制表中的数据,为了保证表中数据的准确性和可靠性. 分类:六大约束 1.NOT NULL :非空,用于保证该字段的值不能为空.例如学生表的学生姓名及学号等等. 2.DEFAULT: ...

  2. 【MySQL】MySQL的约束

    在开始之前,笔者介绍一下笔者使用的数据库版本为5.7.所有的关系型数据库都支持对数据表使用约束,通过约束可以更好的保证数据表里数据的完整性.约束是在表上强制执行的数据校验,约束主要用于保证数据库里数据 ...

  3. mysql的约束

    SQL 约束 约束用于限制加入表的数据的类型. 可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句). (1)NOT NULL约 ...

  4. [转]mysql的约束

    转自:http://blog.csdn.net/kqygww/article/details/8882990 MySQL中约束保存在information_schema数据库的table_constr ...

  5. MySQL学习——约束

    MySQL学习——约束 摘要:本文主要学习了数据库的约束. primary key(主键) 定义 主键约束是一个列或者多个列,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键,通过它可以强制 ...

  6. mysql DEFAULT约束 语法

    mysql DEFAULT约束 语法 作用:用于向列中插入默认值. 说明:如果没有规定其他的值,那么会将默认值添加到所有的新记录.直线电机 mysql DEFAULT约束 示例 //在 "P ...

  7. mysql CHECK约束 语法

    mysql CHECK约束 语法 作用:CHECK 约束用于限制列中的值的范围. 直线电机 说明:如果对单个列定义 CHECK 约束,那么该列只允许特定的值.如果对一个表定义 CHECK 约束,那么此 ...

  8. mysql UNIQUE约束 语法

    mysql UNIQUE约束 语法 作用:UNIQUE 约束唯一标识数据库表中的每条记录. 江苏大理石平台 说明:UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证.PRI ...

  9. MySQL进阶:约束,多表设计,多表查询,视图,数据库备份与还原

    MySQL进阶 知识点梳理 一.约束 1. 外键约束 为什么要有外键约束 例如:一个user表,一个orderlist 如果现在想要直接删除id为1的张三,但是orderlist里还有用户id为1的订 ...

随机推荐

  1. Centos7.6使用yum安装PHP7.2

    Centos7.6使用yum安装PHP7.2 1.安装源 安装php72w,是需要配置额外的yum源地址的,否则会报错不能找到相关软件包. php高版本的yum源地址,有两部分,其中一部分是epel- ...

  2. base64加密后无法解密

    记录一个问题: 使用java,或者命令行 base64 命令加密图片文件成加密数据后无法还原成图片 深入:使用java base64工具(sun base64或bouncycastle)加密的数据替换 ...

  3. C++文件fstream的操作

    用到的关于输入输出fstream流相关的知识 1.两个主要函数:read( )函数 从流中读取字符串的成员函数read 该成员函数一般形式是:read(char* pch, int nCount) 从 ...

  4. java CountDownLatch报错java.lang.IllegalMonitorStateException: null

    笔者使用websocket进行通信,服务器异步返回.websocket服务器又异步调用其他websocket,也是异步访问. 由于无法预测服务器调用第三方websocket什么时候调用结束,使用了Co ...

  5. django:将query-set类型转为json类型

    import json data = json.dumps(list(my_table.objects.all().values())) return HttpResponse(data)

  6. 读Secrets of the JavaScript Ninja(一)函数

    理解JavaScript为什么应该作为函数式 在JavaScript中,函数是程序执行过程中的主要模块单元 函数是第一类对象 通过字面量创建 function ninjaFunction(){} 赋值 ...

  7. 使用Skywalking分布式链路追踪系统

    使用Skywalking分布式链路追踪系统 https://www.cnblogs.com/sunyuliang/p/11424848.html 当我们用很多服务时,各个服务间的调用关系是怎么样的?各 ...

  8. 前端与算法 leetcode 28.实现 strStr()

    # 前端与算法 leetcode 28.实现 strStr() 题目描述 28.移除元素 概要 这道题的意义是实现一个api,不是调api,尽管很多时候api的速度比我们写的快(今天这个我们可以做到和 ...

  9. Pycharm2018中DataBase的使用

    1.点击右侧边栏的DataBase,在出现的Database窗口下点击绿色小加号,选择Data Source,选择需要的数据库类型,此处选择Sqlite 2.配置数据库连接信息 3.选择schema, ...

  10. SpringBoot+Vue前后端分离项目,maven package自动打包整合

    起因:看过Dubbo管控台的都知道,人家是个前后端分离的项目,可是一条打包命令能让两个项目整合在一起,我早想这样玩玩了. 1. 建立个maven父项目 next 这个作为父工程,next Finish ...