在创建表的时候,我们可以给数据指定约束。

常见约束

含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性

添加约束的时机:
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):数据的常见约束相关推荐

  1. mysql数据库入门教程(6):数据的增删改

    前面两篇博文介绍了数据库的查询 mysql数据库入门教程(4):查询讲解大全 mysql数据库入门教程(5):多表操作(连接查询,子查询,分页查询,联合查询) 今天介绍下数据库的增删改. 数据库基本操 ...

  2. mysql数据库入门教程(11):视图讲解大全

    一.视图的介绍 含义:虚拟表,和普通表一样使用 mysql5.1版本出现的新特性,是通过表动态生成的数据 举例说明什么是视图:假设一个年级有10个班,上面有领导来啦,说要检查舞蹈功底,学校为了应付检查 ...

  3. mysql数据库入门教程(5):多表操作(连接查询,子查询,分页查询,联合查询)

    前文介绍了单表查询:mysql数据库入门教程(4):查询讲解大全 今天介绍下多表查询 一.连接查询 含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询 先送上下面所讲用到的sql脚本 h ...

  4. mysql数据库入门教程(8):数据的基本类型

    因为在创建表的时候需要指定数据类型和约束,本文介绍下数据的基本类型 1常见的数据类型 2数值 数值:整形 /* 分类: tinyint.smallint.mediumint.int/integer.b ...

  5. mysql数据库入门教程(1):数据库的相关概念,存储特点,软件安装教程,数据库启动,服务端登录退出

    1为什么使用数据库 使用 内存(数组,集合)存储数据,一断电容易消失数据. 使用文件存储数据,断电不消失.但存储大量数据时难以查找. 数据库:能实现数据持久化,方便查询 2数据库相关概念 DB(dat ...

  6. MySQL数据库入门教程超详细

    点击查看MySQL优化文章 一.写在前面 黑窗口启动mysql服务: net start mysql 登录:mysql -u root -p 备份数据库: mysqldump -uroot -p123 ...

  7. mysql数据库入门教程

    Markdown database notebook Markdown database notebook 1.1. Mysql知识/基础 1.1.1. Msyql的基本知识 1.2. Mysql知识 ...

  8. mysql数据库入门教程(2):常见命令大全,语法规范

    1常见命令 前提是先登录客户端 1查询 创建 删除 -数据库 查询数据库 SHOW DATABASES [LIKE '数据库名']: 不区分大小写 :代表要执行以上语句 语法说明: LIKE是可选项, ...

  9. mysql数据库入门教程(14):函数

    函数 #函数 /* 含义:一组预先编译好的SQL语句的集合,理解成批处理语句 1.提高代码的重用性 2.简化操作 3.减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率 区别: 存储过程:可 ...

最新文章

  1. python学习 day2 (3月2日)
  2. 这份宝典火了,小哥学后加薪30W+
  3. python菜鸟教程h-python菜鸟教程,python好玩又简单的代码
  4. 请你简单介绍一下ArrayList和LinkedList的区别及大数据量情况下的插入效率对比
  5. 360手机卫士界面布局学习过程续(一)
  6. BX、DI、SI、BP总结
  7. 深入解析Node.js setTimeout方法的执行过程
  8. 嘿,运维!你与VXLAN有场约会……
  9. c语言程序设计实验8,C语言程序设计实验八结构体.doc
  10. 【设计模式】 模式PK:命令模式VS策略模式
  11. 在HttpClient请求的时候,返回结果解析时出现java.io.IOException: Attempted read from closed stream. 异常,解决
  12. codevs1380 没有上司的舞会
  13. Oracle J.D.Edwards技术与应用
  14. 数据库系统概论-作业(设计本科生事务管理数据库)
  15. 谷歌浏览器Vue插件
  16. 47.0.概率论与数理统计-两个正态总体均值差的置信区间
  17. nextpolish安装_Polish安装问题
  18. 12.一键导出微信读书的书籍和笔记
  19. 功能性JavaScript中的过滤和链接
  20. Linux创建用户和删除用户

热门文章

  1. iar遇到pcode returned with_表面情场高手,遇到真爱会秒怂的三大星座,射手座上榜...
  2. Spring-注入方式(基于xml方式)
  3. 牛客题霸 NC25 删除有序链表中重复的元素-I
  4. Intellij IDEA——创建MyBatis的Mapper.xml模板
  5. Array K-Coloring
  6. A Walk Through the Forest
  7. 操作系统 第二章【进程管理】【MOOC答案】
  8. Java开发环境变量配置【java1.8安装及环境变量详细配置】【JAVA_HOME系统变量、CLASSPATH系统变量、系统环境变量Path】
  9. MySQL数据库-笔记05【查询练习题*25道(附解析)】
  10. Bash Shell中命令行选项/参数处理