你的位置:首页 > 数据库

[数据库]数据库学习随笔


这篇随笔用来记录数据库的学习,随时更新补充,主要写一些比较少关注的内容

 

 

PERSISTED:

 

说明物理存储计算列的值(书本上的解释,什么鬼意思...)

 

现实操作中,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 --级联更新