View Mode: Normal | Article List
Category: MySql | < | 1 | 2 | 3 | 4 | 5 | >

sqlyog 8 Enterprise Full

[ 2009-02-12 11:13:29 | Author: zhenhua ]
Sqlyog 8.01 Enterprise Full

刚更新到8.01,除了界面更漂亮和人性化以外还有两个比较令人激动的功能,一是增加了SQL Formatter 即SQL语句格式化功能,很实用,这一点终于跟上老大PL/SQL的脚步,见下图:

����Ŵ�


具体试验了一下,发现有些复杂些的SQL还是无法格式化,班加罗尔的工程师们还要改进了。

再就是Query Profiler性能分析,mysql5.0.37以上的版本支持,有了这个功能可以知道每条sql语句的性能,以及每条查询效率耗费在什么地方,这也是质的飞跃。详见mysql官方的介绍:http://dev.mysql.com/tech-resources/articles/using-new-query-profiler.html。
测试了一下,发现5.1.25的也不支持:

����Ŵ�


放个别人的图:
����Ŵ�

...

Read More...

mysql concat乱码问题解决

[ 2008-10-31 15:19:47 | Author: zhenhua ]
concat(str1,str2)
当concat结果集出现乱码时,大都是由于连接的字段类型不同导致,如concat中的字段参数一个是varchar类型,一个是int类型或doule类型,就会出现乱码。

解决方法:
利用mysql的字符串转换函数CONVERT将参数格式化为char类型就可以了。

举例:
concat('数量:',CONVERT(int1,char),CONVERT(int2,char),'金额:',CONVERT(double1,char),CONVERT(double2,char))

mysql 复制表/字段

[ 2008-10-02 21:02:18 | Author: zhenhua ]
Mysql 复制表及结构
一、CREATE TABLE 方法

整表复制 # create table 新表 select * from 旧表;
结构复制 # create table 新表 select * from 旧表 where 1 <>1;

二、INSERT INTO 方法

得到建表语句 # show create table 旧表;
新建表
复制数据到新表 # insert into 新表 select * from 旧表;

truncate\delete\drop

[ 2008-08-16 16:24:10 | Author: zhenhua ]
truncate,不带where子句的delete,drop的比较.

相同点:truncate和不带where子句的delete, 以及drop都会删除表内的数据

不同点:
1. truncate和 delete只删除数据不删除表的结构(定义)
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index);
依赖于该表的存储过程/函数将保留,但是变为invalid状态.

2.delete语句是DML,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.
truncate,drop是DDL, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.
truncate会删除相关的index

3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动
显然drop语句将表所占用的空间全部释放
truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse ...

Read More...

工作log

[ 2008-07-13 02:58:48 | Author: zhenhua ]
存储过程还不会写 [evil]
3条sql搞定了,仅作记录
/*重命名*/
update t_xmgl_xm a,t_khgl_khzl b,t_xt_dm c set a.xmmc=concat('2008年',b.khmc,c.mc,'1') where c.lx=4 and a.khids is null and a.khid=b.khzlid and a.xmlxdm=c.dm and a.xmmc not like '%个人项目%';
/*查询重复*/
select cjrq,jzrq,xmmc,xmlxdm,khid from t_xmgl_xm a where (a.xmlxdm,a.khid) in (select xmlxdm,khid from t_xmgl_xm group by xmlxdm,khid having count(*) > 1) order by xmlxdm,khid,cjrq;
/*设置标记*/
update t_xmgl_xm set xmms = concat('(原项目名称:',oldxmmc,')',xmms)
...

Read More...

MySQL重复记录 查询及删除

[ 2008-07-13 01:18:24 | Author: zhenhua ]
查询及删除重复记录的方法
(一)
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
select * from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
delete from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)

3、查找表中多余的重复记录(多个字段)
...

Read More...

mysql innodb 配置详解

[ 2008-07-06 15:48:08 | Author: zhenhua ]
innodb_buffer_pool_size:这是InnoDB最重要的设置,对InnoDB性能有决定性的影响。默认的设置只有8M,所以默认的数据库设置下面InnoDB性能很差。在只有InnoDB存储引擎的数据库服务器上面,可以设置60-80%的内存。更精确一点,在内存容量允许的情况下面设置比InnoDB tablespaces大10%的内存大小。

innodb_data_file_path:指定表数据和索引存储的空间,可以是一个或者多个文件。最后一个数据文件必须是自动扩充的,也只有最后一个文件允许自动扩充。这样,当空间用完后,自动扩充数据文件就会自动增长(以8MB为单位)以容纳额外的数据。例如: innodb_data_file_path=/disk1/ibdata1:900M;/disk2/ibdata2:50M:autoextend两个数据文件放在不同的磁盘上。数据首先放在ibdata1中,当达到900M以后,数据就放在ibdata2中。一旦达到50MB,ibdata2将以8MB为单位自动增长。如果磁盘满了,需要在另外的磁盘上面增加一个数据文件。

innodb_data_ho...

Read More...

Mysql InnoDB 分目录存储

[ 2008-07-06 15:39:17 | Author: zhenhua ]
配置my.ini
加入 innodb_file_per_table
[mysqld]
innodb_file_per_table

InnoDB管理数据库文件的方式比较独特,它使用 tablespace 来管理数据文件。当使用 Per-Table Tablespaces,也就是每个InnoDB表都使用单独的tablespace时,数据文件的管理方式和MyISAM类型的表差不多,在这种情况下,每个数据库表都对应到一个数据文件,当分表比较多时,数据库文件也会比较多;相反,当没有启用Per-Table Tablespaces,则所有的InnoDB表的数据存在同一个tablespace中,tablespace对应到一系列的数据文件,此时,我们必须指定数据库文件的路径和大小,仅有最后一个文件可以是自动扩展的,其它的必须是固定大小(比如2G)。由于InnoDB的数据文件只会增长不会收缩(即使删除数据或者drop表),所以当前面指定的固定大小的文件写满了之后,最后一个自动扩展的文件就会一直增长而导致一个超大的文件的出现,这对于有最大文件限制的系统上就会导致问题。
...

Read More...