oracle数据库开发与应用 游标和异常 19游标
oracle数据库开发与应用 触发器 181以前对数据进行操作,都是直接对数据表进行操作,只需要遵守数据表自身的约束条件就可以了。但是,实际工程中的数据操作,其对数据完整性要求的复杂度远远不止于此。
1234567例如,在数据库中,课程表内要插入一门课程,但是要求这门课程的任课教师不是符传谊。课程信息表结构如图18-1所示。按照常理,首先要在TTEACHER中查询符传谊的教师编号然后,使用约束来限制插入课程的任课教师编号。但是,查询得到结果来对数据表进行约束,需要手工去控制,非常麻烦,并且易出现错误。在之前的讲解中,介绍了表的约束CHECK。可以看出,在课程信息表中存储了教师编号,但是没有存储教师的姓名,而CHECK只能对本表中的列进行判断,无法到别的表中进行判断。于是,可以用到触发器
使用触发器12345触发器(TRIGGER),能够对数据操作、数据定义、系统事件进行校验、监控、记录,从而保证数据的完整性、提高数据库安全性。触发器的概念中,最重要的原理是“触发”,即,当发生指定的事件时,系统就会自动运行相应的程序块。以上概念的潜台词是触发器不能手工调用,只能在某件事情(如添加、删 ...
数据库系统-常用用法积累Delete注意1删除重复邮件,保留最小的id email 来自leecode
1234567891011# Write your MySQL query statement belowdelete from Person where Person.id not in (select t.id from (select p2.id from Person p2where p2.email in (select p1.emailfrom Person p1group by p1.emailhaving count(*)=1)) t)
123如果不要貌似多余的select t.id from ( 会报错--MySQL 不允许在 DELETE 语句的 WHERE 子句中直接使用正在被更新的表。
12345delete from Person where id not in ( select a.id from ( select min(id) from Person group by email a ) a)
1234DELETE p1 FROM Pers ...
数据库系统数据库系统概述123DB:按照数据结构来组织,存放和管理数据的仓库DBMS:是一种操纵和管理数据库的大型软件,用于建立,使用和维护数据库DBS:应用程序、数据库、数据管理员构成
关系数据库1234567数据模型:层次,网状,关系(以二维表的形式表示实体与实体间联系的数据模型)关系模型基本概念:主键,候选码,主属性,非主属性,外键主键只能有一个,属于候选码中的一个候选码:能够唯一标识一个元组主属性:任意候选码中的属性都是非主属性:不属于任意候选码属性中的一个
123判断一个属性是否是空值只能用:is null is not null
12域完整性(比如性别这个列只能是男或者女)、实体完整性(主键不能为空或者相同)、参照完整性(外键取值和另一个表的主键取值相同)是关系模型中必须满足的完整性约束条件用户自定义完整性:值唯一,[男,女],[1-50]
123456关系代数:关系与关系运算结果仍是关系集合运算:并,交,差关系运算:广义笛卡尔积,连接(wher),选择(选择元祖相当于where),投影(select 某些类,过滤掉不需要的列),除(简单理解:除法运算找出那些在被除 ...
黑马MySQL数据库从入门到精通-基础篇数据库相关概念数据库1Database,简称DB。按照一定的数据结构来组织、存储和管理数据的仓库。
数据库管理系统1Database Management System,一种操纵和管理数据库的大型软件,用于创建、使用和维护数据库,简称DBMS。
关系型数据库(RDBMS)1234概念: 关系型数据库,是建立在关系模型基础上,由多张相互连接的二维表组成的数据库。特点:1. 使用表存储数据,格式统一,便于维护2. 使用SQL语句操作,标准统一,使用方便
非关系型数据库(NoSQL)1234概念:Not-Only SQL,泛指非关系型数据库,是对关系型数据库的补充。特点:1. 数据结构灵活2. 伸缩性强
SQL12结构化查询语言(Structured Query Language),简称SQL。是一种操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准
mysql数据库安装1大数据开发工程师那个课程的hive篇讲的很详细
启动
1234net start mysql80; --mysql80是安装时设置的mysql serv ...
数据库系统-完整性约束参考csdn
列级约束和表级约束1234(1)对一个数据列建立的约束,称为列级约束(2)对多个数据列建立的约束,称为表级约束(3)列级约束既可以在列定义时声明,也可以在列定以后声明(4)表级约束只能在列定义后声明
1域完整性,实体完整性,参照完整性是关系模型中必须满足的完整性约束条件
实体完整性12345主键约束(PRIMARY KEY):确保每条记录的唯一性,主键字段必须是唯一的且不为空。可以是单个字段,也可以是多个字段的组合。唯一约束(UNIQUE):确保某个字段的值在整个表中是唯一的。自动增长约束(AUTO_INCREMENT):通常与主键一起使用,确保主键字段在新记录插入时自动增加。
主键约束1234唯一且不为空主键可以由一个字段组成,也可以由多个字段组成如果主键可以由一个字段组成既可以添加到列级也可以添加到表级如果由多个字段组成只能添加到表级
1234567891011121314151617181920create table 表名( 字段名 字段类型 primary key ); create table 表名( 字段名1 字段类 ...
黑马MySQL数据库从入门到精通-基础篇 事务事务1事务是一组操作的集合,这组操作,要么全部执行成功,要么全部执行失败。
事务操作12START TRANSACTION;--开启事务COMMIT/ROLLBACK;--提交/回滚事务
并发事务问题123脏读:一个事务可以读取另一个事务未提交的数据不可重复读:一个事务两次相同操作得到不同的结果(两次时间间隙有另一个事务进行数据操作)幻读:例如一个事务查询没有对应数据(此时另一个事务进行数据插入),然后进行数据插入,提醒已有对应数据,但是查询也还是没有(可重复读实现)
隔离级别1234read uncommitread commitrepeatable readserializable
12345 脏读 不可重复读 幻读read uncommit v v vread commit x v vrepeatable read x x vserializable x x x
123456789MySQL的默认事务隔离级别是 REPEATABLE READ。这意味着,在一个 ...
游标1游标(CURSOR)是用来存储查询结果集的数据类型,在存储过程和函数中可以使用游标对结果集进行循环的处理。游标的使用包括游标的声明、OPEN、FETCH和 CLOSE,其语法分别如下。
用法1234567891011声明游标DECLARE 游标名称 CURSOR FOR 查询语句;打开游标OPEN 游标名称;获取游标记录FETCH 游标名称 INTO 变量[,变量];关闭游标CLOSE 游标名称
案例1
1执行创建存储过程命令报错,声明变量和声明游标的顺序有要求
1上面的报错是因为执行存储过程后,当游标里的数据遍历完成后,由于是死循环当无数据时也执行,导致报错
异常处理程序
1上图是对前面的案例的改进
案例2123456789101112131415创建存储过程,里面使用游标,对每一行进行数据修改create procedure a()begin declare cno int; declare sno int; declare my_cursor cursor for select cno,sno from t; open my_cursor; fetc ...
数据库系统-刷题mysql常问问题mysql面试问题
1234567891011121314151617181920212223常用的存储引擎?InnoDB与MyISAM的区别?什么是事务,以及事务的四大特性?事务的隔离级别有哪些,MySQL默认是哪个?内连接与左外连接的区别是什么?MySQL默认InnoDB引擎的索引是什么数据结构?如何查看MySQL的执行计划?索引失效的情况有哪些?什么是回表查询?什么是MVCC?MySQL主从复制的原理是什么?主从复制之后的读写分离如何实现?数据库的分库分表如何实现?
1234567891011121314151617181920SQL性能优化经验1.sql优化大多依赖索引进行2.聚集索引和二级索引对于理解sql优化很关键(能使用聚集使用过滤就不使用二级索引,效率更高)3.满足业务需求的情况下,尽量降低主键的长度 --因为二级索引叶子节点会存储主键,会导致索引数据大插入数据时,尽量选择顺序插入,选择使用AUTO_INCREMENT自增主键。 --避免页分裂尽量不要使用UUID做主键或者是其他自然主键,如身份证号 --长度长且无序4.load d ...
黑马MySQL数据库从入门到精通-进阶篇 3锁概述1锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、1/0)的争用以外,数据也是-种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访可性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。
分类1234MySQL中的锁,按照锁的粒度分,分为以下三类1.全局锁:锁定数据库中的所有表。2.表级锁:每次操作锁住整张表。3.行级锁:每次操作锁住对应的行数据
全局锁介绍12全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML的写语句,DDL语句,已经更新操作的事务提交语句都将被阻塞。其典型的使用场景是做全库的逻辑备份,对所有的表进行锁定,从而获取一致性视图,保证数据的完整性
123如果备份时不加锁,会导致数据不一致mysqldump是mysql提供的备份工具
演示123flush tables with read lock;unlock tables;
特点123456数据 ...





