1、用戶管理類命令node
建立用戶mysql
mysql> CREATE USER 'wlw'@'192.168.0.22' IDENTIFIED BY 'wlw'; mysql> use mysql; mysql> SELECT User,Host,Password FROM user WHERE User='wlw'; +------+--------------+-------------------------------------------+ | User | Host | Password | +------+--------------+-------------------------------------------+ | wlw | 192.168.0.22 | *9A3A20395B8C68934181EE113D46B8056580904B | +------+--------------+-------------------------------------------+
用戶重命名正則表達式
MariaDB [(none)]> RENAME USER 'wlw'@'192.168.%.%' TO 'wlwname'@'192.168.0.56';
刪除用戶sql
mysql> DROP USER 'wlw'@'192.168.0.22'; mysql> DROP USER ''@'localhost'; mysql> DROP USER ''@'c6node1.wlw.com' #剛安裝的數據庫存在兩個匿名用戶,建議刪除
修改用戶密碼數據庫
mysql> SET PASSWORD FOR 'wlw'@'192.168.0.22' = PASSWORD('test'); mysql> SELECT User,Host,Password FROM user WHERE User='wlw'; +------+--------------+-------------------------------------------+ | User | Host | Password | +------+--------------+-------------------------------------------+ | wlw | 192.168.0.22 | *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29 | +------+--------------+-------------------------------------------+
'wlw'@'192.168.0.22'受權能夠管理Mysql中的全部數據庫全部表。至關於管理員權限緩存
mysql> GRANT ALL PRIVILEGES ON *.* TO 'wlw'@'192.168.0.22';
'wlw'@'192.168.0.22'受權能夠查詢、插入、更新、刪除 wlwdb數據庫中全部表數據的權利bash
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON wlwdb.* TO 'wlw'@'192.168.0.22';
'wlw'@'192.168.0.22'受權建立、修改、刪除 MySQL wlwdb數據庫中全部數據表結構權限。服務器
mysql> GRANT CREATE,ALTER,DROP ON wlwdb.* TO 'wlw'@'192.168.0.22';
建立wlw用戶只能192.168.0.0/16網段訪問並受權wlwdb數據庫中全部表的全部權限
session
mysql> GRANT ALL PRIVILEGES ON wlwdb.* TO 'wlw'@'192.168.%.%' IDENTIFIED BY 'wlw';
注意:Mysql/MariaDB服務進程啓動時會讀取mysql庫中的全部受權表至內存中;數據結構
(1) GRANT或REVOKE等執行權限操做會保存於表中,MariaDB的服務進程會自動重讀受權表;
(2) 對於不可以或不能及時重讀受權表的命令,可手動讓MariaDB的服務進程重讀受權表:
mysql> FLUSH PRIVILEGES;
查看受權信息
mysql> SHOW GRANTs FOR 'wlw'@'192.168.0.22'; GRANT ALL PRIVILEGES ON *.* TO 'wlw'@'192.168.0.22' IDENTIFIED BY PASSWORD '* 7EA8DEE3D73216C0A2468C8EC6E41A0733888AA3'
回收受權
mysql> REVOKE SELECT,INSERT,UPDATE,DELETE ON wlwdb.* FROM 'wlw'@'192.168.0.22'; mysql> SHOW GRANTs FOR 'wlw'@'192.168.0.22'; GRANT ALL PRIVILEGES ON *.* TO 'wlw'@'192.168.0.22' IDENTIFIED BY PASSWORD '* 7EA8DEE3D73216C0A2468C8EC6E41A0733888AA3' GRANT CREATE, DROP, ALTER ON `wlwdb`.* TO 'wlw'@'192.168.0.22'
2、數據庫管理類命令
建立數據庫
mysql> CREATE DATABASE wlwdb;
刪除數據庫
mysql> DROP DATABASE wlwdb;
進入數據庫,創建表和對錶進行操做都須要先進入數據庫,或者指定數據庫
mysql> use wlwdb; Database changed
查看能夠管理的數據庫
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test | | wlwdb | +--------------------+
3、表管理類命令
主鍵:可以唯一標識表中每個記錄的字段或字段的組合
主鍵約束:對一張表來說,主鍵只能有一個。唯一,不能爲NULL
唯一鍵約束:對一張表來說 ,唯一鍵 能夠有多個。唯一,可能爲NULL
檢查式約束:用戶自定義有效取值範圍。一般用布爾表達式
外鍵約束:被定義爲外鍵的字段在參照其餘表的時候不能填入其餘表沒有的信息。
表是由行和列組成的二維關係
字段:字段名,約束,字段類型
數據類型的做用:比較方式。存儲空間(取值範圍)。參與的運算
①、字符型
不區分大小寫:char(#)。varchar(#)可變化的字符。儘可能使用char,雖然可能浪費空間,可是性能要好得多得多
區分大小寫:binary(#)。varbinary(#)
大段文本,基於對象的存儲,對象存儲在其餘文件系統中,只存放對象的指針
不區分大小寫(text):TINYTEXT, TEXT, MEDIUMTEXT, LONGTEX
區分大小寫(blob):TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB
②、數值型
精確數值型
××× int:tinyint 1字節(-128~127)。smallint 2字節。mediumint 3字節。int 4字節。bigint 8字節。
十進制 decimal(在金融領域中使用)
近似數值型:單精度浮點型:float。雙精度浮點型:double
日期時間型:date 3字節。time 3字節。datetime 8字節。timestamp:時間戳( 1970年01月01日00時00分00秒)。YEAR(2)。YEAR(4)
布爾型:0,1,NULL
內置類型(mysql獨有的字符型):ENUM(枚舉,只能填咱們事先定義好的字符)。SET(集合,能夠拼湊組合事先定義好的字符)
字段或字段類型還能夠有修飾符
NOT NULL 不能爲空
NULL 能夠爲空
UNSIGNED 數值爲無符號
DEFAULT 給定默認值。字符要加引號,數字不能加引號
AUTO_INCREMENT 自動增加類型的字段必須爲主鍵或惟一鍵
COLLATION 使用的排序規則
CHARACTER SET 使用的字符集
PRIMARY KEY:定義主鍵
UNIQ KEY 惟一鍵
建立表
mysql> CREATE TABLE IF NOT EXISTS wlw_tb (Name char(30),Age tinyint,Gender ENUM('F','M')); mysql> CREATE TABLE IF NOT EXISTS wlw_tb1(StuID int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, Name char(30) NOT NULL,Age tinyint UNSIGNED NOT NULL,Gender ENUM('F','M') DEFAULT 'F');
刪除表
mysql> DROP TABLE IF EXISTS wlw_tb;
查看錶結構
mysql> DESC wlw_tb1; +--------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+---------------------+------+-----+---------+----------------+ | StuID | int(10) unsigned | NO | PRI | NULL | auto_increment | | Name | char(30) | NO | | NULL | | | Age | tinyint(3) unsigned | NO | | NULL | | | Gender | enum('F','M') | YES | | F | | +--------+---------------------+------+-----+---------+----------------+
查看建立表所用的語句信息
mysql> SHOW CREATE TABLE wlw_tb1; wlw_tb | CREATE TABLE `wlw_tb` ( `StuID` int(10) unsigned NOT NULL AUTO_INCREMENT, `Name` char(30) NOT NULL, `Age` tinyint(3) unsigned NOT NULL, `Gender` enum('F','M') DEFAULT 'F', PRIMARY KEY (`StuID`) ) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1
查看錶狀態,\G 以行的形式列出來,當字段太多的時候可使用
mysql> show table status like 'wlw_tb1'\G; *************************** 1. row *************************** Name: wlw_tb1 Engine: MyISAM Version: 10 Row_format: Fixed Rows: 0 Avg_row_length: 0 Data_length: 0 Max_data_length: 10414574138294271 Index_length: 1024 Data_free: 0 Auto_increment: 1 Create_time: 2015-10-21 15:51:49 Update_time: 2015-10-21 15:51:49 Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: Comment:
表中添加字段
ALTER TABLE wlw_tb1 ADD (test INT,test1 char(10));
表中刪除字段
mysql> ALTER TABLE wlw_tb1 DROP test1;
表中修改字段,MODIFY和CHANGE修改語句有所不一樣
mysql> ALTER TABLE wlw_tb1 MODIFY test tinyint; mysql> ALTER TABLE wlw_tb1 CHANGE test num tinyint; #CHANGE關鍵字後的名稱是要修改的列,而後指定新的定義,其中包括新的名稱,通常用來修改字段名
重命名錶
mysql> ALTER TABLE wlw_tb1 RENAME TO wlw_tb;
4、數據管理類命令
插入數據
mysql> INSERT INTO wlw_tb(Name,Age,Gender) VALUES('wlw',25,'F'),('wu',25,'M');
字段表示法:*,全部字段;as,字段別名,col1 AS alias1;
WHERE clase:操做符:=, !=, <>, <=>, >, >=, <, <=
LIKE,通配符:%(任意長度的任意字符),_(匹配任意單個字符)
RLIKE:正則表達式模式匹配
組合條件:and。or。not
IS NULL,IS NOT NULL
查詢數據
mysql> SELECT Name,Age FROM wlw_tb WHERE Age >20 and Name='wlw'; +------+-----+ | Name | Age | +------+-----+ | wlw | 25 | +------+-----+
數據去重,相同數據只顯示一次
MariaDB [hellodb]> SELECT DISTINCT Gender FROM students; #DISTINCT: 數據去重。SQL_CACHE: 顯式指定存儲查詢結果於緩存之中。SQL_NO_CACHE: 顯式查詢結果不予緩存
Query Cache:
查詢執行路徑中的組件:查詢緩存、解析器、預處理器、優化器、查詢執行引擎、存儲引擎;
SELECT語句的執行流程:
FROM Clause --> WHERE Clause --> GROUP BY --> HAVING Clause --> ORDER BY --> SELECT --> LIMIT
更改數據
mysql> UPDATE wlw_tb SET Age = 24 WHERE Name='wlw'; #若是不作條件判斷,則表中全部行的Age都會更改成24,謹慎操做
刪除數據,刪除操做都須要謹慎
DELETE FROM wlw_tb1 WHERE StuID = 2; #刪除WHERE限制的某行 DELETE FROM wlw_tb1; #清空表中的全部行
5、比較經常使用的一些系統查詢命令
SELECT查詢語句大小寫很是重要,它決定你的查詢緩存是否能被命中
SELECT * FROM user\g 當不知道結束符是什麼的時候(;),用\g讓他直接發往服務器端
SELECT * FROM user\G 以行的形式列出來,但字段太多的時候可使用
SELECT * FROM user\c 終止命令執行,至關於bash中的CTRL+C
SELECT current_time(); mysql提供的內置函數可供調用返回結果,調用時間,查看當前表
SELECT database(); 查看當前所在哪一個數據庫下
SELECT user(); 查看當前所在哪一個用戶下
SHOW {GLOBAL | SESSION} VARIABLES [LIKE clause];
SHOW VARIABLES LIKE 'data%'\G 查看數據庫存放位置
SHOW variables 查看服務器變量
SHOW global variables 查看全局變量
SHOW session variables 查看會話的變量
MySQL服務器運行中的狀態是經過狀態變量輸出的
SHOW status 服務器運行狀態
SHOW STATUS LIKE 'Com_select' 查看運行的查看語句次數
SHOW global status 查看全局變量
SHOW session status 查看會話的變量
6、索引管理
索引:索引是特殊數據結構;定義在查找時做爲查找條件的字段;定義索引須要指定索引名稱;
索引類型:
彙集索引、非彙集索引:數據是否與索引存儲在一塊兒;
主鍵索引、輔助索引
稠密索引、稀疏索引:是否索引了每個數據項;
B+ TREE、HASH、R TREE
簡單索引、組合索引
左前綴索引
覆蓋索引
建立索引
mysql> CREATE INDEX wlw_index ON wlw_tb (Name,Age); MariaDB [hellodb]> ALTER TABLE students ADD INDEX(Age);
刪除索引
mysql> DROP INDEX wlw_index ON wlw_tb;
查看索引
MariaDB [hellodb]> SHOW INDEXES FROM classes\G *************************** 1. row *************************** Table: classes Non_unique: 0 Key_name: PRIMARY Seq_in_index: 1 Column_name: ClassID Collation: A Cardinality: 8 Sub_part: NULL Packed: NULL Null: Index_type: BTREE Comment: Index_comment: 1 row in set (0.01 sec)
不會真正去執行命令,只會去解析執行過程
MariaDB [hellodb]> EXPLAIN SELECT * FROM classes WHERE ClassID=5\G *************************** 1. row *************************** id: 1 select_type: SIMPLE #簡單查詢 table: classes #使用到的表 type: const #一對一查詢 possible_keys: PRIMARY #查詢過程當中可能用到主鍵 key: PRIMARY #查詢過程當中用到主鍵 key_len: 1 ref: const rows: 1 Extra: 1 row in set (0.00 sec)
7、視圖管理
視圖:VIEW(虛表,是存儲下來的SELECT語句)
添加一個視圖
MariaDB [hellodb]> CREATE VIEW viemtest AS SELECT StuID,Name,Age FROM students;
刪除視圖
MariaDB [hellodb]> DROP VIEW viemtest;
修改/etc/mysql/my.cnf
On MySQL 5.5 I have in my.cnf
[mysqld] init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake
[client]default-character-set=utf8[mysql]default-character-set=utf8