事务:
狭义:从当前的tpl操作到下一次tpl操作之间所有的dml操作
(如果中间执行了DDL语句 之前未提交的dml语句会自动提交)
广义:任何一次要么全部成功要么全部失败的操作
提交:commit
回滚:rollback
insert intO EMP_1(EMPNO) VALUES(111);
ROLLBACK;
COMMIT
事务的四个特性:(ACID)
原子性:事务包含的操作 要么全部成功 要么全部失败回滚
一致性:事务执行的前后 整体的状态一致
隔离性:当多个用户并发访问数据库时,数据库为每个用户开辟的事务
不受其他事务的影响 每个用户之间的事务是隔离的
持久性:一个事务一旦提交之后 对数据库的改变是永久的 即使数据库
故障也不会丢失数据
锁:读锁(共享锁) 写锁(排它锁)
死锁:多个用户互相占有对方的资源 导致谁也无法完成自己的操作(解:让一方1、回滚或提交;2、下线;)
--正则函数
通配符
1、 ^ 行首 [^]非/取反
2、 $ 行尾
3、 . 任意单个字符
4、 * 匹配0次或者多次
5、 ?匹配0次或者1次
6、 + 匹配1次或者多次
7、 {m}刚好匹配了m次
8、 {m,}至少匹配m次
9、 {m,n}匹配m~n次
10、a|b a或b
11、[abc] a或b或c
12、 \ 转义
13、[[:space:]] 空白字符 比如说回车/换行/换页
14、[[:punct:]] 标点符号
15、 [[:cntrl:]] 控制符
16、 () 标签
17、 [char] 字符列表
小写字母 [a-z] [[:lower:]]
大写字母 [A-Z] [[:UPPER:]]
大小写字母[a-zA-Z] [[:alpha:]]
数字 [0-9] [[:digit:]]
字母和数字 [0-9a-zA-Z] [[:alphanum:]]
正则函数
1、REGEXP_LIKE
2、REGEXP_INSTR
3、REGEXP_SUBSTR
4、REGEXP_REPLACE
5、REGEXP_COUNT
1、REGEXP_LIKE(列,匹配模式[,匹配参数])
匹配参数:c 大小写敏感 --默认
i 大小写不敏感
n 可以匹配换行符号
m 多行模式
x 扩展模式 忽略正则表达式中的空白字符
SELECT * FROM PERSON;
--查询zip列以数字开头的
SELECT * FROM PERSON
WHERE REGEXP_LIKE(ZIP,'^[0-9]');
--查询zip列非数据结尾的人
SELECT * FROM PERSON*
WHERE REGEXP_LIKE(ZIP,'[^0-9]$');
--查询first_name以s开头n结尾
SELECT * FROM PERSON
WHERE REGEXP_LIKE(FIRST_NAME,'^S.*N$','i');
--查询first_name中包含JO的
SELECT * FROM PERSON
WHERE REGEXP_LIKE(FIRST_NAME,'.JO.','i');
SELECT * FROM PERSON
WHERE REGEXP_LIKE(FIRST_NAME,'(JO)+','i');
2、REGEXP_INSTR(STR,'匹配模式'[,数1[,数2[,数3[,匹配参数]]]])
查找字符串出现的位置
找符合匹配模式的在str中出现的位数 从数1开始找数2次出现的位置
数3表示返回值类型 --默认是0
如果是0 返回匹配到的字符的第一个字符的位置 abcdef cd 3
非0 返回匹配到字符串的最后一个字符的下一个位置 abcdef cd 5
--查看zip列第一个非数字字符的位置
SELECT ZIP,REGEXP_INSTR(ZIP,'[^0-9]',1,1,1) AAAAA FROM PERSON;
--查找zip列第二次出现字母和数字组合的位置
SELECT ZIP,REGEXP_INSTR(ZIP,'[A-Z][0-9]',1,2,0,'i') AAAAAA FROM PERSON;
--查找zip列第一次出现字母和数字组合的位置(返回字符串最后一个字符的下一位)
SELECT ZIP,REGEXP_INSTR(ZIP,'[A-Z][0-9]',1,1,2,'i') AAAAAA FROM PERSON;
3、REGEXP_SUBSTR(STR,'匹配模式'[,数1[,数2[,匹配参数]]])
截取字符串中符合匹配模式的字符 从数1开始找数2次出现的
--截取zip列中第一个数字加字母的组合
SELECT ZIP,REGEXP_SUBSTR(ZIP,'[0-9][A-Z]',1,1,'i') AAAAA FROM PERSON;
--截取zip列第一个连续的字母串
SELECT ZIP,REGEXP_SUBSTR(ZIP,'[A-Z]{2,}',1,1,'i') AAAA FROM PERSON;
4、REGEXP_REPLACE(STR1,'匹配模式'[,STR2[,数1[,数2[,匹配参数]]]])
把str1中符合匹配模式的内容替换成str2 从数1开始找找数2次出现的
STR2不写 默认是空
不写数2 默认全部替换
--把zip列中所有的数字替换成*
SELECT ZIP,REGEXP_REPLACE(ZIP,'[0-9]','*') AAAAA FROM PERSON;
--把zip列所有的非数字替换成空
SELECT ZIP,REGEXP_REPLACE(ZIP,'[^0-9]') AAAAA FROM PERSON;
--把zip列中的第一个数字替换成?
SELECT ZIP,REGEXP_REPLACE(ZIP,'[0-9]','?',1,1) AAAAA FROM PERSON;
5、REGEXP_COUNT(STR,匹配模式[,数[,匹配参数]])
统计匹配模式出现的次数 从第数位开始 默认从第一位
--zip列有几个数字
SELECT ZIP,REGEXP_COUNT(ZIP,'[0-9]') AA FROM PERSON;
--计算员工姓名中有几个A
SELECT ENAME,REGEXP_COUNT(ENAME,'[A]') AA FROM EMP;
--查询hr中employees中的电话号码有机部分
SELECT * FROM HR.EMPLOYEES;
SELECT PHONE_NUMBER,REGEXP_COUNT(PHONE_NUMBER,'.')+1 电话部分
FROM HR.EMPLOYEES;