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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLserver约束以及对约束和结构的操作相关的知识,希望对你有一定的参考价值。

一.约束

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

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

实现数据完整性:

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约束以及对约束和结构的操作的主要内容,如果未能解决你的问题,请参考以下文章

SQL server基础知识(表操作数据约束多表链接查询)

SQLServer数据库系统概念

sqlserver删除外键关系

SQL语句建表设置主键外键checkdefaultunique约束

sqlserver表的唯一键约束怎么设置?

SQL Server中有关约束(constraint)的一些细节