数据库技术 http://uncletoo.com/html/database/ zh-cn window系统与Linux系统如何备份和还原MySQL http://uncletoo.com/html/mysql/1197.html 1、window 系统下的备份和还原

备份:
(1)通过cmd命令进入mysql的bin目录下   C:\Program Files\MySQL\MySQL Server 5.5\bin
(2) 输入命令 mysqldump -u root -p test>test.sql

        root (用户名)    test(数据库名)     test.sql(导出文件名)

]]>
mysql 主从同步原理详解 http://uncletoo.com/html/mysql/1196.html mysql 主从同步原理详解

MySQL备份工作原理

       简单的说就是把 一个服务器上执行过的sql语句在别的服务器上也重复执行一遍, 这样只要两个数据库的初态是一样的,那么它们就能一直同步。当然这种复制和重复都是mysql自动实现的,我们只需要配置即可。

]]>
Mysql 去重复并按照in里面的内容排序 http://uncletoo.com/html/mysql/1191.html 背景:uncletoo 为重复字段
select uncletoo from go_member where uncletoo !=0 group by uncletoo order by count(*) desc
查询出字段为uncletoo 的重复数量和 uncletoo 这个字段的内容

SELECT * FROM go_member WHERE uid in (8855,8764,8851)order by substring_index(‘8855,8764,8851’,uid,1)

这样可以让uid 更具 in里面的内容排序

]]>
Mysql性能优化案例研究 - 覆盖索引和SQL_NO_CACHE http://uncletoo.com/html/mysql/1183.html 场景

产品中有一张图片表pics,数据量将近100万条,有一条相关的查询语句,由于执行频次较高,想针对此语句进行优化

表结构很简单,主要字段:

]]>
MySQL教程:使用正则表达式查询 http://uncletoo.com/html/mysql/1179.html MySQL中使用REGEXP关键字指定正则表达式的字符匹配模式。

]]>
MySQL创建用户与授权方法 http://uncletoo.com/html/mysql/1176.html 一、创建用户:

命令:

Create USER 'username'@'host' IDENTIFIED BY 'password';

]]>
Oracle中BLOB字段和CLOB字段类型的区别 http://uncletoo.com/html/oracle/1175.html Oracle中BLOB字段和CLOB字段类型的区别:

1、BLOB是按二进制来存储的,而CLOB是可以直接存储文字的;

2、BLOB字段可以存储图片、文件和音乐等,而CLOB可以存储文章或较长文字的内容。

]]>
MySQL 清除表空间碎片 http://uncletoo.com/html/mysql/1173.html MySQL 清除表空间碎片

碎片产生的原因

(1)表的存储会出现碎片化,每当删除了一行内容,该段空间就会变为空白、被留空,而在一段时间内的大量删除操作,会使这种留空的空间变得比存储列表内容所使用的空间更大;

]]>
MySQL注释中的sql也可能执行 http://uncletoo.com/html/mysql/1168.html        MySql支持三种注释形式:# 和–属于单行注释,注释范围为该行的结尾;/* */注释属于多行注释,此外该种注释还可以实现行内注释。具体的使用情况如下图中所示(四种使用情形):

MySQL注释中的sql也可能执行

       除此之外,/* */这种注释方式还有一种扩展,即当在注释中使用!加上版本号时,只要mysql的当前版本等于或大于该版本号,则该注释中的sql语句将被mysql执行。这种方式只适用于mysql数据库。不具有其他数据库的可移植性。语句形式如下所示:
/*!40000 Drop DATABASE IF EXISTS `test_sql`*/;

]]>
从Oracle 到 MySQL 数据库迁移的四种方法 http://uncletoo.com/html/oracle/1167.html 从Oracle 到 MySQL 数据库迁移的四种方法

前言
 之前搭建了一个ExtJS + Spring + oracle 的这样一个报表系统的框架。 因为其他部门的要求, 也需要这个Framework 进行一些特殊的定制。
 但是有一个问题是 oracle 的数据库是需要收费的, 个人使用倒没什么问题, 公司使用的话就会有侵权的问题了。
而MySQL 则是完全免费的
 所以使用 ExtJS + Spring + MySQL  这样的组合应该就没什么问题了。
 理论上来说, MySQL 已经被Oracle 收购, 这两者之间的Migrate 应该比较容易, 但实际的迁移还是有一些问题, 以下就说一说一些实现的方式和问题。

]]>
ORACLE存储过程中遍历游标的三种方式 http://uncletoo.com/html/oracle/1160.html 第一种使用For 循环

for循环是比较简单实用的方法。

首先,它会自动open和close游标。解决了你忘记打开或关闭游标的烦恼。

]]>
MySQL学习笔记之数据类型优化 http://uncletoo.com/html/mysql/1155.html MySQL支持的数据类型很多,选择正确的数据类型对于获得高性能至关重要,不管存储哪种数据类型,下面几个简单原则都有助于我们做出更好的选择。

1:更小的通常更好,更小的数据类型通常更快,因为它们占用更少的磁盘,内存和cpu缓存,并且处理时需要的CPU周期也更少。(但是要确保不会低估要存储值的范围)。

2:简单就好,简单的数据类型操作通常需要更少的cpu周期,例如整型比字符串的操作代价更低,因为字符集和排序规则比较整型更为复杂。

]]>
MySQL主键重复问题解决 Duplicate entry '787192513' for key 'PRIMARY' http://uncletoo.com/html/mysql/1154.html Mysql导入大量数据时,会报如下错误,主键重复,不能再继续执行。
查询:

Insert INTO `FNDCN_MNG` VALUES(787390578, 1, '杨明', 95585, '2015-06-08', '招募说明书', 80100, NULL, '1', NULL, '3', '2015-06-29', NULL, '1', '    杨明先生,中央财经大学硕士研究生,14年银行、基金从业经历。曾在上海银行从事信贷员、交易员及风险管理工作。2004年10月加入华安基金管理有限公司,任研究发展部研究员。2013年6月起担任华安策略优选股票型基金的基金经理。2014年6月起担任投资研究部高级总监。', '2015-11-09 12:33:58', '2016-01-06 21:34:41', '2015-12-31 12:14:18', 'JY', '488969752640', NULL, NULL, NULL, NULL)

错误提示:

Error occured at:2016-02-16 15:23:41
Line no.:220
Error Code: 1062 - Duplicate entry '95585-80100-2015-06-29 00:00:00-1--1' for key 'IDX_FNDCN_MNG'


解决方案一:
  将主键设置为自动增长。可以在数据库手动将相关表设置ID为自增长。如图:

]]>
MySQL连接及基本信息查看命令小结 http://uncletoo.com/html/mysql/1147.html 前言

学习PHP就不得不提MySQL,虽然有phpMyadmin这样的工具可以图形化操作数据库,但我还是想借学习PHP的机会使用下命令行方式操作数据库。以下就是我的学习小结,包括命令行连接数据库,查看当前用户,查看当前使用的存储引擎,查看MySQL版本等基本命令。

连接数据库

]]>
Oracle中对数字加汉字的排序 http://uncletoo.com/html/oracle/1145.html 示例数据:

     玫瑰园1楼
     玫瑰园2楼
     兴帝家园1楼
     兴帝家园2楼

如果是只抽取数字进行排序 会造成两个1楼在前 两个2楼在后

]]>
笔记:ORACLE-SQL语句性能查询 http://uncletoo.com/html/oracle/1144.html 1.查看总消耗时间最多的前10条SQL语句

select *
from (select v.sql_id,
v.child_number,
v.sql_text,
v.elapsed_time,
v.cpu_time,
v.disk_reads,
rank() over(order by v.elapsed_time desc) elapsed_rank
from v$sql v) a
where elapsed_rank <= 10;

]]>
MySQL-[Err]1248 - Every derived table must have its own alias 错误解决方法 http://uncletoo.com/html/mysql/1143.html MySQL执行多表查询时报错:

SELECT * from  
(  
select e.account from employee e  
UNION  
SELECT u.account from `user` u  
UNION  
SELECT a.account from agent a  
)

执行这个SQL语句是提示如下错误:

]]>
Mysql load data 命令解析、处理 error 29 (ErrCode: 13) 错误(在ubuntu环境下) http://uncletoo.com/html/mysql/1138.html        在 mysql 服务器上,可以通过 load data infile ‘file_name’ into table table_name; 命令将一个文本文件中的所有数据存到指定表中。最粗略形式的例子:
load data infile ‘test.txt’ into table test_table;
默认情况下,load data infile 对于文本中行为是:

       1、一行对应数据库表中的一条记录
       2、各个字段之间以tab键分开
       3、每个字段的值没有被任何字符括起来
       4、行没有前缀可以忽略
比如某一行文本:
1 test “xx”
读入数据库之后,第三个字段的值是 “xx”,而不是 xx。当然这些字段都可以设置,完整的 load data infile 命令是:

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'
  [REPLACE | IGNORE]
 INTO TABLE tbl_name
  [FIELDS
[TERMINATED BY 'string']
  [[OPTIONALLY] ENCLOSED BY 'char']
  [ESCAPED BY 'char' ]
]
  [LINES
  [STARTING BY 'string']
 [TERMINATED BY 'string']
 ]
  [IGNORE number LINES]
 [(col_name_or_user_var,...)]
  [SET col_name = expr,...]]

]]>
Mysql中创建序列的方法 http://uncletoo.com/html/mysql/1136.html Mysql中创建序列的方法


CREATE TABLE emp_seq ( seq VARCHAR(8));  
INSERT INTO emp_seq VALUES('0');  
UPDATE emp_seq SET seq = LAST_INSERT_ID(seq+1);  
SELECT LAST_INSERT_ID();  

这东西完全跟oracle的sequence一致。即使在update之后,select之前有其它session也update了,本session得到的,仍然是自己update的那一个值。

]]>
ORACLE使用contains、instr或like方法判断是否包含字符串 http://uncletoo.com/html/oracle/1135.html ORACLE使用contains、instr或like方法判断是否包含字符串

如数据库中存储了海量的数据,当查询时使用like,速度明显变慢。
今天特意测试一下,发现可以使用instr函数来取代like的有明显的提高。

在1KW的的区间测试:
carnumber建立了索引,当然这个是对于某一个字段而言,但是有2个以上的字段,效果就更加明显。
contains:   建立索引的基础上.

]]>