目录

T の weblog

X

数据库笔记


更改字段需要重新保存视图

--添加字段
Cannot convert 2019-01-09 of type class java.lang.String to class java.util.Date
--修改字段
ALTER TABLE oa_task_duty ALTER COLUMN accountabilityODPId_ varchar(500);

SQLSERVER2008分页查询

SELECT TOP rows 
         * 
FROM     website_news 
WHERE    id NOT IN 
         ( 
		  SELECT TOP ( rows 
				   *( page -1)) id 
FROM     website_news 
ORDER BY systemusertime_ ) 
ORDER BY systemusertime_ ;


SQLServer 递归

with subqry(id,name_,oa_task_id) as (
select id,name_,oa_task_id from oa_task where id = '402880eb65f593670165f5c39cea0011'
union all
select oa_task.id,oa_task.name_,oa_task.oa_task_id from oa_task,subqry
where oa_task.oa_task_id = subqry.id
) select * from subqry


SQL Server 2005中Datetime类型转Varchar类型

今天在写视图时,遇到要把Datetime类型转Varchar类型。以前在ORALCE就容易,直接ToChar(getdate(),'yyyy-mm-dd')。在SQL Server 2005却不会了,上网找了下,终于找到了方法。

select CONVERT(varchar, getdate(), 120 )
2004-09-12 11:06:08

select CONVERT(varchar(12) , getdate(), 111 )

2004/09/12

select CONVERT(varchar(12) , getdate(), 112 )

20040912

select CONVERT(varchar(12) , getdate(), 102 )

2004.09.12

select CONVERT(varchar(12) , getdate(), 101 )

09/12/2004

select CONVERT(varchar(12) , getdate(), 103 )

12/09/2004

select CONVERT(varchar(12) , getdate(), 104 )

12.09.2004

select CONVERT(varchar(12) , getdate(), 105 )

12-09-2004

select CONVERT(varchar(12) , getdate(), 106 )

12 09 2004

select CONVERT(varchar(12) , getdate(), 107 )

09 12, 2004

select CONVERT(varchar(12) , getdate(), 108 )

11:06:08

select CONVERT(varchar(12) , getdate(), 109 )

09 12 2004 1

select CONVERT(varchar(12) , getdate(), 110 )

09-12-2004

select CONVERT(varchar(12) , getdate(), 113 )

12 09 2004 1

select CONVERT(varchar(12) , getdate(), 114 )


更全的一份

Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM  
Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06  
Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16  
Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06  
Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06  
Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06  
Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06  
Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06  
Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46  
Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM  
Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06  
Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16  
Select CONVERT(varchar(100), GETDATE(), 12): 060516  
Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937  
Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967  
Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47  
Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157  
Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM  
Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16  
Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47  
Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250  
Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM  
Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006  
Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16  
Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006  
Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006  
Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006  
Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006  
Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006  
Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49  
Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM  
Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006  
Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16  
Select CONVERT(varchar(100), GETDATE(), 112): 20060516  
Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513  
Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547  
Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49  
Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700  
Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827  
Select CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427 10:57:49:907AM  
Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM 


查询mysql数据库中所有表名

select *

from information_schema.tables

where table_schema='当前数据库'


mysql数据库引擎查看

show engines

mysql数据库引擎对比

MySQL官方对InnoDB的讲解:

1)InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。
2)InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读,这些特色增加了多用户部署和性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。
3)InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。
4)InnoDB是为处理巨大数据量时的最大性能设计,它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。
5) InnoDB被用来在众多需要高性能的大型数据库站点上产生。


SELECT COUNT(1) 和SELECT COUNT(*)的区别

一般情况下,Select Count (*)和Select Count(1)两着返回结果是一样的

假如表沒有主键(Primary key), 那么count(1)比count(*)快,

如果有主键的話,那主键作为count的条件时候count(主键)最快

如果你的表只有一个字段的话那count(*)就是最快的

count(*) 跟 count(1) 的结果一样,都包括对NULL的统计,而count(column) 是不包括NULL的统计

1、select 1 与 select 的区别
selelct 常量 from ... 对应所有行,返回的永远只有一个值,即常量。所以正常只会用来判断是否有还是没有(比如exists子句)。而select * from ... 是返回所有行的所有列。
性能上的差异,关键看你的from和where子句。比如说如果你的where条件中可以通过索引,那显然 select 1 from ... 的性能比 select * from ... 好。
2、select sum(1)的使用
select count(
)返回所有满足条件的记录数,此时同select sum(1)
但是sum()可以传任意数字,负数、浮点数都可以,返回的值是传入值n*满足条件记录数m


mysql CMD连接

mysql -hlocalhost -uroot -p


too many connections 解决方法

最近写javaee项目的时候,mysql报了too many connections的错误,百度的内容有一些有问题,所以我重新写一下我的解决方法。

mysql -u root -p 

回车输入密码进入mysql

show processlist; 

查看连接数,可以发现有很多连接处于sleep状态,这些其实是暂时没有用的,所以可以kill掉

show variables like "max_connections"; 

查看最大连接数,应该是与上面查询到的连接数相同,才会出现too many connections的情况

set GLOBAL max_connections=1000; 

修改最大连接数,但是这不是一劳永逸的方法,应该要让它自动杀死那些sleep的进程。

show global variables like 'wait_timeout'; 

这个数值指的是mysql在关闭一个非交互的连接之前要等待的秒数,默认是28800s

set global wait_timeout=300; 

修改这个数值,这里可以随意,最好控制在几分钟内

set global interactive_timeout=500; 

修改这个数值,表示mysql在关闭一个连接之前要等待的秒数,至此可以让mysql自动关闭那些没用的连接,但要注意的是,正在使用的连接到了时间也会被关闭,因此这个时间值要合适

批量kill之前没用的sleep连接,在网上搜索的方法对我都不奏效,因此只好使用最笨的办法,一个一个kill

select concat('KILL ',id,';') from information_schema.processlist where user='root';

先把要kill的连接id都查询出来
复制中间的kill id;内容到word文档
替换掉符号“|”和回车符(在word中查询^p即可查询到回车符)
把修改过的内容复制回终端,最后按回车执行!


mysql的时区错误问题: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one

set global time_zone='+8:00';

mysql获取没有子节点的节点

逻辑没错,不用怀疑可以直接用

-- mysql获取没有子节点的节点
SELECT
	a.*,
	b.* 
FROM
	( SELECT id FROM sorter_power_menu WHERE id IN ( '1', '2', '4', '14', '15', '31' ) ) a
	LEFT JOIN sorter_power_menu b ON a.id = b.sorter_power_menu_id 
WHERE
	sorter_power_menu_id IS NULL

查询mysql数据库中所有表名

SELECT table_name 
FROM   information_schema.tables 
WHERE  table_schema = '数据库名字' 
       AND table_name LIKE '表名'; 

标题:数据库笔记
作者:MingGH
地址:https://runnable.run/databaseNote.html