MySQL 约束作用:

约束用于限制加入表的数据的类型

MySQL 约束范围:

表约束

列约束(单列约束,多列约束)

MySQL key约束三种

主键约束(PRIMARY KEY)

唯一键值约束(UNIQUE KEY)

外键约束(FOREIGN KEY)

MySQL 其他约束:

非空约束(NOT NULL)

检查约束(CHECK)

默认约束(DEFAULT)

主键约束:

create table actor(f1 int, f2 text, PRIMARY KEY (f1[, f2...]));

create table actor(f1 int, f2 text, constraint xxx PRIMARY KEY (f1[, f2...]));

ALTER TABLE actor ADD PRIMARY KEY (f1[, f2...]);

ALTER TABLE actor ADD constraint xxx PRIMARY KEY (f1[, f2...]);

ALTER TABLE actor drop PRIMARY KEY;

唯一建约束

create table actor(f1 int unique, f2 text);

create table actor(f1 int unique, f2 text);

create table actor(f1 int, f2 text, UNIQUE KEY (f1[, f2...]));

create table actor(f1 int, f2 text, constraint xxx UNIQUE KEY (f1[, f2...]));

ALTER TABLE actor ADD UNIQUE KEY fname_actor (first_name,actor_id);

ALTER TABLE actor ADD constraint xxx UNIQUE KEY fname_actor (first_name,actor_id);

CREATE UNIQUE INDEX fname_actor ON actor (first_name,actor_id);

ALTER TABLE actor drop KEY fname_actor;

(drop index fname_actor on actor; )

唯一键值索引类型不能是 FULLTEXT 或者 SPATIAL 类型

外键约束

create table actor(f1 int, f2 text, FOREIGN KEY (f1[, f2...] REFERENCES ref_table (f1[, f2...));

create table actor(f1 int, f2 text, CONSTRAINT fk_lastname FOREIGN KEY (f1[, f2...] REFERENCES ref_table (f1[, f2...))

ALTER TABLE this_table ADD FOREIGN KEY (field1) REFERENCES ref_table (fieldA);

ALTER TABLE this_table ADD CONSTRAINT fk_lastname FOREIGN KEY (last_name) REFERENCES other_table (last_name);

CREATE FOREIGN key fname_actor ON actor (first_name,actor_id);

ALTER TABLE this_table DROP FOREIGN KEY fk_lastname;

外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作

外键约束语法

[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)

REFERENCES tbl_name (index_col_name, ...)

[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]

[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]

外键约束语句:

CREATE TABLE

ALTER TABLE

外键约束触发事件:

ON DELETE、ON UPDATE表示事件触发限制

外键约束触发限制:

RESTRICT(限制外表中的外键改动)

CASCADE(跟随外键改动)

SET NULL(设空值)

SET DEFAULT(设默认值)

NO ACTION(无动作,默认的)

非空约束|可空约束

create table tablename(f1 int not null, f2 text);

create table tablename(f1 int, f2 text default null);

alter table tablename add column f1 int not null;

alter table tablename add column f2 int default null;

alter table tablename alter column f1 set not null;

alter table tablename alter column f2 set default NULL;

无删除该约束语句

检查约束

create table tablename(f1 int CHECK(f1>10), f2 int);

create table tablename(f1 int, f2 int, CHECK (f1>10 and f2>20));

create table tablename(f1 int, f2 int, CONSTRAINT xxx CHECK (f1>10 and f2>20));

alter table tablename add CHECK (f1>10);

alter table tablename add CONSTRAINT xxx CHECK (f1>10 and f2>20);

alter table tablename drop CHECK xxx;

MySQL中CHECK约束可以使用,但是是无效的,即MySQL并不会去执行检查

默认约束

create table tablename(f1 int DEFAULT xxx [ON UPDATE yyy], f2 text);

alter table tablename alter f1 SET DEFAULT xxx;

alter table tablename alter f1 DROP DEFAULT;

约束个数

MySQL表中只能有一个AUTO_INCREMENT字段,而且这个字段必须被定义为键

MySQL表中能有多个NULL字段

MySQL表中能有多个NOT NULL字段

MySQL表中能有多个DEFAULT NULL字段

MySQL表中能有多个NULL DEFAULT NULL字段

MySQL表中能有多个DEFAULT字段

MySQL表中能有多个CHECK字段

MySQL表中只能有一个PRIMARY KEY字段

MySQL表中能有多个UNIQUE KEY字段

MySQL表中能有多个FOREIGN KEY字段

ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...]

alter_specification:

ADD [COLUMN] create_definition [FIRST | AFTER column_name ]

or ADD INDEX [index_name] (index_col_name,...)

or ADD PRIMARY KEY (index_col_name,...)

or ADD UNIQUE [index_name] (index_col_name,...)

or ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}

or CHANGE [COLUMN] old_col_name create_definition

or MODIFY [COLUMN] create_definition

or DROP [COLUMN] col_name

or DROP PRIMARY KEY

or DROP INDEX index_name

or RENAME [AS] new_tbl_name

or table_options

constraint mysql_MySQL(Constraint)相关推荐

  1. 紫光同创国产FPGA学习之Physical Constraint Editor

    从紫光的参考书拷贝的.很详细.他们要写那么详细,好辛苦啊. 一.       功能介绍 (一)   PCE简介 该文档详细描述了Physical Constraint Editor(以后简称PCE)的 ...

  2. oracle怎样删除关键字,SQL DROP CONSTRAINT 关键字

    SQL DROP CONSTRAINT 关键字 DROP CONSTRAINT DROP CONSTRAINT命令用于删除UNIQUE,PRIMARY KEY,FOREIGN KEY或CHECK约束. ...

  3. 使用@Constraint配合自定义注解开发

    前言 通常我们在开发的过程中,需要对前端传入的数据进行校验,尽管这一步已经在前端进行了一次校验,虽然现在已经有了很多校验的注解,@NotNull.@NotBlank.@URL等一系列注解帮助我们进行校 ...

  4. 基于道路标线的城市环境单目定位

    文章:Monocular Localization in Urban Environments using Road Markings 作者:Yan Lu Jiawei Huang Yi-Ting C ...

  5. OpenStack Heat模板详解

    Heat模板全称为heat orchestration template,简称为HOT. 1 典型Heat模板结构 heat_template_version: 2015-04-30 descript ...

  6. 学术前沿 | 基于深度学习的视觉三维重建研究总结

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 三维重建的意义 三维重建作为环境感知的关键技术之一,可用于自动驾驶 ...

  7. 计算机视觉方向简介 | 深度学习视觉三维重建

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|计算机视觉life 三维重建意义 三维重建作为环境感知的 ...

  8. 基于ceres的后端优化的代码实现

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 来源丨从零开始搭SLAM 作者丨李太白lx 由于g2o天然是进行位姿图优化的, 所以十分契合karto ...

  9. 基于深度学习的视觉三维重建研究总结

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:MoonSmile | 来源:知乎 https://zhuanlan.zhihu.com/p/7 ...

最新文章

  1. Java的知识点22——时间处理相关类、Date时间类(java.util.Date)、DateFormat类和SimpleDateFormat类、Calendar日历类
  2. Java并发编程--ReentrantReadWriteLock
  3. Mybatis源码分析开篇
  4. Bjarne Stroustrup语录[C++经验]
  5. python文件备份_基于 Python 的文件备份
  6. java 找不到或无法加载类_解决Java中找不到或无法加载主类错误
  7. [源码]天骄天下个人网站系统(三个月倾情打造)
  8. Web服务器压力测试工具?
  9. telnet 回显 linux,telnet实现本地回显
  10. JFreeChart常用图表使用
  11. vscode配置运行php项目完整版
  12. mac日历与iphone日历不无法同步问题
  13. 国内外需求管理工具使用感悟!
  14. 【R语言】——VennDiagram包绘制维恩图(保姆级教程)
  15. Android关于网络访问app应用开发相关的异常总结
  16. leetcode 1567 替换所有问号
  17. 360Wonder监控系统,设计和开发经验之谈
  18. 首次实战Vue高仿移动端QQ音乐项目解析
  19. cron表达式的含义解释、写法
  20. 68 文本左右对齐

热门文章

  1. ASP.NET企业开发框架IsLine FrameWork系列之十二--使用Session、Cookie与安全支持
  2. [深度学习TF2] 梯度带(GradientTape)
  3. 数学物理方法pdf_中考状元笔记九科(语文+数学+物理+化学+英语+历史+地理+政治+生物)(高清PDF);...
  4. 王道 —— 操作系统的四个特征
  5. 机器学习之PCA原理
  6. 稳健估计/M估计/最小二乘法
  7. 计算机的数学发展史论文,数学简史论文范文
  8. CMFCPropertySheet的使用及PROPSHEETHEADER结构体介绍
  9. 汇编程序的编辑、编译、连接与执行(附带DOSBox安装)
  10. toj 4611 Repairing a Road