他就相当于一种存储起来的select语句
一个或者多个数据表里的数据的逻辑显示,并无法真正的处理数据
--- 视图就相当于一种虚拟表, 本身不具有数据的,占用内存非常少。
【视图建立在已有表的基础上,视图依赖的表就是 基表】
对视图进行CRUD操作,也就是对数据库中的对应的表进行操作。因为数据只有一份,试图就是他的一种显示形式
试图本省的删除,不会导致对基表中数据的删除。
视图不仅可以创建在一个表或者多个基本表上,
还可以创建在一个或者多个已经定义好的视图上。
或者创建在表 and 视图 上
**语法: **
CREATE VIEW 视图名[(对应的字段列表)]
AS
查询语句
-- 例如
CREATE VIEW s_student[(id,name,score,dis)]
AS
SELECT id,name, score,discrib FROM student;
删除视图:
DROP VIEW 视图名;
更新视图:
更新视图 就是指通过视图来插入、删除和修改数据
由于视图实际是不存在的,所以对试图的操作,最终就会转换为对基表的操作
### 语法
--s_student就是上述我们创建的视图。
UPDATE s_student
SET name = `小花`
WHERE id = 10;
**修改视图: **
由于基表中某些字段发生改变,所以我们的视图需要进行对应的修改
### 语法
ALTER VIEW 视图名称
AS
查询语句
**概念: **
- 存储过程 : **用于完成一次完整的业务处理**,没有返回值,但是可通过传出参数将多个值传给调用环境
- 存储函数 : **用于完成一次特定的计算**,具有返回值
含义 :
存储过程 :就是一组经过预先编译的SQL语句的封装。
执行过程:
存储过程就是将一组SQL语句预先存储在服务器上,需要执行的时候,客户端只需要向服务器端发出调用存储过程的命令。
服务器端就可以把预先存储好的这一系列SQL语句全部执行
**好处 : **
- 视图时虚拟表
- 存储过程直接操作底层真正的数据表
**分类 : **
CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型) ----如果不写, 默认为IN
BEGIN
存储过程体(
SQL语句1;
SQL语句2
)
END
--- 存储过程的调用
CALL 存储过程名();
----------------------------------存储函数---------------------------------
CREATE FUNCTION 函数名( 参数名 参数类型 , ...)
RETURNS 返回值类型
BEGIN
函数体 #函数体一定要有返回值
END
对比两者 :
实体完整性就是说 : 创建表的时候用PRIMARY KEY 来定义单属性
对单属性构成有两种说明方法:
CREATE TABLE student(
# 在列级定义主键
id int not NULL UNIQUE PRIMARY KEY,
`name` VARCHAR(25) not NULL,
age INT not null CHECK(age < 100 && age > 0)
)
CREATE TABLE student(
id int not NULL UNIQUE ,
`name` VARCHAR(25) not NULL,
age INT not null CHECK(age < 100 && age > 0),
# 在表级定义主键
PRIMARY KEY(id)
)
对于多个属性构成的码(键),只有一种说明方法,即定义为表级约束条件
CREATE TABLE student(
Cid int not NULL UNIQUE ,
Sid int not null unique,
`name` VARCHAR(25) not NULL,
# 在表级定义主键
PRIMARY KEY(Cid, Sid)
)
对于实体完整性的检查,我们要做的就是如果不符合就禁止操作。(add or update)
参照完整性(referential integrity)定义 :
是关系型数据库的一个概念,它用于确保在两个表之间的关联关系中,引用的外键值必须存在于被引用的主键表中。
也就是说,如果一个表中的某个字段(外键)引用了另一个表中的一个字段(主键),那么这个外键值必须存在于被引用的主键表中,否则就会违反参照完整性。
CREATE TABLE `student1` (
`id` int NOT NULL,
`name` varchar(25) NOT NULL,
`age` int NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`),
CONSTRAINT `student1_ibfk_1` FOREIGN KEY (`id`) REFERENCES `averagesc` (`id`),
CONSTRAINT `student1_chk_1` CHECK (((`age` < 100) and (`age` > 0)))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
当不符合参照完整性时, 我们可以采取以下操作来进行修改
简单的说, 用户完整性就是对表中的字段的限制条件。
比如说我们的主键不能为空,所以我们会通过使用NOT NULL
的方式来设置, 如果说其他字段,比如学号 它具有唯一性, 所以我们可以通过使用UNIQUE
来进行设置。
官方解释:
是指在关系型数据库中,除了参照完整性以外,用户还可以通过定义规则或限制来保证数据的完整性和一致性。这些规则或限制是由用户或应用程序开发人员定义的,用于限制数据的输入或修改,从而确保数据的正确性和可靠性。
属性上的约束具体由三种
NOT NULL
)
UNIQUE
)
CHECK短语
)
CREATE TABLE student(
# 非空, 唯一
id int not NULL UNIQUE PRIMARY KEY,
`name` VARCHAR(25) not NULL,
# 通过check短语来进行判断
age INT not null CHECK(age < 100 && age > 0)
)
官方解释
在关系型数据库中,断言(assertion)是一种用于检查数据库中数据是否符合特定条件的逻辑表达式。它与数据检查约束类似,但更加灵活和通用。与数据检查约束只能限制某个字段的取值范围或格式不同,断言可以涵盖整个表或多个表之间的数据关系,并且可以执行更为复杂的逻辑判断。
举例来说
就是我们的学生-课程表 ,每个课程最多只能有60 个人,如果大于60 那么剩余的就会添加失败。(限制数据库表的数量)
create assertion 断言名
CHECK子句
----------
具体实例
create assertion sut_Course
CHECK(60 >= SELECT count(*) FROM student)
DROP ASSERTION 断言名;
官方解释:
触发器(Trigger)是一种数据库对象,用于在特定的数据库操作(如INSERT、UPDATE或DELETE操作)执行之前或之后自动执行一些指定的动作。触发器通常用于实现数据完整性约束和业务逻辑,以及在数据发生变化时执行一些自定义的操作。
触发器又叫事件-条件-动作
规则
CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_name
[FOR EACH ROW]
[WHEN condition]
BEGIN
-- 触发器执行的SQL语句或存储过程
END;
其中,定义触发器的关键字包括:
CREATE TRIGGER
:创建一个新的触发器对象。trigger_name
:触发器的名称,应该唯一且易于识别。{BEFORE | AFTER}
:指定触发器在相应的数据库操作之前或之后执行。{INSERT | UPDATE | DELETE}
:指定触发器要响应的事件类型。ON table_name
:指定触发器要关联的表名。[FOR EACH ROW]
:指定触发器的执行方式,对于每一行数据是否执行一次。[WHEN condition]
:指定触发器执行的条件,如果条件不满足,则触发器不会执行。BEGIN...END
:触发器执行的动作,可以包含一条或多条SQL语句或存储过程。例如,以下是一个在表employees
上创建一个在INSERT操作之前触发的触发器的示例:
CREATE TRIGGER before_insert_employee -- 创建触发器
BEFORE INSERT ON employees -- 在insert之前操作 表employees
FOR EACH ROW -- 对每一行都要执行
BEGIN -- 开始执行
IF NEW.salary < 0 THEN -- 判断条件
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Salary cannot be negative';
END IF;
END; -- 执行结束
触发器的执行是由出发事件激活的,并由数据库服务器自动执行的。
执行顺序如下 :
1. 执行该表上的BEFORE触发器
2. 执行该表上的SQL语句
3. 执行该表上的AFTER触发器