SQL語句分類:mysql
DDL:Data Defination Language 數據定義語言正則表達式
CREATE,DROP,ALTERsql
建立 刪除 修改數據庫
DML:Data Maipulation Language 數據修改語言bash
INSERT,DELETE,UPDATE,SELECT數據結構
插入 刪除 修改 查詢ide
GRANT:權限新增函數
REVOKE:權限刪除ui
數據類型:spa
字符型:
定長字符型:CHAR(#)不區分字符大小,BINARY(#)區分字符大小寫,#號爲可選項,能夠指定長度
變長字符型:VARCHAR(#)不區分字符大小寫,VARBINARY(#)區分字符大小寫,#號爲可選項,能夠指定長度
對象存儲:
TEXT:不區分大小
BLOB:區分字符大小寫
內置類型:
ENUM:枚舉類型
SET:集合
數值型:
精確數值型:
整型:int
tinyint:1byte
smallint:2bytes
mediumint:3bytes
int:4bytes
bigint:8bytes
十進制:decimal
近視數值型:
單精度浮點型:
float
雙精度浮點型:
double
日期時間型:
日期:DATE
時間:TIME
日期時間:DATETIME
時間戳:TIMESTAMP
年份:YEAR(2),YEAR(4)
修飾符:
全部類型使用:
NOT NULL,非空約束
DEFAULT VALUE,設定默認值
PRIMARY KEY,主鍵
UNIQUE KEY,惟一鍵
數值型使用:
UNSIGNED,無符號,即正數
AUTO_INCREMENT,自增字段
數據庫操做語句:
建立數據庫:
CREATE DATABASE|SCHEMA [IF NOT EXISTS] 'DB_NAME';
例:
MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS mydb; // 此條命令產生的效果爲:若是mydb數據庫不存在,就建立一個名爲mydb的新數據庫
刪除數據庫:
DROP DATABASE|SCHEMA [IF EXISTS] 'DB_NAME';
例:
MariaDB [(none)]> DROP DATABASE IF EXISTS mydb; // 此條命令產生的效果爲:若是mydb存在,就刪除這個數據庫
設置默認數據庫:
USE DB_NAME;
MariaDB [(none)]> USE mydb;
設置字符集:
CHARACTER SET 'CHAR SET NAME';
例:
MariaDB [(none)]> CHARACTER SET gb2312; // 設置字符集爲gb2312
查看支持的全部字符集:
SHOW CHARACTER SET;
例:
MariaDB [(none)]> SHOW CHARACTER SET; // 查看可用字符集
設置排序規則:
COLLATE 'COLLATE NAME';
例:
MariaDB [(none)]> COLLATE big5_bin; // 設置排序規則爲big5_bin
查看支持的全部排序規則:
SHOW COLLATION;
例:
MariaDB [(none)]> SHOW COLLATION; // 查看支持的全部排序規則
獲取命令使用幫助:
HELP KEYWORD;
例:
MariaDB [(none)]> HELP CREATE DATABASE; // 獲取CREATE DATABASE命令的相關幫助信息
查看數據庫信息:SHOW DATABASES;
查看錶信息:SHOW TABLES;
NOTE:刪除操做不可逆且不可恢復。
表操做語句:
建立表:
CREATE TABLE [IF NOT EXISTS] [db_name.]tb_name (col1 datatype 修飾符,col2 datatype 修飾符...) [ENGINE=''];
例:
MariaDB [mydb]> CREATE TABLE IF NOT EXISTS mytb1 (id int NOT NULL,name varchar (100) NOT NULL,age int); // db_name位數據庫名,建立表時須要指定表屬於哪一個數據庫,若是設置了默認數據庫,則無需使用 此命令 // col1爲列名 // datatype爲數據類型 // 修飾符有NULL,NOT NULL,PRIMARY KEY,UNIQUE KEY等 // ENGINE爲數據引擎 MariaDB [mydb]> CREATE TABLE students(id int UNSIGNED NOT NULL PRIMARYKEY,name VARCHAR(20) NOT NULL,age Tinyint UNSIGNED); // 定義id字段爲無符號整數,而且要求爲非空,且爲主鍵 // 定義name字段爲可變字符,長度限制爲20,而且要求爲非空 // 定義age字段爲無符號Tinyint
能夠定義單個字段爲主鍵,也能夠定義多個字段爲主鍵,只要多個字段聯合起來不相同便可
例:
MariaDB [mydb]> CREATE TABLE tbl2(id int UNSIGNED NOT NULL,name VARCHAR(20) NOT NULL,age tinyint UNSIGNED,PRIMARY KEY(id,name)); // PRIMARY KEY(id,name) // 這裏定義id和name同時爲主鍵,只要id+name不重複便可
獲取幫助:
MariaDB [mydb]> HELP CREATE TABLE;
ENGINE即數據庫引擎,也稱之爲表類型,查看錶類型列表命令以下:
MariaDB [mydb]> SHOW ENGINES;
表格存儲格式:
ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}
查看錶:
SHOW TABLES [FROM db_name];
例:
MariaDB [mydb]> SHOW TABLES FROM mydb;
查看錶結構:
MariaDB [mydb]> DESC [DB_NAME.]tb_name;
例:
MariaDB [mydb]> DESC mydb.mytb1;
查看錶建立命令:
MariaDB [mydb]> SHOW CREATE TBALE tbl_name;
例:
MariaDB [mydb]> SHOW CREATE TABLE mytb1;
查看錶狀態:
MariaDB [mydb]> SHOW TABLE STATUS LIKE 'tbl_name'[\G]
例:
MariaDB [mydb]> SHOW TABLE STATUS LIKE mytb1 \G; // \G表示豎排顯示
刪除表:NOTE:刪除操做不可逆且不可恢復。
DROP TABLE [IF EXISTS] tb_name;
例:
MariaDB [mydb]> DROP TABLE IF EXISTS mytb1;
修改表操做:
使用ALTER TABLE命令,這個命令下有不少子命令
添加字段:
ALTER TABLE tbl_name ADD col1 data_type [FIRST|AFTER col_name]
例:
MariaDB [mydb]> ALTER TABLE students ADD age ENUM('m','f') FIRST; 即在students表中添加一個字段age,其字符類型爲枚舉型,只能爲m或f,且位於第一個字段
ADD子命令還能夠單獨添加字段的約束
例:
Maria DB [mydb]> ALTER TABLE students ADD UNIQUE KEY(name);
刪除字段:
ALTER TABLE students DROP COLUMN col_name;
例:
MariaDB [mydb]> ALTER TABLE students DROP COLUMN age; 意爲刪除students表中的age字段
修改字段名和字段屬性:(沒法單獨修改字段屬性)
ALTER TABLE students CHANGE col_name col_name_new data_type options;
例:
MariaDB [mydb]> ALTER TABLE students CHANGE age ages int UNSIGGNED NOT NULL; 意爲修改students表的字段age爲ages,而且設置類型爲int的無符號,不能爲空
NOTE:須要注意的是,CHANGE命令修改字段屬性時,必須修改字段名,不能只修改字段屬性,而不修改字段名,但修改字段名時,能夠不修改字段屬性。
修改字段屬性:
ALTER TABLE MODIFY col_name data_type options;
例:
MariaDB [mydb]> ALTER TABLE MODIFY age int; 只修改字段屬性
索引:
索引是特殊數據結構,定義在查找時做爲查找條件的字段;可加速查詢速度,缺點是會佔據額外空間
索引能夠有額外名稱;若是不設置名稱,而且是單鍵索引,那麼索引名稱默認爲字段名
建立索引:
CREATE INDEX index_name ON tbl_name (index_col_name,...);
例:
MariaDB [mydb]> CREATE INDEX myindex ON students (id); // 這裏是爲students表的id字段建立索引,且命名爲myindex MariaDB [mydb]> CREATE INDEX myindex2 ON students (age,name); // 這裏是爲students表達age和name字段建立聯合索引,且命名爲myindex2
刪除索引:
DROP INDEX index_name ON tbl_name;
例:
MariaDB [mydb]> DROP INDEX myindex ON students; // 這裏是刪除表students中的名爲myindex索引
ALTER TABLE tbl_name DROP INDEX(col_name);
例:
MariaDB [mydb]> ALTER TABLE students DROP INDEX(age); // 這裏是刪除表students中的age字段上的索引
添加索引:
ALTER TABLE tbl_name ADD INDEX(col_name);
MariaDB [mydb]> ALTER TABLE students ADD INDEX(age); // 這裏是給表students的age字段添加索引
查看索引:
SHOW INDEXES FROM [db_name.]tbl_name;
MariaDB [mydb]> SHOW INDEXES FROM mydb.students; // 這裏是顯示出mydb數據庫下的students表中的全部索引
數據操做:
插入數據:
INSERT [INTO] tbl_name [(col_name,...)] (VALUES | VALUE) (VAL1,...),(...),...
例:
MariaDB [mydb]> INSERT INTO students VALUES (1,'li','m'),(2,'wa','f'); 能夠一次性插入全部字段的數據 MariaDB [mydb]> INSERT INTO students (sid,name) VALUES (3,'zz'),(4,'dd'); 也能夠插入指定字段的數據
查詢數據:
SELECT col1,col2,...FROM tbl_name [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n];
ORDER BY 'col_name' 根據col_name升序排序
ORDER BY 'col_name' DESC 根據col_name降序排序
ORDER BY 'col_name' DESC LIMIT 4 根據col_name降序排序,只顯示4個
ORDER BY 'col_name' DESC LIMIT 1,2 根據col_name降序排序,而且偏移1個,顯示2個
col_name可用'*'指代全部字段
as:字段別名,col1 AS alias_name
例:
MariaDB [mydb]> select sid AS stuid,name AS stuname FROM students; 查詢students表中sid和name的全部字段數據,並將sid臨時更名爲stusid,將name臨時更名爲stuname
操做符:
(1)<,>,>=,<=,==,!=
(2)BETWEEN...AND...
例:
MariaDB [mydb]> SELECT * FROM students WHERE sid>=2 and sid<=4; MariaDB [mydb]> SELECT * FROM students WHERE sid BETWEEN 2 AND 4; // 上面兩個示例的做用相同,都是刪選sid大於等於2,小於等於4的全部數據。
(3)LIKE
通配符:% 表示任意長度的任意字符;
_ 表示任意單個字符;
例:
MariaDB [mydb]> SELECT * FROM students WHERE name LIKE 'z%'; // 這裏表示在students表中查找name字段爲z開頭的任意長度的任意字符的數據
(4)RLIKE
基於正則表達式做字符匹配
例:
MariaDB [mydb]> SELECT * FROM students WHERE name RLIKE '.*u.*'; // 這裏表示在students表中查找name字段中包含u字母的數據
(5)IS NULL 爲空
IS NOT NULL 爲非空
例:
MariaDB [mydb]> SELECT * FROM students WHERE name IS NULL; // 這裏表示在students表中查找name字段爲空的數據 MariaDB [mydb]> SELECT * FROM students WHERE name IS NOT NULL; // 這裏表示在students表中查找name字段爲非空的數據
條件邏輯操做:
and 與
or 或
not 非
例:
MariaDB [mydb]> SELECT * FROM students WHERE sid >=2 AND sid <= 4; // 這裏表示查找students表中sid小於等於4且大於等於2的數據 MariaDB [mydb]> SELECT * FROM students WHERE sid >=2 OR name == 'zi'; // 這裏表示查找students表中sid大於等於2或者name爲zi的數據 MariaDB [mydb]> SELECT * FROM students WHERE NOT sid >=2; // 這裏表示查找students表中sid小於2的數據,即sid>=2取反
刪除數據:
DELETE FROM tbl_name [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m],n];
例:
MariaDB [mydb]> DELETE FROM students where sid == 3; // 這裏表示刪除students表中sid爲3的全部行數據
NOTE:須要注意的是,若是DELETE FROM tbl_name後不接條件語句,那麼默認會刪除整張表的數據。
更新數據:
UPDATE tbl_name SET col1=new_val1,col2=new_val2,...[WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m],n];
例:
MariaDB [mydb]> UPDATE students SET name='zi',age=16 WHERE id == 4; // 這裏表示修改students表中的id爲4的行的name字段爲zi,age爲16
用戶賬號及權限管理:
用戶賬號格式:USERNAME@HOST
USERNAME:用戶名
HOST:此用戶訪問mysqld服務時容許經過哪些主機遠程建立鏈接:其中能夠是IP,主機名,通配符(%和_);
建立用戶:
CREATE USER USERNAME@HOST [IDENTIFIED BY 'PASSWORD'];
例:
MariaDB [mydb]> CREATE USER user1@localhost IDENTIFIED BY 'redhat'; 這裏表示建立一個用戶名爲user1且密碼爲redhat的用戶,且此用戶只能經過本機登陸
刪除用戶:
DROP USER 'USERNAME@LOCALHOST;
例:
MariaDB [mydb]> DROP USER user1@localhost; 這裏表示刪除能夠經過本機登陸的用戶user1
用戶受權:
權限分類:管理,數據庫,表,字段,存儲例程(存儲過程,存儲函數,觸發器)等;
GRANT priv_type,...ON [object_type] db_name.tb_name TO 'USERNAME@HOST' [IDENTIFIED BY 'PASSWORD'] [WITH GRANT OPTION];
意爲:給予指定登陸位置的指定用戶在指定數據庫的指定表中的指定權限;
選項:
priv_type:ALL | [PRIVILEGES],ALL表示全部權限
db_name.tb_name:
*.*:全部數據庫的全部表;
db_name.*:制定庫的全部表;
db_name.tb_name:指定庫的指定表;
db_name.routing_name:制定庫的存儲例程;
WITH GRANT OPTION:意味着指定用戶能夠把本身的全部權限轉授(複製)到其餘的用戶;
例:
MariaDB [mydb]> GRANT SELECT,DELETE ON mydb.students TO user1@localhost; // 這裏表示給只能在本機登陸的user1用戶賦予在mydb數據庫中的students表的查詢及刪除權限
NOTE:須要注意的是,若是用戶不存在,這能夠在指定用戶的時候加上IDENTIFIED BY PASSWORD便可建立新用戶並同時指定密碼
查看用戶權限:
SHOW GRANTS FOR USERNAME@HOST;
查看指定用戶的權限
SHOW GRANTS FOR CURRENT_USER;
查看當前用戶的權限
例:
MariaDB [mydb]> SHOW GRANTS FOR user1@localhost // 這裏表示查看限制本機登陸的用戶user1的權限
回收用戶權限:
REVOKE priv_type,...ON db_name.tb_name FROM USERNAME@HOST;
例:
MariaDB [mydb]> REVOKE DELETE ON mydb.students FROM user1@localhost; // 這裏表示從限制本機登陸的用戶user1權限中回收在mydb數據庫中的students表的DELETE權限
注意:MariaDB服務進程啓動時會讀取mysql數據庫中的全部受權表至內存中;
(1)GRANT或REVOKE等執行權限操做會保存於受權表中,MariaDB的服務進程會自動重讀受權表;
(2)對於不可以或不能及時重讀受權表的命令執行後,可手動讓MariaDB的服務進程重讀受權表;
重讀受權表命令:FLUSH PRIVILEGES;
寫的比較潦草,若有遺漏錯誤和爭議之處,歡迎你們的批評指正和討論,謝謝。