Quick Links
高效的 MySQL GUI 工具
Ubuntu 上的 MySQL Workbench
GRANT PRIVILEGE
$ mysql -u root -p
> GRANT SELECT ON db_test.table_test TO 'user_test'@'%' IDENTIFIED BY 'password';
or
> CREATE DATABASE db_test;
> GRANT ALL PRIVILEGES ON db_test.* TO 'user_test'@'localhost' IDENTIFIED BY 'password';
对于 foreign key 是否需要手动建索引
MySQL 的 innodb 会帮你自动创建的。
参考
http://stackoverflow.com/questions/304317/does-mysql-index-foreign-key-columns-automatically
ubuntu 关闭 mysql 服务
关闭 sudo service mysql stop
启动 sudo service mysql start
当列数较多时,将 mysql console 里的查询结果竖着排列展示
mysql> select * from quotes order by id desc limit 1 \G
*************************** 1. row ***************************
id: 1001
quote_id: 76b84568-fa95-11e1-90d3-0819a6248970
tag: running
author: zhongwei
查看已创建的用户及权限
> SELECT User FROM mysql.user;
> SHOW GRANTS FOR 'account'@'localhost';
注意,如果只指定用户名的话,默认是 '%' 而不是 localhost。
所以当运维或者 DBA 给我们开通了权限后,我们第一件事情就是确认权限是否完全开通.
通常生产环境的 mysql 是限制用户的访问 IP 的,所以需要将 localhost 替换为自己的 IP。
参考:
使用 MySQL 存储 schema-less 数据的探索
table design:
表结构做成 id, key, value 还是 key, value 比较好。
按照 Bret Taylor 的分享,比较好的设计是
added_id -> INT NOT NULL AUTO_INCREMENT PRIMARY KEY
id -> UNIQUE KEY
updated -> KEY
body -> json
之所以加上自增的 added_id, 是因为 Mysql InnoDB 是按照主键顺序在磁盘上顺序存储
数据的。这样就能保证新数据总是能写在旧数据的后面,因为新数据读取的频率总会高于
旧数据,磁头不会波动太大。
e.g.
CREATE TABLE entities (
added_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
id CHAR(32) NOT NULL,
updated DATETIME NOT NULL,
body MEDIUMBLOB,
UNIQUE KEY (id),
KEY (updated)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
notes:
id -> uuid4.hex
参考:
在 mysql console 里执行 sql 文件里语句
mysql> source file_name.sql
参考:
遍历一张数据表
c.execute("SELECT * FROM tbl_subscriber LIMIT %i,%i;", (actualLimit,steps))
产看表的索引
show create table ;
INT(12) 与 INT(8) 的区别
存储上无区别,主要是在终端下显示的区别。
主要是用在和 ZEROFILL 的组合使用上,用于设置显示时用于添零的长度。
参考
http://stackoverflow.com/questions/1632403/what-is-the-difference-when-being-applied-to-my-code-between-int10-and-int1/1632567#1632567
修改表结构
alter table tbl_name add column coln_name varchar(30) AFTER coln_name
最好的方法是使用 GUI 工具, 在图形界面上修改,将生成的语句再备份到文本里,以方
便在服务器上执行。例如,MySQL Workbench.
install MySQL on CentOS
yum install mysql-server
mysql enable remote access
/etc/mysql/my.cnf
bind-address = 127.0.0.1
各种 Join 的区别
http://stackoverflow.com/questions/38549/difference-between-inner-and-outer-joins
一行流统计 SQL
SELECT
NOW() AS cur_time,
(select count(1) FROM amazon_com.categories) as total_categories,
(select count(1) from amazon_com.items) as total_asin,
(select count(1) from amazon_com.items where crawl_status = 1) as 'processed_items',
(select count(1) from amazon_com.categories where processed_children = 0) as 'unprocessed_children_categories',
(select count(1) from amazon_com.categories where status = 1) as 'processed_categories',
(select count(1) from amazon_com.items where crawl_status = 3) as 'unfound_items',
(select count(1) from amazon_com.items where crawl_status = 5) as 'inqueue_items',
(select count(1) from amazon_com.items where crawl_status = 4) as 'invalid_items';
运行 MySQL 远程访问
GRANT ALL PRIVILEGES ON *.* TO 'my_user'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
生成一个新用户,允许远程访问,root 的远程访问一定要禁掉。
导出当前 MySQL 所有数据库
mysqldump -u root -p --all-databases > alldb.sql