第九章 规则、默认和完整性约束

【例9.1】为stu_info表定义一个规则,指定其成绩列的值必须大于0,小于100,输入语句如下。
USE test;
GO
CREATE RULE rule_score
AS
@score > 0 AND @score < 100

【例9.2】将创建的rule_score规则绑定到stu_info表中的s_score列上,输入语句如下。
USE test;
GO
EXEC sp_bindrule 'rule_score', 'stu_info.s_score'

【例9.3】向stu_info表中插入一条记录,该条学生记录的成绩值为110,输入语句如下。
INSERT INTO stu_info VALUES(21,'鹏飞',110,'男',18);
SELECT * FROM stu_info;

【例9.4】解除stu_info表中s_score列上的规则绑定,输入语句如下。
EXEC sp_unbindrule 'stu_info.s_score'

【例9.5】删除前面创建的名称为rule_score的规则,输入语句如下。
DROP RULE rule_score;

【例9.6】在stu_info表中创建默认值,输入语句如下。
CREATE DEFAULT defaultSex AS '男'

【例9.7】将defaultSex默认值绑定到stu_info表中的s_sex列,输入语句如下。
USE test;
GO
EXEC sp_bindefault 'defaultSex', 'stu_info.s_sex'

【例9.8】向stu_info表中插入一条记录,不指定性别字段,输入语句如下。
INSERT INTO stu_info (s_id,s_name,s_score,s_age)  VALUES(21,'王凯',90,19);
SELECT * FROM stu_info;

【例9.9】取消stu_info表中s_sex列的默认值绑定,输入语句如下。
USE test;
GO
EXEC sp_unbindefault  'stu_info.s_sex'

【例9.10】删除前面创建的名称为defaultSex的默认值,输入语句如下。
DROP DEFAULT  defaultSex;

【例9.11】定义数据表tb_emp2,其主键为id,SQL语句如下:
CREATE TABLE tb_emp2
(
id      INT PRIMARY KEY,
name   VARCHAR(25) NOT NULL,
deptId  CHAR(20) NOT NULL,
salary  FLOAT NOT NULL
);

【例9.12】定义数据表tb_emp 3,其主键为id,SQL语句如下:
CREATE TABLE tb_emp3 
(
id INT NOT NULL,
name   VARCHAR(25) NOT NULL,
deptId  CHAR(20) NOT NULL,
salary  FLOAT NOT NULL
CONSTRAINT 员工编号
PRIMARY KEY(id)
);

【例9.13】定义数据表tb_emp4,创建完成之后,在该表中的id字段上添加主键约束,输入语句如下。
CREATE TABLE tb_emp4 
(
id INT NOT NULL,
name   VARCHAR(25) NOT NULL,
deptId  CHAR(20) NOT NULL,
salary  FLOAT NOT NULL
);
该表创建时没有指定主键,创建完成之后,执行下面的添加主键的语句。
USE company;
GO
ALTER TABLE tb_emp4
ADD
CONSTRAINT 员工编号
PRIMARY KEY(id)

【例9.14】定义数据表tb_emp5,假设表中间没有主键id,为了唯一确定一个员工,可以把name、deptId联合起来做为主键,SQL语句如下:
CREATE TABLE tb_emp5
 (
name VARCHAR(25),
deptId INT,
salary FLOAT,
CONSTRAINT 姓名部门约束
PRIMARY KEY(name,deptId)
);

【例9.15】删除tb_emp5表中定义的联合主键,输入语句如下。
ALTER TABLE tb_emp5
DROP
CONSTRAINT姓名部门约束

【例9.16】定义数据表tb_emp6,并在tb_emp6表上创建外键约束。
创建一个部门表tb_dept1,SQL语句如下:
CREATE TABLE tb_dept1
(
id       INT PRIMARY KEY,
name    VARCHAR(22)  NOT NULL,
location  VARCHAR(50)  NULL
);
定义数据表tb_emp6,让它的键deptId作为外键关联到tb_dept1的主键id,SQL语句为:
CREATE TABLE tb_emp6 
(
id       INT  PRIMARY KEY,
name    VARCHAR(25),
deptId   INT, 
salary   FLOAT,
CONSTRAINT fk_员工部门编号 FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
);

【例9.17】如前面例子,如果创建是不设置外键约束,则创建表完成之后,可输入如下语句。
USE company;
GO
ALTER TABLE tb_emp6 
ADD
CONSTRAINT fk_员工部门编号
FOREIGN KEY(deptId) REFERENCES tb_dept1(id)

【例9.18】删除tb_emp6表中创建的“fk_员工部门编号”外键约束,输入语句如下。
ALTER TABLE tb_emp6
DROP CONSTRAINT fk_员工部门编号;

【例9.19】定义数据表tb_dept2,指定部门的名称唯一,SQL语句如下:
CREATE TABLE tb_dept2 
(
id       INT NOT NULL  PRIMARY KEY,
name    VARCHAR(22) NOT NULL UNIQUE,
location  VARCHAR(50)
);

【例9.20】定义数据表tb_dept3,指定部门的名称唯一,SQL语句如下:
CREATE TABLE tb_dept3 
(
id       INT NOT NULL PRIMARY KEY,
name    VARCHAR(22) NOT NULL,
location  VARCHAR(50),
CONSTRAINT 部门名称 UNIQUE(name)
);

【例9.21】创建tb_emp7表中,定义员工的工资列值大于1800小于3000,创建CHECK约束,输入语句如下。
CREATE TABLE tb_emp7 
(
  id       INT  PRIMARY KEY,
  name     VARCHAR(25) NOT NULL,
  deptId   INT NOT NULL, 
  salary   FLOAT  NOT NULL 
  CHECK(salary > 1800 AND salary < 3000)
);

【例9.22】定义数据表tb_emp8,指定员工的部门编号默认为1111,SQL语句如下:
CREATE TABLE tb_emp8 
(
id      INT  PRIMARY KEY,
name   VARCHAR(25) NOT NULL,
deptId  INT  DEFAULT 1111, 
salary  FLOAT,
);

--课后练习
--create database Market
--use Market
--create table customers
--(
-- c_id int primary key not null,
-- c_name varchar(50),
-- c_contact varchar(50),
-- c_city varchar(50),
-- c_birth datetime not null
--);

--create table orders
--(
-- o_num int not null,
-- o_date date,
-- c_id int
-- constraint 员工部门编号 foreign key(c_id) references customers(c_id)
--)

--use Market
--go
--alter table orders
--add
--constraint 数目
--primary key(o_num)

--alter table orders
--drop constraint 数目;

--alter table orders
--drop constraint 员工部门编号;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值