MySql學(xué)習(xí)筆記

數(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)連接查詢

  1. JOIN | CROSS JOIN | INNER JOIN
  2. 通過(guò)ON 連接條件
  3. 顯示兩個(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)系

注意

  1. 父表和子表必須使用相同的存儲(chǔ)引擎,而且禁止使用臨時(shí)表。
  2. 數(shù)據(jù)庫(kù)的存儲(chǔ)引擎只能為InnoDB。
  3. 外鍵列和參照列必須具有相似的數(shù)據(jù)類型其中數(shù)字的長(zhǎng)度或是否有符號(hào)位必須相同:而字符的長(zhǎng)度則可以不同。
  4. 外鍵列和參照列必須創(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)行注釋
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容