constraint mysql_MySQL(Constraint)
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)相关推荐
- 紫光同创国产FPGA学习之Physical Constraint Editor
从紫光的参考书拷贝的.很详细.他们要写那么详细,好辛苦啊. 一. 功能介绍 (一) PCE简介 该文档详细描述了Physical Constraint Editor(以后简称PCE)的 ...
- oracle怎样删除关键字,SQL DROP CONSTRAINT 关键字
SQL DROP CONSTRAINT 关键字 DROP CONSTRAINT DROP CONSTRAINT命令用于删除UNIQUE,PRIMARY KEY,FOREIGN KEY或CHECK约束. ...
- 使用@Constraint配合自定义注解开发
前言 通常我们在开发的过程中,需要对前端传入的数据进行校验,尽管这一步已经在前端进行了一次校验,虽然现在已经有了很多校验的注解,@NotNull.@NotBlank.@URL等一系列注解帮助我们进行校 ...
- 基于道路标线的城市环境单目定位
文章:Monocular Localization in Urban Environments using Road Markings 作者:Yan Lu Jiawei Huang Yi-Ting C ...
- OpenStack Heat模板详解
Heat模板全称为heat orchestration template,简称为HOT. 1 典型Heat模板结构 heat_template_version: 2015-04-30 descript ...
- 学术前沿 | 基于深度学习的视觉三维重建研究总结
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 三维重建的意义 三维重建作为环境感知的关键技术之一,可用于自动驾驶 ...
- 计算机视觉方向简介 | 深度学习视觉三维重建
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|计算机视觉life 三维重建意义 三维重建作为环境感知的 ...
- 基于ceres的后端优化的代码实现
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 来源丨从零开始搭SLAM 作者丨李太白lx 由于g2o天然是进行位姿图优化的, 所以十分契合karto ...
- 基于深度学习的视觉三维重建研究总结
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:MoonSmile | 来源:知乎 https://zhuanlan.zhihu.com/p/7 ...
最新文章
- Java的知识点22——时间处理相关类、Date时间类(java.util.Date)、DateFormat类和SimpleDateFormat类、Calendar日历类
- Java并发编程--ReentrantReadWriteLock
- Mybatis源码分析开篇
- Bjarne Stroustrup语录[C++经验]
- python文件备份_基于 Python 的文件备份
- java 找不到或无法加载类_解决Java中找不到或无法加载主类错误
- [源码]天骄天下个人网站系统(三个月倾情打造)
- Web服务器压力测试工具?
- telnet 回显 linux,telnet实现本地回显
- JFreeChart常用图表使用
- vscode配置运行php项目完整版
- mac日历与iphone日历不无法同步问题
- 国内外需求管理工具使用感悟!
- 【R语言】——VennDiagram包绘制维恩图(保姆级教程)
- Android关于网络访问app应用开发相关的异常总结
- leetcode 1567 替换所有问号
- 360Wonder监控系统,设计和开发经验之谈
- 首次实战Vue高仿移动端QQ音乐项目解析
- cron表达式的含义解释、写法
- 68 文本左右对齐
热门文章
- ASP.NET企业开发框架IsLine FrameWork系列之十二--使用Session、Cookie与安全支持
- [深度学习TF2] 梯度带(GradientTape)
- 数学物理方法pdf_中考状元笔记九科(语文+数学+物理+化学+英语+历史+地理+政治+生物)(高清PDF);...
- 王道 —— 操作系统的四个特征
- 机器学习之PCA原理
- 稳健估计/M估计/最小二乘法
- 计算机的数学发展史论文,数学简史论文范文
- CMFCPropertySheet的使用及PROPSHEETHEADER结构体介绍
- 汇编程序的编辑、编译、连接与执行(附带DOSBox安装)
- toj 4611 Repairing a Road