一.show相關命令語句
1.查看表的索引
show index from tbl_name;
- 1
- table:表名
- non_unique:索引是非唯一的?。0否,唯一是索引的。1是,是非唯一索引。(ps:這讓我想起了令我自掛東南枝的英語)
- key_name:索引名稱
- seq_in_index: 索引中的起始序列號
- column_name:創建索引的名稱
- collation:列以什么形式存儲在索引中,A升序,null不排序
2.顯示系統變量
show session variables [like ''] //查詢會話變量, show global variables [like ''] //查詢全局變量
- 1
3.查詢數據庫|表|表字段
show databases , show tables [from db_name], show columns from tab_name
- 1
4 查看數據庫引擎相關
show engines //查看msql支持的所有數據庫存儲引擎
- 1
- engine:存儲引擎的名字
- support: mysql是否支持該引擎。default 默認使用,yes 支持, no不支持。
- transactions:該引擎是否支持事務,yes 支持 no不支持
- savepoints: 是否支持回滾點,yes 支持 no不支持
5查看狀態信息
show table status \G;//查看某個數據庫下所有表的狀態信息,所以第一步需要use dbName
- 1
- name:表名
- engine:該表使用的存儲引擎。默認innodb
- rows:行數。對於使用支持事務的引擎,該值不准確。所以一般該值不准確
- update_time:修改時間
- create_time:創建時間
- data-length:表的數據長度(bytes) 。
- avg_row_length:平均每行數據長度(bytes)同上不准確
- Auto_increment::下一個序列的值
- Collation:字符集
show status [like ’ ‘]查看mysql服務的狀態信息。mysql優化經常用到該命令。信息比較多,請參考
6顯示觸發器
show triggers [{from|in} db_name] [like 'pattern' |where expr]//顯示某個數據庫或者當前數據庫下的所有的觸發器,可以使用like 或where進行過濾
- 1
- 2
7 顯示數據庫或對象的創建
show create {table tal_name | function fun_name | procedure proc_name | trigger name | user user_name@host | view view_name | db_name}
- 1
mysql> show create table student\G; *************************** 1. row *************************** Table: student Create Table: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL, `sex` varchar(2) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 1 row in set (0.00 sec)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
二.用戶管理
1.修改密碼
set password for '用戶名'@'主機名' =password('新密碼');
alter user 'userName'@'host' identified by 'newPassword';
update mysql.user set authentication_string=password('新密碼') where user='用戶名';
mysql> set password for 'root'@'localhost'=password('111111'); Query OK, 0 rows affected, 1 warning (0.22 sec)
- 1
- 2
2.添加用戶
CREATE USER [IF NOT EXISTS] user identified by 'password'
- 1
3.刪除用戶
drop user 'user_name'@'localhost' //drop user 'test'@'localhost'
- 1
4.查詢用戶
select * from mysql.user\G; //查詢所有用戶
- 1
三.實用
1.查詢表結構
{describe| desc} tbl_name [col_name]
- 1
2.語句分析
explain statemnt_expr
- 1
mysql數據語句優化經常用到該命令。一般優化的原則便是盡可能用到索引經可能避免表的全部掃描。詳細內容可以參考
四.內置函數
1.日期類
1)查詢當前時間日期
now()
獲取 當前日期和時間 //2018-04-12 18:18:57curdate()
當前日期,///2018-04-12curtime()
當前時間 //18:18:57current_time()
; //同curtime(),current_time
current_date()
; // 同curdate(),current_date
current_timestamp()
//同now()
2)時間戳
unix_timestamp([date])
將日期轉化為時間戳,參數可以不寫默認now()
- date 可以是日期時間類型 也可以是時間字符串 ‘2018-2-12’
mysql> select from_unixtime(unix_timestamp('2018:4:8')); +------------------------------------------------+ | from_unixtime(unix_timestamp('2018:4:8')) | +------------------------------------------------+ | 2018-04-08 00:00:00 |
- 1
- 2
- 3
- 4
- 5
from_unixtime(timestamp [,format])
根據format格式化時間戳
- timestamp : 時間戳即 UNIX_TIMESTAMP()
- format 格式化表達式。使用format參數后返回的結果是字符串。常用的時間格式化占位符如下更多參數請參考,
- %Y 年,四位數字
- %y 年,后兩位數字
- %m 月 ,數字[1-12]
- %d 日,月份里的第幾天,兩位數字[1-31]
- %H 小時,24進制 [0-23]
- %h 小時,12進制[0-11]
- %i 分鍾 [0-59]
- %s | %S 秒 0-59
3)時間截取(返回對應的日期,時間或者數字)
date(expr)
// 如果解析失敗返回Null,返回日期類型datetime(expr)
//返回時間類型 timetimestamp(exper,format)
//返回混合日期和時間,datetime 類型year(expr)
//返回數字month(expr)
//返回數字【1-12】day(expr)
//返回數字【1-31】hour(expr)
//返回數字【0-23】minute(expr)
//返回數字【0-59】last_day(date)
//返回最后一天 ,返回date類型 //2018-04-30-
to_days(expr)
//返回到公元0年一月一日的總天數
expr :時間字符串,日期字符串或者日期時間類型。
對於截取年,月,日,時,分,秒返回的都是對應的字符串,因為時間日期類型mysql 本身就只提供了date,time ,datetime,timestamp,year這五種類型select date(now()),time('2018-04-19 11:10:11'),year(now()),to_days(now()); 2018-04-19 11:10:11 2018 737168
- 1
- 2
日期操作
ADDDATE(date,INTERVAL expr unit)
- date 要操作的日期,可以是日期類型也可以是日期字符串
- INTERVAL: MySQL關鍵字 ,意思是間隔,間隙
- unit 操作的單元,年,月,日,時,分,秒對應YEAR,MONTH,DAY,HOUR,MINUTE,SECOND
- expr 想要增加或減少的時間單位。expr>0,增加,expr<0減少
-DATE_ADD(date,INTERVAL expr unit)
類似ADDDATE()
ADDTIME(expr1,expr2)
時間相加 expr1+expr2
SUBDATE(date,INTERVAL expr unit)
同DATE_SUB(date,INTERVAL expr unit)
DATEDIFF(expr1, expr2)
計算兩個表達式之間的時間差(expr1-expr2 )天,
SELECT DATEDIFF( '2018-4-23', '2018-4-12 12:12:23'), DATEDIFF( now(), DATE_ADD(now(), INTERVAL 12 DAY) ) 11 -12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
日期時間類型和其他類型轉換
DATE_FORMAT(date,format)
//轉為字符串 跟 from_unixtime(timestamp,format)類似TIME_FORMAT(date,format)
//只能轉化時間,不能轉化日期
select DATE_FORMAT(now(),'%Y-%m-%d %H:%i-%s'),TIME_FORMAT(now(),'%Y-%m-%d %H:%i-%s'); 2018-04-23 15:15-26 0000-00-00 15:15-26
- 1
- 2
五數據庫備份與恢復
msqldump備份
msqldump可以用數據的備份,其有兩種方式的輸出,取決於是否使用 –tab。
不使用 –tab,會保存數據和表的創建語句保存到一個文件中
使用–tab,會為每個備份的表生成兩份文件,一份是數據(tal_name.text),一份是表的創建語句(tal_name.sql)
ps:查看表的創建可以使用show create tab_name
語法: mysqldump [arguments]
- 1
-h ,--host=hostName 連接的主機,默認127.0.0.1 -p ,--port=port 服務的端口號,默認3306 -u ,--user=username 用戶名 -p ,--password[=password] 密碼,可以直接寫在命令行 -B ,--databases db1[db2] 備份的數據庫,單個數據庫的話可以省略 --add-drop-database 在執行create database 之前執行drop database --add-drop-table 執行create table之前先執行drop table,默認使用 --skip-add-drop-table 每次create table之前不執行drop table
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
1)不使用–tab
備份指定的數據庫
mysqldump -u用戶名 -p[密碼] [--databases db1,db2] > 輸出文件路徑 msqldump -uroot -p [--databases]test >E:\test.text //將test備份到本地E:\test.text文件下 ,因為至備份一個數據庫,所以--databases可以省略
- 1
- 2
- 3
備份所有數據庫
mysqldump -u用戶名 -p[密碼] --all-databases >輸出文件路徑
- 1
備份某個數據庫下的表
mysqldump -uroot -p test --tables user address> E:\tables_backup.sql //備份test數據庫下的user表,address表到本地
- 1
- 2
2)使用–tab
mysqldump -uroot -p --tab=文件保存目錄
- 1
使用上面的命令可能會出現以下錯誤提示:
mysqldump: Got error: 1290: The MySQL server is running with the --secure-file-priv option so it cannot execute this statement when executing 'SELECT INTO OUTFILE'
- 1
使用 mysqld --verbose --help
可以查看具體用法
–secure-file-priv=name
Limit LOAD DATA, SELECT … OUTFILE, and LOAD_FILE() to
files within specified directory
同時會看到secure-file-priv NULL
,所以啟動在mysql配置文件my.ini下添加
secure-file-priv =
再起啟動mysqld就可以了。詳情請參考
恢復
1.
mysql -u用戶名 -p < 文件路徑 mysql -uroot -p < E:\text.text
- 1
- 2
- 3
2.
msql> source 文件路徑 //該方式需要先登陸,在導數據