
Sql
91奔跑的蜗牛
这个作者很懒,什么都没留下…
展开
-
mysql innoDB 死锁
一、什么是死锁官方定义如下:两个事务都持有对方需要的锁,并且在等待对方释放,并且双方都不会释放自己的锁。这个就好比你有一个人质,对方有一个人质,你们俩去谈判说换人。你让对面放人,对面让你放人。如下,A、B两个事务 出现了死锁,执行顺序如下:1、A 执行update report t set t.ui_config='test' where t.`name`= 'demo';2、B执行update report t set t.ui_config='test' where t.`name...原创 2020-07-10 14:44:10 · 298 阅读 · 0 评论 -
mysql innoDB 行锁
InnoDB在给行添加锁的时候,其实是通过索引来添加锁,如果查询并没有用到索引,就会使用表锁。测试如下:report 表 的 ui_config 为非索引字段1、开启事务,查询t.ui_config = 'uiconfigTest'2、开启一个新事务,查询t.ui_config = 'uiconfigTestxiugai',虽然是不同的行,但是出现了阻塞,说明SELECT * from report t where t.ui_config = 'uiconfigTest' for upd...原创 2020-07-10 13:51:30 · 245 阅读 · 0 评论 -
索引测试
原创 2020-05-27 11:29:37 · 237 阅读 · 0 评论 -
mysql 订单表里的订单有F开头的,查询的时候将F开头的订单排序排到最后
SELECTt.*,if(left(title,1)='F',2,1)asflagFROMtb_order_itemtorderbyflagasc,title;把订单F开头的弄个标识flag例如2,其他的都为1,排序的时候先flag升序原创 2020-05-15 14:28:50 · 548 阅读 · 0 评论 -
oracle listagg , mysql group_concat
场景:salordersettlement 中 与comdictinfo 一对多关系,将其中的多个付款方法进行拼接。select listagg((select c.langname1 from comdictinfo c where c.dicticode='271506'and c.code=t.paymode),',') within group(order by 1) as paym...原创 2020-04-27 17:30:17 · 518 阅读 · 0 评论 -
oracle 如果列中有空值的情况不能使用 !=
csn_ap_invoice_headers表中 create-type 有3个值 null、20、30查找出create-type不为30的数据select create_type from csn_ap_invoice_headers where create_type != '30'得到是全是 create_type 为20的数据。加上限定条件后,却查不出记录select ...原创 2019-12-04 19:04:58 · 1024 阅读 · 0 评论 -
oracle exists
exists(查询语句) : 存在的意思,判断一张表里面的记录是否存在与另外一张表中。emp表中的部门号为 10,20,30部门表中,dept中的部门号为 9,10,20,30,40,50需求,查询出有员工的部门(查询出存在于emp表中的dept信息)似乎没有效果,结果查询出的是所有的dept信息。指定deptno的值,也没效果select * from dept d1 where e...原创 2019-11-25 16:15:19 · 5463 阅读 · 0 评论 -
oracle 如何查看一个中文汉字占用几个字节 lengthb()
先看下length(),查看字符串长度:如果要查看字节长度,要使用lengthb()一个中文字符占用3个字节?看下编码select userenv('language') from dual;SIMPLIFIED CHINESE_CHINA.UTF8结论,oracle中UTF-8编码的,一个汉字占用3个字节。在其他资料可查的,oracle中GBK编码的,一个汉字占用2个...原创 2019-11-18 11:05:17 · 2826 阅读 · 0 评论 -
MySql 事务隔离级别
1.查看 SELECT @@tx_isolation ;或者:show variables like "%isolation%";2.设置1)read uncommitted : 读取尚未提交的数据 :哪个问题都不能解决2)read committed:读取已经提交的数据 :可以解决脏读 ,但是出现不可重复读---- oracle默认的3)repeatable read:重读读取:可...原创 2019-10-31 13:09:17 · 213 阅读 · 0 评论 -
mysql 建表原则
一对多 : 建表原则: 在多的一方添加一个外键,指向一的一方。例如,分类和商品信息,是一对多的关系,一个分类下有多中商品。在商品信息表添加一个外键,指向分类表。多对多: 建表原则:拆成一对多创建一张中间表, 至少要有两个外键, 指向原来的表例如,订单表和商品表,是多对多的关系。一个订单可以购买多个商品,一个商品可以被多个订单所选择。可以创建一张订单项: 中间表(订单ID,商品ID,商...原创 2019-10-28 09:39:17 · 549 阅读 · 0 评论 -
mysql ifnull
ifnull(field,0):如果field为null,则值为0;先看下SELECT * FROM mytest.orders;使用ifnull() select id,product,ifnull(price,0) from orders;oracle中使用 nvl() 函数达到一样的功能,mysql中没有nvl()函数。...原创 2019-10-26 21:11:58 · 150 阅读 · 0 评论 -
plsql 存储过程,IN、OUT、IN OUT 三种参数
首先看下 IN参数,用于接收参数,在子程序内部,不能进行修改。当参数没有写模式的时候,默认的参数模式:INv_b number,没有声明IN、OUT、IN OUT,所以默认为 IN,IN参数,则v_b 不能再子程序内部修改值。OUT参数,输出模式的参数,用于输出值,会忽略传入的值。在子程序内部可以对其进行修改。存储过程如下:create or replace procedure p(...原创 2019-10-10 11:21:29 · 5041 阅读 · 0 评论 -
plsql 变量命名规范
问题描述:plsql decade 声明了一个变量:2019count integer :=0;执行后报如下错误:借鉴于其他的变量count1980 integer :=0;没有问题,于是想到了变量的命名规范。首先看一下plsql中,变量在哪里声明,如何声明。声明使用declare关键字用于定义变量或者常量语法:DECLARE variable_name [CONSTAN...原创 2019-10-10 09:50:13 · 2081 阅读 · 0 评论 -
sql 获取某一时间点的数据
last_update_date between to_date('2019/10/01 01:59:59','yyyy/MM/dd hh24:mi:ss') and to_date('2019/10/09 03:59:59','yyyy/MM/dd hh24:mi:ss')原创 2019-10-09 18:43:19 · 533 阅读 · 0 评论 -
MySql 存储POJO属性为boolean true和false
mysql是不支持bool类型的,所以,当把一个数据设置成bool类型的时候,数据库会自动转换成tinyint(1)的数据类型,其实这个就是变相的bool。 默认值也就是1,0两种,分别对应了bool的true(1)和false(0)。例如is_parent字段,数据库为tinyint(1)默认存储1表示true,POJO对应的字段为boolean类型,POJO对应的值为true,insert...原创 2019-07-25 13:47:43 · 2316 阅读 · 0 评论 -
oracle replace
oracle REPLACE 函数是用另外一个值来替代串中的某个值。格式:REPLACE ( char, search_string [, replace_string]) 如果没有指定replace_string 变量的值,那么当发现search_string 变量的值时,就将其删除。--23-->89select replace('123abcdefg','23','89') ...原创 2019-04-30 14:59:25 · 1064 阅读 · 0 评论 -
oracle 通过判断条件,返回某一sql的结果集
--判断当前登录人是否属于(事业部会计查询、事业部查询)--校验结果语句--传参 username (例如:username='ymling')SELECT COUNT(1) FROM sn_ucodecfg.wbcode w, sn_ucodecfg.users uWHERE w.wcode = u.wcode AND (w.gwcodes = 'N9XYGG0000018...原创 2019-04-17 09:37:05 · 3992 阅读 · 0 评论 -
Oracle中数字与null相加,结果为null,可用nv()l函数避免出现此情况。
select 1+1 from dual ;--2select 1+'' from dual;--null(空值)select 1+null from dual;--null(空值)select 1+nvl(null,0) from dual;--1原创 2018-08-08 10:28:13 · 4841 阅读 · 0 评论 -
Oracle排序之 nulls last 和 nulls first
oracle在使用order by进行排序的时候,如果是升序(asc)则null排在最后面,如果是降序(desc)则null排在最前面。即默认情况下,null是最大的。1、升序情况(asc):默认情况下,null排在最后如果想让null排在最前面,则可以使用 nulls first2、降序情况(desc):默认情况下,null排在最前面如果想让null排在...原创 2018-08-23 11:23:21 · 3360 阅读 · 0 评论 -
Oracle NULLIF函数的使用
NULLIF语法 NULLIF(expr1,expr2),如果两个参数相等,返回null,否则返回第一个。第一个参数不可指定为空。对于非数字类型参数,数据类型必须一致。 NULLIF与DECODE decode (条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) NULLIF(param,0)等...原创 2018-07-19 15:42:38 · 14559 阅读 · 0 评论 -
PLSQL case when then else
语法1:CASE search_expression WHEN expression1 THEN result1 WHEN expression2 THEN result2 .... WHEN expressionN THEN resultN ELSE default_result END CASE;语法2:CASE WHEN condition1 ...原创 2018-08-06 14:37:28 · 10321 阅读 · 0 评论 -
DriverManagerDataSource链接Oracle
DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName( “oracle.jdbc.driver.OracleDriver”); dataSource.setUrl( “jdbc:oracle:thin:@local...原创 2018-07-25 11:45:52 · 1635 阅读 · 0 评论 -
java 向 mysql 写入中文乱码
造成乱码的原因是字符集不一致,通常只需要数据库建表时候指定的字符集与java设置数据库连接设置url指定的字符集一致。1、创建数据库的时候: CREATE DATABASE `Db` CHARACTER SET 'utf8 ' COLLATE 'utf8_general_ci '; 2、建表的时候: CREATE ...原创 2018-12-20 10:16:45 · 2156 阅读 · 0 评论 -
MySql ERROR CODE:1215 Cannot add the foreign key constraint
mysql出现无法添加外键的原因1、两个表的关联列的数据类型和数据长度不一致。如:A表的 a 列 varchar(20),B表的 b 列 varchar(25),这样 a,b无法形成外键关联关系。 2、创建表的时候,添加 ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `A` () ENGINE=InnoDB DEFAULT C...原创 2018-12-19 10:53:16 · 1016 阅读 · 0 评论 -
查询子表某个字段的值,如果存在多个重复,用‘/’分隔
例:lcapp为主表,lcappg为子表,查询子表lcappg的prjcode,如果存在多个重复,用‘/’分隔lcapp和lcappg 通过lcappicode 关联;1、查询子表lcappg 中,lcappicode相同,但是prjcode多个的数据。思路:先用distinct去重复,然后通过lcappicode分组,这样就能找出lcappicode相同,但是prjcode多个非重...原创 2019-02-27 15:53:18 · 472 阅读 · 0 评论 -
oracle 查询用户所有的序列号
--查询用户所有的序列号select * from USER_SEQUENCES;--获取下个序列select myseq.nextval from dual;原创 2019-02-24 18:23:04 · 10564 阅读 · 0 评论 -
oracle 修改clob内容
直接用update语句全部替换clob的内容,提示修改字段的内容过长,不可行。可采用部分替换的方式:update 表 set 字段=replace(字段,'要被替换内容','替换内容') where 条件。实例场景,假设clob字段的内容为 abcde ,要改成 aBbcde,replace(字段,'a','aB') ...原创 2019-02-20 15:11:35 · 10106 阅读 · 1 评论 -
代码分析oracle的PL/SQL中关于游标的notfound属性
问题:fetch c into v_ename;,一定要放在 exit when (c%notfound);前面才行. 不然会把最后一条记录多输出一遍。注意点:1、pl/sql中的boolean类型变量还有个null值,并且还是默认的.除此之外还有true,false。2、对于显式游标而言,open后第一次fetch之前cursor%notfound的值为null。代码如下:...原创 2018-08-08 10:01:49 · 1886 阅读 · 2 评论 -
Oracle 触发器 for each row
for each row 场景中两个关键字 :old ,:new:old.字段名 获取修改前的值:new.字段名 获取修改后的值场景1:更改员工的薪资时,不能小于原薪资。create or replace trigger trigafter update on emp20for each rowbegin if(:old.sal > :new.sal) the...原创 2018-08-01 15:36:03 · 6039 阅读 · 0 评论 -
oracle || 与 like 配合使用
select vendor_name from csn_ap_suppliers_v where vendor_name like '%' || '国贸腾达有限公司'等同于select vendor_name from csn_ap_suppliers_v where vendor_name like '%国贸腾达有限公司'。场景,oralce函数,或者存储过程传入入参当'...原创 2019-03-28 15:39:15 · 3732 阅读 · 1 评论 -
oracle 表默认别名
类似于java的默认无参构造方法,当没给表取别名的时候,默认别名就是表名,但是如果给表取了别名,那么默认别名就是失效。实例:select csn_ap_invoice_headers.invoice_id,invoice_type from csn_ap_invoice_headers ;当没给表取别名的时候,该语句正常执行当给表取别名时,select csn_ap_invoice...原创 2019-04-08 15:28:24 · 941 阅读 · 0 评论 -
oracle的plsql中当使用聚合函数,导致NO_DATA_FOUND失效的原因
场景1,不使用聚合函数:declare v_id emp20.empno%type;begin select empno into v_id from emp20 t where t.empno=100; DBMS_OUTPUT.put_line ('编号为:'||v_id); exception when no_data_found then DBM...原创 2018-08-09 11:50:53 · 1715 阅读 · 0 评论