数据库对象

简介: 数据库对象

常见的数据库对象



  • 表 : 存储数据的逻辑单元
  • 数据字典 : 就是系统表, 存放数据库相关的信息
  • 约束 : 执行数据校验的规则,用于保证数据完整性的规则
  • 视图 :一个或者多个数据表里的数据的逻辑显示,试图并不存储数据
  • 索引 :用于提高查询性能,相当于书的索引
  • 存储过程 : 用于完成一次完整的业务处理,没有返回值,但是可通过传出参数将多个值传给调用环境
  • 存储函数 : 用于完成一次特定的计算,具有返回值
  • 触发器 : 相当于一个时间监听器,当数据库发生特定时间后,触发器被触发,完成响应的处理


视图概述


他就相当于一种存储起来的select语句


一个或者多个数据表里的数据的逻辑显示,并无法真正的处理数据
--- 视图就相当于一种虚拟表, 本身不具有数据的,占用内存非常少。
【视图建立在已有表的基础上,视图依赖的表就是 基表】


对视图进行CRUD操作,也就是对数据库中的对应的表进行操作。因为数据只有一份,试图就是他的一种显示形式


试图本省的删除,不会导致对基表中数据的删除。


视图不仅可以创建在一个表或者多个基本表上,
还可以创建在一个或者多个已经定义好的视图上。
或者创建在表 and 视图 上


image-20230515185055995.png


为什么使用视图(优点)


  • 控制数据访问权限,对相关保密的内容不给相关的人员查询到。
  • 简化查询
  • 减少数据冗余
  • 数据安全操作
  • 适应灵活多变的需求
  • 能够分解复杂的查询逻辑


为什么不使用视图(缺点)


基于表,所以需要及时进行维护(维护成本高)


基本使用

**语法: **


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 
查询语句


视图更新失败的原因


  1. 视图由两个以上的基本表导出,不能更新
  2. 视图中的字段来自于函数、表达式、常量等 或者说字段本身不存在的情况,就会更新失败
  3. 若视图中含有GROUP BY 子句,不能更新
  4. 视图定义中含有DISTINCT短语,不能更新
  5. 视图定义中有嵌套查询等
  6. ….


存储过程与存储函数


**概念: **


- 存储过程 : **用于完成一次完整的业务处理**,没有返回值,但是可通过传出参数将多个值传给调用环境
- 存储函数 : **用于完成一次特定的计算**,具有返回值

理解

含义 :


存储过程 :就是一组经过预先编译的SQL语句的封装。


执行过程: 
  存储过程就是将一组SQL语句预先存储在服务器上,需要执行的时候,客户端只需要向服务器端发出调用存储过程的命令。
服务器端就可以把预先存储好的这一系列SQL语句全部执行


**好处 : **


  • 简化操作,提高SQL语句的重要性,减少开发程序员的压力
  • 减少操作过程中的失误,提高效率
  • 减少网络传输量
  • 减少SQL语句暴露在网络上的风险,提高安全性


和视图的对比


- 视图时虚拟表
- 存储过程直接操作底层真正的数据表


语法


**分类 : **


  • 没有参数(无参无返回)
  • 仅仅带有IN类型(有参无返回)
  • 仅仅带有OUT类型(无参有返回)
  • 即带有IN 又带有OUT (有参有返回)


CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型) ----如果不写, 默认为IN
BEGIN
  存储过程体(
  SQL语句1;
  SQL语句2
END
--- 存储过程的调用
CALL 存储过程名();
----------------------------------存储函数---------------------------------
CREATE FUNCTION 函数名( 参数名 参数类型 , ...)
RETURNS 返回值类型
BEGIN
  函数体 #函数体一定要有返回值
END


特征

image-20230515195800374.png


image-20230515195825326.png

image-20230515203528091.png


对比两者 :


image-20230515203819664.png


数据库完整性



实体完整性


实体完整性就是说 : 创建表的时候用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触发器


目录
相关文章
|
6月前
|
Oracle 安全 关系型数据库
【Oracle】玩转Oracle数据库(六):模式对象管理与安全管理
【Oracle】玩转Oracle数据库(六):模式对象管理与安全管理
82 10
|
6月前
|
SQL Java 数据库连接
Connection(数据库连接对象)
Connection(数据库连接对象)
76 0
|
2月前
|
SQL 关系型数据库 数据库连接
php连接数据库之PDO,PDO的简单使用和预定义占位符的使用以及PDOStatement对象的使用,占位符的不同形式,bindValue和bindParam绑定预定义占位符参数的区别
本文介绍了PHP中PDO(PHP Data Objects)扩展的基本概念和使用方法。内容包括PDO类和PDOStatement类的介绍,PDO的简单使用,预定义占位符的使用方法,以及PDOStatement对象的使用。文章还讨论了绑定预定义占位符参数的不同形式,即bindValue和bindParam的区别。通过具体示例,展示了如何使用PDO进行数据库连接、数据查询、数据插入等操作。
php连接数据库之PDO,PDO的简单使用和预定义占位符的使用以及PDOStatement对象的使用,占位符的不同形式,bindValue和bindParam绑定预定义占位符参数的区别
|
3月前
|
SQL Java 数据库连接
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。通过映射机制,它可以自动处理对象与数据库表之间的转换,支持主流数据库,提高了代码的可移植性和可维护性。其核心接口包括 SessionFactory、Session 和 Transaction 等,通过它们可以执行数据库的 CRUD 操作。配置方面,需在项目中引入 Hibernate 及数据库驱动依赖,并创建 `hibernate.cfg.xml` 配置文件来设置数据库连接和 Hibernate 行为参数。
47 1
|
3月前
|
数据库连接 数据库
实现加载驱动、得到数据库对象、关闭资源的代码复用,将代码提取到相应的工具包里边。优化程序
该博客文章展示了如何通过创建工具类`Connectiontools`实现数据库连接、语句执行以及资源关闭的代码复用,以优化程序并提高数据库操作的效率和安全性。
|
3月前
|
存储 SQL 数据库
【计算机三级数据库技术】第7章 数据库及数据库对象--附思维导图
文章概述了数据库的创建、维护、架构、分区表、索引和索引视图的操作要点,并提供了SQL Server环境下的具体T-SQL命令示例。内容涵盖了数据库文件的管理、架构的使用、分区表的创建和优化、索引的创建与删除,以及索引视图的定义和应用场景。
33 2
|
3月前
|
SQL 关系型数据库 数据库
手把手教你管理PostgreSQL数据库及其对象
手把手教你管理PostgreSQL数据库及其对象
66 0
|
3月前
|
SQL 数据库
拒绝了对对象 ‘GetTips‘ (数据库 ‘vipsoft‘,架构 ‘dbo‘)的 EXECUTE 权限
拒绝了对对象 ‘GetTips‘ (数据库 ‘vipsoft‘,架构 ‘dbo‘)的 EXECUTE 权限
41 0
|
4月前
|
Oracle 关系型数据库 数据库