mysql

更新日期: 2016-05-22 阅读次数: 4382 分类: MySQL

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 <table_name>;

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 的远程访问一定要禁掉。

参考 How to allow remote connection to mysql

导出当前 MySQL 所有数据库

mysqldump -u root -p --all-databases > alldb.sql
领取阿里云/腾讯云服务器优惠券

关于作者

我是来自山东烟台的一名开发者,喜欢瞎折腾,顺便记记笔记。有敢兴趣的话题,欢迎加微信 zhongwei 聊聊。 白天写程序,晚上哄熊孩子,可能回复有点慢,见谅。 查看更多联系方式

相关文章

爱评论不评论

近期节日

2020年04月07日 世界卫生日
2020年04月11日 世界帕金森病日
2020年04月19日 谷雨
2020年04月21日 复活节
2020年04月22日 世界地球日
2020年04月23日 世界读书日
2020年04月26日 知识产权日
2020年04月30日 佛诞
2020年04月30日 全国交通安全反思日
2020年05月01日 国际劳动节
2020年05月04日 五四青年节
2020年05月05日 立夏
查看更多节日