SQL語句
DDL: CREATE, DROP, ALTER
DML: INSERT(REPLACE), DELETE, UPDATE, SELECT
DCL: GRANT, REVOKE
數據類型:
字符:
變長字符:VARCHAR(#),VARBINARY(#)
定長字符: CHAR(#), BINARY(#)
內建類型: ENUM, SET
對象: TEXT, BLOB
數值:
精確數值
整型: INT
TINYINT, AMALLINT, INT, MEDIUMINT, BIGINT
十進制:DECIMAL
近似數值
單精度: FLOAT
雙精度: DOUBLE
日期時間型:
DATE: 日期
TIME: 時間
DATATIME: 日期時間
TIMESTAMP: 時間戳
YEAR(2|4): 年份
修飾符:
NOT NULL
DEFAULT VALUE
UNSIGNED
AUTO_INCREMENT
PRIMARY KEY
DDL:
數據庫:
CREATE DATABASE [IF NOT EXISTS] db_name;
CHARACTER SET [=] charset
COLLATE [=] collate
SHOW CHARACTER SET; 查看字符集
SHOW COLLATIONS; 查看排序規則
DROP DATABASE [IF EXISTS] db_name; 刪除數據庫
數據表:
CREATE TABLE [IF NOT EXISTS] tb_name (col1 type1,col2,type2,...)
PRIMARY KEY(col1,col2,...)
INDEX(col1,col2,...)
UNIQUE(col1,col2,...)
表選項:
ENGINE [=] engine_name
ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}
SHOW ENGINES; 查看存儲引擎;
獲取幫助:
mysql> HELP CREATE TABLE;
查看創建命令:
SHOW CREATE TABLE tb_name;
查看錶狀態:
SHOW TABLE STATUS LIKE 'tb_name'\G
刪除表:
DROP TABLE [IF EXISTS] tb_name;
修改表:
ALTER TABLE tb_name;
字段:
添加字段: ADD
ADD col1 data_type [FIRST | AFTER col_name]
刪除字段: DROP
修改字段: ALTER ,CHANGE,MODIFY
改字段名稱: CHANGE
改屬性定義: MODIFY
索引:
添加索引: add
刪除索引: drop {INDEX} INDEX_NAME;
表選項
查看錶上的索引:
SHOW INDEXES FROM [db_name.]tb_name;
刪除索引:
ALTER TABLE tb_name DROP INDEX index_name;
索引:
索引是一種特殊數據結構; 定義在查找時作爲查找條件的字段;
索引,要有索引名稱;
創建索引:
CREATE INDEX index_name ON tb_name(index_col_name,...);
刪除索引:
DROP INDEX index_name ON tb_name;
DML:
INSERT :
INSERT [INTO] tbl_name [(col_name,...)]{VALUES | VALUE}(val1,...)
例:
#INSERT INTO tb1 VALUES (1,'yanguo','m'),(2,'xiaolongnv','f');
#INSERT INTO tb1 (id,name) VALUES (3,'zhangwuji'),(4,'zhaomin');
DELETE:
DELETE FROM tbl_name [WHERE where_condition]
例:
DELETE FROM tb1 WHERE id=3;
SELECT:
SELECT col1,col2,... FROM tb_name;
SELECT col1,col2,... FROM tb_name [WHERE clause][ORDER BY 'col_name'][LIMIT [m,]n];
字段表示法:
* : 表示所有字段
as : 字段別名, col1 AS alias1
WHERE clase:
操作符
<, > ,==,>=,<=,!=
BETWEEN ... AND... (在..和..之間)
LIKE:
% 任意長度的任意字符
— 任意單個字符
RLIKE:
正則表達式,不建議使用;
條件邏輯操作:
and
or
not
例:
SELECT * FROM tb1;
SELECT * FROM tb1 WHERE id <3;
SELECT * FROM tb1 WHERE gender IS NULL;
SELECT * FROM tb1 ORDER BY id DESC;
SELECT * FROM tb1 WHERE id BETWEEN 2 AND 4;
SELECT * FROM tb1 WHERE name LIKE 'z%';
SELECT * FROM tb1 WHERE name LIKE 'z%';
UPDATE
UPDATE tb_name SET col1=new-val1,col2=new_val2,... [WHERE clause]
注意:後面一定要指定條件WHERE,不然會更改整個表;
例:
UPDATE tb1 SET gender='f' WHERE id=4;
用戶賬號及權限管理:
用戶賬號: ‘user’@'host'
user: 用戶名
host: 此用戶訪問mysql服務時允許通過哪些主機遠程創建連接;
IP, 網絡地址, 主機名, 通配符(%和_);
禁止檢查主機名
my.cnf [mysqld]
skip_name_resove = yes 跳過主機名解析
創建用戶:
CREATE USER 'username'@'host' [IDENTIFIED BY 'passwd'];
例:
CREATE USER 'candy'@'%' IDENTIFIED BY 'candy';
SELECT User,Host,Password FROM mysql.user;
刪除用戶:
DROP USER ‘username’@'host';
授權:
權限: 管理權限,數據庫,表,字段,存儲例程
GRANT priv_type,...ON [object_type] db_name.tb_name TO 'user'@'host' [IDENTIFIED BY 'passwd']
[with option];
priv_type: ALL [PRIVILEGES]
db_name.tb_name:
*.* 所有庫的所有表;
db_name.* 指定庫的所有表;
db_name.tb_name: 指定庫的指定表;
db-name.routine_name: 指定庫的存儲例程;
查看指定用戶獲得的授權:
SHOW GRANTS FOR 'user'@'host';
查看當前用戶的授權:
SHOW GRANTS FOR CURRENT_USER;
撤消授權:
REVOKE priv_type,... ON db_name.tb_name FROM 'user'@'host';
注意:mariaDB服務進程啓動時會讀取mysql庫中的所有授權表至內存中;
1.GRANT或REVOKE等執行權限操作會保存於表中,mariadb的服務進程會自動重讀授權表;
2.對於不能夠或不能及時重讀授權表的命令,可手動讓mariadb的服務進程重讀授權表;
mysql> flush privileges;