Database
anssummer
只求每天进步一点点.
展开
-
什么是乐观锁,什么是悲观锁
一、并发控制当程序中可能出现并发的情况时,就需要通过一定的手段来保证在并发情况下数据的准确性,通过这种手段保证了当前用户和其他用户一起操作时,所得到的结果和他单独操作时的结果是一样的。这种手段就叫做并发控制。并发控制的目的是保证一个用户的工作不会对另一个用户的工作产生不合理的影响。没有做好并发控制,就可能导致脏读、幻读和不可重复读等问题。常说的并发控制,一般都和数据库管理系统(DBMS)有关。在 DBMS 中的并发控制的任务,是确保在多个事务同时存取数据库中同一数据时,不破坏事务的隔离.转载 2020-09-25 11:20:53 · 516 阅读 · 0 评论 -
MYSQL实现任务分发机制
参考:select for update :https://www.cnblogs.com/liqiu/p/3519649.html一个简单的mysql队列:https://zhuanlan.zhihu.com/p/20293493?refer=alsotang最近公司有个项目,需要多并发完成任务,也就是一个任务控制中心控制多个WORKER的问题,这里的核心点在于如果WORKER_A正在执行1号任务,任务中心不能让WORKER_B重复执行1号任务,即WORKER_A和WORKER_B同时来任务中心..原创 2020-09-23 12:50:12 · 495 阅读 · 0 评论 -
MySQL统计函数GROUP_CONCAT陷阱
本博客所有原创文章采用知识共享署名-非商业性使用-相同方式共享,转载请保留链接http://chaoqun.17348.com/2008/12/mysql-trap-of-group-concat/最近在用MySQL做一些数据的预处理,经常会用到group_concat函数,比如类似下面一条语句mysql>select aid,group_concat(bid) from tb转载 2013-12-18 01:22:15 · 667 阅读 · 0 评论 -
mysqlnd插件mysqlnd_ms和mysqlnd_qc的介绍
一.首先,mysqlnd是啥个玩意?为什么要使用mysqlnd原来的libmysql用的好好的,为什么还要搞一个mysqlnd出来呢?原因一: license问题libmysql是MYSQL AB公司开发的,现在已经是Oracle集团所属的了,它使用MYSQL license发布。This ultimately led to MySQL support being disabl原创 2013-12-08 10:38:45 · 1069 阅读 · 0 评论 -
经典分享MySQL的limit查询优化
以下的文章主要是对MySQL limit查询优化的具体内容的介绍,我们大家都知道MySQL数据库的优化是相当重要的。其他最为常用也是最为需要优化的就是limit。MySQL的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降。同样是取10条数据select * from yanxue8_visit limit 10000,10select * from原创 2013-11-22 23:44:06 · 776 阅读 · 0 评论 -
mysql的三种安装方式:RPM 二进制包和源代码
一、使用RPM包进行安装 首先可以从安装光盘中或者到mysql的网站上下载对应版本的rpm包如下:MySQL-server-community-5.1.38-0.rhel5.i386.rpmMySQL-client-community-5.1.38-0.rhel5.i386.rpm 接着我们可以使用rpm命令进行安装:rpm -ivh MySQL-serve原创 2013-09-29 17:37:36 · 2200 阅读 · 0 评论 -
mysql File权限
想给一个用户File权限,以便实现SELECT ... INTO OUTFILE,但是在操作中出错:root@localhost:mysql.sock[(none)] 15:27:30>GRANT FILE on hx.enjoy TO hx@localhost;ERROR 2006 (HY000): MySQL server has gone awayNo connectio原创 2013-09-29 14:24:32 · 4511 阅读 · 0 评论 -
mysql常见错误总结
1.Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -A上面卡住的原因::是由于数据库太大,即数据库中表非常多,所以如果预读数据库信息,将非常慢,所以就卡住了,如果数据库中表非常少原创 2013-09-29 13:24:37 · 718 阅读 · 0 评论 -
MYSQL高可用方案探究(总结)
前言 http://blog.chinaunix.net/uid-20639775-id-3337432.htmlLvs+Keepalived+Mysql单点写入主主同步高可用方案 http://blog.chinaunix.net/uid-20639775-id-3337448.htmlLvs+Keepalived+Mysql单点写入读负载均衡主主同步高可用方案http://转载 2013-09-29 00:10:01 · 2088 阅读 · 0 评论 -
DRBD+Heartbeat
DRBD简介 Distributed Replicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。 数据镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回) DBRD的核心功能通过Linux的内核实现,最接近系统的IO栈,但它不能神奇地添加上层的功能比如检转载 2013-09-29 00:07:15 · 1061 阅读 · 0 评论 -
mysql获取系统当前的数字形式时间值
mysql> select UNIX_TIMESTAMP(); 2 -> 882226357 3 mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00'); 4 -> 8759965805 mysql> select UNIX_TIMESTAMP原创 2013-12-09 19:34:01 · 1847 阅读 · 0 评论 -
MySQL_使用group_distinct后_如何得到总记录数(行数)
问题: 使用了group或者distinct等后,如何得到查询结果的总记录数? --要求,不使用子查询 分析:如果没有group,count(*) 就可以了。但是,使用了就不同了。数据库里使用统计函数,针对的是group。这个时候,如何得到查询结果记录总数,是个问题。 可行性分析:这个问题有解么?如果不可能的事情,就别搞了,例如永动机,3等分等问题。原创 2013-12-17 20:58:07 · 930 阅读 · 0 评论 -
常用软件使用记录
mysql安装:参考地址:http://www.linuxidc.com/Linux/2015-04/116003.htm原创 2016-04-05 23:47:04 · 654 阅读 · 0 评论 -
mongodb
工作中使用mongodb已经好久了,讽刺的是到了最后快离职的时候才有时间好好研究下源码。印象:mongodb是一个内存数据库,数据都是放到内存里面的,所以速度上不比redis慢。想法:mongodb对数据的操作大部分都在内存中。但mongodb并不是单纯的内存数据库。甚至个人认为不属于内存数据库。相反,redis就是一个不折不扣的内存数据库了,mysql一个不折不扣转载 2016-02-21 23:15:23 · 692 阅读 · 0 评论 -
MySQL和MongoDB设计实例对比
MySQL是关系型数据库中的明星,MongoDB是文档型数据库中的翘楚。下面通过一个设计实例对比一下二者:假设我们正在维护一个手机产品库,里面除了包含手机的名称,品牌等基本信息,还包含了待机时间,外观设计等参数信息,应该如何存取数据呢?如果使用MySQL的话,应该如何存取数据呢?如果使用MySQL话,手机的基本信息单独是一个表,另外由于不同手机的参数信息差异很大,所以还需要转载 2014-02-13 20:16:06 · 508 阅读 · 0 评论 -
低效的where 1=1
也许很多人在开发多条件查询或模糊查询的时候,为保证不管选择哪种过滤条件总保证查询条件为true,于是在where子句后选择1=1或者0=0技巧来满足模糊查询。当然这的确对开发人员来说是一个不错的技巧。于是我在Mysql中通过上千万条的数据测试发现很耗性能。即便是建了常用字段的索引(排序)也没有作用,足以确定1=1很低效,大数据量很耗性能。 select * from t_user wh原创 2014-01-14 20:07:26 · 757 阅读 · 0 评论 -
MySql索引的一个技巧
索引的建立,直接会影响到查询性能。看下面的查询:select * from ddd where id>1 order by score;我们查询学号大于1的学生的各科成绩得分。那么按照一般的思路,是这样建立索引的(id,score)。explain一下:[sql] view plaincopymysql> ex原创 2013-12-20 01:20:39 · 582 阅读 · 0 评论 -
MySql批量drop table
今天发现数据库中很多没用的表,想清理掉。发现mysql好像不支持类似这样的写法:drop table like "%r"在oracle中,查了资料,是可以通过其他方式来实现:看这里【我顶!链接丢了!】那么想在mysql中实现,怎么做呢?两个思路:第一、修改mysql源码,在drop的时候加上like关键字支持。第二、写一个脚本,在数据库之外执行。------------原创 2013-12-20 01:15:36 · 823 阅读 · 0 评论 -
高效的MySQL分页
PERCONA PERFORMANCE CONFERENCE 2009上,来自雅虎的几位工程师带来了一篇”Efficient Pagination Using MySQL“的报告,有很多亮点,本文是在原文基础上的进一步延伸。首先看一下分页的基本原理:mysql> explain SELECT * FROM message ORDER BY id DESC LIMIT 100转载 2014-01-01 23:16:51 · 502 阅读 · 0 评论 -
以某个表为基准连表查询分析
mysql> select * from test1;+------+| c1 |+------+| a || b || c || d |+------+4 rows in set (0.00 sec)mysql> select * from test2;+------+| c1 |+------+|原创 2013-12-18 02:29:51 · 937 阅读 · 0 评论 -
navicat for mysql导出和导入数据库
(1)导出:如上图:在数据库名loan2上右击---->转储SQL文件,然后选择下路径就ok了!(2)导入:先新建要导入的数据库,然后此上右击---->运行SQL文件,然后选择需要导入的数据库就ok了!原创 2013-09-29 10:44:26 · 1076 阅读 · 0 评论 -
把session放入mysql
session通常放在/tmp目录下,而该文件夹的权限是everbody可读,这个就非常可怕了!学校的论坛曾经就有人通过session来盗取帐号!所以后来就尝试把session放入数据库,表的结构和过程如下://创建表//create sesslib.sqlCREATE TABLE sesslib ( data text, time datetime, id int(11) DEF原创 2013-10-08 12:16:43 · 989 阅读 · 0 评论 -
mysql查询缓存
1.Query cache介绍 作用于整个 MySQL Instance,主要用来缓存 MySQL 中的 ResultSet,也就是一条SQL语句执行的结果集,所以仅仅只能针对select语句。当我们打开了 Query Cache 功能,MySQL在接受到一条select语句的请求后,如果该语句满足Query Cache的要求(未显式说明不允许使用Query Cache,或者已经显式申明需要使用Q原创 2013-10-01 15:39:07 · 651 阅读 · 0 评论 -
explain sql解释
EXPLAIN SELECT ……变体:1. EXPLAIN EXTENDED SELECT ……将执行计划“反编译”成SELECT语句,运行SHOW WARNINGS 可得到被MySQL优化器优化后的查询语句 2. EXPLAIN PARTITIONS SELECT ……用于分区表的EXPLAIN执行计划包含的信息 id包含一组数字,表示查转载 2013-10-01 14:34:06 · 817 阅读 · 0 评论 -
MySQL插入索引太慢,加参数 DELAY_KEY_WRITE
插入大数据时,有索引会很慢,可以DISABLE KEYS,或者直接在table中加入DELAY_KEY_WRITE1.LOCK TABLES `test` WRITE;ALTER TABLE `test` DISABLE KEYS ;INSERT INTO `test` VALUES (1,'???',80,1),(2,'???',90,2),(1,'李四',80,3),(转载 2013-10-01 22:10:39 · 3282 阅读 · 0 评论 -
MySQL 针对 MyISAM 表锁的解决方案
最近服务器上经常出现mysql进程占CPU100%的情况,使用show processlist命令后,看到出现了很多状态为LOCKED的sql。使用show status like 'table%'检查Table_locks_immediate和Table_locks_waited,发现Table_locks_waited偏 大。出问题的表是MyISAM,分析大概是MyISAM的表锁导致。原创 2013-10-01 18:11:30 · 918 阅读 · 0 评论 -
mysql查询优化之基于索引的排序
MySQL的弱点之一是它的排序。虽然MySQL可以在1秒中查询大约15,000条记录,但由于MySQL在查询时最多只能使用一个索引。因此,如果 WHERE条件已经占用了索引,那么在排序中就不使用索引了,这将大大降低查询的速度。 我们可以看看如下的SQL语句: SELECT * FROM SALES WHERE NAME = "jack" ORDER BY SALE_DATE原创 2013-10-01 17:23:03 · 852 阅读 · 0 评论 -
mysql数据库重命名,执行顺序
怎样从文本文件执行SQL语句mysql客户程序一般交互使用:shell> mysql db_name还可以将SQL语句放到一个文件中然后告诉mysql从该文件读取输入。要想实现,创建一个文本文件text_file,并包含你想要执行的语句。然后按如下所示调用mysql:shell> mysql db_name text_file还可以用一个USE db_name语句启原创 2013-10-01 13:26:15 · 1408 阅读 · 0 评论 -
mysql安装错误
1. 执行./configure --prefix=/usr/local/mysql时,遇到error: No curses/termcap library found的问题。最后几行出了错。完整错误信息如下:checking for tgetent in -lncurses... nochecking for tgetent in -lcurses... no原创 2013-09-29 17:59:20 · 758 阅读 · 0 评论 -
Linux安装mysql——源码安装
1.假设已经有mysql-5.5.10.tar.gz以及cmake-2.8.4.tar.gz两个源文件(1)先安装cmake(mysql5.5以后是通过cmake来编译的)[root@ rhel5 local]#tar -zxv -f cmake-2.8.4.tar.gz[root@ rhel5 local]#cd cmake-2.8.4[root@ rhel5 cmake-2转载 2013-09-29 17:58:25 · 741 阅读 · 0 评论 -
你见过ORDER BY -title DESC这种用法吗?
在查看网站SQL语句时,发现这样一样语句,ORDER BY -title DESC。第一反应是不是写错了,-title DESC不是应该和title ASC一样吗?检测了下,两者结果是不一样的。假定title有:旅游1线,20路,112路,113路title ASC,是 112路,113路,20路,旅游1线-title DESC,是 旅游1线,20路,112路,11转载 2013-09-29 14:42:26 · 1527 阅读 · 0 评论 -
mysql覆盖索引
话说有这么一个表:CREATE TABLE `user_group` ( `id` int(11) NOT NULL auto_increment, `uid` int(11) NOT NULL, `group_id` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `uid` (`uid`)原创 2013-10-01 15:41:18 · 733 阅读 · 0 评论 -
mysql中order by优化的那些事儿
为了测试方便和直观,我们需要先创建一张测试表并插入一些数据:CREATE TABLE `shop` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '记录ID', `shop_id` int(11) NOT NULL COMMENT '商店ID', `goods_id` int(11) NOT NULL COMMENT '物品ID',转载 2013-10-01 17:52:40 · 799 阅读 · 0 评论 -
mysql event
配置:[mysqld]event_scheduler = 1或者:set global event_scheduler=1创建语句:CREATE EVENT IF NOT EXISTS event_log ON SCHEDULE EVERY 100 SECOND ON COMPLETION PRESERVE enableDO begin// sta原创 2013-10-07 15:21:36 · 755 阅读 · 0 评论 -
mysql获取自增id最大值四种方法
MYSQL获取自增ID的四种方法1. select max(id) from tablename2.SELECT LAST_INSERT_ID() 函数LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。在多用户交替插入数据的情况下max(id)显然不能用。这时就该使用LAST_INSERT_ID了,因原创 2013-09-21 20:09:31 · 19929 阅读 · 0 评论 -
mysql基础(2)
1.replace的用法:replace into t(id, update_time) select 1, now();replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。要注意的是:插原创 2013-10-08 12:34:21 · 952 阅读 · 0 评论 -
mysql索引基础
1.建立多列索引如何去建立一个多列索引,最重要的一个问题是如何安排列的顺序是至关重要的,比如需要对一个表里面的两个字段foo,bar建一个索引,那么索引的顺序是(foo,bar)还是(bar,foo)呢。在搞清楚如何安排顺序之前先了解一个概念,cardinality:金山的翻译是"集的势",比如,tb表有1700条记录,foo字段有750个不同的记录,那么就可以说We have a car原创 2013-10-07 21:13:45 · 764 阅读 · 0 评论 -
mysql join的实现原理及优化思路
join的实现原理join的实现是采用Nested Loop Join算法,就是通过驱动表的结果集作为循环基础数据,然后一条一条的通过该结果集中的数据作为过滤条件到下一个表中查询数据,然后合并结果。如果有多个join,则将前面的结果集作为循环数据,再一次作为循环条件到后一个表中查询数据。接下来通过一个三表join查询来说明mysql的Nested Loop Join的实现方式。原创 2013-10-07 21:13:28 · 860 阅读 · 0 评论 -
mysql基础
1.内存表和临时表区别内存表,就是放在内存中的表,所使用内存的大小可通过My.cnf中的max_heap_table_size指定,如max_heap_table_size=1024M,内存表与临时表并不相同,临时表也是存放在内存中,临时表最大所需内存需要通过tmp_table_size =128M设定。当数据超过临时表的最大值设定时,自动转为磁盘表,此时因需要进行IO操作,性能会大大下降原创 2013-10-07 01:05:53 · 958 阅读 · 0 评论 -
mysql索引种类
现在来介绍了数据库索引,及其优、缺点。针对MySQL索引的特点、应用进行了详细的描 述。分析了如何避免MySQL无法使用,如何使用EXPLAIN分析查询语句,如何优化MySQL索引的应用。本文摘自《MySQL 5权威指南》(3rd)的8.9节。索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。注:[1]索引不是万能的!索引原创 2013-09-21 20:27:12 · 811 阅读 · 0 评论