SQL中的约束

        在SQL Server的运用过程种,对于初学者来说,总是会遇到很多棘手的问题,尤其对其中的约束种类就感到很吃力。以下是我借鉴别人后的发言后的一点心得体会。

        约束是SQL Server提供的自动保持数据库完整性的一种方法,它通过限制字段中数据、记录中数据和表之间的数据来保证数据的完整性。在SQL SERVER中,对于基本表的约束分为列约束和表约束。列约束是对某一个特定列的约束,包含在列定义中,直接跟在该列的其他定义之后,用空格分隔,不必指定列名;而表约束与列定义相互独立,不包括在列定义中,通常用于对多个列一起进行约束,与列定义用’,’分隔,定义表约束时必须指出要约束的列的名称。

        在SQL Server 2005中有6种约束:主键约束(primary key constraint)、惟一性约束(unique constraint)、检查约束(check constraint)、默认约束(default constraint)、外部键约束(foreign key constraint)和空值(NULL)约束。

        1.对于创建检查约束 CHECK

检查约束对输入列或者整个表中的值设置检查条件,以限制输入值,保证数据库数据的完整性。以下是sql语句写的约束做例子。

用Transact-SQL语句创建检查约束。其语法形式如下:
   CONSTRAINT constraint_name    CHECK   ( name logical_expression)

例1(注:下面为列约束)
create table employees

(employeename varchar(50),
gender char(2) check(gender like 'f' or gender like 'm'),

例2.(注:下面为表约束) 。

create table employees

(employeename varchar(50),

age int,

constraint checkage check (age between 10 and 100));

          从上面可以看出,列约束和表约束的区别就是列约束是直接跟在后面,而表约束则不是。


          2。主键约束PRIMARY KEY

PRIMARY KEY约束用于定义基本表的主键,它是惟一确定表中每一条记录的标识符,其值不能为NULL,也不能重复,以此来保证实体的完整性。
PRIMARY KEY与UNIQUE约束类似,通过建立唯一索引来保证基本表在主键列取值的唯一性,但它们之间存在着很大的区别:

①在一个基本表中只能定义一个PRIMARY KEY约束,但可定义多个UNIQUE约束;

②对于指定为PRIMARY KEY的一个列或多个列的组合,其中任何一个列都不能出现空值,而对于UNIQUE所约束的唯一键,则允许为空。

注意:不能为同一个列或一组列既定义UNIQUE约束,又定义PRIMARY KEY约束。


PRIMARY KEY既可用于列约束,也可用于表约束。

使用Transact-SQL语句操作法设置主键约束,其语法形式如下:
   CONSTRAINT constraint_name    PRIMARY KEY  (column_name)

PRIMARY KEY用于定义表约束时,即将某些列的组合定义为主键,其语法格式如下:
   CONSTRAINT constraint_name  PRIMARY KEY  (column_name[,…n])

如果在添加一列之后再将其设置为主键约束,这样编写:

ALTER TABLE employees ADD employeeid INT  NOT NULL ;

将会出错:ALTER TABLE 只允许添加可包含空值或指定了 DEFAULT 定义的列。因为列 'employeeid' 不能包含空值且未指定 DEFAULT 定义,所以无法将该列添加到表 'employees' 中。

只需要在上面的命令中添加default 001即可。

以下代码是在SQL查询分析器里面建的相关数据库或表:

create database instant2;
use instant2;
drop table employees;
create table employees(
employeename varchar(50),
gender char(2) check(gender like 'f' or gender like 'm'),          --为gender添加检查约束,保证输入的数据是‘f’或‘m’
birthday datetime check(birthday <=getdate()),                          --为birthday r添加检查约束,保证输入的数据小于当前系统时间

degree varchar(12),
graduateschool varchar(50),
graduatedate datetime check(graduatedate<=getdate()),
specialty varchar(200),
telephone varchar(50),
skill varchar(200),
salary smallint,
allowardce decimal(18,2));

exec sp_helpconstraint 'employees';
ALTER TABLE employees ADD employeeid INT  NOT NULL  default 001;   --
alter table employees add constraint pk_employeeid primary key(employeeid);
insert into employees(employeename,gender,birthday,degree,graduateschool,graduatedate,specialty,telephone,skill,salary,allowardce)
values('张三','m',1980-05-09,'大学本科','北京大学',2004-07-01,'自动化控制','390109999','熟悉面向对象系统分析和设计,精通java语言及j2ee技术,熟悉oracle、sql数据库编程',5000,586.5);
select *from employees;

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值