Mysql經常使用命令

###Mysql經常使用命令
note:粗體字部分是用戶須要根據本身的實際狀況替換的部分,斜體部分爲可選內容,#開頭的命令是在終端中執行,>開頭的命令是在mysql中執行mysql

#####1. 登錄mysqlsql

  • # mysql -u username -p (回車後輸入密碼)
  • # msyql -uroot -p123(root爲用戶名,123爲密碼 -u和root中間,-p和123中間沒有空格)
  • 遠程鏈接mysql
    用法:# mysql -uusername -ppassword -h host -P 端口號 -D databases
    示例:# mysql -uroot -p123456 -h 192.168.1.91 -P 3306 -D test

#####2. 執行sql文件數據庫

  • > source /path/source.sql;
  • # mysql -uroot -p123 < source.sql

#####3.1 數據庫備份
假設要備份temp這個數據庫:緩存

  • # mysqldump -uroot -p123 temp > dump.sql

假設要備份temp這個數據庫中的表table1和table2:函數

  • # mysqldump -uroot -p123 temp table1 table2 > dump.sql

利用gzip壓縮數據:性能

  • # mysqldump -uroot -p123 temp table1 table2 | gzip > dump.sql.gz

備份多個數據庫:測試

  • # mysqldump -uroot -p123 --databases db1 [db2 db3..] > dump.sql

增長where條件:編碼

  • # mysqldump -uroot -p123 temp table --where="" > dump.sql

當不能使用mysqldump時.net

  • # mysql -uroot -p123 -Ddatabase -e "select concat('insert into table values (',id,')'"

#####3.2 數據庫恢復rest

  • # mysql -uroot -p123 temp < dump.sql
  • # 登陸到mysql中執行命令 source < dump.sql

從壓縮文件直接恢復:

  • # gunzip < dump.sql.gz | mysql -uroot -p123 temp

#####4. 表結構修改

  • ######4.1.1 增長一個新列
    用法:> alter table tablename add 列名 類型 約束條件;
    示例:> alter table user add name varchar(32) not null default 'unknow';
  • ######4.1.2 增長一個新列並指定位置
    用法:> alter table tablename add 列名 類型 約束條件 after 某列;
    示例:> alter table user add name varchar(32) not null default 'unknow' after id;
  • ######4.2 刪除列
    用法:> alter table tablename drop column 列名;
    示例:> alter table user drop column name;
  • ######4.3 重命名列
    用法:> alter table tablename change 原列名 新列名 原類型 約束條件;
    示例:> alter table user change name nickname varchar(32) not null default 'unknow';
  • ######4.4 改變列的類型
    用法:> alter table tablename change 列名 列名 新類型 約束條件;
    示例:> alter table user change name name tinyint not null default '0';
    用法:> alter table tablename alter column 列名 新類型;
    示例:> alter table user alter column name tinyint;
  • ######4.5 重命名錶
    用法:> alter table tablename1 rename tablename2;
    示例:> alter table user rename new_user;
  • ######4.6 加索引
    用法:> alter table tablename add index 索引名(字段名1[,字段名2 …]);
    示例:> alter table user add index name_age(name,age);
  • ######4.7 加主關鍵字的索引
    用法:> alter table tablename add primary key(id);
    示例:> alter table user add primary key(id);
  • ######4.8 加惟一限制條件的索引
    用法:> alter table tablename add unique 索引名(字段名);
    示例:> alter table user add unique index_name(name);
  • ######4.9 刪除某個索引
    用法:> alter table tablename drop index 索引名;
    示例:> alter table user drop index_name;

#####5. 查看錶的索引信息

  • > show index from tablename;

#####6. sql性能分析

  • sql使用索引狀況,掃描的行數
    > explain select * from user;

#####7. 數據庫正在執行的sql
> show processlist;

#####8. 隨機數
mysql機函數rand(),會生成大於等於0,小於1(0到1)之間的小數,floor函數均可以把小數變爲整數整數

  • 0到99的隨機數
    > select floor(rand()*100);
  • 1到99的隨機數
    > select floor(1+rand()*99);

#####9. 建立用戶
建立用戶前需確保沒有用戶名爲""的用戶,若是有須要先刪除
> select user,password from mysql.user;
> delete from mysql.user where user = '';
> create User 用戶命 IDENTIFIED BY '密碼';
> GRANT ALL ON 表名.* TO 用戶命;
> flush privileges; (受權後還要刷新系統權限表)
給用戶賦予權限
用法:> GRANT 操做 ON 庫名.表名 TO 用戶名; (庫名錶名能夠用*匹配)
示例:> GRANT SELECT, INSERT,UPDATE ON temp.user TO newuser;

#####10. 清空表中數據
用法:# mysqldump -u用戶名 -p密碼 --add-drop-table --no-data 數據庫 | mysql -u用戶名 -p密碼 數據庫
示例:# mysqldump -uroot -p123 --add-drop-table --no-data temp | mysql -uroot -p123 temp
示例:# mysqldump -uroot -p123 --add-drop-table --no-data temp | grep user | mysql -uroot -p123 temp
原理說明:根據mysqldump的備份參數,包括drop table和建表create table語句,實際上是先把database裏的全部表drop後,再重建表結構。

#####11. 批量刪除指定表
用法:# mysqldump -u用戶名 -p密碼 --add-drop-table --no-data 數據庫 | grep ^DROP | grep 條件 | mysql -u用戶名 -p密碼 數據庫
示例:# mysqldump -uroot -p123 --add-drop-table --no-data temp | grep ^DROP | grep user | mysql -uroot -p123 temp

#####12. 啓動mysql

  • # service mysqld start
  • # /etc/inint.d/mysqld start

#####13. 關閉mysql

  • # service mysqld start
  • # /etc/inint.d/mysqld start

#####14. 重啓mysql

  • # service mysqld restart
  • # /etc/inint.d/mysqld restart

#####15. 設置mysql終端編碼

  • 在終端中使用msyql中文常常會亂碼,這個時候能夠set names utf8;

#####16. 禁止mysql緩存結果

  • select SQL_NO_CACHE count(*) from tablename; 須要注意這個是禁止查詢的結果放入緩存中,而不是禁止從緩存中查詢

#####17. 查詢n次的耗時

  • select benchmark(n, (select COUNT(*) FROM tablename)); 測試代表測試的語句不會被緩存
    benchmark會重複計算表達式n次,benchmark函數只能測量數字表達式的性能,雖說表達式能夠是一個子查詢,但子查詢返回的只能是單個值

#####18. 變量

  • 測試代表使用變量,不會作任何緩存,對比使用SQL_NO_CACHE,SQL_NO_CACHE會緩存一些sql分析,執行計劃
    > set @id := 0;
    > select COUNT(*) FROM tablename where id > @id;

#####19. 查詢行數比較多的表
> select table_name,table_rows from information_schema.tables order by table_rows desc limit 10;

#####20. 不產生binlog的刪除數據方式
> truncate tablename;

#####21. 秒數和日期轉換
> FROM_UNIXTIME(1466780897)
> UNIX_TIMESTAMP('2016-05-25 00:00:00')

#####22. 查出的列拼成一行
> select group_concat(id) from tablename;
> 默認group_concat長度限制1024能夠經過 SET SESSION group_concat_max_len=102400;設置

#####23. 查看binlog格式
> show variables like 'binlog_format';

#####24. 一行轉多行
> select tablename.id, SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) name from (select 1 n union all select 2 union all select 3 union all select 4 union all select 5) numbers INNER JOIN tablename on CHAR_LENGTH(tablename.name) -CHAR_LENGTH(REPLACE(tablename.name, ',', ''))>=numbers.n-1 order by id, n

相關文章
相關標籤/搜索