码迷,mamicode.com
首页 > 数据库 > 详细

SQLserver约束以及对约束和结构的操作

时间:2016-11-17 07:47:39      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:外键   ide   数据   guid   添加   允许   设置   tin   联合主键   

一.约束

数据完整性:正确的,一致的 数据.

设计人员:数据表创建之前

实现数据完整性:

1.实体完整性:(行 唯一不重复)
作用:保证行 唯一不重复
技术手段:主键约束 primary key(pk)
**表可以没有主键,但是除非特殊情况表都会有主键,从而保证实体完整性.
**特点:不能重复,不能为空(null),一个表只能有一个主键,但可以是联合主键
**主键可以修改,但改完后要保证唯一不重复.

唯一值约束 unique (uq)
**unique 唯一值约束(是主键primary key的重要补充)
**作用:行唯一不重复
**一个表里可以有多个unique
**unique 允许为null,但是只能有一行为null

辅助技术:标识属性 identity
** 标识属性(生成自动编号)
**只读
**一个表只能有一个标识属性
**加在整数类型
**永远仅向前生成新数据,除非重建

全球唯一标识 GUID
**生成函数 new id

2.域完整性:(列)
作用:对列进行范围,格式,选项 进行限制
技术手段:数据类型 age varchar(50)
null 允许为null,not null必填
检查约束 check(ck)
默认值约束 default(df)

**and(与)or(或)not(非)
like通配符
**%:任意字符,任意个数
**_:任意字符,一个字符,‘张_‘标识张后面有一个字符
**[]:在范围内,[0-9]
**[^]:不在范围内[^0-5]

3.引用完整性:(两个表之间)
作用:通过给两个表之间的相关字段建立关系,从而保证两个表之间的数据的一致性
例子:
use Practice
CREATE TABLE studentInfo
(
Id int primary key,
Name varchar(20),
Age int check(Age>=18 and Age<=60)
)
CREATE TABLE score
(
[Subject] varchar(50),
Id int foreign key references studentInfo(Id)
--建立关系的两个关联字段
--名字可以不同 但是类型以及长度必须一致
)
技术:外键 foreign key(fk)
**主从表的原则:
**只有主表中存在的数据才能添加到从表中
规律:
添加时:先主表,后从表
删除时:先从表,后主表

**********************************************************************************************************************

二.结构和约束操作


修改结构
--1.结构修改
--添加列
ALTER TABLE Test--修改表Test
ADD [address] varchar(100)not null--添加address列

--修改列 列的类型,长度,空或非空
ALTER TABLE Test--修改表Test
ALTER COLUMN [address]nvarchar(50) null--修改列(COLUMN)


--删除列
ALTER TABLE Test--修改表Test
DROP COLUMN [address]--删除列[列名]

--2.修改约束
添加约束
ALTER TABLE Test--修改表
ADD CONSTRAINT PK_test_id --添加主键约束给PK_test_id
primary key (id)--具体约束条件
--删除约束

练习:
--练习:
--1 为test 表的age字段添加检查约束,要求成年.
--2 添加生日字段.
--3 设置生日的默认值为:1980-01-01.
--4 修改test表,要求name列唯一.

--eg1:
ALTER TABLE Test
ADD CONSTRAINT CK_test_age
CHECK (age>=18)
--eg2:
ALTER TABLE Test
ADD [birthday]nvarchar(20) null
--eg3
ALTER TABLE Test--修改表
ADD CONSTRAINT df_test_birthday--添加约束
DEFAULT ‘1980-01-01‘ for birthday--默认值(default) XXXX for 字段
--eg4
ALTER TABLE Test--修改表
ADD CONSTRAINT UQ_Test_Name --添加唯一值约束
UNIQUE(name)--唯一值(字段名)

**********************************************************************************************************************

三.DML([数据]操作语言)
--SQL(基本技能)

--1. INSERT 增加
--语法:
--INSERT [INTO] tab_name[(colName,colName2...列的列表)]
--VALUES(value1,value2...值的列表与列的列表匹配),
--(),()一次添加多行

--eg1:(给所有列添加数据)
--1.
INSERT INTO info (sname,sex,birthday,address,tel)
VALUES(‘赵明月‘,0,‘1982-3-6‘,‘吉林‘,‘0432-12345678‘)
--2.
INSERT info VALUES(‘房祖名‘,1,‘1980-2-25‘,‘北京‘,‘010-123123123‘)
select * from info

INSERT INTO info(sname,sex,birthday,address,tel)
VALUES(‘金钱豹‘,1,‘1970-5-9‘,‘天津‘,‘13412362322‘)

INSERT info VALUES(‘赵月‘,0,‘1988-4-26‘,‘长沙市‘,‘03318658888‘)
select * from info
--添加部分列数据
--1.
INSERT INTO info(sname,birthday,tel)
VALUES(‘JACK‘,‘1999-02-04‘,‘1888888888‘)
--2.
INSERT INTO info
VALUES(‘JACK‘,NULL,‘1999-02-04‘,NULL,‘01088888888‘)
UPDATE info SET tel=‘18888888888‘WHERE tel=‘01088888888‘

**********************************************************************************************************************

SQLserver约束以及对约束和结构的操作

标签:外键   ide   数据   guid   添加   允许   设置   tin   联合主键   

原文地址:http://www.cnblogs.com/harveylv/p/6072226.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!