mysql数据库入门教程(9):数据的常见约束
在创建表的时候,我们可以给数据指定约束。
常见约束
含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性
添加约束的时机:
1.创建表时
2.修改表时
约束的添加分类:
列级约束:
六大约束语法上都支持,但外键约束没有效果
表级约束:
除了非空、默认,其他的都支持
CREATE TABLE 表名(
字段名 字段类型 列级约束,
字段名 字段类型,
表级约束
)
一.创建表时添加约束
1.添加列级约束
/*
语法:
直接在字段名和类型后面追加 约束类型即可。
只支持:默认、非空、主键、唯一
*/
USE students;
CREATE TABLE stuinfo(id INT PRIMARY KEY,#主键stuName VARCHAR(20) NOT NULL UNIQUE,#非空gender CHAR(1) CHECK(gender='男' OR gender ='女'),#检查seat INT UNIQUE,#唯一age INT DEFAULT 18,#默认约束majorId INT REFERENCES major(id)#外键 REFERENCES引用);CREATE TABLE major(id INT PRIMARY KEY,#主键majorName VARCHAR(20)
);
找到表,点击改变表
得到
发现外键不起作用
2.添加表级约束
/*
语法:在各个字段的最下面
【constraint 约束名】 约束类型(字段名)
*/
CREATE TABLE stuinfo(id INT,stuname VARCHAR(20),gender CHAR(1),seat INT,age INT,majorid INT,CONSTRAINT pk PRIMARY KEY(id),#主键CONSTRAINT uq UNIQUE(seat),#唯一键CONSTRAINT ck CHECK(gender ='男' OR gender = '女'),#检查CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)#外键);CREATE TABLE major(id INT PRIMARY KEY,majorName VARCHAR(20)
);
pk,uq ck 是约束名 自己随便取, CONSTRAINT 和名字可以不要
PRIMARY KEY(id),#主键UNIQUE(seat),#唯一键CHECK(gender ='男' OR gender = '女'),#检查FOREIGN KEY(majorid) REFERENCES
查看结果:
SHOW INDEX FROM stuinfo;
3.什么时候用列级 什么时候用表级
通用写法
列级约束和表级约束一起写,除外键用表级约束外,其他全写在列级约束上
CREATE TABLE IF NOT EXISTS stuinfo(id INT PRIMARY KEY,stuname VARCHAR(20),sex CHAR(1),age INT DEFAULT 18,seat INT UNIQUE,majorid INT,CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)#外键);
二.主键和唯一的区别
三.外键的特点
外键:
1、要求在从表设置外键关系
2、从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
3、主表的关联列必须是一个key(一般是主键或唯一)
4、插入数据时,先插入主表,再插入从表
删除数据时,先删除从表,再删除主表
四.修改表时添加约束
1、添加列级约束
alter table 表名 modify column 字段名 字段类型 新约束;
modify:修改
2、添加表级约束
alter table 表名 add 【constraint 约束名】 约束类型(字段名) 【外键的引用】;
例子
#1.添加非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;
#2.添加默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
#3.添加主键
#①列级约束
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
#②表级约束
ALTER TABLE stuinfo ADD PRIMARY KEY(id);#4.添加唯一#①列级约束
ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;
#②表级约束
ALTER TABLE stuinfo ADD UNIQUE(seat);#5.添加外键
ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id);
五.修改表时删除约束
#1.删除非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;
#2.删除默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT ;
#3.删除主键
ALTER TABLE stuinfo MODIFY COLUMN id INT;
或者
ALTER TABLE stuinfo DROP PRIMARY KEY;
#4.删除唯一
ALTER TABLE stuinfo MODIFY COLUMN seat INT;或者
ALTER TABLE stuinfo DROP INDEX seat;
#5.删除外键
ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;
电气专业的计算机萌新,写博文不容易。如果你觉得本文对你有用,请点个赞支持下,谢谢。
mysql数据库入门教程(9):数据的常见约束相关推荐
- mysql数据库入门教程(6):数据的增删改
前面两篇博文介绍了数据库的查询 mysql数据库入门教程(4):查询讲解大全 mysql数据库入门教程(5):多表操作(连接查询,子查询,分页查询,联合查询) 今天介绍下数据库的增删改. 数据库基本操 ...
- mysql数据库入门教程(11):视图讲解大全
一.视图的介绍 含义:虚拟表,和普通表一样使用 mysql5.1版本出现的新特性,是通过表动态生成的数据 举例说明什么是视图:假设一个年级有10个班,上面有领导来啦,说要检查舞蹈功底,学校为了应付检查 ...
- mysql数据库入门教程(5):多表操作(连接查询,子查询,分页查询,联合查询)
前文介绍了单表查询:mysql数据库入门教程(4):查询讲解大全 今天介绍下多表查询 一.连接查询 含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询 先送上下面所讲用到的sql脚本 h ...
- mysql数据库入门教程(8):数据的基本类型
因为在创建表的时候需要指定数据类型和约束,本文介绍下数据的基本类型 1常见的数据类型 2数值 数值:整形 /* 分类: tinyint.smallint.mediumint.int/integer.b ...
- mysql数据库入门教程(1):数据库的相关概念,存储特点,软件安装教程,数据库启动,服务端登录退出
1为什么使用数据库 使用 内存(数组,集合)存储数据,一断电容易消失数据. 使用文件存储数据,断电不消失.但存储大量数据时难以查找. 数据库:能实现数据持久化,方便查询 2数据库相关概念 DB(dat ...
- MySQL数据库入门教程超详细
点击查看MySQL优化文章 一.写在前面 黑窗口启动mysql服务: net start mysql 登录:mysql -u root -p 备份数据库: mysqldump -uroot -p123 ...
- mysql数据库入门教程
Markdown database notebook Markdown database notebook 1.1. Mysql知识/基础 1.1.1. Msyql的基本知识 1.2. Mysql知识 ...
- mysql数据库入门教程(2):常见命令大全,语法规范
1常见命令 前提是先登录客户端 1查询 创建 删除 -数据库 查询数据库 SHOW DATABASES [LIKE '数据库名']: 不区分大小写 :代表要执行以上语句 语法说明: LIKE是可选项, ...
- mysql数据库入门教程(14):函数
函数 #函数 /* 含义:一组预先编译好的SQL语句的集合,理解成批处理语句 1.提高代码的重用性 2.简化操作 3.减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率 区别: 存储过程:可 ...
最新文章
- python学习 day2 (3月2日)
- 这份宝典火了,小哥学后加薪30W+
- python菜鸟教程h-python菜鸟教程,python好玩又简单的代码
- 请你简单介绍一下ArrayList和LinkedList的区别及大数据量情况下的插入效率对比
- 360手机卫士界面布局学习过程续(一)
- BX、DI、SI、BP总结
- 深入解析Node.js setTimeout方法的执行过程
- 嘿,运维!你与VXLAN有场约会……
- c语言程序设计实验8,C语言程序设计实验八结构体.doc
- 【设计模式】 模式PK:命令模式VS策略模式
- 在HttpClient请求的时候,返回结果解析时出现java.io.IOException: Attempted read from closed stream. 异常,解决
- codevs1380 没有上司的舞会
- Oracle J.D.Edwards技术与应用
- 数据库系统概论-作业(设计本科生事务管理数据库)
- 谷歌浏览器Vue插件
- 47.0.概率论与数理统计-两个正态总体均值差的置信区间
- nextpolish安装_Polish安装问题
- 12.一键导出微信读书的书籍和笔记
- 功能性JavaScript中的过滤和链接
- Linux创建用户和删除用户
热门文章
- iar遇到pcode returned with_表面情场高手,遇到真爱会秒怂的三大星座,射手座上榜...
- Spring-注入方式(基于xml方式)
- 牛客题霸 NC25 删除有序链表中重复的元素-I
- Intellij IDEA——创建MyBatis的Mapper.xml模板
- Array K-Coloring
- A Walk Through the Forest
- 操作系统 第二章【进程管理】【MOOC答案】
- Java开发环境变量配置【java1.8安装及环境变量详细配置】【JAVA_HOME系统变量、CLASSPATH系统变量、系统环境变量Path】
- MySQL数据库-笔记05【查询练习题*25道(附解析)】
- Bash Shell中命令行选项/参数处理