数据库
雨临Lewis
个人博客地址:https://lewky.cn
展开
-
PostgreSQL - 如何杀死被锁死的进程
前言在一次系统迭代后用户投诉说无法成功登陆系统,经过测试重现和日志定位,最后发现是由于用户在ui上进行了某些操作后,触发了堆栈溢出异常,导致数据库里的用户登陆信息表的数据被锁住,无法释放。这个表里存放的是用户的session信息。虽然后来解决了问题,但是数据库里这个用户登录信息表里被lock住的数据始终无法释放,这导致用户永远无法登陆成功,需要手动跑SQL把锁去掉才行。杀掉指定进程Post...原创 2019-11-15 00:50:19 · 8261 阅读 · 2 评论 -
SQL - where条件里的!=会过滤值为null的数据
!=会过滤值为null的数据在测试数据时忽然发现,使用如下的SQL是无法查询到对应column为null的数据的:select * from test where name != 'Lewis';本意是想把表里name的值不为Lewis的所有数据都搜索出来,结果发现这样写无法把name的值为null的数据也包括进来。上面的!=换成<>也是一样的结果,这可能是因为在数据库里nu...原创 2019-11-14 00:10:35 · 14557 阅读 · 1 评论 -
PostgreSQL - pgAdmin4远程连接数据库
前言PostgreSQL在安装的时候自带的pgAdmin这个可视化工具,自从将PostgreSQL9升级到了10版本后,自带的pgAdmin也从3升级到了4版本。pgAdmin4的变化非常巨大,刚接触时一脸懵逼,这里记录下怎么用pgAdmin4进行远程连接数据库并执行SQL语句。操作步骤选中Browser窗口里的Servers -> 点击上方工具栏里的Object -> Cre...原创 2018-12-06 23:57:04 · 10164 阅读 · 3 评论 -
PostgreSQL - 查询表结构和索引信息
前言PostgreSQL的表一般都是建立在public这个schema下的,假如现在有个数据表t_student,可以用以下几种方式来查询表结构和索引信息。使用\d元命令查看表字段信息和索引信息在cmd界面使用psql连接db后,输入\d加上表名即可:\d t_student通过系统数据字典查询表结构selectcol.table_schema,col.table_name,c...原创 2018-11-19 23:38:45 · 17650 阅读 · 0 评论 -
Redis - Windows平台下怎么切换db并且清理数据
Redis 本身支持16个数据库(0~15),通过 数据库id 设置,默认为0。在Windows平台下可以通过启动redis-cli.exe来进入客户端,客户端默认连接数据库0,在客户端里可以输入各种命令。增加db数量可以通过修改配置来增加Redis的db数量。在Windows平台下,打开redis.windows.conf,找到databases 16并修改即可。切换db通过命令来切换当...原创 2018-11-08 23:58:17 · 1287 阅读 · 0 评论 -
PostgreSQL - N''和::bpchar
N’'的效果和::bpchar效果类似,都表示定长字符串。比如下边的sql:select n'233' as num;select '233'::bpchar as num;select '233' as num;以上sql都会得到’233’的结果集,但是对于前两条sql拿到的字符串是bpchar类型,相当于MySQL的char类型;而第三条sql拿到的字符串是text类型。VARCH...原创 2018-10-10 23:15:50 · 7366 阅读 · 0 评论 -
PostgreSQL - 转义字符
转载至:postgresql字符转义前言在PostgreSQL 9之前的版本中,可以直接使用反斜杠\进行转义;比如:\b表示退格, \n表示换行, \t表示水平制表符,\r标示回车,\f表示换页。除此之外还支持\digits和\xhexdigits,分别表示转义八进制和十六进制数据。但是在PostgreSQL 9之后的版本,反斜杠已经变成了普通字符;如果想要使用反斜杠来转义字符,就...转载 2018-08-13 23:20:30 · 10012 阅读 · 0 评论 -
PostgreSQL - 修改默认端口号
升级PostgreSQL遇到的问题之前将PostgreSQL从9.5升级到了10.3版本,安装时将端口设置成了5433,(默认是5432),后来发现在使用psql来restore db会发生语法错误。由于PostgreSQL10.3版本添加了9.5版本没有的sql语法,导致了这个错误,但我明明已经升级了数据库,为什么还会遇到语法错误呢?而且我发现我在cmd窗口里连接了数据库之后,psql提...原创 2018-08-02 23:37:02 · 42940 阅读 · 1 评论 -
PostgreSQL - 官方手册、中文手册及Github项目地址
PostgreSQL每次更新都会有语法变化,低版本的PostgreSQL是无法运行高版本的sql语法的,下边是官方手册地址,可以查看多个版本的: https://www.postgresql.org/docs/10/static/index.html官方手册都是英文的,嫌麻烦可以看下边的中文手册: PostgreSQL 10.1 手册最后是中文手册在Github上的地址: postg...原创 2018-08-14 23:17:34 · 3751 阅读 · 0 评论 -
PostgreSQL - 怎么将时间转换成秒
保留原来的毫秒值select extract(epoch from '03:21:06.678'::time);这个extract(epoch from )函数得到的是时间是秒单位,如果需要毫秒值就直接乘以1000:select extract(epoch from now())*1000;去掉原来的毫秒值向下取整函数floor()select floor(extract(epoc...原创 2018-12-19 22:32:38 · 17634 阅读 · 1 评论 -
MySQL - 执行sql报错USING BTREE
问题与分析在执行sql文件时发现报错如下:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘USING BTREE....该错误导致有一个表创建失败,一时间很诧异。因为我所...原创 2018-12-07 00:15:42 · 3376 阅读 · 2 评论 -
PostgreSQL - update语句怎么关联多个表
问题对于select语句,我们可以通过join/outer join来关联多个表;但是对于update语句,是不能直接通过join/outer join来关联多表数据的,这里仅针对PostgreSQL。或者说,在PostgreSQL中,就算使用update+join不会报错,但join的那部分其实是没任何效果的,如下所示:update aset value = 'test'from a...原创 2018-12-10 00:21:44 · 23886 阅读 · 14 评论 -
PostgreSQL - 用psql 运行SQL文件
对于预先写好的SQL文件,比如/home/user1/updateMyData.sql, 可以有两种方式来运行这个SQL文件。方式一:连接db后执行SQL文件首先通过psql连接到对应的db:psql -d db1 -U userA接着输入密码,进入数据库后,输入:\i /pathA/xxx.sql这里有个问题,如果你把SQL文件的路径里的路径分隔符写成了\,会报错说Permiss...原创 2018-12-18 23:52:55 · 38480 阅读 · 1 评论 -
PostgreSQL - 怎么转换数据类型
前言对于select 233;这个sql,得到的结果是int4类型,如果我们希望将结果转换成其他的数据类型,有两种方法:方法一:使用::数据类型select 233::text;上边的sql通过::text将结果转换成了text类型。方法二:使用数据类型''select text '233';select text'233';上边的sql通过text''将结果转换成了text类...原创 2018-12-18 23:55:29 · 7799 阅读 · 0 评论 -
Windows下MySQL8.0.13解压版安装教程
下载MySQL8.0.13-64位下载地址在下载页面的底部,有三种安装包,第一种是MySQL的安装程序,下载完点击安装即可。第二种是普通的压缩版,体积较小。第三种是自带debug和测试的压缩版,体积较大。这种压缩包在网上暂时没有找到对应的安装文档说明,所以建议下载第二种压缩包,也就是普通版本的MySQL压缩包。配置环境变量新建环境变量如下:变量名:MYSQL_HOME变量值:D:...原创 2019-01-17 23:52:58 · 2614 阅读 · 2 评论 -
PostgreSQL - 模糊查询
前言like、not like在SQL中用于模糊查询,%表示任意个字符,_表示单个任意字符,如果需要在模糊查询中查询这两个通配符,需要用ESCAPE进行转义,如下:select * from table where name like '张/_小%' escape '/';这里表明/作为转义符,所以就可以在模糊查询中将通配符作为普通字符来搜索。另外,因为左模糊查询效率低下,一般不推荐在应用...原创 2019-02-28 23:44:29 · 14366 阅读 · 2 评论 -
数据库的标识符可以有多长
前言今天在查看项目代码时发现有这样一个逻辑:在查询数据库时通过代码去拼接一个SQL,这个SQL的某个字段的别名是由多个变量名拼接而成的,于是在拼接该别名时特地限制了其长度为30,如果超过30就只截取前30个字符来作为列别名。一时间很好奇为什么要限制列别名的长度,查阅过资料才明白,原来数据库的名字、表名、表别名、列名、列别名和函数名等,这些都属于标识符,不同数据库对于标识符会限定各种的长度最大值...原创 2019-03-14 23:28:14 · 2440 阅读 · 0 评论 -
PostgreSQL - invalid input syntax for type timestamp with time zone
问题在执行以下sql时报错:select COALESCE(null,null,now(),'');报错如下:SQL Error [22007]: ERROR: invalid input syntax for type timestamp with time zone: ""Position: 33org.postgresql.util.PSQLException: ERROR: ...原创 2019-04-25 23:41:27 · 24635 阅读 · 0 评论 -
PostgreSQL - raise函数打印字符串
raise函数在PostgreSQL中,该函数用于打印字符串,类似于Java中的System.out.println(),Oracle中的dbms_output.put_line()。用法如下:raise notice 'My name is %, I am a %.', 'Lewis', 'coder';以上sql会在控制台输出My name is Lewis, I am a code...原创 2019-05-01 16:50:34 · 10108 阅读 · 0 评论 -
SQL - 单引号和双引号的区别
原文转载至:SQL中的单引号和双引号有区别吗? 在标准 SQL 中,字符串使用的是单引号。 如果字符串本身也包括单引号,则使用两个单引号(注意,不是双引号,字符串中的双引号不需要另外转义)。 但在其它的数据库中可能存在对 SQL 的扩展,比如在 MySQL 中允许使用单引号和双引号两种。MySQL 参考手册: 字符串指用单引号(‘’’)或双引号(‘”’...转载 2018-08-01 23:00:25 · 28737 阅读 · 4 评论 -
PostgreSQL - 允许远程访问的设置方法
原文转载至:PostgreSQL 允许远程访问设置方法 安装PostgreSQL数据库之后,默认是只接受本地访问连接。如果想在其他主机上访问PostgreSQL数据库服务器,就需要进行相应的配置。 配置远 程连接PostgreSQL数据库的步骤很简单,只需要修改data目录下的pg_hba.conf和postgresql.conf。 pg_hba.conf:配置对数据库的访问权...转载 2018-08-01 21:59:14 · 13518 阅读 · 4 评论 -
SQL笔记-on和where的区别
on和where后都表示查询条件,它们的区别如下:1、on只能用于连接查询(内连接、外连接、交叉连接),在其他情况下使用on会报错,比如: select* from test on id = 1;//报错,不能在普通查询里使用on,需要使用where2、连接查询会产生一张中间表(临时表),on是在生成中间表时使用的条件;而where是在中间表生成后对中间表进行过滤使用的条件。比如:test1原创 2017-10-14 13:53:59 · 1585 阅读 · 0 评论 -
SQL笔记-select 1与select null
第一次见到select 1和select null,有些好奇,在网上找了下相关资料,特此记录研究一下。假设现在有两张表test和seckill,test是一张没有记录的空表,seckill表里则有4条记录;我是在MySQL 5.0的环境下测试的。select 1可以发现,如果表里有记录,select 1语句就会返回相应的记录行数的结果集,并且列名为1,每一行的值也都是1。这里的1并不是指的第一个字段原创 2017-10-20 00:12:38 · 19623 阅读 · 5 评论 -
MySQL(一)增删修改用户、授予用户权限
MySQL里有个mysql数据库,里边有个user表,存储的是MySQL的用户、主机等信息。 添加用户进入cmd,输入mysql -uroot -p,再输入密码登陆root用户;这是隐藏密码的登陆方式;也可以直接将密码写在-p后边进行显示密码的登陆。此时进入了mysql控制台,先进入mysql数据库:use mysql;接着执行添加用户或者删除用户操作:-- 添加一个名为test的用户in转载 2017-10-14 14:41:48 · 2500 阅读 · 0 评论 -
占位符,SQL注入?
这两天在上课时被同学拿了一段代码问我,这段代码有什么问题,我看了一会说:Connection和PreparedStatement都没关。他说不止这方面的问题,还有sql注入的问题,我就坚决的说使用了占位符不存在sql注入的问题,但是他提出了一种情况,在我看来也很有道理的情况。pstmt = conn.prepareStatement("delete from user where user.id=?转载 2017-10-06 10:53:40 · 2620 阅读 · 1 评论 -
数据库的事务机制
数据库的事务机制为什么需要事务,并发访问数据会造成什么问题事务的ACID原则事务的隔离级别数据库的锁机制为什么需要锁,存在哪些锁悲观锁数据库的悲观锁有两种实现方式:共享锁和排它锁,根据锁的范围又有行级锁和表级锁,组合起来就有四种:行级共享锁、行级排它锁、表级共享锁、表级排它锁 共享锁(也叫读锁、S锁) 排它锁(也叫写锁、X锁) 行级锁原创 2017-10-01 13:45:42 · 4069 阅读 · 2 评论 -
MySQL 获得当前日期时间(以及时间的转换)
1.1 获得当前日期+时间(date + time)函数:now()除了 now() 函数能获得当前的日期时间外,MySQL中还有下面的函数:current_timestamp() current_timestamplocaltime() localtimelocaltimestamp() localtimestamp 这些日期时间函数,都等同于 now(转载 2017-09-19 19:06:54 · 647 阅读 · 0 评论 -
MySQL中select * for update锁表的范围
由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例) ,否则MySQL将会执行TableLock (将整个资料表单给锁住)。 举个例子: 假设有个表单products ,里面有id跟name二个栏位,id是主键。 例1: (明确指定主键,并且有此笔资料,row lock)SELECT *转载 2017-09-20 14:09:35 · 607 阅读 · 0 评论 -
MySQL笔记-\g和\G的用法
\g在MySQL的sql语句后加上\g,效果等同于加上定界符,一般默认的定界符是分号; 这是默认;为定界符时的情况 这是修改了定界符的情况\G在MySQL的sql语句后加上\G,表示将查询结果进行按列打印,可以使每个字段打印到单独的行。 这是没有加上\G的情况 这是加上了\G的情况注意,这里使用的是反斜杠\,而不是斜杠/,在sql语句和这些命令之间加不加空格都一样。原创 2017-10-09 11:01:21 · 10580 阅读 · 0 评论 -
数据库的锁机制
为什么需要锁机制事务是并发控制的基本单位,保证事务ACID原则是事务处理的重要任务,但是当多个事务对数据库进行并发操作时,就有可能破坏事务的ACID特性。为了保证事务的隔离性与一致性,就有了数据库的锁机制。在数据库中,存在着很多种类的锁:共享锁、排他锁、悲观锁、乐观锁、行级锁、表级锁等。基本的锁类型锁有两种基本的类型:共享锁、排他锁 共享锁(Share Locks,简称S锁,也叫读锁)若事务T原创 2017-10-02 13:54:03 · 905 阅读 · 0 评论 -
PostgreSQL - psql的使用与退出
PostgreSQL连接数据库的两种方式PostgreSQL在安装时自带了pgAdmin和psql,pgAdmin是可视化工具,psql是命令行工具。虽然pgAdmin操作起来会更加直观简单,但是在restore和backup db的时候,效率和性能会比较低下,如果db过于庞大,还会导致pgAdmin内存溢出。推荐使用psql来连接数据库进行备份和恢复db,同样大小的db,使用psql来r...原创 2018-08-01 21:44:42 · 27125 阅读 · 2 评论 -
SQL - nulls值排序问题
psql -h localhost -U postgres CREATE DATABASE cbx6_qa_0831 WITH OWNER postgres ENCODING=’UTF8’; \q pg_restore -h localhost -U postgres -W -O -d cbx6_qa_0831 D:\db\cbx_qa_2-20180515.DUMP原创 2018-07-27 00:55:45 · 3209 阅读 · 0 评论 -
DBeaver笔记-快捷键篇
公司使用的是PostgreSQL数据库,可以使用pgAdmin或者DBeaver进行连接该数据库。个人更喜欢用DBeaver,因为其界面更加美观,操作也相对简单。 DBeaver 是一个通用的数据库管理工具和 SQL 客户端,支持 MySQL, PostgreSQL, Oracle, DB2, MSSQL, Sybase, Mimer, HSQLDB, Derby, 以及其他兼容 JDBC 的数原创 2018-04-02 23:47:10 · 29543 阅读 · 0 评论 -
PostgreSQL - null和''的区别与判断以及COALESCE函数
null和”的区别与判断null是一种类型,''是空字符串,打个比方,''是你参加了考试且得了零分,而null则是你压根就没有参加考试。如果要在sql中对两者进行判断,是有区别的://null只能和is或is not搭配,不能使用=、!=或者<>select * from student where name is null;select * from studen...原创 2018-02-07 00:08:29 · 20785 阅读 · 7 评论 -
PostgreSQL笔记-pl/pgsql的DO关键字
pl/pgsql即Procedural Language/ Postgres SQL(过程化sql语言),是Postgresql数据库对sql语句的扩展,可以在pl/pgsql代码块内定义多条sql语句,每条语句以分号结束,代码块由begin开始,end结束,代码块的最后一个end可以不加分号。DO关键字用来执行一段匿名代码块,即在在程序语言过程中一次性执行的匿名函数。代码块可以看做是一段没有...原创 2018-02-23 11:35:26 · 10814 阅读 · 7 评论 -
PostgreSQL - 查看表的主外键等约束关系
SELECT tc.constraint_name, tc.table_name, kcu.column_name, ccu.table_name AS foreign_table_name, ccu.column_name AS foreign_column_name, tc.is_deferrable,tc.initially_deferred FR...原创 2017-12-28 14:45:49 · 10704 阅读 · 1 评论 -
MySQL笔记-8小时连接闲置超时
最近发现之前部署在阿里云的一个web项目,每过一段时间就会报错,但是刷新下页面就会显示正常;在过了比较长的一段时间后,又会报同样的错误,如下:!MySQL连接超时失效异常在网上查了下资料,原来是因为项目中使用了连接池,由于连接池里的连接长时间闲置着,而MySQL默认的非交互式连接的闲置时间是8小时;也就是说,当连接池里的连接闲置超过8小时后就会被MySQL数据库自动断开而失效。由于连接池并不知道连接原创 2017-10-22 22:10:40 · 4760 阅读 · 1 评论 -
SQL笔记-ROW_NUMBER() OVER()函数
ROW_NUMBER() OVER()函数用来为每条记录返回一个行号,可以用来对记录进行排序并返回该序号,序号从1开始排序。这里的over()是聚集函数,可以给记录进行分组、排序;row_number()不能单独使用,必须搭配over()才能使用,否则会报错。给student的每条记录进行排序并返回序号select *, row_number() over() from student; nu原创 2018-01-22 14:52:08 · 1378 阅读 · 0 评论 -
数据库为什么需要锁机制?有哪些锁机制?
【为什么要锁】 数据库是一个多用户使用的共享资源,比如一个用户表t_user,两个浏览器前面的人登录了同个一个账号,把电话号码改了。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性(脏读,不可重复读,幻读等),可能产生死锁。为了解决这个问题,加锁是一个非常重要的技术,对实现数据库并发控转载 2017-09-21 00:23:24 · 475 阅读 · 0 评论