获取数据库时间sql 以及行级锁总结-共享锁-排他锁-死锁
--TRUNC(date,[fmt]) /TRUNC(number[,decimals])
SELECT SYSDATE FROM dual;
SELECT TRUNC(SYSDATE) FROM dual
SELECT TRUNC(12.34524,2) FROM dual; --12.34
SELECT TRUNC(-12.34724,2) FROM dual; --12.34
SELECT TRUNC(12.34524,-1) FROM dual; --10
--返回当前月的第一天
SELECT TRUNC(SYSDATE,'month') "First day of current month" FROM dual;
--获取当前月最后一天
SELECT TRUNC(last_day(SYSDATE)) "Last day of current month" FROM dual;
--获取当前年份的第一天
SELECT TRUNC(SYSDATE,'YEAR') "Year First day" FROM dual;
--获取当前年份的最后一天
SELECT ADD_MONTHS(TRUNC(SYSDATE,'YEAR'),12) -1 "Year Last Day" FROM dual;
--获取当前月份的天数/年份
SELECT CAST(to_char(last_day(SYSDATE),'dd') AS INT) number_of_days FROM dual;
SELECT CAST(to_char(last_day(SYSDATE),'yyyy') AS INT) NUMBER_of_days FROM dual;
--获取当前月份剩下的天数
SELECT SYSDATE, Last_Day (SYSDATE) "Last",Last_Day (SYSDATE) -SYSDATE "Day Left" FROM dual;
--获取两个日期之间的天数
SELECT TRUNC ( to_date('2014/02/01','yyyy/mm/dd') - to_date('2012/05/01','yyyy/mm/dd') ,1) "days" FROM dual;
--显示当前年份截止到上个月每个月开始和结束的日期
SELECT ADD_MONTHS(TRUNC(to_date('2016/05/01','yyyy/mm/dd'),'MONTH'),i) start_date,
TRUNC(last_day(ADD_MONTHS(to_date('2016/05/01','yyyy/mm/dd') ,i))) end_date
FROM XMLTABLE(
'for $i in 0 to xs:int(A) return $i'
PASSING XMLELEMENT (
A,
FLOOR(
MONTHS_BETWEEN(
ADD_MONTHS(TRUNC(to_date('2016/12/01','yyyy/mm/dd'),'Year') - 1 ,12),to_date('2016/05/01','yyyy/mm/dd') )
)
)
columns i INTEGER PATH '.'
);
SELECT ADD_MONTHS(TRUNC(SYSDATE,'MONTH'),1) start_date FROM dual;
SELECT TRUNC(last_day(ADD_MONTHS(SYSDATE ,1))) end_date FROM dual;
--获取今天开始的秒数和剩下的秒数
SELECT (SYSDATE -TRUNC(SYSDATE))*24*60*60 "Past" , (TRUNC(SYSDATE + 1) -SYSDATE )*24*60*60 "future" FROM dual;
--数字相关
--把数值转换成文字
SELECT to_char(to_date(1526,'j'),'jsp' ) FROM dual;
--在包的源代码中查询字符串
SELECT * FROM dba_source
WHERE UPPER(text) LIKE '%FOO_SOMETHING%'
AND owner = 'user_name'
--在oracle中做行数据乘法
WITH tbl
AS (SELECT -2 num FROM DUAL
UNION
SELECT -3 num FROM DUAL
UNION
SELECT -4 num FROM DUAL),
sign_val
AS (SELECT CASE MOD (COUNT (*), 2) WHEN 0 THEN 1 ELSE -1 END val
FROM tbl
WHERE num < 0)
SELECT EXP (SUM (LN (ABS (num)))) * val
FROM tbl, sign_val
GROUP BY val;
--生成随机数值
SELECT ROUND(dbms_random.value()*100) +1 AS random_num FROM dual;
--检查表中是否有任何数据
SELECT *
FROM SINO_DP_HEADER_INPUT
WHERE ROWNUM = 1;
--数据字典查询
--检查在当前数据库模式下是否存在指定的表
SELECT * FROM USER_tables
WHERE table_name = 'SINO_DP_HEADER_INPUT';
--检查在当前表中是否存在指定的列
SELECT column_name AS FOUND
FROM user_tab_cols
WHERE table_name = 'SINO_DP_HEADER_INPUT'
AND column_name = 'DP_NUMBER'
--获取当前模式名字
SELECT sys_context ('userenv','current_schema') FROM dual;
--数据库管理查询
--数据库版本信息
SELECT * FROM V$version;
--数据库默认信息
SELECT username,PROFILE,default_tablespace,temporary_tablespace FROM dba_users;
--数据库字符设置信息
SELECT * FROM Nls_Database_Parameters;
--存储区分大小写数据,但是索引不区分大小写
CREATE TABLE tab (col1 VARCHAR2(10));
CREATE INDEX idx1 ON tab (UPPER(col1));
ANALYZE TABLE a COMPUTE STATISTICS;
--调整没有添加数据文件的表空间
ALTER DATABASE DATAFILE '/work/oradata/STARTST/STAR02D.dbf' RESIZE 2000M;
--检查表空间的自动扩展开关
SELECT SUBSTR (file_name,1,50) ,autoextensible FROM dba_database_files;
SELECT tablespace_name, autoextensible FROM dba_data_files;
--在表空间添加数据文件
ALTER TABLESPACE data01 ADD DATAFILE '/work/oradata/STARTST/data01.dbf' SIZE 1000m AUTOEXTEND OFF;
--获取数据库的实际大小
SELECT SUM(bytes) /1024/1024/1024 AS GB FROM dba_data_files;
--性能相关查询
--查询用户cpu的使用率
SELECT ss.username,se.sid, VALUE/100 cpu_usage_seconds
FROM v$vession SS, v$sesstat se,v$statname sn
WHERE se.statics# = sn.statics#
AND NAME LIKE '%CPU used by this session%'
AND se.sid = ss.sid
AND ss.status = 'ACTIVE'
AND ss.username IS NOT NULL
ORDER BY VALUE DESC;
--获取当前会话id,进程id,客户端id等
SELECT b.sid ,b.serial#,a.spid processid , b.process clientpid
FROM v$process a , v$session b
WHERE a.addr = b.PADDR AND b.AUDSID = USERENV('sessionid');
--在视图中查询并显示实际的oracle链接
SELECT osuser,username,machine,program
FROM v$session
ORDER BY osuser;
--查询并显示链接oracle的用户和用户的会话数量
SELECT username ,COUNT(username) co
FROM v$session
GROUP BY username
ORDER BY co DESC ;
--获取拥有者的对象数量
SELECT owner,COUNT(owner) obj
FROM dba_objects
GROUP BY owner
ORDER BY obj DESC;
-- 查询锁的状况的对象有?
V$LOCK, V$LOCKED_OBJECT, V$SESSION, V$SQLAREA, V$PROCESS ;
--查询锁的表的方法:
SELECT S.SID SESSION_ID, S.USERNAME,
DECODE(LMODE, 0, 'None', 1, 'Null', 2, 'Row-S (SS)', 3, 'Row-X (SX)', 4, 'Share', 5, 'S/Row-X (SSX)', 6, 'Exclusive', TO_CHAR(LMODE))
MODE_HELD, DECODE(REQUEST, 0, 'None', 1, 'Null', 2, 'Row-S (SS)', 3, 'Row-X (SX)', 4, 'Share', 5, 'S/Row-X (SSX)', 6, 'Exclusive', TO_CHAR(REQUEST))
MODE_REQUESTED, O.CCBZZP||'.'||O.OBJECT_NAME||' ('||O.OBJECT_TYPE||')', S.TYPE LOCK_TYPE, L.ID1 LOCK_ID1, L.ID2 LOCK_ID2
FROM V$LOCK L, SYS.DBA_OBJECTS O, V$SESSION S WHERE L.SID = S.SID AND L.ID1 = O.OBJECT_ID ;
--如何解锁?
ALTER SYSTEM KILL SESSION ‘SID,SERIR#’;
--mysql 行级锁的使用以及死锁的预防
--1.mysql的innoDB,支持事务和行级锁,可以使用行级锁来处理用户提现等业务。使用mysql锁的时候会出现死锁。
--Mysql 行级锁
--共享锁:共享锁即读锁,所有的事务只能对其进行读操作不能写操作,加上共享锁后再事务之前其他事务只能再加共享锁,除此之外其他任何类型的锁都不能再加了。
SELECT ID FROM TABLE WHERE ID IN (1,2) LOCK IN SHARE MODE -- 结果集的数据都会加共享锁
--排它锁:若某个事务对某一行加上了排它锁,只能这个事务进行读写, 在此事务结束之前, 其他事务不能对其进行加任何锁,其他进程可以读取,不能写入,需等待其释放
SELECT ID FROM TABLE WHERE ID IN (1,2) FOR UPDATE
--死锁:两个以上的进程都要求对方释放资源,以至于进程都一直等待。产生条件:互斥条件,环路条件,不可剥夺,缺一不可,相对应的只要破幻其中一个条件死锁就不会产生
--第一条语句会优先使用name 索引,因为name 不是主键索引,还会用到主键索引
--第二条语句首先使用主键索引,再使用name 索引,
--如果两条语句同时执行,第一条语句执行了name索引等待第二条释放主键索引,第二条执行主键索引等待第一条的name索引,
--这样就造成了死锁
UPDATE mk_user SET NAME = '1' WHERE NAME='id'
UPDATE mk_user SET NAME = '2' WHERE ID = 2
--改造
UPDATE mk_user SET NAME = '1' WHERE ID = (SELECT ID FROM mk_user WHERE NAME ='id')
UPDATE mk_user SET NAME = '2' WHERE ID = 2
--操作限制 共享锁与非共享锁
--锁申请前提:当前没有线程对该结果集中的任何行使用排它锁,否则申请回堵塞
--线程 读取操作 写入操作 共享锁申请 排它锁申请
--使用共享锁 可读 可写/不可写(报错) 可申请 可申请
--不适用共享锁 可读 不可写(堵塞) 可申请 不可申请(阻塞)
--1.使用共享锁线程可对其锁定记录进行读取,其他线程同样也对锁定记录进行读取操作,并且这两个线程读取的数据属于同一版本
--2.对于写操作,使用共享锁的线程需分情况讨论,
-- ①当只有当前线程对执行记录使用共享锁时,线程是可以对记录进行写入操作的(包括更新和删除),这是由于在写入操作之前,线程向该记录申请了排它锁,然后才进行写入操作;
-- ②当其他线程也对该记录使用共享锁时, 则不可进行写入操作, 系统会有报错提示。
-- 不使用共享锁的线程,不可进行写入操作,写入会阻塞
--3.使用共享锁进行可再次对锁定记录申请共享锁,系统不报错,其他线程也可对锁定记录申请共享锁。
--4.使用共享锁进行可对其锁定记录申请排他所, 其他进程不可以对锁定记录申请排它锁,申请会阻塞
--排他锁: mysql 会对查询结果集每行都添加排它锁,在事务操作中,任何记录的更新和删除操作会自动加上排它锁
--锁申请前提: 当前没有线程对该结果集中的任何行使用排它锁或共享锁,否则申请会阻塞
--线程 读取操作 写入操作 共享锁申请 排它锁申请
--使用排他锁 可读(新版本) 可写 可申请 可申请
--不适用排他锁 可读 (旧版本) 不可写(堵塞) 不可申请 (堵塞) 不可申请(阻塞)
--1.使用排他锁线程可以对其锁定记录进行读取,读取的内容为当前事务的最新版本;而对于不适用排它锁的线程,同样是可以进行读取操作的,这种特性是一致性非锁定读。
-- 即:对于同一条记录,数据库记录多个版本,在事务内的更新操作会反应到新版本中,旧版本会提供给其他线程进行读取操作
--2.使用排他锁线程可对其锁定记录进行写入操作,对于不使用排他锁的线程,对锁定记录的写入操作时不允许的。
--3.使用排他锁进程可对其锁定记录申请共享锁,但是申请共享锁之后,线程并不会释放原先的排他锁,因此数据对外表现排他锁性质,其他线程不可对锁定数据申请共享锁
获取数据库时间sql 以及行级锁总结-共享锁-排他锁-死锁的更多相关文章
- sql server行级锁,排它锁,共享锁的使用
锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新 A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 ...
- Java并发 行级锁/字段锁/表级锁 乐观锁/悲观锁 共享锁/排他锁 死锁
原文地址:https://my.oschina.net/oosc/blog/1620279 前言 锁是防止在两个事务操作同一个数据源(表或行)时交互破坏数据的一种机制. 数据库采用封锁技术保证并发操作 ...
- DBMS_RLS包实现数据库表中的行级安全控制
DBMS_RLS 实现一个数据库表为行级安全控制,该套餐包括细粒度的访问控制管理界面,此接口是用来实现VPD(Virtual Private Database),虚拟专用数据库.DBMS_RLS仅仅能 ...
- MySQL 乐观锁 悲观锁 共享锁 排他锁
乐观锁 乐观锁是逻辑概念上的锁,不是数据库自带的,需要我们自己去实现.乐观锁是指操作数据库时(更新操作),想法很乐观,认为这次的操作不会导致冲突,在操作数据时,并不进行任何其他的特殊处理(也就是不加锁 ...
- C++获取系统时间方法(毫秒级)
#include <sys/time.h> long getCurrentTime() { struct timeval tv; gettimeofday(&tv,NULL); r ...
- MySQL锁:02.InnoDB锁
目录 InnoDB锁 InnoDB行锁实现机制 InnoDB隐式.显式锁 InnoDB锁类型 共享锁 排他锁 意向锁 InnoDB锁兼容性 InnoDB行锁范围.粒度 InnoDB行锁粒度一览 意向插 ...
- Mysql的事务及行级锁
转自:http://www.cnblogs.com/edwinchen/p/4171866.html 以签到为例,每个用户每天只能签到一次,那么怎么去判断某个用户当天是否签到呢?因为当初表设计的时候, ...
- mysql锁——innodb的行级锁
[前言]数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则.MySQL数据库由于其自身架构的特点,存在多种数据存储引擎,每种存储引擎所针对的应 ...
- Mysql的行级锁
我们首先需要知道的一个大前提是:mysql的锁是由具体的存储引擎实现的.所以像Mysql的默认引擎MyISAM和第三方插件引擎 InnoDB的锁实现机制是有区别的. Mysql有三种级别的锁定:表级锁 ...
随机推荐
- Redis在本地测试没有问题,上传的服务器后出现错误
在服务器上,new Redis 可以拿到对象数据,但是其他操作就会报错. Redis 开启过程中,遇到错误 . :( protocol error, got 'S' as reply type byt ...
- Android Studio 升级到3.0 提示 java.lang.NoClassDefFoundError
Android Studio 升级到3.0 提示 java.lang.NoClassDefFoundError 这个问题折腾了2个小时,最后解决了,Stack Overflow 上也有一次类似的问题, ...
- 2734:十进制到八进制-poj
总时间限制: 1000ms 内存限制: 65536kB 描述 把一个十进制正整数转化成八进制. 输入 一行,仅含一个十进制表示的整数a(0 < a < 65536). 输出 一行,a的 ...
- [smartMenu.js] 一个基于jquery的实用的右键拓展菜单栏插件
正在为电子书阅读器添加精准易用的标记功能,其中一个方案是扩展阅读器界面的右键菜单栏,使得用户右键点击某个词.子句.段落的时候可以进行扩展操作. 右键菜单栏有很多基于jQuery的插件,其中灵活性比较强 ...
- Asp.net Core中SignalR Core预览版的一些新特性前瞻,附源码(消息订阅与发送二进制数据)
目录 SignalR系列目录(注意,是ASP.NET的目录.不是Core的) 前言 一晃一个月又过去了,上个月有个比较大的项目要验收上线.所以忙的脚不沾地.现在终于可以忙里偷闲,写一篇关于Signal ...
- 在没有DOM操作的日子里,我是怎么熬过来的(终结篇)
前言 在我写终结篇的日子里,Vue版本稳定在2.9.1.当我摸清Vue的脉络之后,以一个爬坑无数的亲历者的身份,谈谈我在MVVM时代里遇到的那些事儿. 接下来,正文从这开始~ 好多童鞋学习Vue都有灯 ...
- 51Nod 1293 球与切换器 DP分类
基准时间限制:1 秒 空间限制:131072 KB 有N行M列的正方形盒子.每个盒子有三种状态0, -1, +1.球从盒子上边或左边进入盒子,从下边或右边离开盒子.规则: 如果盒子的模式是-1,则 ...
- ssm开发关于web.xml配置
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" ...
- 洛谷 P3927 Factorial
题目描述 SOL君很喜欢阶乘.而SOL菌很喜欢研究进制. 这一天,SOL君跟SOL菌炫技,随口算出了n的阶乘. SOL菌表示不服,立刻就要算这个数在k进制表示下末尾0的个数. 但是SOL菌太菜了于是请 ...
- dubbo源码—dubbo自定义spring xml标签
dubbo为了和spring更好的集成,提供了一些xml配置标签,也就是自定义标签 spring自定义标签 spring自定义标签的方式如下: 设计配置属性和JavaBean 编写xsd文件,校验xm ...