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

自己动手做数据库系统:解释执行 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

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

    触发器记录表某一个字段数据变化的日志 包括插入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.3K10

    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 语句中对其进行引用,就像引用表或视图一样。

    8.5K20

    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.3K30

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

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

    1.2K10

    探索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触发器行为。

    2.1K20

    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语句中的条件)。

    2.1K10

    深入浅出解析——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 触发器的主体执行语句,可以使用

    1.1K20

    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.6K20

    MySQL 数据库规范--开发篇

    目录 ---- 1.sql语句编写2.explain 工具的使用--重点 1.sql语句编写 ---- SQL编写 1.执行大的delete、update、insert操作要慎重,特别是对业务繁忙的系统...4.一般情况下update,delete 语句中不要使用limit。 5.where 条件语句中必须使用合适的类型,避免mysql进行隐式转换。...9.避免使用存储过程、触发器、函数等,这些特性会将业务逻辑与数据库耦合在一起,并且MySQL的存储过程,触发器,函数中可能存在bug。 10.尽量避免使用子查询,连接。...表示查询中每个 select 子句的类型(是简单还是复杂)输出结果类似如下:1.simple查询中不包含子查询或者union2.primary查询中若包含任何复杂子查询,最外层查询被标记为primary3.subquery...在select 或 where 列表中包含了子查询,则该查询被标记为subquery4.derived在from列表中包含的子查询被标记为derived(衍生)5.union若第二个select出现在union

    2.1K20

    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.8K30

    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.8K20
    领券