注意:

A.表中有数据不能创建约束

B.视图下设置后,要点击保存(只有保存后在才看的到)


c   别忘了,点刷新,才会出来呀!


1、主键约束 primary key

主键是每行的唯一标识符,仅仅通过它就能准确定位到一行,其中主键列在整个表中不能有重复,必须包含唯一的值(不能为NULL)。


alter table t_group  
  alter column id int not null      --修改字段类型
go

alter table t_group
  add constraint pk_group_Id --字段创建主键约束
  primary key(id)
go

constraint  [kənˈstrent]  约束

2、外键约束 foreign key

外键既能确保数据完整性,也能表现表之间的关系。添加了外键之后,插入引用表的记录要么必须被引用表中被引用列的某条记录匹配,要么外键列的值必须设置为NULL。

  外键和主键不一样,每个表中的外键数目不限制唯一性。在每个表中,每一有-~253个外键。唯一的限制是一个列只能引用一个外键。一个列可以被多个外键引用。

如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的。

比如说:

create table t_group (   id int not null,   name varchar(30),   primary key (id)
);  insert into t_group values (1, 'Group1');
insert into t_group values (2, 'Group2');create table t_user (   id int not null,   name varchar(30),   groupid int,   primary key (id),   foreign key (groupid) references t_group(id) on delete cascade on update cascade
);  insert into t_user values (1, 'qianxin', 1); --可以插入
insert into t_user values (2, 'yiyu', 2);    --可以插入
insert into t_user values (3, 'dai', 3);    --错误,无法插入,用户组3不存在,与参照完整性约束不符 insert into t_user values (1, 'qianxin', 1);
insert into t_user values (2, 'yiyu', 2);
insert into t_user values (3, 'dai', 2);
delete from t_group where id=2;              --导致t_user中的2、3记录级联删除
update t_group set id=2 where id=1;          --导致t_user中的1记录的groupid级联修改为2

create table t_group (   
    id int not null,   
    name varchar(30),   
    primary key (id)   
);  
 
insert into t_group values (1, 'Group1');   
insert into t_group values (2, 'Group2');
 
create table t_user (   
    id int not null,   
    name varchar(30),   
    groupid int,   
    primary key (id),   
    foreign key (groupid) references t_group(id) on delete cascade on update cascade  
);  
 
insert into t_user values (1, 'qianxin', 1); --可以插入   
insert into t_user values (2, 'yiyu', 2);    --可以插入   
insert into t_user values (3, 'dai', 3);    --错误,无法插入,用户组3不存在,与参照完整性约束不符 
 
insert into t_user values (1, 'qianxin', 1);   
insert into t_user values (2, 'yiyu', 2);   
insert into t_user values (3, 'dai', 2);   
delete from t_group where id=2;              --导致t_user中的2、3记录级联删除   
update t_group set id=2 where id=1;          --导致t_user中的1记录的groupid级联修改为2

3、唯一约束unique

指定列中的每个值必须是唯一的。可以多列唯一。

alter table Accountadd constraint AK_AccountName    --约束名unique (Account_Name)    -- 列名

alter table Account
    add constraint AK_AccountName    --约束名
    unique (Account_Name)    -- 列名

补充:

1.主键约束(PRIMARY KEY)

1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。 
2) 是不可能(或很难)更新. 
3) 主键列上没有任何两行具有相同值(即重复值),不允许空(NULL).
4) 主健可作外健,唯一索引不可;

2.唯一性约束(UNIQUE)
1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表上可以放置多个唯一性约束.
2) 只要唯一就可以更新. 
3) 即表中任意两行在  指定列上都不允许有相同的值,允许空(NULL).
4) 一个表上可以放置多个唯一性约束

3.唯一索引(INDEX)

创建唯一索引可以确保任何生成重复键值的尝试都会失败。

唯一性约束和主键约束的区别:
    (1).唯一性约束允许在该列上存在NULL值,而主键约束的限制更为严格,不但不允许有重复,而且也不允许有空值。
    (2).在创建唯一性约束和主键约束时可以创建聚集索引和非聚集索引,但在 默认情况下主键约束产生聚集索引,而唯一性约束产生非聚集索引

约束和索引, 前者是用来检查数据的正确性,后者用来实现数据查询的优化,目的不同。
   唯一性约束与唯一索引有所不同:

(1).创建唯一约束会在Oracle中创建一个Constraint,同时也会创建一个该约束对应的唯一索引。

(2).创建唯一索引只会创建一个唯一索引,不会创建Constraint。

也就是说其实唯一约束是通过创建唯一索引来实现的。

在删除时这两者也有一定的区别:

删除唯一约束时可以只删除约束而不删除对应的索引,所以对应的列还是必须唯一的,

而删除了唯一索引的话就可以插入不唯一的值。

4、CHECK约束

CHECK约束约束可以和一个列关联,也可以和一个表关联,因为它们可以检查一个列的值相对于另外一个列的值,只要这些列都在同一个表中以及值是在更新或者插入的同一行中。CHECK约束还可以用于检查列值组合是否满足某一个标准。

  可以像使用where子句一样的规则来定义CHECK约束。CHECK约束条件的示例如下:

目标

SQL

限制Month列为合适的数字

BETWEEN 1 AND 12

正确的SSN格式

LIKE'[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]'

限制为一个快递公司的特定列表

IN('UPS','Fed Ex',EMS')

价格必须为正数

UnitPrice >= 0

引用同一行中的另外一列

ShipDate >= OrderDate

  上面给出的列表只是一小部分,而条件实际上市无限多的。几乎所有可以放到where子句的条件都可以放到该约束中。而且和其他选择(规则和触发器)相比,CHECK约束执行速度更快。

  在已存在的表中添加一个CHECK约束:

alter table Account

add constraint CN_AccountAge

check

(Account_Age > 18);    -- 插入年龄必须大于18

  如果此时视图添加一条不满足的记录,将报如下错误:

insert into Accountvalues (22,'洪',17)

消息547,级别16,状态0,第1 行

INSERT 语句与 CHECK 约束"CN_AccountAge"冲突。该冲突发生于数据库"Nx",表"dbo.Account", column 'Account_Age'。

语句已终止。

5、DEFAULT约束

DEFAULT约束在INSERT INTO语句没有为列指定值的时候提供一个默认值。

示例

例如,以下SQL创建了一个名为CUSTOMERS的表,包含5个列。其中,SALARY列的默认值为5000.00,如果INSERT INTO语句没有为该列指定值,将会使用默认的5000.00。

CREATE TABLE CUSTOMERS(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25) ,
SALARY DECIMAL (18, 2) DEFAULT 5000.00, PRIMARY KEY
PRIMARY KEY (ID)
);

如果该表已经存在,你可以使用类似以下的语句为SALARY列添加一个NOT NULL约束:

ALTER TABLE CUSTOMERS
   MODIFY SALARY  DECIMAL (18, 2) DEFAULT 5000.00;

删除默认约束

使用以下SQL删除DEFAULT约束:

ALTER TABLE CUSTOMERS
   ALTER COLUMN SALARY DROP DEFAULT;

禁用约束

ALTER TABLE CUSTOMERS

WITHNOCHECK    ------- 临时禁用约束

ADD CONSTRAINT

CHECK  ........

SQL约束(主键约束 primary key、外键约束 foreign key、唯一约束unique 、CHECK约束)相关推荐

  1. default默认值 unique单列唯一和联合唯一 primary key主键 auto_increment自增 外键foregin key 表与表之间关系

    约束条件 之前讲过: zerofill (填充0) unsigned (约束条件值unsigned 无符号) not null 非空(不能插入空) 补充知识点 插入数据的时候可以指定字段 create ...

  2. mysql外键约束案例_SQLServer FOREIGN KEY外键约束讲解及使用实例

    FOREIGN KEY约束添加规则 1.外键约束并不仅仅可以与另一表的主键约束相链接,它还可以定义为引用另一个表中 UNIQUE 约束的列. 2.如果在 FOREIGN KEY 约束的列中输入非 NU ...

  3. sql语句创建表的同时添加外键约束

    sql语句创建表的同时添加外键约束 题目 建立一个商店的数据库store,记录顾客及其购物情况,由下面三个表组成: 商品(商品号,商品名,单价,商品类别,供应商): 顾客(顾客号,姓名,住址): 订单 ...

  4. mysql一对一外键约束_MySQL数据库之-foreign key 外键(一对多、多对多、一对一)、修改表、复制表...

    我们在同一数据库创建的表时候,很多时候会出现相同数据的冗余问题,也就是说几个id会有一个或者同n个相同字段,这样就导致数据表结构数据重复冗余, 冗余还无所谓,关键是如果我要改其中一个相同的字段信息,其 ...

  5. 删除 索引 外键 mysql_MySQL无法删除外键约束中所需的索引

    MySQL无法删除外键约束中所需的索引 我需要更改现有数据库以添加列. 因此,我还想更新UNIQUE字段以包含该新列. 我试图删除当前索引但仍然收到错误MySQL Cannot drop index ...

  6. 我爷爷来了都能看懂的数据库主键,候选键,外键,非空和check的几种约束方式及使用方法

    我们都知道在数据库MYSQL当中有三种不同的完整性约束,分别为:实体完整性,参照完整性和用户定义完整性. 直接上干货篇: 通俗的讲:实体完整性是用来约束主键(primary key)和候选键(uniq ...

  7. oracle外键约束怎么删除,mysql oracle 删除外键约束

    oracle 删除外键约束 禁用约束 启用约束 oracle 删除外键约束 禁用约束 启用约束 执行以下sql生成的语句即可 删除所有外键约束 Sql代码  select 'alter table ' ...

  8. 如何列出引用SQL Server中给定表的所有外键?

    我需要在SQL Server数据库中删除一个高度引用的表. 我如何获取要删除表需要删除的所有外键约束的列表? (与在Management Studio的GUI中单击相比,SQL的答案更好.) #1楼 ...

  9. mysql 删除外键 sql语句_sql server ql语句删除外键和删除

    sql server ql语句删除外键和删除 alter table tablename add constraint ordersrelationship foreign key mployeeid ...

  10. mysql foreign key 设置_mysql foreign key(外键) 说明与实例

    一,什么是foreign key,及其完整性 个人觉得,foreign key就是表与表之间的某种约定的关系,由于这种关系的存在,我们能够让表与表之间的数据,更加的完整,关连性更强.关于完整性,关连性 ...

最新文章

  1. python 中__name__ = '__main__' 的作用
  2. 网站架构相关PPT、文章整理
  3. linux日志文件备份,linux配置文件、日志文件全备份
  4. 更新fielddata为true_线程与更新UI,细谈原理
  5. 启动TOMCAT报错 java.util.zip.ZipException: invalid LOC header (bad signature)
  6. POP3与IMAP协议
  7. Spring AOP动态代理实现,解决Spring Boot中无法正常启用JDK动态代理的问题
  8. Linux操作系统原理与应用07:内核同步
  9. AS3 Signals之入门篇
  10. 【Wonder整理】防止重复提交并弹出半透明对话框
  11. idean中jsp页面乱码_IntelliJ IDEA 控制台 乱码 有效解决办法
  12. ExtJS 4正式版今天发布
  13. Python语言程序设计----【第8周 程序设计方法学】之8.2 Python程序设计思维
  14. 越来越火的图数据库到底能做什么?
  15. 【机器学习】基于生成对抗网络的黑白图片上色
  16. 设置360浏览器的背景为护眼模式(浅豆绿色)
  17. vue项目json格式化显示
  18. 计算几何(证明三角形内心公式: aOA+bOB+cOC = 0)
  19. CSS设置图像的透明度
  20. mysql查询优化-查询缓存

热门文章

  1. 这是一个悲伤的程序员爱情故事 ? !
  2. windows下BCompare安装与使用
  3. 皮革划痕缺陷检测案例(3种不同方法)
  4. python连接mysql三种方式_用 Python 连接 MySQL 的几种方式详解
  5. Ubuntu安装Chrome/Firefox/360Se等浏览器
  6. 行波iq调制器_矢量信号源中IQ调制器的设计与实现
  7. 感恩有你,我们大会见?
  8. 《序列》游戏攻略【43~48】
  9. VC共享内存的创建和权限问题
  10. 谷歌浏览器开发模式network界面 时间段 隐藏