首页
学习
活动
专区
圈层
工具
发布

自己动手做数据库系统:解释执行 update 和 delete 对应的 sql 语句

在上一节我们完成了 select 语句的解释执行,本节我们看看 Update 和 Delete 对应的语句如何解释执行,当然他们的实现原理跟我们前面实现的 select 语句执行大同小异。...无论是 update还是 delete 都是对数据表的修改,因此他们的实现方法基本相同。...假设我们要执行如下 sql 语句: update STUDENT set MajorId=20 where MajorId=30 and GradYear=2020 delete from STUDENT...where MajorId=30 and GradYear=2020 要完成上面的代码,我们需要 scan底层的文件块,找到所有满足 where 条件的记录,如果语句是 update,那么把找到的记录修改掉...代码下载: https://github.com/wycl16514/database_SQL_execute_create_insert_update_delete.git

34210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    触发器记录表某一个字段数据变化的日志 包括插入insert 修改update 删除delete 操作

    本文参考:http://www.cnblogs.com/lyhabc/articles/3236985.html --触发器记录表某一个字段数据变化的日志 包括插入insert 修改update 删除delete...TSQL代码 UDate datetime                     -- 操作日期时间 constraint pk_logsto primary key(logid) ) -- 建跟踪触发器...create trigger tr_sto on sto after update,insert,delete as begin    declare @di table(et varchar(200...-- 建跟踪触发器 ALTER trigger tr_sto on sto after update,insert,delete as begin    declare @di table(et NVARCHAR...' end                       if @op ='Update'    --IF UPDATE(de)  --关键字段发生表更记录。

    2.1K10

    SQL高级查询方法

    4.12 公用表表达式 WITH 4.8 子查询 subquery 子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询。...WHERE [NOT] EXISTS (subquery) 许多包含子查询的 Transact-SQL 语句都可以改用联接表示。其他问题只能通过子查询提出。...4.12 公用表表达式 WITH 公用表表达式 (CTE) 可以认为是在单个 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 语句的执行范围内定义的临时结果集。...可以在用户定义的例程(如函数、存储过程、触发器或视图)中定义 CTE。 CTE 由表示 CTE 的表达式名称、可选列列表和定义 CTE 的查询组成。...定义 CTE 后,可以在 SELECT、INSERT、UPDATE 或 DELETE 语句中对其进行引用,就像引用表或视图一样。

    7.6K20

    SQL 基础--> 视图(CREATE VIEW)

    - SQL 基础--> 视图(CREATE VIEW) --================================ 视图: 从表中抽出来的逻辑上相关的数据集合 视图其实就是一条查询SQL语句...视图将查询的结果作为一个表来使用,因此视图可以被看作是存储的查询或一个虚拟表 视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从基表的完整性约束,并同样会触发定义 在基表上的触发器...(Oracle支持在视图上显式的定义触发器和定义一些逻辑约束) 使用视图的好处: 可把复杂的SQL语句简单化 可保证数据的安全性,限制对数据的访问,因为它对表中的一些字段是隐藏的 可使相同的数据以不同形式出现在不同的视图中...AS subquery [WITH CHECK OPTION] [WITH READ ONLY] OR REPLACE 如果视图存在,重建、修改这个视图 FORCE 不管引用的表是否存在,都创建这个视图...delete from vw_emp where empno = 7566 * ERROR at line 1: ORA-01752: cannot delete from view without

    1.1K30

    【Java 进阶篇】MySQL启动与关闭、目录结构以及 SQL 相关概念

    查询(Query):查询是使用SQL语句检索或操作数据库中的数据的过程。 INSERT语句:INSERT语句用于向数据表中插入新的记录。...SELECT语句:SELECT语句用于从数据表中检索数据。 UPDATE语句:UPDATE语句用于更新数据表中的记录。 DELETE语句:DELETE语句用于删除数据表中的记录。...存储过程(Stored Procedure):存储过程是一组SQL语句的集合,可以在数据库中保存和重复使用。...触发器(Trigger):触发器是一段SQL代码,它会在数据库中的特定事件发生时自动执行。...子查询(Subquery):子查询是嵌套在其他查询中的查询,通常用于从内部查询中获取数据以供外部查询使用。

    86210

    探索SQL Server元数据(二)

    普通的DML触发器能被定义来执行替代一些数据修改(Insert,Update或者Delete)或者在数据修改之后执行。每一个触发器与只与一个对象管理。...像DML触发器一样,可以有多个DDL触发器被创建在同一个T-SQL语句上。一个DDL触发器和语句触发它的语句在同一个事务中运行,所以除了Alter DATABASE之外都可以被回滚。...DDL触发器运行在T-SQL语句执行完毕后,也就是不能作为Instead OF触发器使用。   ...两种触发器都与事件相关,在DML触发器中,包含INSERT, UPDATE, 和DELETE,然而很多事件都可以与DDL触发器关联,稍后我们将了解。 在数据库中列出触发器 那么怎么获取触发器列表?...每个表或者视图对于触发器行为都有一个INSTEAD OF 触发器,可能是UPDATE, DELETE, 或者 INSERT 。但是一个表可以有多个AFTER触发器行为。

    1.9K20

    深入浅出解析——MYSQL|触发器

    delete触发器实例 (四). before delete触发器实例 (五). after update触发器实例 (六). before update触发器实例 5.触发器的删除 文章概要 1.触发器概念...具体而言,触发器就是MySQL响应INSERT、UPDATE和DELETE语句而自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组MySQL语句)。...触发器 DELETE触发器可在DELETE语句执行之前或者之后执行,在DELETE触发器内可引用一个名为OLD的虚拟表来访问被删除的行,OLD的值不可以被更新,全部是只读的 ● UPDATE触发器...UPDATE触发器可在UPDATE语句执行之前或者之后执行,在UPDATE触发器内可引用一个名为NEW的虚拟表来访问被更新的行,也可以引用一个名为OLD的虚拟表来访问更新之前的行,OLD的值全部只读,NEW...trigger_event 触发器的事件,有三个参数可以选择:INSERT,DELETE和UPDATE tb_name 触发器要作用的的数据表 trigger_body 触发器的主体执行语句,可以使用

    89620

    Oracle查询优化-04插入、更新与删除数据

    如果在 INSERT 或 UPDATE 操作期间违反了条件,则返回 SQL 错误。 举例说明: 我们创建一个视图,并使用了with check option来限制了视图。...里的这张表里,只不过如果不满足subquery里的where条件的话,就不允许插入。...如果插入的列有不在subquery作为检查的where条件里,那么也会不允许插入。 如果不加WITH CHECK OPTION则在插入时不会检查。 这里注意,subquery其实是不会实际执行的。...) subquery:子查询语句,可以是任何合法的select语句 conditional_insert_clause如下: [ALL][FIRST] [WHEN condition THEN][insert_into_clause...WHEN 子句(后面的when语句都不再考虑满足第一个When子句的记录,即使该记录满足when语句中的条件)。

    1.7K10

    MySQLMariaDB触发器详解

    注意,即使是after触发器,也是先将数据填充到old、new表中,再执行DML语句,最后激活触发器执行触发器中的语句。 在下面的小节中会分别验证不同事件不同时间的触发器行为。...插入新行的动作不仅仅只有insert语句,还有其他插入操作,例如load data语句、replace语句等等。...例如delete语句、replace语句。...但是drop语句、truncate语句不会激活delete触发器,因为它们是DDL语句,而MySQL/MariaDB不支持DDL触发器,它们并没有对表中的记录执行delete操作。...在insert into... on duplicate key update语句中,插入没有重复值冲突的记录时,首先判断是否存在before insert触发器,有就触发,触发之后检查约束,发现没有重复值冲突

    2.3K20

    Oracle-trigger触发器解读

    每当一个特定的数据操作语句(insert update delete)在指定的表上发出时,Oracle自动执行触发器中定义的语句序列。...| AFTER } {INSERT | DELETE | UPDATE [OF column [, column …]]} [OR {INSERT | DELETE | UPDATE [OF column...BEFORE UPDATE BEFORE UPDATE FOR EACH ROW AFTER UPDATE AFTER UPDATE FOR EACH ROW BEFORE DELETE BEFORE...DELETE FOR EACH ROW AFTER DELETE AFTER DELETE FOR EACH ROW 触发器的类型 行触发器要求当一个DML语句操作影响数据库中的多行数据时,对于其中的每个数据行...条件谓词:当在触发器中包含多个触发事件(INSERT、UPDATE、DELETE)的组合时,为了分别针对不同的事件进行不同的处理,需要使用ORACLE提供的如下条件谓词。 1)。

    1.5K30

    SQLServer 触发器

    .是一个事务(可回滚,不能手动提交) 触发器的类型 delete触发器 当删除表中记录时触发,自动执行触发器所定义的SQL语句 insert触发器 当向表中插入数据时触发,自动执行触发器所定义的SQL...语句 update触发器 当更新表中某列、多列时触发,自动执行触发器所定义的SQL语句 deleted和inserted表 触发器触发时 1.系统自动在内存中创建deleted表或inserted...,如果不满足,则向用户报告错误消息,并回滚插入操作 deleted表:表用于存储 DELETE 和 UPDATE 语句所影响的行的副本 1.在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除...如何创建触发器 1.创建触发器的语法 create trigger trigger_name on table_name for [delete|insert|update] as t-sql语句 go...触发器一般都需要使用临时表:deleted表和inserted表,它们存放了被删除或插入的记录行副本 触发器类型:INSERT触发器、UPDATE触发器、DELETE触发器

    2.4K20

    ⑩⑥ 【MySQL】详解 触发器TRIGGER,协助 确保数据的完整性,日志记录,数据校验等操作。

    什么是触发器 触发器: 触发器是与表有关的数据库对象 ,指在insert / update / delete之前或之后 ,触发并执行触发器中定义的SQL语句集合。...现在触发器还只支持行级触发 ,不支持语句级触发 。 行级触发:执行insert / update / delete语句,影响5行数据,触发器会被触发5次。...语句级触发:执行insert / update / delete语句,影响n行数据,触发器只触发1次。 触发器类型: ⚪INSERT 触发器:NEW 表示将要或已经新增的数据。...⚪UPDATE 触发器:OLD 表示修改之前的数据,NEW 表示将要或已经修改后的数据。 ⚪DELETE 触发器:OLD表示将要或已经删除的数据。 2....DELETE} ON 表名 FOR EACH ROW BEGIN -- 触发后执行的SQL语句 END; 查看触发器 SHOW TRIGGERS; 删除触发器 -- 若不指定schema_name,默认当前数据库

    57230

    ORACLE触发器具体解释

    比如:DML语句(INSERT, UPDATE, DELETE语句对表或视图运行数据处理操作)、DDL语句(如CREATE、ALTER、DROP语句在数据库中创建、改动、删除模式对象)、数据库系统事件(...l 在触发器的运行部分仅仅能用DML语句(SELECT、INSERT、UPDATE、DELETE),不能使用DDL语句(CREATE、ALTER、DROP)。...l 触发事件:引起触发器被触发的事件,即DML操作(INSERT、UPDATE、DELETE)。...假设触发语句是 DELETE 语句,则为TRUE,否则为FALSE 8.2.6 又一次编译触发器 假设在触发器内调用其他函数或过程,当这些函数或过程被删除或改动后,触发器的状态将被标识为无效。...例1:创建一个DML语句级触发器,当对emp表运行INSERT, UPDATE, DELETE 操作时,它自己主动更新dept_summary 表中的数据。

    1.6K30
    领券