这篇随笔用来记录数据库的学习,随时更新补充,主要写一些比较少关注的内容
现实操作中,CHECK、FOREIGN KEY 和 NOT NULL 约束要求计算列是持久化(PERSISTED)的。
大概它的作用就是这个吧?
AS CONVERT (AS是计算列关键字,CONVERT将字符串从一个字符集转化为另一个字符集):
CREATE TABLE test.测试
(
字符串 char(10) PRIMARY KEY
新字符串 AS CONVERT(TINYINT,SUBSTRING(字符串,3,2)) PERSISTED NOT NULL --从字符串第三位开始(包括第三位),截取两个字符
)
CHECK 里面使用 OR 和 IN
CREATE TABLE test.学生(
学号 char(10) PRIMARY KEY,
姓别 char(2) CHECK(姓别='男' OR 姓别='女'),
状态 char(4) CHECK(状态 IN('正常','留级','休学','退学'))
)
联合关键字?
(1)学号和课程编号两列构成主关键字(需要表级完整性约束)
(2)学号参照学生表的学号(约束选课的学生必须存在)
(3)课程编号参照课程表的课程编号(约束被选的课程必须存在)
CREATE TABLE test.选课
(
学号 char(10) FOREIGN KEY REFERENCES student.学生,
课程编号 char(6) FOREIGN KEY REFERENCES student.课程,
考试成绩 tinyint CHECK(考试成绩 BETWEEN 0 AND 100) DEFAULT NULL
PRIMARY KEY(学号,课程编号)
)
如果某列定义了外部关键字约束,则需要先删除相关的约束,才能删除此列。
CREATE TABLE test.课程(
责任教师 char(6) CONSTRAINT duty_teacher
FOREIGN KEY REFERENCES student.教师(编号),
)
第一步:ALTER TABLE test.课程 DROP duty_teacher
第二步:ALTER TABLE test.课程 DROP COLUMN 责任教师
ON DELETE SET NULL --当删除时,该列置为空值
ON UPDATE CASCADE --级联更新