一、数据库中的锁表问题。
在开发中可能会遇到执行某个表的SQL操作时,java代码执行堵住不会继续往下走,debug时也会在这里停止且程序不会有异常抛出,这时候就可能是数据库中有表被锁住了。(有人执行数据库增删改操作时没有提交事务)所以下面的SQL语句就被用到了。(这在团队协作开发中是经常遇见的)
查看被锁住的表以及锁住该表的用户
SELECT object_name, machine, s.sid, s.serial# FROM gv$locked_object l, dba_objects o, gv$session s WHERE l.object_id = o.object_id AND l.session_id = s.sid;
结果查看
第一个字段是锁住的表,第二个字段是锁住该表的用户,后两个是锁表的进程id。
杀死进程(解锁锁住的表)
alter system kill session 'sid, serial#'; --sid serial#为上条sql查出的进程id
例:ALTER system kill session '124,1110';
执行该语句之后,在执行上面语句就没有结果了,表示成功解锁。在执行java代码就没有那种问题了。
二、数据库中的分页语句(Oracle、Mysql)。
项目开发中对数据的展示进行分页是很重要的,也是必须的。下面介绍Oracle和Mysql数据库中的分页SQL语句。
Oracle SQL: select * from(select rownum 行数,e.* from emp e where rownum<=9)>=6
以scott用户里emp表为例,展示行数6到9的数据,结果如下:
分页展示6-9行的数据
Mysql SQL: SELECT * FROM `user` limit 5,4;
显示user表第5条(不包括第5条)的后4条数据,显示结果如下:
分页展示6-9行的数据
三、查询当前登录用户下的所有表以及表的注释。
该sql语句可以用于查用户下每个表以及每个表的注释(适用于查表)。以Oracle中的scott用户下的表为例:
select 'select * from ' || a.table_name || '; -- ' || a.comments from user_tab_comments a;
scott用户下的所有表及注释
三、关于表的一些统计SQL
查询一个表有多少条数据:
select count(*) 行数 from emp;
查询一个表有多少字段:
Oracle SQL: select count(*) 字段数 from user_tab_cols where table_name='EMP';--表名必须大写
Mysql SQL: select count(*) 字段数 from information_schema.COLUMNS where table_name='user' --表名大小写均可
四、Oracle中导入表及数据
dmp方式 windows cmd命令中运行即可
imp 用户名/密码 file=E:\XXX\XXX\XXX.dmp full=y;
SQL语句方式,登录后@sql脚本即可即可。(可以在PL/SQL Developer软件中,新建命令窗口)如下图所示:
实例
好了,今天常用的SQL语句就记到这里,明天再见了~
联系客服