數(shù)據(jù)庫操作(DDL)
數(shù)據(jù)庫的創(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
查看當前服務器下的數(shù)據(jù)庫列表
SHOW { DATABASES | SCHEMAS }
查看數(shù)據(jù)庫的定義
SHOW CREATE { DATABASE | SCHEMA } db_name
查看上一步操作的警告信息
SHOW WARNINGS
刪除數(shù)據(jù)庫
DROP { DATABASE | SCHEMA } [IF EXISTS] db_name
打開數(shù)據(jù)庫
USE db_name
修改數(shù)據(jù)庫的編碼方式
ALTER { DATABASE | SCHEMA } db_name [DEFAULT] CHARACTER SET [=] charset_name
數(shù)據(jù)表操作
MYSQL中的數(shù)據(jù)類型
整數(shù)類型
數(shù)據(jù)類型 | 存儲范圍 | 字節(jié) |
---|---|---|
TINYINT | 有符號值-128~127;無符號值 0~255; | 1 |
SMALLINT | 有符號值-32768~32767;無符號值 0~65535; | 2 |
MEDIUMINT | 有符號值-8388608~8388607;無符號值 0~16777215; | 3 |
INT | 有符號值-2147483648~2147483647;無符號值 0~4294967295; | 4 |
BIGINT | 有符號值-9223372036854775808~9223372036854775807;無符號值 0~18446744073709551615L; | 8 |
BOOL,BOOLEAN | 等同于TINYINT(1),0為FALSE ,其余為TRUE | 1 |
浮點類型
數(shù)據(jù)類型 | 存儲范圍 | 字節(jié) |
---|---|---|
FLOAT[(M,D)] | 負數(shù)取值范圍為-3.40E+38~-1.17E-38,0,1.175E-38~3.40E38;M是數(shù)字總位數(shù),D是小數(shù)點后面的位數(shù),若M,D被省略蔗崎,根據(jù)硬件限制來保存值沛简。 | 4 |
DOUBLE[(M,D)] | -1.79E+308~2.22E-308,0,2.22E-308~1.79E308 | 8 |
DECIMAL[(M,D)] | 和DOUBLE一樣踱侣,內(nèi)部以字符串形式存儲數(shù)值 | M+2 |
字符串類型
數(shù)據(jù)類型 | 存儲需求 | 備注 |
---|---|---|
CHAR(M) | M個字節(jié)馆衔,0<=M<=255 | |
VARCHAR(M) | L+1個字節(jié),L<=M且0<=M<=65535 | |
TINYTEXT | L+1個字節(jié)蕉扮,L<2^8 | |
TEXT | L+2個字節(jié)整胃,L<2^16 | |
MEDIUMTEXT | L+3個字節(jié),L<2^24 | |
LONGTEXT | L+4個字節(jié)喳钟,L<2^32 | |
ENUM('Value1','Value2',......) | 1或2個字節(jié)爪模,取決于枚舉值的個數(shù)(最多65535個值) | 只能選擇一項,可通過數(shù)值插入荚藻,第一項為1屋灌,第二項為2... |
SET('Value1','Value2',......) | 1,2,3,4或8個字節(jié),取決于SET成員的數(shù)目(最多64個成員) | 可選擇多項应狱,選中的不同值由","分隔共郭,且可通過數(shù)值設置(第一項為1,第二項為2,第三項為8疾呻,第四項為16......選中前三項值為11) |
日期時間類型
數(shù)據(jù)類型 | 存儲范圍 | 存儲需求 | 備注 |
---|---|---|---|
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轉換為0000 |
二進制類型
JSON類型(ver5.7新增)
存儲引擎
查看MYSQL支持的存儲引擎
SHOW ENGINES
查看支持的存儲引擎信息
SHOW VARIABLES LIKE 'have%'
查看默認的存儲引擎
SHOW VARIABLES LIKE '%storage_engine%'
常用存儲引擎(注意各引擎優(yōu)缺點)
- InnoDB
- MyISAM
- Memory
約束條件
一個表只能有一個主鍵(PRIMATY KEY),但是能夠有多個唯一(UNIQUE KEY)除嘹,唯一的字段的值不允許出現(xiàn)重復,但是NULL值不算做重復的值
- PRIMARY KEY 主鍵岸蜗,PRIMARY可省略 (注意:PRIMARY KEY(a,b,c,...) 來定義一個主鍵時,由a,b,c,...所有的值才能確定一個主鍵尉咕,即一個表包括a,b,c...等字段,其中單獨的a,b,c字段相等璃岳,是可以的年缎,但不能全部相等,全部相等表明主鍵相等铃慷,不可插入单芜。)
- AUTO_INCREMENT 自增,需要和主鍵(PRIMARY KEY)搭配使用±绻瘢可在創(chuàng)建表時自定義從某個數(shù)開始,如CREATE TABLE tbl_name(id INT key AUTO_INCREMENT,......)AUTO_INCREMENT=數(shù)值,表示內(nèi)部自增字段從此數(shù)值開始洲鸠。(也可通過ALTER TABLE tbl_name AUTO_INCREMENT=數(shù)值修改)
- FOREIGN KEY 外鍵
- NOT NULL 非空
- UNIQUE KEY 唯一,KEY 可省略
- DEFAULT 默認值 插入數(shù)據(jù)時可使用DEFAULT
數(shù)據(jù)表的創(chuàng)建
CREATE TABLE [IF NOT EXISTS] tbl_name (
字段名稱 字段類型 [完整性約束條件] ##完整性約束條件順序為: [UNSIGNED | ZEROFILL] [NOT NULL] [DEFAULT 默認值] [[PRIMARY] KEY | UNIQUE [KEY]] AUTO_INCREMENT
......
)ENGINE = 引擎名稱 CHARSET = 編碼方式馋缅;
查看當前數(shù)據(jù)庫下的數(shù)據(jù)表
SHOW TABLES;
查看表結構及創(chuàng)建信息
DESC tbl_name
DESCRIBE tbl_name
SHOW COLUMNS FROM tbl_name
SHOW CREATE TABLE tbl_name
修改表結構
修改表名
ALTER TABLE tbl_name RENAME [TO|AS] new_name
或者
RENAME TABLE tbl_name TO new_name
添加字段
ALTER TABLE tbl_name ADD 字段名稱 字段類型 [完整性約束條件] [ FIRST | (AFTER 字段名稱)]
若需要添加多個字段扒腕,需要多個ADD操作,以“萤悴,”號分隔
刪除字段
ALTER TABLE tbl_name DROP 字段名稱
若需要刪除多個字段瘾腰,需要多個DROP操作,以“稚疹,”號分隔居灯。
注意:添加字段(ADD)與刪除字段(DROP)可以在同一個語句里面(ALTER TABLE tbl_name ADD .....,DROP .....)
修改字段
ALTER TABLE tbl_name MODIFY 字段名稱 字段類型 [完整性約束條件] [FIRST | (AFTER 字段名稱)]
修改字段名稱
ALTER TABLE tbl_name CHANGE 舊字段名稱 新字段名稱 字段類型 [完整性約束條件] [FIRST | (AFTER 字段名稱)]
添加默認值
ALTER TABLE tbl_name ALTER 字段名稱 SET DEFAULT 默認值
刪除默認值
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
修改表的存儲引擎
ALTER TABLE tbl_name ENGINE=存儲引擎名稱
修改表的自增長值
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,......)
同時插入多條記錄
INSERT [INTO] tbl_name [(字段名稱1,......)] VALUE | VALUES (值,......), (值,......),......
通過SET形式插入記錄
INSERT [INTO] tbl_name SET 字段名稱=值,......
將查詢結果插入到表中
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 條件 對分組結果進行二次篩選]
[ORDER BY {col_name | position } [ ASC | DESC], ... 排序]
[LIMIT 限制顯示條數(shù)]
]
查詢表達式
每個表達式表示想要的一列祭务,必須至少有一列内狗,多個列以","號分隔怪嫌; "*" 表示所有列,tbl_name.*表示命名表的所有列柳沙。查詢表達式可以使用 [AS] alias_name 為其賦予別名岩灭。
WHERE條件
查詢條件 | 符號 | 示例 |
---|---|---|
比較 | =,<,>,<=,>=,!=,<>,!>,!<,<=> | 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)忽略大小寫 |
匹配字符 | LIKE, NOT LIKE | SELECT * FROM table_name WHHERE id LIKE '_2%' |
是否為空 | IS NULL,IS NOT NULL | SELECT * FROM table_name WHHERE id IS NULL |
多個查詢條件 | AND,OR | SELECT * FROM table_name WHHERE user = 'admin' AND password = 'admin' |
模糊查詢
- %:代表0個,1個或者多個任意字符
- _ :代表1個字符
GROUP BY 查詢結果分組
默認情況下赂鲤,GROUP BY 查詢結果分組得到每組的第一個值
配合GROUP_CONCAT()得到分組詳情
配合聚合函數(shù)
- COUNT() NULL值不算一條記錄
- MAX()
- MIN()
- AVG()
- SUM()
配合WITH ROLLUP記錄上面所有記錄的總和
5.通過HAVING子句對分組結果進行二次篩選
配合GROUP BY 實現(xiàn)噪径,比如:
SELECT Region,COUNT(*),MAX(Population),MIN(Population),SUM(Population),AVG(Population) FROM country GROUP BY Region HAVING MAX(Population) > 1000000
通過ORDER BY 進行排序
默認升序排列(ASC),可省略。降序排列(DESC),可排序多個字段通過","號連接
SELECT * FROM country ORDER BY Population ASC,SurfaceArea ASC
SELECT * FROM country ORDER BY 3 ASC
SELECT * FROM country ORDER BY RAND() #隨機記錄
LIMIT限制查詢結果顯示條數(shù)
- LIMIT 顯示條數(shù)
- LIMIT 偏移量数初,顯示條數(shù)
(SELECT * FROM country LIMIT 2,1)
連接查詢
什么是鏈接查詢
連接查詢是將兩個或者兩個以上的表按照某個條件連接起來找爱,從中選取需要的數(shù)據(jù)。連接查詢是同時查詢兩個或者兩個以上的表時使用的泡孩。當不同的表中存在相同意義的字段時车摄,可通過該字段連接這幾個表。
內(nèi)連接查詢
- JOIN | CROSS JOIN | INNER JOIN
- 通過ON 連接條件
- 顯示兩個表中符合連接條件的記錄
注意:三張表或者三張表以上查詢可以直接加入更多的JOIN ...ON ...來連接多張表仑鸥,注意找準表之間的連接條件
例如:
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)
顯示右表的全部記錄及左表符合連接條件的記錄
外鍵
概覽
外鍵是表的一個特殊字段吮播,被參照的表是主表,外鍵所在字段的表為子表眼俊。設置外鍵的原則需要記住意狠,就是依賴于數(shù)據(jù)庫中已存在的表的主鍵。外鍵的作用是建立該表與其父表的關聯(lián)關系疮胖。父表中對記錄做操作時环戈,子表中與之對應的信息也應有相應的改變。
外鍵的作用是保持數(shù)據(jù)庫的一致性和完整性澎灸。
可以實現(xiàn)一對一或者一對多的關系
注意
- 父表和子表必須使用相同的存儲引擎谷市,而且禁止使用臨時表。
- 數(shù)據(jù)庫的存儲引擎只能為InnoDB击孩。
- 外鍵列和參照列必須具有相似的數(shù)據(jù)類型其中數(shù)字的長度或是否有符號位必須相同:而字符的長度則可以不同迫悠。
- 外鍵列和參照列必須創(chuàng)建索引。如果外鍵不存在索引的話巩梢,MYSQL將自動創(chuàng)建索引创泄。
外鍵約束的參照操作:
- CASCADE:從父表刪除或者更新且自動刪除或者更新子表中匹配的行。
- SET NULL:從父表刪除或者更新行括蝠,并設置子表的中的外鍵列為NULL鞠抑。如果使用該選項必須保證子表列中沒有指定NOT NULL。
- RESTRICT:拒絕對父表的更新或者刪除操作忌警。
- NOT ACTION: 標準SQL的關鍵字搁拙,在MYSQL中與RESTRICT相同
創(chuàng)建外鍵(先有主表)
CREATE TABLE [IF NOT EXISTS] tbl_name (
字段名稱 字段類型 [完整性約束條件] ##完整性約束條件順序為: [UNSIGNED | ZEROFILL] [NOT NULL] [DEFAULT 默認值] [[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 | 教學部 |
2 | 技術部 |
3 | 運營部 |
4 | 市場部 |
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的員工存在,這顯然是不合適的箕速,這時酪碘,可以使用外鍵來解決
創(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 語句 UNION SELECT 語句)
UNION ALL
(SELECT 語句 UNION SELECT 語句)
注意:UNION 和 UNION ALL 的區(qū)別是UNION 去掉相同記錄盐茎,UNION是簡單的合并到一起
子查詢
什么是子查詢
子查詢是將一個查詢語句嵌套在另一個查詢語句之中兴垦。內(nèi)層查詢語句的查詢結果,可以為外層查詢語句提供條件
引發(fā)子查詢的情況
- 使用 [NOT] IN 的子查詢
- 使用比較運算符的子查詢 = > < >= <= <> != <=>
- 使用 [NOT] EXISTS 的子查詢
- 使用 ANY | SOME 或者 ALL的子查詢
符號 | 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)
將查詢結果寫入到數(shù)據(jù)表
(INSERT [INTO] tbl_name [(col_name),......] SELECT ...)
創(chuàng)建數(shù)據(jù)表的同時將查詢結果寫入到數(shù)據(jù)表
CREATE TABLE [IF NOT EXISTS] tbl_name (
[(creat_defination)]
select_statement
正則表達式查詢
REGEXP '匹配方式'
(SELECT * FROM user WHERE REGEXP '^[1-9]$')
常用匹配方式
模式字符 | 含義 |
---|---|
^ | 匹配字符串開始 |
$ | 匹配字符串結尾 |
. | 匹配字符串任一字符字柠,包括換行和回車 |
[字符集和] | 匹配字符集合的任一字符 |
[^字符集和] | 匹配除了字符集合以外的任一字符 |
s1 | s2 | s3 | 匹配s1探越、s2、s3任一字符串 |
* | 代表0個窑业、1個或者多個其前的字符 |
+ | 代表1個或者多個其前的字符 |
字符串{N} | 字符串出現(xiàn)N次 |
字符串{M,N} | 字符串至少出現(xiàn)M次,最多N次 |
運算符
算數(shù)運算符
符號 | 表達式 | 作用 |
---|---|---|
+ | X1+X2 | 加法 |
- | X1-X2 | 減法 |
* | X1*X2 | 乘法 |
/ | X1 / X2 | 除法 |
DIV | X1 DIV X2 | 除法 |
% | X1 % X2 | 取余 |
MOD | X1 MOD X2 | 取余 |
比較運算符
符號 | 形式 | 作用 |
---|---|---|
= | 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,...) | 判斷是否在一個固定范圍內(nèi) |
LIKE 或 NOT LIKE | X1 LIKE 表達式 | 判斷是否匹配 |
REGEXP | REGEXP 正則表達式 | 判斷是否正則匹配 |
邏輯運算符
符號 | 形式 | 作用 |
---|---|---|
&& 或 AND | 與 | 并且 |
||或 OR | 或 | 或者 |
! 或 NOT | 非 | 取反 |
XOR | 異或 | 不同為真 |
運算符的優(yōu)先級
優(yōu)先級 | 運算符 | 優(yōu)先級 | 運算符 |
---|---|---|---|
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)先級
MYSQL中的函數(shù)
數(shù)學函數(shù)
名稱 | 描述 |
---|---|
CELL(x) | 進一取整 |
FLOOR(x) | 舍一取整 |
MOD(x,y) | 取余數(shù)(取模) |
POWER(x,y) | 冪運算 |
ROUND(x) | 四舍五入 |
TRUNCATE(x,y) | 數(shù)字截取 |
ABS() | 取絕對值 |
PI() | 圓周率 |
RAND()和RAND(X) | 返回0~1之間的隨機數(shù)钦幔,RANX(X) |
SIGN(X) | 返回X的符號,-1為負數(shù)常柄,0鲤氢,1為正數(shù) |
EXP(X) | 計算e的幾次方 |
字符串函數(shù)
名稱 | 描述 |
---|---|
CHAR_LENGTH(x) | 返回字符串字符數(shù) |
LENGTH(x) | 返回字符串長度 |
CONCAT(s1,s2,...) | 合并字符串 |
CONCAT_WS(x,s1,s2,...) | 以指定分隔符連接連接字符串 |
UPPER(x)/UCASE(x) | 將字符串轉化為大寫 |
LOWER(x)/LCASE(x) | 將字符串轉化為小寫 |
LEFT(S,N)/RIGHT(S,N) | 返回字符串的前/后N個字符 |
LPAD(S1,LEN,S2)/RPAD(s1,LEN,s2) | 將字符串s1用s2 填充到指定的LEN |
LTRIM(s)/RTRIM(s)/TRIM(s) | 去掉字符串空格 |
TRIM(s1 FROM s) | 去掉字符串S中結尾處和開始處的s1 |
REPEAT(S,N) | 重復字符串的指定次數(shù) |
SPACE(N) | 返回N個空格 |
REPLACE(s,s1,s2) | 從字符串s中搜索s1,替換s2 |
STRCMP(s1,s2) | 比較字符串瘫筐,>=<分別返回1排抬,0,-1 |
SUBSTRING(S,N,LEN) | 截取字符串 |
REVERSE(S) | 反轉字符串 |
ELT(N,S1,S2) | 返回指定位置的字符串 |
日期時間函數(shù)
名稱 | 描述 |
---|---|
CURDATE(),CURRENT_DATE() | 返回當前日期 |
CURTIME(),CURRENT_TIME() | 返回當前時間 |
NOW() | 返回當前日期時間 |
MONTH(D) | 返回日期中月份的值 |
MONTHNAME(D) | 返回日期中月份的名字 |
DAYNAME(D) | 返回日期中的星期幾 |
DAYOFWEEK(D) | 返回一周內(nèi)的第幾天庶喜,1代表星期日 |
WEEKDAY(D) | 返回日期是星期幾秸架,0代表星期一 |
WEEK(D) | 一年中的多少個星期 |
YEAR(D) | 返回日期中年份的值 |
HOUR(T) | 返回時間中的小時 |
MINUTE(T) | 返回時間中的分鐘數(shù) |
SECOND(T) | 返回時間中的秒數(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ù)開始蚂子,END表示函數(shù)結束。如果表達式expr1成立時缭黔,返回v1.如果表達式expr2成立時食茎,返回v2.以此類推,最后遇到ELSE時馏谨,返回vn的值别渔。 |
系統(tǒng)信息函數(shù)
名稱 | 描述 |
---|---|
VERSIOn() | 返回數(shù)據(jù)庫版本號 |
CONNECTION_ID() | 返回數(shù)據(jù)庫連接數(shù) |
DATABASE(),SCHEMA() | 返回當前數(shù)據(jù)庫名 |
USER(),SYSTEM_USER | 返回當前用戶 |
CURRENT_USER() | 返回當前用戶 |
CHARSET(s) | 返回字符串s 的字符集 |
COLLATION(s) | 返回字符串s 的檢驗字符集 |
LAST_INSERT_ID() | 返回最近生成的AUTO_INCREMENT的值 |
加密函數(shù)
名稱 | 描述 |
---|---|
MD5(str) | 信息摘要算法 |
PASSWORD(str) | 密碼算法(ver5.6過時) |
ENCODE(str,pwd_str) | 加密結果是一二進制數(shù),必須使用Blob字段保存 |
DECODE(crypt_str,pwd_str) | 對通過ENCODE加密之后的內(nèi)容解密 |
其他常用函數(shù)
名稱 | 描述 |
---|---|
FORMAT(x,n) | 將數(shù)字x進行格式化惧互,將x保留到小數(shù)點后n位 |
ASCII(x) | 返回字符串x的第一個字符的ASCII碼 |
BIN(x) | 返回x的二進制編碼 |
HEX(x) | 返回x的十六進制編碼 |
OCT(X) | 返回x的八進制編碼 |
CONV(x,f1,f2) | 返回將x從f1進制數(shù)變成f2進制數(shù) |
INET_ATON(ip) | 將ip地址轉換為數(shù)字 |
INET_NTOA(n) | 將數(shù)字轉化為IP地址 |
GET_LOCK(name,time) | 定義鎖 |
RELEASE_LOCK(name) | 釋放鎖 |
索引
什么是索引
- 索引由數(shù)據(jù)庫中一列或者多列組成哎媚,其作用是提高對表中數(shù)據(jù)的查詢速度
- 索引的優(yōu)點是可以提高檢索數(shù)據(jù)的速度
- 索引的缺點是創(chuàng)建和維護索引需要耗費時間
- 索引可以提高查詢速度,減慢寫入速度
索引分類
- 普通索引
- 唯一索引(UNIQUE)
- 全文索引(FULLTEXT)
- 單列索引
- 多列索引
- 空間索引(數(shù)據(jù)類型為GEOMETRY,存儲引擎為MyISAM)SPATIAL
創(chuàng)建索引
創(chuàng)建表的時候創(chuàng)建索引
CREATE TABLE [IF NOT EXISTS] tbl_name (
字段名稱 字段類型 [完整性約束條件] ##完整性約束條件順序為: [UNSIGNED | ZEROFILL] [NOT NULL] [DEFAULT 默認值] [[PRIMARY] KEY | UNIQUE [KEY]] AUTO_INCREMENT
......
[UNIQUE | FULLTEXT | SPATIAL ] INDEX|KEY [索引名稱](字段名稱[(長度)] [ASC|DESC])
)ENGINE = 引擎名稱 CHARSET = 編碼方式喊儡;
在已存在的表上創(chuàng)建索引
(CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名稱 ON 表名 {字段名稱[(長度)] [ASC|DESC] ) })
或者
(ALTER TABLE tbl_name ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名稱(字段名稱[(長度)] [ASC|DESC]) )
刪除索引
(DROP INDEX 索引名稱 ON tbl_name)
其他
注釋
- 以‘-- ’ 為前綴
- 以'#' 為前綴
- 字段注釋通過COMMENT '.....'進行注釋