第三章 增删改语句及约束

一:约束类型

   主键约束(primary key constraint)

   唯一性约束(unique constraint)

   检查约束(check constraint)

   默认约束(default constraint)

   外键约束(foreign key constraint)

   空值约束(null)

 

二:主键约束

    PRIMARY KEY约束用于定义基本表的主键,它是惟一确定表中每一条记录的标识符,其值不能为NULL,也不能重复,以此来保证实体的完整性。

    PRIMARY KEY与UNIQUE约束类似,通过建立唯一索引来保证基本表在主键列取值的唯一性,但它们之间存在着很大的区别:

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

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

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

--主键约束创建方式一: 在建表时直接创建
--建表
CREATE TABLE student(
	ID INT,
	STDNAME NVARCHAR(10),
	STDAGE INT,
	STDMARK NUMERIC(4,1)
	CONSTRAINT STD_PRIM PRIMARY KEY(ID)
	--PRIMARY KEY(ID) --简写方式,这里就没有给约束起一个名字
)
/*
CONSTRAINT中文意思为约束,在这里意味着创建一个约束
STD_PRIM为创建的约束名称
PRIMARY KEY(ID)为主键约束,这里是将ID字段设置为主键
*/

   --主键约束创建后,ID字段必须有值,且唯一
   INSERT INTO student VALUES(1,'张三,29,100)  

--主键约束创建方式二: 修改表创建
CREATE TABLE student(
	ID INT NOT NULL, 
	STDNAME NVARCHAR(10),
	STDAGE INT,
	STDMARK NUMERIC(4,1)	
)
--在使用修改表的方式增加约束,
ALTER TABLE student 
ADD CONSTRAINT STD_PRIM PRIMARY KEY(ID) --STD_PRIM这个名字在删除约束时可以用到
ADD PRIMARY KEY(ID) --简写方式,没有起约束名,删除约束时就不方便了
-------------------------------------------------------------------------------

--自动增加字段,创建字段时直接设置成主键方式
CREATE TABLE student(
	ID INT IDENTITY PRIMARY KEY,--如果直接写成IDENTITY,则默认为(1,1)	
	STDNAME NVARCHAR(10),
	STDAGE INT,
	STDMARK NUMERIC(4,1)	
)
INSERT INTO student(STDNAME,STDAGE,STDMARK) VALUES('张三',25,100)
INSERT INTO student(STDNAME,STDAGE,STDMARK) VALUES('李四',25,100)
INSERT INTO student(STDNAME,STDAGE,STDMARK) VALUES('王五',25,100)
INSERT INTO student(STDNAME,STDAGE,STDMARK) VALUES('赵六',25,100)
INSERT INTO student(STDNAME,STDAGE,STDMARK) VALUES('林奇',25,100)

 

三:唯一性约束

    惟一性约束用于指定一个或者多个列的组合值具有惟一性,以防止在列中输入重复的值。定义了UNIQUE约束的那些列称为唯一键,系统自动为唯一键建立唯一索引,从而保证了唯一键的唯一性。

    当使用惟一性约束时,需要考虑以下几个因素:
       使用惟一性约束的字段允许为空值;
       一个表中可以允许有多个惟一性约束;
       可以把惟一性约束定义在多个字段上;
       惟一性约束用于强制在指定字段上创建一个惟一性索引   

/*惟一性约束*/
--我们现在将STDNAME字段加一个唯一性约束
--创建表时创建约束
CREATE TABLE student(
	ID INT NOT NULL, 
	STDNAME NVARCHAR(10),
	STDAGE INT,
	STDMARK NUMERIC(4,1)
	PRIMARY KEY(ID), --主键约束
	UNIQUE(STDNAME)--唯一性约束,不能接受相同的值了,如果需要删除约束就给约束起个名字
)
--或者修改表创建约束
ALTER TABLE student
ADD UNIQUE(STDNAME)

INSERT INTO student VALUES(1,'张三',NULL,100)
INSERT INTO student VALUES(2,'李四',NULL,100) --此句出错
INSERT INTO student VALUES(2,NULL,NULL,100) --但是可以接受NULL

  

四:检查约束

    检查约束对输入列或者整个表中的值设置检查条件,以限制输入值,保证数据库数据的完整性。
    当使用检查约束时,应该考虑和注意以下几点:
    一个列级检查约束只能与限制的字段有关;一个表级检查约束只能与限制的表中字段有关;
    一个表中可以定义多个检查约束;
    每个CREATE TABLE语句中每个字段只能定义一个检查约束;
    当执行INSERT语句或者UPDATE语句时,检查约束将验证数据;

    检查约束中不能包含子查询。  

--检查约束
--创建表时创建约束
CREATE TABLE student(
	ID INT NOT NULL, 
	STDNAME NVARCHAR(10),
	STDAGE INT,
	STDMARK NUMERIC(4,1)
	PRIMARY KEY(ID), --主键约束
	UNIQUE(STDNAME),--唯一性约束
	CHECK(STDAGE>=0 AND STDAGE <=100),--检查约束,要求年龄在0-100之间
)
--或者修改表创建约束
ALTER TABLE student
ADD CHECK(STDAGE>=0 AND STDAGE <=100)

INSERT INTO student VALUES(3,'当当',NULL,100) --如果字段允许NULL,是可以接受NULL
INSERT INTO student VALUES(4,'地地',200,100) --这在可以看到如果值超出范围是INSERT失败的

  

五:默认约束(default constraint)

    默认约束指定在插入操作中如果没有提供输入值时,则系统自动指定值。默认约束可以包括常量、函数、不带变元的内建函数或者空值。

    使用默认约束时,应该注意以下几点:
   (1)每个字段只能定义一个默认约束;
   (2)如果定义的默认值长于其对应字段的允许长度,那么输入到表中的默认值将被截断;
   (3)不能加入到带有IDENTITY属性或者数据类型为timestamp的字段上;
   (4)如果字段定义为用户定义的数据类型,而且有一个默认绑定到这个数据类型上,则不允许该字段有默认约束。

--默认(DEFAULT)约束
CREATE TABLE student(
	ID INT NOT NULL, 
	STDNAME NVARCHAR(10),
	STDAGE INT,
	STDMARK NUMERIC(4,1),
	ADDRESS NVARCHAR(100) DEFAULT '湖北武汉', --增加了一个地址字段,并给出默认值
	PRIMARY KEY(ID), --主键约束
	UNIQUE(STDNAME),--唯一性约束
	CHECK(STDAGE>=0 AND STDAGE <=100),--检查约束,要求年龄在0-100之间	
)

--或者修改表创建约束,注意这里写法有点不一样
ALTER TABLE student
ADD DEFAULT '武汉' FOR ADDRESS 

INSERT INTO student(ID,STDNAME,STDAGE,STDMARK) VALUES(1,'当当',30,100)

 

六:空值约束(null)

--空值约束,就是设定字段允不允许接受NULL
CREATE TABLE student(
	ID INT NOT NULL, 
	STDNAME NVARCHAR(10) NOT NULL,
	STDAGE INT NULL,
	STDMARK NUMERIC(4,1) NULL
)

INSERT INTO student VALUES(1,NULL,NULL,100) --错误
INSERT INTO student VALUES(1,'张三',NULL,100) --正确

   --删除约束
   ALTER TABLE student
   DROP CONSTRAINT STD_DEFAULT

   --显示表结构及内容
   SELECT * FROM student

   --删除表
   DROP TABLE student

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值