一、事务
1、狭义:从当前的tpl操作到下一次tpl操作之间所有的dml操作 ,(如果中间执行了DDL语句 之前未提交的dml语句会自动提交)。
广义:任何一次要么全部成功要么全部失败的操作 。
2、事务操作包含 : 提交:commit
回滚:rollback
3、事务的4个特性(ACID):
原子性:事务包含的操作 要么全部成功 要么全部失败回滚
一致性:事务执行的前后 整体的状态一致
隔离性:当多个用户并发访问数据库时,数据。。。库为每个用户开辟的事务,不受其他事务的影响 每个用户之间的事务是隔离的。
持久性:一个事务一旦提交之后 对数据库的改变是永久的 即使数据库故障也不会丢失数据。
二、正则表达式
1、通配符
^、[^] | 行首、非/取反 | a|b | a或b |
$ | 行尾 | [abc] | a或b或c |
. | 任意单个字符 | \ | 转义 |
+ | 匹配1次或者多次 | [[:space:]] 空白字符 | 比如说回车/换行/换页 |
* | 匹配0次或者多次 | [[:punct:]] | 标点符号 |
? | 匹配0次或者多1次 | [[:cntrl:]] | 控制符 |
{m} | 刚好匹配了m次 | () | 标签 |
{m,} | {m,}至少匹配m次 | [char] | 字符列表 |
{m,n} | {m,n}匹配m~n次 |
小写字母 [a-z] [[:lower:]]
大写字母 [A-Z] [[:UPPER:]]
大小写字母[a-zA-Z] [[:alpha:]]
数字 [0-9] [[:digit:]]
字母和数字 [0-9a-zA-Z] [[:alphanum:]]
2、正则函数
1、REGEXP_LIKE(列,匹配模式[,匹配参数]) 查询列中符合正则表达式的
匹配模式:正则表达式(下同)
匹配参数:c 大小写敏感 --默认
i 大小写不敏感
n 可以匹配换行符号
m 多行模式
x 扩展模式 忽略正则表达式中的空白字符(下同)
--查询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 返回匹配到的字符的第一个字符的位置
非0 返回匹配到字符串的最后一个字符的下一个位置
--查看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
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;