數(shù)據(jù)庫(kù)操作(DDL)
數(shù)據(jù)庫(kù)的創(chuàng)建
CREATE {DATABASE|SCHEMA} [IF NOT EXISTS] db_name [[DEFAULT] CHARACTER SET [=] charset_name]
例如:
CREATE DATABASE IF NOT EXISTS test_db DEFAULT CHARACTER SET utf8
查看當(dāng)前服務(wù)器下的數(shù)據(jù)庫(kù)列表
SHOW { DATABASES | SCHEMAS }
查看數(shù)據(jù)庫(kù)的定義
SHOW CREATE { DATABASE | SCHEMA } db_name
查看上一步操作的警告信息
SHOW WARNINGS
刪除數(shù)據(jù)庫(kù)
DROP { DATABASE | SCHEMA } [IF EXISTS] db_name
打開(kāi)數(shù)據(jù)庫(kù)
USE db_name
修改數(shù)據(jù)庫(kù)的編碼方式
ALTER { DATABASE | SCHEMA } db_name [DEFAULT] CHARACTER SET [=] charset_name
數(shù)據(jù)表操作
MYSQL中的數(shù)據(jù)類型
整數(shù)類型
| 數(shù)據(jù)類型 | 存儲(chǔ)范圍 | 字節(jié) |
|---|---|---|
| TINYINT | 有符號(hào)值-128~127;無(wú)符號(hào)值 0~255; | 1 |
| SMALLINT | 有符號(hào)值-32768~32767;無(wú)符號(hào)值 0~65535; | 2 |
| MEDIUMINT | 有符號(hào)值-8388608~8388607;無(wú)符號(hào)值 0~16777215; | 3 |
| INT | 有符號(hào)值-2147483648~2147483647;無(wú)符號(hào)值 0~4294967295; | 4 |
| BIGINT | 有符號(hào)值-9223372036854775808~9223372036854775807;無(wú)符號(hào)值 0~18446744073709551615L; | 8 |
| BOOL,BOOLEAN | 等同于TINYINT(1),0為FALSE ,其余為TRUE | 1 |
浮點(diǎn)類型
| 數(shù)據(jù)類型 | 存儲(chǔ)范圍 | 字節(jié) |
|---|---|---|
| FLOAT[(M,D)] | 負(fù)數(shù)取值范圍為-3.40E+38~-1.17E-38,0,1.175E-38~3.40E38;M是數(shù)字總位數(shù),D是小數(shù)點(diǎn)后面的位數(shù),若M,D被省略,根據(jù)硬件限制來(lái)保存值。 | 4 |
| DOUBLE[(M,D)] | -1.79E+308~2.22E-308,0,2.22E-308~1.79E308 | 8 |
| DECIMAL[(M,D)] | 和DOUBLE一樣,內(nèi)部以字符串形式存儲(chǔ)數(shù)值 | M+2 |
字符串類型
| 數(shù)據(jù)類型 | 存儲(chǔ)需求 | 備注 |
|---|---|---|
| CHAR(M) | M個(gè)字節(jié),0<=M<=255 | |
| VARCHAR(M) | L+1個(gè)字節(jié),L<=M且0<=M<=65535 | |
| TINYTEXT | L+1個(gè)字節(jié),L<2^8 | |
| TEXT | L+2個(gè)字節(jié),L<2^16 | |
| MEDIUMTEXT | L+3個(gè)字節(jié),L<2^24 | |
| LONGTEXT | L+4個(gè)字節(jié),L<2^32 | |
| ENUM('Value1','Value2',......) | 1或2個(gè)字節(jié),取決于枚舉值的個(gè)數(shù)(最多65535個(gè)值) | 只能選擇一項(xiàng),可通過(guò)數(shù)值插入,第一項(xiàng)為1,第二項(xiàng)為2... |
| SET('Value1','Value2',......) | 1,2,3,4或8個(gè)字節(jié),取決于SET成員的數(shù)目(最多64個(gè)成員) | 可選擇多項(xiàng),選中的不同值由","分隔,且可通過(guò)數(shù)值設(shè)置(第一項(xiàng)為1,第二項(xiàng)為2,第三項(xiàng)為8,第四項(xiàng)為16......選中前三項(xiàng)值為11) |
日期時(shí)間類型
| 數(shù)據(jù)類型 | 存儲(chǔ)范圍 | 存儲(chǔ)需求 | 備注 |
|---|---|---|---|
| TIME | -838:59:59 ~ 838:59:59 | 3 | |
| DATE | 1000-1-1 ~ 9999-12-31 | 3 | |
| DATETIME | 1000-1-1 00:00:01 UTC ~ 9999-12-31 23:59:59 | 8 | |
| TIMESTAMP | 1970-1-1 00:00:01 UTC ~ 2038-1-19 3:14:07 | 4 | |
| YEAR | 1901~2155 | 1 | 值可為數(shù)字或者字符串,70~99=>1970~1999,00~69=>2000~2069,數(shù)字0轉(zhuǎn)換為0000 |
二進(jìn)制類型
JSON類型(ver5.7新增)
存儲(chǔ)引擎
查看MYSQL支持的存儲(chǔ)引擎
SHOW ENGINES
查看支持的存儲(chǔ)引擎信息
SHOW VARIABLES LIKE 'have%'
查看默認(rèn)的存儲(chǔ)引擎
SHOW VARIABLES LIKE '%storage_engine%'
常用存儲(chǔ)引擎(注意各引擎優(yōu)缺點(diǎn))
- InnoDB
- MyISAM
- Memory
約束條件
一個(gè)表只能有一個(gè)主鍵(PRIMATY KEY),但是能夠有多個(gè)唯一(UNIQUE KEY),唯一的字段的值不允許出現(xiàn)重復(fù),但是NULL值不算做重復(fù)的值
- PRIMARY KEY 主鍵,PRIMARY可省略 (注意:PRIMARY KEY(a,b,c,...) 來(lái)定義一個(gè)主鍵時(shí),由a,b,c,...所有的值才能確定一個(gè)主鍵,即一個(gè)表包括a,b,c...等字段,其中單獨(dú)的a,b,c字段相等,是可以的,但不能全部相等,全部相等表明主鍵相等,不可插入。)
- AUTO_INCREMENT 自增,需要和主鍵(PRIMARY KEY)搭配使用??稍趧?chuàng)建表時(shí)自定義從某個(gè)數(shù)開(kāi)始,如CREATE TABLE tbl_name(id INT key AUTO_INCREMENT,......)AUTO_INCREMENT=數(shù)值,表示內(nèi)部自增字段從此數(shù)值開(kāi)始。(也可通過(guò)ALTER TABLE tbl_name AUTO_INCREMENT=數(shù)值修改)
- FOREIGN KEY 外鍵
- NOT NULL 非空
- UNIQUE KEY 唯一,KEY 可省略
- DEFAULT 默認(rèn)值 插入數(shù)據(jù)時(shí)可使用DEFAULT
數(shù)據(jù)表的創(chuàng)建
CREATE TABLE [IF NOT EXISTS] tbl_name (
字段名稱 字段類型 [完整性約束條件] ##完整性約束條件順序?yàn)? [UNSIGNED | ZEROFILL] [NOT NULL] [DEFAULT 默認(rèn)值] [[PRIMARY] KEY | UNIQUE [KEY]] AUTO_INCREMENT
......
)ENGINE = 引擎名稱 CHARSET = 編碼方式;
查看當(dāng)前數(shù)據(jù)庫(kù)下的數(shù)據(jù)表
SHOW TABLES;
查看表結(jié)構(gòu)及創(chuàng)建信息
DESC tbl_name
DESCRIBE tbl_name
SHOW COLUMNS FROM tbl_name
SHOW CREATE TABLE tbl_name
修改表結(jié)構(gòu)
修改表名
ALTER TABLE tbl_name RENAME [TO|AS] new_name
或者
RENAME TABLE tbl_name TO new_name
添加字段
ALTER TABLE tbl_name ADD 字段名稱 字段類型 [完整性約束條件] [ FIRST | (AFTER 字段名稱)]
若需要添加多個(gè)字段,需要多個(gè)ADD操作,以“,”號(hào)分隔
刪除字段
ALTER TABLE tbl_name DROP 字段名稱
若需要?jiǎng)h除多個(gè)字段,需要多個(gè)DROP操作,以“,”號(hào)分隔。
注意:添加字段(ADD)與刪除字段(DROP)可以在同一個(gè)語(yǔ)句里面(ALTER TABLE tbl_name ADD .....,DROP .....)
修改字段
ALTER TABLE tbl_name MODIFY 字段名稱 字段類型 [完整性約束條件] [FIRST | (AFTER 字段名稱)]
修改字段名稱
ALTER TABLE tbl_name CHANGE 舊字段名稱 新字段名稱 字段類型 [完整性約束條件] [FIRST | (AFTER 字段名稱)]
添加默認(rèn)值
ALTER TABLE tbl_name ALTER 字段名稱 SET DEFAULT 默認(rèn)值
刪除默認(rèn)值
ALTER TABLE tbl_name ALTER 字段名稱 DROP DEFAULT
添加主鍵
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (字段名稱,...)
刪除主鍵
ALTER TABLE tbl_name DROP PRIMARY KEY
添加唯一
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX | KEY] [索引名稱] (字段名稱,...)
刪除唯一
ALTER TABLE tbl_name DROP {INDEX| KEY} index_name
修改表的存儲(chǔ)引擎
ALTER TABLE tbl_name ENGINE=存儲(chǔ)引擎名稱
修改表的自增長(zhǎng)值
ALTER TABLE tbl_name AUTO_INCREMENT= 值
刪除數(shù)據(jù)表
DROP TABLE [IF EXISTS] tbl_name[,tbl_name,...]
數(shù)據(jù)操作(DML)
插入數(shù)據(jù)
不指定具體的字段
INSERT [INTO] tbl_name VALUE | VALUES (值,......)
列出指定字段
INSERT [INTO] tbl_name (字段名稱1,......) VALUE | VALUES (值1,......)
同時(shí)插入多條記錄
INSERT [INTO] tbl_name [(字段名稱1,......)] VALUE | VALUES (值,......), (值,......),......
通過(guò)SET形式插入記錄
INSERT [INTO] tbl_name SET 字段名稱=值,......
將查詢結(jié)果插入到表中
INSERT [INTO] tbl_name [(字段名稱1,......)] SELECT 字段名稱 FROM tbl_name [WHERE 條件]
更新數(shù)據(jù)
UPDATE tbl_name SET 字段名稱=值,...... [WHERE 條件] [ORDER BY 字段名稱] [LIMIT 限制條件]
刪除數(shù)據(jù)
(DELETE FROM tbl_name [WHERE 條件] [ORDER BY 字段名稱] [LIMIT 限制條件])
或者徹底清空數(shù)據(jù)表
(TRUNCATE [TABLE ] tbl_name)
查詢數(shù)據(jù)操作(DQL)
查詢記錄
SELECT select_expr[,select_expr,...]
[
FROM table_reference
[WHERE 條件]
[GROUP BY {col_name | position } [ ASC | DESC], ... 分組]
[HAVING 條件 對(duì)分組結(jié)果進(jìn)行二次篩選]
[ORDER BY {col_name | position } [ ASC | DESC], ... 排序]
[LIMIT 限制顯示條數(shù)]
]
查詢表達(dá)式
每個(gè)表達(dá)式表示想要的一列,必須至少有一列,多個(gè)列以","號(hào)分隔; "*" 表示所有列,tbl_name.*表示命名表的所有列。查詢表達(dá)式可以使用 [AS] alias_name 為其賦予別名。
WHERE條件
| 查詢條件 | 符號(hào) | 示例 |
|---|---|---|
| 比較 | =,<,>,<=,>=,!=,<>,!>,!<,<=> | SELECT * FROM table_name WHHERE id = 1 |
| 指定范圍 | BETWEEN AND,NOT BETWEEN AND | SELECT * FROM table_name WHHERE id BETWEEN 1 AND 2 |
| 指定集合 | IN,NOT IN | SELECT * FROM table_name WHHERE id IN(1,3,5,7,9) 集合內(nèi)忽略大小寫(xiě) |
| 匹配字符 | LIKE, NOT LIKE | SELECT * FROM table_name WHHERE id LIKE '_2%' |
| 是否為空 | IS NULL,IS NOT NULL | SELECT * FROM table_name WHHERE id IS NULL |
| 多個(gè)查詢條件 | AND,OR | SELECT * FROM table_name WHHERE user = 'admin' AND password = 'admin' |
模糊查詢
- %:代表0個(gè),1個(gè)或者多個(gè)任意字符
- _ :代表1個(gè)字符
GROUP BY 查詢結(jié)果分組
默認(rèn)情況下,GROUP BY 查詢結(jié)果分組得到每組的第一個(gè)值
配合GROUP_CONCAT()得到分組詳情
配合聚合函數(shù)
- COUNT() NULL值不算一條記錄
- MAX()
- MIN()
- AVG()
- SUM()
配合WITH ROLLUP記錄上面所有記錄的總和
5.通過(guò)HAVING子句對(duì)分組結(jié)果進(jìn)行二次篩選
配合GROUP BY 實(shí)現(xiàn),比如:
SELECT Region,COUNT(*),MAX(Population),MIN(Population),SUM(Population),AVG(Population) FROM country GROUP BY Region HAVING MAX(Population) > 1000000
通過(guò)ORDER BY 進(jìn)行排序
默認(rèn)升序排列(ASC),可省略。降序排列(DESC),可排序多個(gè)字段通過(guò)","號(hào)連接
SELECT * FROM country ORDER BY Population ASC,SurfaceArea ASC
SELECT * FROM country ORDER BY 3 ASC
SELECT * FROM country ORDER BY RAND() #隨機(jī)記錄
LIMIT限制查詢結(jié)果顯示條數(shù)
- LIMIT 顯示條數(shù)
- LIMIT 偏移量,顯示條數(shù)
(SELECT * FROM country LIMIT 2,1)
連接查詢
什么是鏈接查詢
連接查詢是將兩個(gè)或者兩個(gè)以上的表按照某個(gè)條件連接起來(lái),從中選取需要的數(shù)據(jù)。連接查詢是同時(shí)查詢兩個(gè)或者兩個(gè)以上的表時(shí)使用的。當(dāng)不同的表中存在相同意義的字段時(shí),可通過(guò)該字段連接這幾個(gè)表。
內(nèi)連接查詢
- JOIN | CROSS JOIN | INNER JOIN
- 通過(guò)ON 連接條件
- 顯示兩個(gè)表中符合連接條件的記錄
注意:三張表或者三張表以上查詢可以直接加入更多的JOIN ...ON ...來(lái)連接多張表,注意找準(zhǔn)表之間的連接條件
例如:
SELECT
user_info.id, user_info.name, city_info.pro_name
FROM
user_info
JOIN
city_info ON user_info.pro_id = city_info.pro_id;
外連接查詢
左外連接
(LEFT [OUTER] JOIN)
顯示左表的全部記錄及右表符合連接條件的記錄
右外連接
(RIGHT [OUTER] JOIN)
顯示右表的全部記錄及左表符合連接條件的記錄
外鍵
概覽
外鍵是表的一個(gè)特殊字段,被參照的表是主表,外鍵所在字段的表為子表。設(shè)置外鍵的原則需要記住,就是依賴于數(shù)據(jù)庫(kù)中已存在的表的主鍵。外鍵的作用是建立該表與其父表的關(guān)聯(lián)關(guān)系。父表中對(duì)記錄做操作時(shí),子表中與之對(duì)應(yīng)的信息也應(yīng)有相應(yīng)的改變。
外鍵的作用是保持?jǐn)?shù)據(jù)庫(kù)的一致性和完整性。
可以實(shí)現(xiàn)一對(duì)一或者一對(duì)多的關(guān)系
注意
- 父表和子表必須使用相同的存儲(chǔ)引擎,而且禁止使用臨時(shí)表。
- 數(shù)據(jù)庫(kù)的存儲(chǔ)引擎只能為InnoDB。
- 外鍵列和參照列必須具有相似的數(shù)據(jù)類型其中數(shù)字的長(zhǎng)度或是否有符號(hào)位必須相同:而字符的長(zhǎng)度則可以不同。
- 外鍵列和參照列必須創(chuàng)建索引。如果外鍵不存在索引的話,MYSQL將自動(dòng)創(chuàng)建索引。
外鍵約束的參照操作:
- CASCADE:從父表刪除或者更新且自動(dòng)刪除或者更新子表中匹配的行。
- SET NULL:從父表刪除或者更新行,并設(shè)置子表的中的外鍵列為NULL。如果使用該選項(xiàng)必須保證子表列中沒(méi)有指定NOT NULL。
- RESTRICT:拒絕對(duì)父表的更新或者刪除操作。
- NOT ACTION: 標(biāo)準(zhǔn)SQL的關(guān)鍵字,在MYSQL中與RESTRICT相同
創(chuàng)建外鍵(先有主表)
CREATE TABLE [IF NOT EXISTS] tbl_name (
字段名稱 字段類型 [完整性約束條件] ##完整性約束條件順序?yàn)? [UNSIGNED | ZEROFILL] [NOT NULL] [DEFAULT 默認(rèn)值] [[PRIMARY] KEY | UNIQUE [KEY]] AUTO_INCREMENT
...
[CONSTRAINT 外鍵名稱] FOREIGN KEY(字段名) REFERENCES 父表(字段名) [ON {DELETE | UPDATE } {CASCADE | SET NULL }] [ON {DELETE | UPDATE } {CASCADE | SET NULL}]
)
刪除外鍵
(ALTER TABLE tbl_name DROP FOREIGN KEY)
添加外鍵
(ALTER TABLE tbl_name ADD [CONSTRAINT 外鍵名稱] FOREIGN KEY(字段名) REFERENCES 父表(字段名))
示例:
部門表(父表)
| id | depName |
|---|---|
| 1 | 教學(xué)部 |
| 2 | 技術(shù)部 |
| 3 | 運(yùn)營(yíng)部 |
| 4 | 市場(chǎng)部 |
CREATE TABLE IF NOT EXISTS department (id TINYINT UNSIGNED AUTO_INCREMENT KEY,depName VARCHAR(20) NOT NULL UNIQUE)ENGINE=INNODB;
員工表(子表)
| id | username | depId |
|---|---|---|
| 1 | King | 1 |
| 2 | Zhang | 3 |
| 3 | Ling | 2 |
| 4 | Jack | 4 |
CREATE TABLE IF NOT EXISTS employee (id TINYINT UNSIGNED AUTO_INCREMENT KEY,userName VARCHAR(20) NOT NULL UNIQUE,depId TINYINT UNSIGNED)ENGINE=INNODB;
如果只刪除父表中部門4,那么員工表中還有屬于部門4的員工存在,這顯然是不合適的,這時(shí),可以使用外鍵來(lái)解決
創(chuàng)建外鍵(先有主表):
CREATE TABLE IF NOT EXISTS employee (id TINYINT UNSIGNED AUTO_INCREMENT KEY,userName VARCHAR(20) NOT NULL UNIQUE,depId TINYINT UNSIGNED , FOREIGN KEY(depId) REFERENCES deparment(id) )ENGINE=INNODB;
聯(lián)合查詢
UNION
(SELECT 語(yǔ)句 UNION SELECT 語(yǔ)句)
UNION ALL
(SELECT 語(yǔ)句 UNION SELECT 語(yǔ)句)
注意:UNION 和 UNION ALL 的區(qū)別是UNION 去掉相同記錄,UNION是簡(jiǎn)單的合并到一起
子查詢
什么是子查詢
子查詢是將一個(gè)查詢語(yǔ)句嵌套在另一個(gè)查詢語(yǔ)句之中。內(nèi)層查詢語(yǔ)句的查詢結(jié)果,可以為外層查詢語(yǔ)句提供條件
引發(fā)子查詢的情況
- 使用 [NOT] IN 的子查詢
- 使用比較運(yùn)算符的子查詢 = > < >= <= <> != <=>
- 使用 [NOT] EXISTS 的子查詢
- 使用 ANY | SOME 或者 ALL的子查詢
| 符號(hào) | ANY | SOME | ALL |
|---|---|---|---|
| >,>= | 最小值 | 最小值 | 最大值 |
| <,<= | 最大值 | 最大值 | 最小值 |
| = | 任意值 | 任意值 | |
| !=,<> | 任意值 |
示例:
SELECT name FROM user where depId IN(SELECT id FROM ids)
SELECT name FROM user where depId >=(SELECT id FROM ids)
SELECT name FROM user where EXISTS(SELECT id FROM ids)
將查詢結(jié)果寫(xiě)入到數(shù)據(jù)表
(INSERT [INTO] tbl_name [(col_name),......] SELECT ...)
創(chuàng)建數(shù)據(jù)表的同時(shí)將查詢結(jié)果寫(xiě)入到數(shù)據(jù)表
CREATE TABLE [IF NOT EXISTS] tbl_name (
[(creat_defination)]
select_statement
正則表達(dá)式查詢
REGEXP '匹配方式'
(SELECT * FROM user WHERE REGEXP '^[1-9]$')
常用匹配方式
| 模式字符 | 含義 |
|---|---|
| ^ | 匹配字符串開(kāi)始 |
| $ | 匹配字符串結(jié)尾 |
| . | 匹配字符串任一字符,包括換行和回車 |
| [字符集和] | 匹配字符集合的任一字符 |
| [^字符集和] | 匹配除了字符集合以外的任一字符 |
| s1 | s2 | s3 | 匹配s1、s2、s3任一字符串 |
| * | 代表0個(gè)、1個(gè)或者多個(gè)其前的字符 |
| + | 代表1個(gè)或者多個(gè)其前的字符 |
| 字符串{N} | 字符串出現(xiàn)N次 |
| 字符串{M,N} | 字符串至少出現(xiàn)M次,最多N次 |
運(yùn)算符
算數(shù)運(yùn)算符
| 符號(hào) | 表達(dá)式 | 作用 |
|---|---|---|
| + | X1+X2 | 加法 |
| - | X1-X2 | 減法 |
| * | X1*X2 | 乘法 |
| / | X1 / X2 | 除法 |
| DIV | X1 DIV X2 | 除法 |
| % | X1 % X2 | 取余 |
| MOD | X1 MOD X2 | 取余 |
比較運(yùn)算符
| 符號(hào) | 形式 | 作用 |
|---|---|---|
| = | X1=X2 | 判斷是否相等 |
| !=或<> | X1!=X2或X1<>X2 | 判斷是否不相等 |
| <=> | X1<=>X2 | 判斷是否相等,可以判斷是否等于NULL |
| >,>= | X1>X2,X1>=X2 | 判斷是否大于等于 |
| <,<= | X1<X2,X1<=X2 | 判斷是否小于等于 |
| IS NULL 或 IS NOT NULL | x1 IS [NOT] NULL | 判斷是否等于NULL |
| BETWEEN ... AND ... 或者 NOT BETWEEN ... AND... | X1 BETWEEN m AND n | 判斷是否在范圍內(nèi) |
| IN 或 NOT IN | X1 IN (值1,...) | 判斷是否在一個(gè)固定范圍內(nèi) |
| LIKE 或 NOT LIKE | X1 LIKE 表達(dá)式 | 判斷是否匹配 |
| REGEXP | REGEXP 正則表達(dá)式 | 判斷是否正則匹配 |
邏輯運(yùn)算符
| 符號(hào) | 形式 | 作用 |
|---|---|---|
| && 或 AND | 與 | 并且 |
| ||或 OR | 或 | 或者 |
| ! 或 NOT | 非 | 取反 |
| XOR | 異或 | 不同為真 |
運(yùn)算符的優(yōu)先級(jí)
| 優(yōu)先級(jí) | 運(yùn)算符 | 優(yōu)先級(jí) | 運(yùn)算符 |
|---|---|---|---|
| 1 | ! | 8 | | |
| 2 | ~ | 9 | =,<=>,>>=,<,<=,!=,<>,LIKE,IN,IS NULL,REGEXP |
| 3 | ^ | 10 | BETWEEN AND,CASE,THEN,WHEN,ELSE |
| 4 | *,/,DIV,%,MOD | 11 | NOT |
| 5 | +,- | 12 | &&,AND |
| 6 | >>,<< | 13 | ||,OR,XOR |
| 7 | & | 14 | ;= |
注意: 可以使用()改變優(yōu)先級(jí)
MYSQL中的函數(shù)
數(shù)學(xué)函數(shù)
| 名稱 | 描述 |
|---|---|
| CELL(x) | 進(jìn)一取整 |
| FLOOR(x) | 舍一取整 |
| MOD(x,y) | 取余數(shù)(取模) |
| POWER(x,y) | 冪運(yùn)算 |
| ROUND(x) | 四舍五入 |
| TRUNCATE(x,y) | 數(shù)字截取 |
| ABS() | 取絕對(duì)值 |
| PI() | 圓周率 |
| RAND()和RAND(X) | 返回0~1之間的隨機(jī)數(shù),RANX(X) |
| SIGN(X) | 返回X的符號(hào),-1為負(fù)數(shù),0,1為正數(shù) |
| EXP(X) | 計(jì)算e的幾次方 |
字符串函數(shù)
| 名稱 | 描述 |
|---|---|
| CHAR_LENGTH(x) | 返回字符串字符數(shù) |
| LENGTH(x) | 返回字符串長(zhǎng)度 |
| CONCAT(s1,s2,...) | 合并字符串 |
| CONCAT_WS(x,s1,s2,...) | 以指定分隔符連接連接字符串 |
| UPPER(x)/UCASE(x) | 將字符串轉(zhuǎn)化為大寫(xiě) |
| LOWER(x)/LCASE(x) | 將字符串轉(zhuǎn)化為小寫(xiě) |
| LEFT(S,N)/RIGHT(S,N) | 返回字符串的前/后N個(gè)字符 |
| LPAD(S1,LEN,S2)/RPAD(s1,LEN,s2) | 將字符串s1用s2 填充到指定的LEN |
| LTRIM(s)/RTRIM(s)/TRIM(s) | 去掉字符串空格 |
| TRIM(s1 FROM s) | 去掉字符串S中結(jié)尾處和開(kāi)始處的s1 |
| REPEAT(S,N) | 重復(fù)字符串的指定次數(shù) |
| SPACE(N) | 返回N個(gè)空格 |
| REPLACE(s,s1,s2) | 從字符串s中搜索s1,替換s2 |
| STRCMP(s1,s2) | 比較字符串,>=<分別返回1,0,-1 |
| SUBSTRING(S,N,LEN) | 截取字符串 |
| REVERSE(S) | 反轉(zhuǎn)字符串 |
| ELT(N,S1,S2) | 返回指定位置的字符串 |
日期時(shí)間函數(shù)
| 名稱 | 描述 |
|---|---|
| CURDATE(),CURRENT_DATE() | 返回當(dāng)前日期 |
| CURTIME(),CURRENT_TIME() | 返回當(dāng)前時(shí)間 |
| NOW() | 返回當(dāng)前日期時(shí)間 |
| MONTH(D) | 返回日期中月份的值 |
| MONTHNAME(D) | 返回日期中月份的名字 |
| DAYNAME(D) | 返回日期中的星期幾 |
| DAYOFWEEK(D) | 返回一周內(nèi)的第幾天,1代表星期日 |
| WEEKDAY(D) | 返回日期是星期幾,0代表星期一 |
| WEEK(D) | 一年中的多少個(gè)星期 |
| YEAR(D) | 返回日期中年份的值 |
| HOUR(T) | 返回時(shí)間中的小時(shí) |
| MINUTE(T) | 返回時(shí)間中的分鐘數(shù) |
| SECOND(T) | 返回時(shí)間中的秒數(shù) |
| DATEDIFF(D1,D2) | 返回D1,D2的間隔天數(shù) |
條件判斷函數(shù)
| 名稱 | 描述 |
|---|---|
| IF(EXPR,V1,V2) | 如果EXPR成立,返回V1,否則V2 |
| IFNULL(V1,V2) | 如果V1 不為空,顯示V1的值;否則V2 |
| CASE WHEN expr1 THEN v1 [WHEN expr2 THEN v2 ] [ ELSE vn] END | CASE表示函數(shù)開(kāi)始,END表示函數(shù)結(jié)束。如果表達(dá)式expr1成立時(shí),返回v1.如果表達(dá)式expr2成立時(shí),返回v2.以此類推,最后遇到ELSE時(shí),返回vn的值。 |
系統(tǒng)信息函數(shù)
| 名稱 | 描述 |
|---|---|
| VERSIOn() | 返回?cái)?shù)據(jù)庫(kù)版本號(hào) |
| CONNECTION_ID() | 返回?cái)?shù)據(jù)庫(kù)連接數(shù) |
| DATABASE(),SCHEMA() | 返回當(dāng)前數(shù)據(jù)庫(kù)名 |
| USER(),SYSTEM_USER | 返回當(dāng)前用戶 |
| CURRENT_USER() | 返回當(dāng)前用戶 |
| CHARSET(s) | 返回字符串s 的字符集 |
| COLLATION(s) | 返回字符串s 的檢驗(yàn)字符集 |
| LAST_INSERT_ID() | 返回最近生成的AUTO_INCREMENT的值 |
加密函數(shù)
| 名稱 | 描述 |
|---|---|
| MD5(str) | 信息摘要算法 |
| PASSWORD(str) | 密碼算法(ver5.6過(guò)時(shí)) |
| ENCODE(str,pwd_str) | 加密結(jié)果是一二進(jìn)制數(shù),必須使用Blob字段保存 |
| DECODE(crypt_str,pwd_str) | 對(duì)通過(guò)ENCODE加密之后的內(nèi)容解密 |
其他常用函數(shù)
| 名稱 | 描述 |
|---|---|
| FORMAT(x,n) | 將數(shù)字x進(jìn)行格式化,將x保留到小數(shù)點(diǎn)后n位 |
| ASCII(x) | 返回字符串x的第一個(gè)字符的ASCII碼 |
| BIN(x) | 返回x的二進(jìn)制編碼 |
| HEX(x) | 返回x的十六進(jìn)制編碼 |
| OCT(X) | 返回x的八進(jìn)制編碼 |
| CONV(x,f1,f2) | 返回將x從f1進(jìn)制數(shù)變成f2進(jìn)制數(shù) |
| INET_ATON(ip) | 將ip地址轉(zhuǎn)換為數(shù)字 |
| INET_NTOA(n) | 將數(shù)字轉(zhuǎn)化為IP地址 |
| GET_LOCK(name,time) | 定義鎖 |
| RELEASE_LOCK(name) | 釋放鎖 |
索引
什么是索引
- 索引由數(shù)據(jù)庫(kù)中一列或者多列組成,其作用是提高對(duì)表中數(shù)據(jù)的查詢速度
- 索引的優(yōu)點(diǎn)是可以提高檢索數(shù)據(jù)的速度
- 索引的缺點(diǎn)是創(chuàng)建和維護(hù)索引需要耗費(fèi)時(shí)間
- 索引可以提高查詢速度,減慢寫(xiě)入速度
索引分類
- 普通索引
- 唯一索引(UNIQUE)
- 全文索引(FULLTEXT)
- 單列索引
- 多列索引
- 空間索引(數(shù)據(jù)類型為GEOMETRY,存儲(chǔ)引擎為MyISAM)SPATIAL
創(chuàng)建索引
創(chuàng)建表的時(shí)候創(chuàng)建索引
CREATE TABLE [IF NOT EXISTS] tbl_name (
字段名稱 字段類型 [完整性約束條件] ##完整性約束條件順序?yàn)? [UNSIGNED | ZEROFILL] [NOT NULL] [DEFAULT 默認(rèn)值] [[PRIMARY] KEY | UNIQUE [KEY]] AUTO_INCREMENT
......
[UNIQUE | FULLTEXT | SPATIAL ] INDEX|KEY [索引名稱](字段名稱[(長(zhǎng)度)] [ASC|DESC])
)ENGINE = 引擎名稱 CHARSET = 編碼方式;
在已存在的表上創(chuàng)建索引
(CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名稱 ON 表名 {字段名稱[(長(zhǎng)度)] [ASC|DESC] ) })
或者
(ALTER TABLE tbl_name ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名稱(字段名稱[(長(zhǎng)度)] [ASC|DESC]) )
刪除索引
(DROP INDEX 索引名稱 ON tbl_name)
其他
注釋
- 以‘-- ’ 為前綴
- 以'#' 為前綴
- 字段注釋通過(guò)COMMENT '.....'進(jìn)行注釋