约束:简单的说,就是创建表的时候,对表或者其中的列的属性的初始化或修改或删除。

NOT NULL约束

强制列不接受NULL

CREATE TABLE forLearn
( ID int NOT NULL,City varchar(255));

INDEX 索引

特点:

  1. 在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
  2. 但是更新表会更新索引,所以Time更久。
  3. 一般仅在需要查找的列上做索引。

语句:

CREATE INDEX index_name ON forLearn (myID,city);#创建索引
DROP INDEX index_name ON forLearn; #删除索引

CHECK 约束

特点:

  1. 如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
  2. 如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。

创建时添加

CREATE TABLE ForLearn
(
_ID int NOT NULL,
City varchar(255),
CHECK (_ID>0) #_ID 必须为正值
);
CREATE TABLE ForLearn2
(
_ID int NOT NULL,
City varchar(255),
CONSTRAINT chk_learn CHECK (_ID>0 and City='BeiJing') #创建多列CHECK约束
);

创建后添加

use dyx;

CREATE TABLE ForLearn4
(
_ID int NOT NULL,
City varchar(255),
_Name varchar(255) NOT NULL
); ALTER TABLE ForLearn4
ADD CHECK (_ID>0); #添加单列约束 ALTER TABLE ForLearn4
ADD CONSTRAINT City_Name CHECK (City='ShenZhen' and _Name='AsuraDong'); #添加多列约束

撤销约束

ALTER TABLE ForLearn4
DROP CHECK City_Name;

DEFAULT 约束

用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录。

创建时添加

CREATE TABLE forLearn
(
myID int not null,
city varchar(255) DEFAULT 'ShenZhen' #默认值设置为 ShenZhen
);

创建后添加

ALTER TABLE forLearn
ALTER myID SET DEFAULT 1;

撤销

ALTER TABLE forLearn
ALTER myID DROP DEFAULT;

UNIQUE 约束

特点:

  1. UNIQUE 约束唯一标识数据库表中的每条记录
  2. 每个表可以有多个 UNIQUE 约束
  3. UNIQUE 约束的列不能有重复值

创建的时候添加约束(单列):

CREATE TABLE forLearn
( ID int NOT NULL, City varchar(255),UNIQUE (ID));

创建时候添加约束集合(多列):

CREATE TABLE forLearn
(
City_id int NOT NULL,
City_index int NOT NULL,
City_name varchar(255),
CONSTRAINT ID_INDEX UNIQUE (City_id,City_index)
);

注意这里有坑:命名的时候像indexid这种可能是BIF或关键词的,一定要加_来区分一下。而数据库又是大小写不敏感,所以下面这句话就会报语法错误(找了很久,记录一下)

sql CREATE TABLE forLearn ( City_id int NOT NULL, Index int NOT NULL, City_name varchar(255), CONSTRAINT ID_INDEX UNIQUE (City_id,Index) );

创建后添加约束(单列)

ALTER TABLE forLearn
ADD UNIQUE (City_id);#有括号

创建后添加约束集合(多列)

ALTER TABLE forLearn
ADD CONSTRAINT IndexOfName UNIQUE (City_index,City_name);

撤销UNIQUE约束(单列):

ALTER TABLE forLearn
DROP INDEX City_id; #无括号

撤销UNIQUE约束集合(多列):

ALTER TABLE forLearn
DROP INDEX IndexOfName;

PRIMARY KEY 约束

特点:

  1. 束唯一标识数据库表中的每条记录(和UNIQUE一样)
  2. 对应列的值不能重复
  3. 对应列不能包含 NULL 值
  4. 只能有一个PRIMARY KEY约束(和UNIQUE 不一样)
  5. 使用方法基本同UNIQUE撤销有不同

创建添加约束(单列)

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
);

创建添加约束集合(多列)

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
);

创建后添加约束(单列)

ALTER TABLE Persons
ADD PRIMARY KEY (P_Id);

创建后添加约束集合(多列)

ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName);

撤销primary约束

ALTER TABLE Persons
DROP PRIMARY KEY; #因为每个表只有一个primary key。所以直接drop即可

FOREIGN KEY

一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。

两个示例表如下所示:(截图)

创建时添加约束

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id) #声明foreign key
);

创建后

ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders #给一个名字,便于删除
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id);

撤销约束

ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders;

欢迎进一步交流本博文相关内容:

博客园地址 : http://www.cnblogs.com/AsuraDong/

CSDN地址 : http://blog.csdn.net/asuradong

也可以致信进行交流 : xiaochiyijiu@163.com

欢迎转载 , 但请指明出处  :  )


SQL学习笔记:表的约束的更多相关文章

  1. ORALCE PL/SQL学习笔记

    ORALCE  PL/SQL学习笔记 详情见自己电脑的备份数据资料

  2. SQL学习笔记

    SQL(Structured Query Language)学习笔记 [TOC] Terminal登录数据库 1.登录mysql -u root -p ; 2.显示所有数据库show database ...

  3. Oracle之PL/SQL学习笔记

    自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...

  4. iOS学习笔记——AutoLayout的约束

    iOS学习笔记——AutoLayout约束 之前在开发iOS app时一直以为苹果的布局是绝对布局,在IB中拖拉控件运行或者直接使用代码去调整控件都会发上一些不尽人意的结果,后来发现iOS在引入了Au ...

  5. Mysql学习(慕课学习笔记5)约束

    约束类型: 1.NOT NULL (非空约束) 2.PRIMARY KEY(主键约束) 每张数据表只能存在一个主键 主键保证记录的唯一性 主键自动为NOT NULL (Auto_increment  ...

  6. sql 学习笔记 档

    从下面的内容 3c   school 1:Sql 它分为两部分: 6 2:查询 7 3:插入: 9 4:数据库更新 UPDATE 9 5:删除 DELETE 10 6:Sql TOP 子句: 10 7 ...

  7. Oracle下SQL学习笔记

    主机字符串:as sysdba alter user scott account unlock;//解锁scott,不会就谷歌检索 DML语句,增.删.查.改 select语句:熟悉表结构 desc ...

  8. SQL学习笔记六之MySQL数据备份和pymysql模块

    mysql六:数据备份.pymysql模块   阅读目录 一 IDE工具介绍 二 MySQL数据备份 三 pymysql模块 一 IDE工具介绍 生产环境还是推荐使用mysql命令行,但为了方便我们测 ...

  9. [SQL] SQL学习笔记之基础操作

    1 SQL介绍 SQL 是用于访问和处理数据库的标准的计算机语言.关于SQL的具体介绍,我们通过回答如下三个问题来进行. SQL 是什么? SQL,指结构化查询语言,全称是 Structured Qu ...

  10. 5-06使用Sql 语句为表添加约束

    约束名的命名规则推荐采用:约束类型_约束列. 为用户表添加约束 ALTER TABLE UserInfo ADD CONSTRALNT PK_UserId PRIMATY REY(UserId) CO ...

随机推荐

  1. CodeFirst建模:DataAnotation

    示例一 新建一个控制台应用程序,并安装entityframework 新建一个文件Blog.cs类,输入以下代码: using System.ComponentModel.DataAnnotation ...

  2. apache相关补充

    apache相关补充 sendfile机制 1)不用sendfile的传统网络传输过程: read(file, tmp_buf, len) write(socket, tmp_buf, len) 2) ...

  3. shiro vue 前后端分离中模拟登录遇到的坑

    系统采用jeeplus框架(ssm+redis+shiro+mongodb+redis),默认是了JSP未做前后端分离,由于业务需要已经多终端使用的需求(H5.小程序等),需要实现前后端分离.但是由于 ...

  4. 51nod2006 飞行员配对(二分图最大匹配)

    2006 飞行员配对(二分图最大匹配) 题目来源: 网络流24题 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 第二次世界大战时期,英国皇家空军从沦陷国 ...

  5. 使用Oracle实现的MyBatis分页查询效果

    1.mybatis.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configur ...

  6. 纵横填字map版(初始数据结构)

    新数据结构设计: 定义一个map: key是横纵坐标字符串,比如“0,4” value是一个json,包含以下属性:字,横向的词(若 有的话,无的话,空串),纵向的词(若有的话,无的话,空串). 另有 ...

  7. VC++常见错误原因解析--error LNK2019: 无法解析的外部符号 "public: void __thiscall

    根据个人遇到这个错误时的记录,原因可以分为一下几种: 原因一: 只是在.h里面声明了某个方法, 没有在cpp里面实现 . 具体讲,有时候在头文件中声明了需要的方法,确实忘记了在源文件中实现: 有时候在 ...

  8. [ Luogu 3924 ] 康纳的线段树

    \(\\\) \(Description\) 现在有一个线段树维护长为\(N\)的数列,实现方式是\(mid=((l+r)>>1)\),支持区间加,节点维护区间和. 共有\(M\)次区间加 ...

  9. Python批量下载电视剧电影--自己动手丰衣足食

    前言 为了看美剧<天蝎>,在电影天堂找到了,于是就想下载下来好好欣赏. 废话不说了,直接上代码. 代码 import requests,re,os,time url = "htt ...

  10. TCP/IP和UDP的比较

    TCP.UDP详解 1.传输层存在的必要性 由于网络层的分组传输是不可靠的,无法了解数据到达终点的时间,无法了解数据未达终点的状态.因此有必要增强网络层提供服务的服务质量. 2.引入传输层的原因 面向 ...