SQLserver数据的完整性

--sql约束

/*

(1)提供语义定义完整性约束条件的机制

实体完整性:主键、非空

????参照完整性:外键

????用户自定义完整性:check、触发器

(2)提供完整性检查方法

????一般在:Insert、Update、Delete执行后开始检查,及事务提交后开始检查。

(3)违约处理

????拒绝(no action)

????级连(级联 Cascade)

?

*/

/*
几种约束

非空约束(NOT NULL Constraint )

主键约束(Primary Key Constraint)

外键约束(Foreign Key Constraint)

唯一性约束(Unique Constraint)

检查约束(Check Constraint)

默认值约束(Default Constraint)

?

*/

?

--主键约束

--【例1】实体完整性约束。

CREATE TABLE student1 (

????sno char (9) PRIMARY key , --//列级约束

????sname varchar (10) ,

????ssex char (2) ,

????sage int NULL ,

????sdept char (10) ) --,

--或 PRIMARY key(sno)) --//表级约束

?

--表级约束

CREATE TABLE sc1 (

????sno char(9) ,

????cno char(3) ,

????grade int,

primary key(sno,cno) -- //表级约束

)

?

?

--参照完整性定义

--Foreign key(列名) references table_name(列名)

--注意要参考的列应该和被参考列的长度,数据类型相同

sp_help course;

sp_help student;

--【例2】参照完整性实例 (列级、表级均可)。

CREATE TABLE sc2 (

????sno char(9),

????cno char(4),

????grade int ,

primary key(sno,cno) ,

foreign key(cno) references course(cno),

foreign key(sno) references student(sno)

);

?

?

--测试约束

CREATE TABLE sc3 (

????sno char(9) ,

????cno char(4) ,

????grade int ,

primary key(sno,cno) ,

foreign key(sno) references student(sno)

on delete no action --当删除student的记录的时候 会失败

on update cascade --但更新student的记录时 sc3表中的记录也会更新

) ;

--恰当使用级联更新和级联删除 方便数据库在更新时的操作;

insert into student(sno) values(‘2014019‘);

insert into sc3 values(‘2014019‘,‘001‘,100);

?

?

delete from student where sno=‘2014019‘;

update student set sno=‘122222‘ where sno=‘2014019‘;

?

select * from sc3;

--在删除该约束后就可以成功删除了

--当你不给约束起名字的时候 DBMS会自动给该约束起一个名字

--sp_help sc3;

alter table sc3 drop FK__sc3__sno__398D8EEE;

?

drop table sc3;

时间: 2024-10-10 21:36:11

SQLserver数据的完整性的相关文章

MYSQL-实现ORACLE 和SQLserver数据中- row_number() over(partition by ) 分组排序功能

网上看见了好多例子都基本上是一样的,没有过多的解释,对于一个初学MySQL来说有点难,我把部分转摘过来如下 原文:http://www.cnblogs.com/buro79xxd/archive/2012/08/29/2662489.html 要求目标:1.确定需求: 根据部门来分组,显示各员工在部门里按薪水排名名次. 创建表格:2.来创建实例数据: drop table if exists heyf_t10; create table heyf_t10 (empid int ,deptid i

Oracle、MySql、SQLServer 数据分页查询

Oracle.MySql.SQLServer 数据分页查询 摘自:http://www.cnblogs.com/wangyong/p/3396333.html 近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借助关键字limit即可实现查询,查询语句通式: /* * sql:可以是单表的查询语句,也可以是多表的联合查询语句 * firstIndex:

setAutoCommmit保持数据的完整性

setAutoCommit总的来说就是保持数据的完整性,一个系统的更新操作可能要涉及多张表,需多个SQL语句进行操作 循环里连续的进行插入操作,如果你在开始时设置了:conn.setAutoCommit(false); 最后才进行conn.commit(),这样你即使插入的时候报错,修改的内容也不会提交到数据库, 而如果你没有手动的进行setAutoCommit(false); 出错时就会造成,前几条插入,后几条没有 会形成脏数据~~ setAutoCommit(false)的误用 (设定set

Oracle、MySql、SQLServer数据分页查询

看过此博文后Oracle.MySql.SQLServer 数据分页查询,在根据公司的RegionRes表格做出了 SQLserver的分页查询语句: SELECT DISTINCT TOP 500 rr.ID AS id ,rr.strName AS name ,rr.nType AS res_type ,rr.nRegID AS region_id ,rr.strChanName AS channel_name ,rr.nChanNum AS channel ,rr.nSortID AS so

如何暂停sqlserver数据订阅服务

原文:如何暂停sqlserver数据订阅服务 从 Management Studio 启动和停止快照代理或日志读取器代理 在 Management Studio 中连接到发布服务器,然后展开服务器节点和"复制"文件夹. 展开"本地发布"文件夹,然后右键单击发布. 单击"查看快照代理状态"或"查看日志读取器代理状态". 单击"启动"或"停止". 从 Management Studio 启动

MySQL——保证数据的完整性

为了防止垃圾的产生,从而影响数据库的执行效率. 1实体完整性——行数据的有效性   唯一约束(unique).主键约束(primary key) 2域完整性——列数据的有效性 非空约束(not null).默认约束(default ‘格式’).检查约束(check) 3引用完整性——编号有效 外键约束(foreign key) 4用户自定义完整性——保证自定义规则 auto_increment 自增长 constraint 外键名 foreign key (要设置的列名) references 

sqlserver数据导入到oracle中

原来的网站数据存储在sqlserver中,梳理好数据表的字段关系,需要导入到oracle数据库中.网上提供了若干解决方法.其中一个是在服务器有sqlserver和oracle的情况下直接进行导出工作.这个操作我尝试了,没有成功.之前的时候access可以导入到oracle中,然后就考虑把sqlserver的数据导入到access中.实际的操作是: 1.sqlserver到excel: 直接打开一个excel 2.excel到access access外部数据---〉excel,选择对应的exce

转Oracle、MySql、SQLServer 数据分页查询

最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借助关键字limit即可实现查询,查询语句通式: /* * sql:可以是单表的查询语句,也可以是多表的联合查询语句 * firstIndex:其实的索引 * pageSize:每页显示的记录数 */ select o.* from (sql) o limit firstIndex,pageSize

sqlserver数据导入导出问题

sqlserver,如果用结果另存为,导出txt数据,然后在导入数据库,有时候会出问题,很难解决. 但是全选,右击,复制到自己创建的txt里面,在导入数据,就不会有问题的. 神奇,不知道为什么,但是能解决问题.