
mysql
文章平均质量分 77
PostgreSQL运维技术
这个作者很懒,什么都没留下…
展开
-
mysql 非definer用户如何查看存储过程定义
8.0版本之前,非definer用户查看存储过程定义,我们可以通过授予该用户对mysql.proc的select权限来达成目的。此外,8.0.20之前,通过授予用户对所有库的select权限也可以实现。不够这个权限太大了。8.0.20之后,可以通过授予用户的show_routine权限来解决问题。参考: https://dba.stackexchange.com/questions/184724/permissions-for-mysql-show-create-procedure。原创 2023-07-31 17:03:22 · 786 阅读 · 0 评论 -
MySQL创建全文索引时,遇到“Temporary file write failure”的错误
MySQL 8.0.28、8.0.32版本bug,当innodb_disable_sort_file_cache为ON时,无法在表上创建全文索引,错误提示:临时文件写入失败。我们可以通过将innodb_disable_sort_file_cache设置为OFF,暂时规避这个问题。原创 2023-07-25 20:47:27 · 2049 阅读 · 0 评论 -
MySQL之全文索引二三事
mysql使用全文索引来提高文本搜索的效率。我们可以使用FULLTEXT关键字来声明一个全文索引列,创建全文索引后,可以使用MATCH AGAINST语句来执行全文搜索查询。我们需要使用ngram分词器来支持中文全文搜索。ngram_token_size用来指定令牌大小。全文搜索支持两种主要的查询模式:自然语言模式和布尔模式,自然语言模式通常更易于使用和理解,但可能会导致一些不准确的结果。布尔模式更灵活,可以更精确地控制搜索条件,但需要更多的查询语法知识。原创 2023-07-24 10:00:54 · 674 阅读 · 0 评论 -
数据库术语中的基数和选择性
在数据库中,某一列的唯一键(distinct Keys)的数量叫作基数。比如性别列,该列只有男女之分,所以这一列基数是2。主键列的基数等于表的总行数。查看某个列的基数。选择性列的基数与表中总行数的比值再乘以100%就是某个列的选择性。列的选择性可以衡量数据库索引能够帮助缩小对表中特定值的搜索范围的程度。查看某个列的选择性。我们知道索引最重要的目的之一是尽可能地缩小匹配行的初始候选值,从而减少io,提升查询性能。所以通常来说索引的选择性越高则查询效率越高,因为选择性高的索引可以让数据库在查找时原创 2022-06-15 18:31:36 · 1977 阅读 · 1 评论 -
MySQL的执行计划key_len
mysql explain key_len的含义原创 2022-05-13 16:00:48 · 2915 阅读 · 0 评论 -
MySQL查询默认不区分大小
mysql的查询默认是不区分大小写的。看个例子:可以看到使用如下语句,查询到了同一条记录。select * from tba where name = 'test';select * from tba where name = 'TEST';mysql的表查询大小写是否敏感,取决于字段的collate设置。我们看下这张表的charset和collate。charset是utf8,而utf8的默认collate规则是utf8_general_ci。(可通过show cha..原创 2021-11-24 20:02:34 · 2569 阅读 · 0 评论 -
mysql之常用ddl语句
1、创建表CREATE TABLE `white_user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` varchar(50) NOT NULL COMMENT '姓名', `created_time` datetime DEFAULT NULL COMMENT '创建时间', `updated_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY K...原创 2021-05-11 11:39:02 · 714 阅读 · 0 评论 -
Azure云MySQL/PostgreSQL库的Python SDK使用示例
参考:https://docs.microsoft.com/en-us/python/api/overview/azure/postgresql-mysql?view=azure-python首先:pip install azure-mgmt-rdbmsdemo文件from azure.mgmt.rdbms.mysql import MySQLManagementClientfrom azure.mgmt.rdbms.mysql.models import *SUBSCRIPTION原创 2021-03-18 14:24:57 · 274 阅读 · 0 评论 -
连接mysql报“com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException”的错误解决
使用jdbc连接mysql数据库,报错com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException。JDBCTest.java代码为:public class JDBCTest { public static void main(String[] args) throws Exception { Connection connection = null; PreparedStatem原创 2020-05-28 11:04:29 · 68860 阅读 · 9 评论 -
数据库之事务日志
首先什么是事务?事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取。事务的争取执行使得数据库从一种状态转换为另一种状态。事务必须服务ACID原则。A是原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)的缩写。事务的隔离性是通过锁来实现的,而事务的原子性、一致性和持久性则是通过事务日志来实现...原创 2020-04-01 16:25:28 · 4036 阅读 · 0 评论 -
如何导出show engine innodb status \\G的内容
通常,我们输入命令”show engine innodb status \G“来查看innodb的状态,但是有时状态信息太多,导致无法在屏幕上看到完整的信息。解决方法:mysql -u root -p --execute="show engine innodb status \G" > /root/test.log...原创 2020-04-01 15:50:39 · 1106 阅读 · 0 评论 -
mysql查询和创建存储过程
查询数据库的存储过程:show procedure status where db='test1'; 或者使用:select * from mysql.proc或者使用:select * from information_schema.routines想直接看某个存储的过程的创建明细:SHOW CREATE PROCEDURE test1.pro...原创 2020-04-01 15:18:12 · 1447 阅读 · 0 评论 -
Can't connect to local MySQL server through socket
当在linux主机上用mysql客户端连接本地服务器:mysql -hlocalhost -P3310 -uroot 时报错:Can't connect to local MySQL server through socket '/tmp/mysql.sock'即mysql找不到套接字的问题。首先有个前提是,Linux的mysql server端在启动时会启动一个socket,linu...原创 2020-03-22 11:46:23 · 3233 阅读 · 0 评论 -
mysql: lock wait timeout exceeded; try restarting transaction
项目中遇到:lock wait timeout exceeded; try restarting transaction的问题。出错的语句是:select id from A where id=1 for update即锁等待超时, 可能原因分析:并发场景下有一个事务对表A的id等于1的记录进行select for update操作,开启了事务但是并未提交,此时另外的事务对表A的...原创 2020-02-16 10:03:08 · 268 阅读 · 0 评论 -
mysql: Waiting for table metadata lock的问题排查
在数据库中修改表结构的时候不成功,然后show processlist(select*frominformation_schema.processlistwhereCommand !='Sleep'orderbyTimedesc;)发现大量的 Waiting for table metadata lock信息。(注:在这之前,我使用kill id的方法(就是show proce...原创 2019-12-31 17:09:52 · 671 阅读 · 0 评论 -
mysqldump导出某个表的部分数据
命令:mysqldump -u用户名 -p密码 数据库名 表名 --where="筛选条件" > 导出文件路径mysqldump -h主机地址 -P端口号 -u用户名 -p密码 数据库名 表名 --where="筛选条件" > 导出文件路径注:导出某张表的全部数据,就不加后面的--where端口号前面的-P,P是大写例:mysqldump -h127.0.0...原创 2019-10-11 14:53:54 · 294 阅读 · 0 评论 -
如何通过命令行窗口查看sqlite数据库文件?
1、输入" sqlite3 + 数据库名.db " (如: " sqlite3 collect.db ") 打开数据库2、可输入 " .table " 查看数据库中存在哪些表3、可输入" .schema ' 查看建表语句4、通过SQL查询语句 " select * from 表名 " (如:" select * from Book ")5、sqlite字符串拼接:||se.原创 2018-08-29 09:40:28 · 9348 阅读 · 0 评论 -
mysql选择指定范围行的记录
方法:limit param1, param2param1 : 开始搜索的指针 .从0开始计。param2 : 搜索的条数。 例:前四条记录:SELECT * FROM table limit 0,4;第一条记录:SELECT * FROM table limit 0,1;第二条记录:SELECT * FROM jforum_users limit 1,1;第五条记...原创 2018-09-19 17:19:13 · 4142 阅读 · 0 评论 -
mysql备份数据库
mysqldump命令选项--add-drop-table:在每个创建数据库表语句前添加删除数据库表的语句;--add-locks:备份数据库表时锁定数据库表;--all-databases:备份MySQL服务器上的所有数据库;--comments:添加注释信息;--compact:压缩模式,产生更少的输出;--complete-insert:输出完成的插入语句;--data...原创 2018-09-26 19:37:14 · 160 阅读 · 0 评论 -
mysql获取最后一次插入的id
mysql获取最后一次插入的id:python代码示例:conn = getmysqlconn(connstr, use_pool)try: cursorclass = conn.cursor(cursor=pymysql.cursors.Cursor) with cursorclass as cursor: cursor.execute(sql) ...原创 2018-09-27 10:02:32 · 6459 阅读 · 0 评论 -
mysql合并查询结果
利用 UNION 关键字,可以给出多条 SELECT 语句,并将它们的结果组合成一个结果集。合并时,两个表对应的列数和数据类型必须相同。基本的语法格式如下: SELECT column,.... FROM table1 UNION [ALL]SELECT column ,... FROM table2union和union all的区别:un...原创 2018-10-17 12:06:55 · 424 阅读 · 0 评论 -
mysql 执行delete的时候没走索引
在项目中需要删除表里的过期数据,表设置了key为gmt_created, 但是在执行"delete from table_name where to_days(gmt_created) < to_days(now()) -7"这个语句的时候并没有走索引。研究后发现是因为在gmt_created上使用了to_days()这个函数后, 就不会走索引了,修改sql语句为:delete...原创 2018-11-16 09:48:55 · 9512 阅读 · 0 评论 -
mysql中insert into select from的使用
项目中遇到,从一个数据库A采集数据,然后插入到另一个数据库B中的需求。因为数据量很大,达到千万级。最开始我们采用的方案是,使用是将A中的数据通过fetch_all()的方式赋值给变量,然后分批次的插到数据库B中。这样的问题有两个,一是通过fetch_all将几千万级的数据赋值给变量,会导致内存使用突增,二是分批次插数据库,耗时也是非常长的。所以我们考虑使用insert into ... sel...原创 2018-12-03 10:45:38 · 6507 阅读 · 0 评论 -
mysql中的information_schema
information_schema数据库是MySQL自带的一个数据库,它提供了访问数据库元数据的方式。那什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。information_schema中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问...原创 2019-01-15 12:55:30 · 1147 阅读 · 0 评论 -
mysql:INSERT ...ON DUPLICATE KEY UPDATE
在日常业务开发中经常有这样一个场景,首先创建一条记录,然后插入到数据库;如果数据库已经存在同一主键的记录,则执行update操作,如果不存在,则执行insert操作;可以使用:INSERT ...ON DUPLICATE KEY UPDATE 的方法。比方说下面的sql:INSERT INTO custins_param(custins_id,name,value) VALUES (\'...原创 2019-03-19 14:22:36 · 217 阅读 · 0 评论 -
mysql数据迁移
#导出数据库test到 test.sql文件中mysqldump-uusername-p--database test> test.sql#导入数据库到新的服务器(假设数据库已经创建好)cat/path/to/test.sql|mysql-uusername-p pwd或mysql-uusername-p pwd</...原创 2019-04-11 13:59:25 · 112 阅读 · 0 评论 -
解决mysql的死锁
解除正在死锁的状态有两种方法:第一种:1.查询是否锁表。show OPEN TABLES where In_use > 0;2.查询进程。show processlist(或者:select * from information_schema.processlist where Command != 'Sleep' order by Time desc;)3.杀死进程...原创 2019-04-25 19:21:36 · 352 阅读 · 0 评论 -
mysql bit类型 使用select查询的时候无法看到其值
解决:1、查询十进制:+0select id+0 from table; 2、查询二进制:select bin(id+0) from test;3、查询八进制:select oct(id+0) from test;4、查询十六进制:select hex(id+0) from test;补充:创建bit类型字段其中括号里的8表示二进...原创 2019-07-05 16:19:49 · 1671 阅读 · 0 评论 -
MySQL查询 存在一个表而不在另一个表中的数据
A、B两表,找出id字段中,存在A表,但是不存在B表的数据。三种方法:1、not in SELECT DISTINCT a.id FROM a WHERE a.ID NOT IN (SELECT id FROM b)2、left join (表示左连接后,B表的id字段为null的记录。)select A.ID from A left join B on A.ID=B.I...原创 2018-08-27 16:44:41 · 3697 阅读 · 0 评论