这里仅针对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);
10\
计算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. 表结构完全一样 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
mysqld --install MySQL --defaults-file=C:\my-opts.cnf #开机启动 mysqld --install-manual #手动启动
注意:defaults-file参数中的路径如果用空格,一定要用引号,否则安装服务会失败(win7)