这里仅针对Mysql5.1版本的总结
1、所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节。
2、对于MyISAM和InnoDB表,前缀可以达到1000字节长,但是CREATE TABLE语句中的前缀长 度解释为字符数
CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));
3、索引最常用的有两种btree和Hash,其它的还有Rtree,用于 空间列类型的索引。
4、如果表有一个多列索引,优化器可以使用最左面的索引前缀来找出行。
例如有一个3列索引(col1,col2,col3),则在where子句中生效的索引形式为
(col1),(col1,col2),(col1,col2,col3)
5、如果LIKE的参数是一个不以通配符开头的常量字符串,索引也可以用于LIKE比较
SELECT * FROM tbl_name WHERE key_col LIKE 'Patrick%';
6、如果col_name被索引,使用col_name IS NULL的搜索将使用索引。
7、任何不跨越WHERE子句中的所有AND级的索引不用于优化查询。( 这一条不是很理解,由字面理解就是所有AND条件中的字段都需要被索引,那么优化查询才会起效,这个也太不方便了吧 )
8、两种常用的创建/修改索引的方式:
create index index1 on table_name (col1,col2(10),col3);
alter table table_name add index index_name (col1,col2,col3);
计算Mysql数据库磁盘大小
use information_schema;
select concat(round(sum(DATA_LENGTH/1024/1024), 2), 'MB')
as data from TABLES where table_schema='forexpert';
Mysql数据库整理
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name]
11、修改数据库的字符集
//把数据库及其中的字符字段都修改为utf8格式
ALTER TABLE logtest CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
//只是修改表的默认字符集
ALTER TABLE logtest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
12、添加用户并设置权限和密码
grant replication slave on *.* to'repl'@'218.206.70.146' identified by 'repl';
grant all on *.* to'repl'@'%' identified by 'repl';
#显示用户权限
show grants for root@'localhost'
13、
`role_id` int(11) UNSIGNED NOT NULL DEFAULT '0',
//mysql建立外键的列需要具有非空约束
//mysql5.6.14版本下测得的结果
Mysql把一张表的数据插入另一张表
1
1. 表结构完全一样
insert into 表1
select * from 表2
2. 表结构不一样(这种情况下得指定列名)
insert into 表(列名1,列名2,列名3)
select 列1,列2,列3 from 表2
Mysql多表级联更新
//方法一
UPDATE product p
INNER JOIN productPrice pp
ON p.productId = pp.productId
SET pp.price = pp.price * 0.8
WHERE p.dateCreated < '2004-01-01'
//方法二
UPDATE product p, productPrice pp
SET pp.price = pp.price * 0.8
WHERE p.productId = pp.productId
AND p.dateCreated < '2004-01-01'
//方法三
UPDATE product p
LEFT JOIN productPrice pp
ON p.productId = pp.productId
SET p.deleted = 1
WHERE pp.productId IS null
当一台机器上安装有多个Mysql时,用mysqldumo可能会报以下错误
mysqldump: unknown option '--no-beep'
//解决办法如下
mysqldump --no-defaults -u root -p wlan> D:\wlan.sql
去除Mysql权限检查时的DNS前向和逆向查询
#在my.cnf中添加
skip_name_resolve
在查询语句使用/G命令可以使数据垂直显示,但是在Navicat中无法使用,只能在命令行下使用
查看事件
a、查看一个event的详细信息可以用下面的视图:
SELECT * FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME = 'e_test_insert' AND EVENT_SCHEMA = 'test'\G;
b、简要列出所有的event:show events
语法:
SHOW EVENTS [FROM schema_name]
[LIKE 'pattern' | WHERE expr]
格式化显示所有event
SHOW EVENTS\G
格式化显示test用户的event
show events FROM test;
c、查看event的创建信息
SHOW CREATE EVENT event_name
show create event test.e_test\G
添加解压缩版Mysql到win系统服务项
mysqld --install MySQL --defaults-file=C:\my-opts.cnf #开机启动
mysqld --install-manual #手动启动
注意:defaults-file参数中的路径如果用空格,一定要用引号,否则安装服务会失败(win7)