SQL——SQL约束
SQL约束 - 用于限制加入表的数据的类型
可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)。
NOT NULL -- 约束强制列不接受 NULL 值。
UNIQUE -- 约束唯一标识数据库表中的每条记录。每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
MySQL:
CREATE TABLE tableName
(
Id int NOT NULL,
UNIQUE (Id)
)
SQLServer/Oracle:
CREATE TABLE tableName
(
Id int NOT NULL UNIQUE
)
需命名的UNIQUE约束:MySql/SQLServer/Oracle:
CREATE TABLE tableName
(
Id int NOT NULL,
pwd varchar(255) NOT NULL,
CONSTRAINT uniqueName UNIQUE (Id,pwd)
)
表已创建:ALTER TABLE tableName ADD UNIQUE (Id)
需命名:ALTER TABLE tableName ADD CONSTRAINT uniqueName UNIQUE (Id,pwd)
撤销 UNIQUE 约束
MySQL:
ALTER TABLE tableName DROP INDEX uniqueName
SQLServer/Oracle:
ALTER TABLE tableName DROP CONSTRAINT uniqueName
PRIMARY KEY -- 主键约束,约束唯一标识数据库表中的每条记录。主键必须包含唯一的值。主键列不能包含 NULL 值。每个表都应该有一个主键,并且每个表只能有一个主键。
MySQL:
CREATE TABLE tableName
(
Id int NOT NULL,
PRIMARY KEY (Id)
)
SQLServer/Oracle:
CREATE TABLE tableName
(
Id int NOT NULL PRIMARY KEY
)
命名PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束:
MySQL/SQLServer:
CREATE TABLE tableName
(
Id int NOT NULL,
pwd varchar(255) NOT NULL,
CONSTRAINT pkName PRIMARY KEY (Id,pwd)
)
表已创建:ALTER TABLE tableName ADD PRIMARY KEY (Id)
命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束:
ALTER TABLE tableName ADD CONSTRAINT pkName PRIMARY KEY (Id,pwd)
注释:如果使用 ALTER TABLE 语句添加主键,必须把主键列声明为不包含 NULL 值(在表首次创建时)。
撤销 PRIMARY KEY 约束
如需撤销 PRIMARY KEY 约束,请使用下面的 SQL:
MySQL:
ALTER TABLE tableName DROP PRIMARY KEY
SQL Server / Oracle:
ALTER TABLE tableName DROP CONSTRAINT pkName
FOREIGN KEY -- 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。用于预防破坏表之间连接的动作。必须是指向的那个表中的值之一。
MySQL:
CREATE TABLE tableName1
(
Id1 int NOT NULL,
Id2 int,
PRIMARY KEY (Id1),
FOREIGN KEY (Id2) REFERENCES tableName2(Id2)
)
SQL Server/Oracle:
CREATE TABLE tableName1
(
Id1 int NOT NULL PRIMARY KEY,
Id2 int FOREIGN KEY REFERENCES tableName2(Id2)
)
命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束:
CREATE TABLE tableName1
(
Id1 int NOT NULL,
Id2 int,
PRIMARY KEY (Id1),
CONSTRAINT fkName FOREIGN KEY (Id2) REFERENCES tableName2(Id2)
)
表已创建:
ALTER TABLE tableName1 ADD FOREIGN KEY (Id2) REFERENCES tableName2(Id2)
命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束:
ALTER TABLE tableName1 ADD CONSTRAINT fkName FOREIGN KEY (Id2) REFERENCES tableName2(Id2)
撤销 FOREIGN KEY 约束
MySQL: ALTER TABLE tableName1 DROP FOREIGN KEY fkName
SQLServer/Oracle: ALTER TABLE tableName1 DROP CONSTRAINT fkName
CHECK -- 约束用于限制列中的值的范围。对单个列定义 CHECK 约束,该列只允许特定的值。对一个表定义 CHECK 约束,此约束会在特定的列中对值进行限制。
以下CHECK 约束规定 "col1" 列必须只包含大于 0 的整数。
My SQL:
CREATE TABLE tableName
(
col1 int NOT NULL,
CHECK (col1>0)
)
SQL Server/Oracle:
CREATE TABLE tableName
(
col1 int NOT NULL CHECK (col1>0)
)
命名 CHECK 约束,以及为多个列定义 CHECK 约束:
CREATE TABLE tableName
(
col1 int NOT NULL,
col2 varchar(255),
CONSTRAINT chkName CHECK (col1>0 AND col2='Sandnes')
)
表已存在:ALTER TABLE tableName ADD CHECK (col1>0)
命名 CHECK 约束,以及为多个列定义 CHECK 约束:
ALTER TABLE tableName ADD CONSTRAINT chkName CHECK (col1>0 AND col2='Sandnes')
撤销 CHECK 约束
SQLServer/Oracle: ALTER TABLE tableName DROP CONSTRAINT chkName
MySQL: ALTER TABLE tableName DROP CHECK chkName
DEFAULT -- 用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录。
CREATE TABLE tableName
(
col varchar(255) DEFAULT 'Sandnes'
)
通过使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值:
CREATE TABLE Orders
(
OrderDate date DEFAULT GETDATE()
)
表已存在:
MySQL: ALTER TABLE tableName ALTER col SET DEFAULT 'SANDNES'
SQL Server/Oracle:ALTER TABLE tableName ALTER COLUMN col SET DEFAULT 'SANDNES'
撤销 DEFAULT 约束:
MySQL: ALTER TABLE tableName ALTER col DROP DEFAULT
SQL Server/Oracle:ALTER TABLE tableName ALTER COLUMN col DROP DEFAULT
SQL——SQL约束的更多相关文章
- SQL PRIMARY KEY 约束\SQL FOREIGN KEY 约束\SQL CHECK 约束
SQL PRIMARY KEY 约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录. 主键必须包含唯一的值. 主键列不能包含 NULL 值. 每个表都应该有一个主键,并且每个表只能有一个主 ...
- SQL CREATE TABLE 语句\SQL 约束 (Constraints)\SQL NOT NULL 约束\SQL UNIQUE 约束
CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表. SQL CREATE TABLE 语法 CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据 ...
- 扩展Exception,增加判断Exception是否为SQL引用约束异常方法!
在设计数据表时,如果将某些列设置为关联其它表的外键,那么如果对其进行增加.修改操作时,其关联表若没有相匹配的记录则报错,或者在对其关联表进行删除时,也会报错,这就是外键约束的作用,当然除了外键还有许多 ...
- 基础篇 - SQL 的约束
基础篇 - SQL 的约束 约束 一.实验简介 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性.唯一性.本节实验将在实践操作中熟悉 MySQL 中的几种约束. 二 ...
- SQL CHECK 约束
SQL CHECK 约束 CHECK 约束用于限制列中的值的范围. 如果对单个列定义 CHECK 约束,那么该列只允许特定的值. 如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限 ...
- SQL UNIQUE 约束
SQL UNIQUE 约束 UNIQUE 约束唯一标识数据库表中的每条记录. UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证. PRIMARY KEY 拥有自动定义的 ...
- SQL数据库约束、默认和规则
数据的完整性 实体完整性 又称为行完整性,即数据库中的所有行都具有一个非空且没有重复的主键值 MSSQL中通过唯一索引.PRIMARY KEY约束.UNIQUE约束.INDENTITY属性等来强制主键 ...
- SQL Server - 约束 CONSTRAINT
总结 约束放置在表中,以下五种约束: NOT NULL 非空约束C 指定的列不允许为空值 UNIQUE 唯一约束U 指定的列中没有重复值,或该表中每一个值或者每一组值都将是唯一的 PRIMARY KE ...
- MySQL笔记(五)MySQL 角色与SQL CHECK约束
MySQL ROLE MySQL 8.0 Reference Manual / Security / MySQL User Account Management / Using Roles ...
- Sql Server约束的学习二(检查约束、默认约束、禁用约束)
接上一篇的Sql Server约束学习一(主键约束.外键约束.唯一约束) 4.检查约束 1)检查约束的定义 检查约束可以和一个列关联,也可以和一个表关联,因为它们可以检查一个列的值相对于另一个列的值, ...
随机推荐
- 基于ONOS的T-SDN Super控制器,突破多域网络运营的难关
在法国尼斯举办的IIR WDM波分论坛(Next Generation Optical Networking)上,华为展示了T-SDN(Transport SDN,传送SDN)领域的众多新技术,其中T ...
- php安装igbinary扩展(windows)
pecl.php.net 是php的扩展仓库,访问此网站后,搜索需要安装的扩展,截图如下: igbinary: http://pecl.php.net/package/redis github的网址: ...
- 字符串后面空字符的问题(char*与string的转换)
今天AC了不少题,困扰已久的Time limit error 也解决了,记住下次用STL容器的时候一定要清空容器. 其次是字符数组与字符串的浅谈. 字符数组是以'\0'结尾的,所以在字符数组赋值给字符 ...
- CUDA编程学习相关
1. CUDA编程之快速入门:https://www.cnblogs.com/skyfsm/p/9673960.html 2. CUDA编程入门极简教程:https://blog.csdn.net/x ...
- 配置 Ant 执行 Jmeter 脚本
1.将 Jmeter 下 extras 目录中 ant-jmeter-1.1.1.jar 包拷贝至 ant 安装目录下的lib目录中,否则会报错 ant-jmeter-1.1.1 不存在 2.创建 ...
- Fiddler 弱网测试
1.设置上传下载速率 在Fiddler Script选项中查找uploaded,找到设置网络上传和下载设置值 分析一下这几行代码: 首先来判断 m_SimulateModem 是否为 true,也就是 ...
- 多源最短路径算法:Floyd算法
前言 由于本人太菜,这里不讨论Floyd的正确性. 简介 多源最短路径,解决的是求从图中任意两点之间的最短路径的问题. 分析 代码短小精悍,主要代码只有四行,直接放上: for(int k=1;k&l ...
- dp cf 20190613
A. Boredom 这个题目不难,但是我做的还比较复杂,不过还是很开心,至少做出来了,开始因为爆int了还wa了一发,搞得我以为自己做错了 #include <cstdio> #incl ...
- 区间dp 例题
D - 石子合并问题--直线版 HRBUST - 1818 这个题目是一个区间dp的入门,写完这个题目对于区间dp有那么一点点的感觉,不过还是不太会. 注意这个区间dp的定义 dp[i][j] 表示的 ...
- java读源码 之 map源码分析(HashMap,图解)一
开篇之前,先说几句题外话,写博客也一年多了,一直没找到一种好的输出方式,博客质量其实也不高,很多时候都是赶着写出来的,最近也思考了很多,以后的博客也会更注重质量,同时也尽量写的不那么生硬,能让大家 ...