SQL Server从入门到项目实践(超值版)读书笔记 15

8.5 检查约束

检查约束check可以强制数据的完整性,check约束类似foreign key约束,可以控制放入列的值。

例如,定义一个age年龄字段,可以添加check约束,将age列中值的范围限制在0~100之间,这样可以防止输入的年龄值超出正常年龄范围。

8.5.1 在创建表时添加检查约束

在一个数据表中,检查约束可以有多个,但是每一列只能设置一个检查约束。

create table table_name
(
    column_name1 datatype check(expression),
    colunm_name2 datatype,
    column_name3 datatype
)

各参数说明:

  • check:检查约束关键字;
  • expression:约束表达式,可以是一个条件,也可以是多个条件。例如,设置该列的值大于10,那么表达式为column_name1>10;如果设置该列的值为10~20,就可以将表达式写为column_name1>10 and column_name1<20。

例:在创建水果信息表时,给水果价格列添加检查约束,要求水果的价格大于0小于20:

create table fruits_04
(
    id int primary key,
    name varchar(20),
    price decimal(6,2) check (price>0 and price<20),
    origin varchar(20),
    remark varchar(200)
)

💡注意:
检查约束可以帮助数据表检查数据,确保数据的正确性,但是也不能给数据表中的每一列都设置检查约束,否则就会影响数据表中数据操作的效果。
因此,在给表设置检查约束前,也要尽可能地确保设置检查余数是否真有必要。
8.5.2 在现有表中添加检查约束

如果在创建表时忘了添加,可以使用alter语句来更新

alter table table_name
add [constraint ck_name] check (expression)

各参数说明:

  • table_name:指定添加约束的表名
  • constraint ck_name:添加检查约束的名称,可省略
  • check :检查约束关键字
  • expression:表达式

例:向表fruits_02的price字段添加检查约束,要求水果的价格在10~25元之间:

alter table fruits_02
add constraint ck_price check (price>10 and price<25)

8.5.3 删除检查约束

当不再需要约束时,可以删除约束

alter table table_name
drop constraint ck_name 

各参数说明:

  • ck_name:指明需要删除的约束名称

例:把上一小节添加的检查约束删除掉:

alter table fruits_02
drop ck_price

8.6 唯一约束

唯一约束(unique)确保在非主键列中不输入重复的值。

根据unique约束,表中的任何两行都不能有相同的列值。

另外,主键也强制实施唯一性,但主键不允许null值。

8.6.1 在创建表时添加唯一约束

在SQL Server中,除了使用primary key可以提供唯一约束之外,使用unique约束也可以指定数据的唯一性,主键约束在一张表中只能有一个,unique约束则可以在一张表中给多列设置唯一性。

语法如下:

create table table_mame
(
    column_name1 datatype unique,
    column_name2 datatype,
    column_name3 datatype
)

各参数说明:

  • unique:唯一约束关键字

例:在数据库mydatabase中创建一张水果表,要求为名称列添加唯一约束,确保输入的水果名称不重复:

create table fruits_05
(
    id int primary key,
    name varchar(20) unique,
    price decimal(6,2),
    origin varchar(20)
)

💡注意:
unique和primary key的区别:
一张表中可以有多个字段声明unique,但只能有一个字段是primary key声明;
声明为主键的字段不能有空值,但是声明唯一约束的字段可以存在null。
8.6.2 在现有表中添加唯一约束

在现有表中添加唯一约束的方法只有一种,而且在添加时,必须保证该列中不存在重复值。

语法如下:

alter table table_name
add [constraint uq_nama] unique(col_name)

各参数说明:

  • table_name:指定要添加约束的表名;
  • constraint uq_name:添加名称为uq_name的约束,可省略;
  • unique:唯一约束关键字;
  • col_name:添加约束的字段名。可以安排多列,用逗号分隔,此时就必须省略掉约束名称,让系统自动为之命名;

例:为表fruits的name字段和origin字段都添加唯一约束

alter table fruits
add unique (name,origin)

8.6.3 删除唯一约束

不再使用的唯一约束可以删除

alter table table_name
drop constraint uq_name
💡提示:同时声明的多字段唯一约束在删除时,也是同时被删除

8.7 非空约束

列的非空性决定表中的行是否允许该列包含空值。

空值(或null)不同于零、空白或为零的字符串,null的意思是没有输入,出现null通常表示值未知或未定义。

8.7.1 在创建表时添加非空约束

非空约束通常都是在创建表时就添加了,添加非空约束的操作很简单,只需要直接在后面加上 not null。

create table table_name
(
    column_name1 datatype not null,
    column_name2 datatype,
    column_name3 datatype
)

例:新建表persons_01,将姓名和出生年月两列设置为非空约束:

create table persons_01
(
    id int primary key,
    name varchar(20) not null,
    birth datetime not null,
    info varchar(200)
)

8.7.2 在现有表中添加非空约束

当创建好表后,也可以为其添加非空约束:

alter table table_name
alter column col_name datatype not null

各参数说明:

  • col_name:要添加约束的表名;
  • datatype:该列的数据类型,如果不修改,也要把原数据类型带上;
  • not null:非空约束关键字

例:向现有表fruits中的name列添加非空约束

alter table fruits
alter column name varchar(50) not null

8.7.3 删除非空约束

删除非空约束并不像之前删除别的约束那样使用drop,而是采用另一种傻瓜方式,说出来可能你不信,请看语法:

alter table fruits
alter column name varchar(50) null

是的!我没有写错,你再仔细看看。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值