MySQL應知應會學習筆記

檢索數據

select

select 列名 from 表;正則表達式

SQL語句不區分大小寫算法

在處理SQL語句的時候,空格是忽略的。sql

LIMIT

限制結果 只會輸出若干條,例如:SELECT 列名 FROM 表 LIMIT 5;數據庫

返回很少於5行,有助於性能提高。安全

LIMIT 5,5; 返回從行5開始的5行,新版本的LIMIT 5 OFFSET 5;函數

排序檢索數據性能

ORDER BY

指定排序方向 默認升序ASC 若是要降序排列 DESCspa

通常狀況下排序不區分大小寫code

使用ORDER BY 和 LIMIT 找出一列的最大值或最小值排序

過濾數據

使用WHERE子句

SELECT 列 FROM 表 WHERE 條件

支持 = <> != < <= >= BETWEEN

BETWEEN 常與 AND 連用

IN和OR

IN 和 OR 有相同的功能

可是IN具備以下優勢:

  1. 當條件太長時,更加清楚直觀
  2. 計算的次序更容易管理
  3. 通常比OR執行的更快
  4. 能夠包含其餘SELECT語句 (主要)

使用通配符進行過濾

LIKE "%XXX%"

搜索是區分大小寫的

%能夠匹配0個、一個、多個字符,可是不能匹配到NULL

下劃線(_)通配符 只能匹配單個字符

正則表達式

REGEXP "正則表達式"

LIKE 和 REGEXP 的差異 LIKE 不能匹配到行內的內容 可是REGEXP能夠匹配到行內的內容

正則表達式匹配不區分大小寫

若是要區分大小寫 須要使用BINARY關鍵字 如

WHERE prod_name REGEXP BINARY 'Jey .000'
複製代碼

進行OR匹配 如1000|200|300

匹配幾個字符之一 [123] Ton 匹配1或2或3

匹配範圍[1-3]

匹配特殊字符 '.'

定位符 ^ 文本的開始 $文本的結束

建立計算字段

拼接 將值聯結到一塊兒構成單個值

能夠使用Concat()函數實現

RTrim()函數去掉值右邊的全部空格

相似的還有LTrim() Trim()

AS 使用別名

使用數據處理函數

文本處理函數:

Upper()將文本轉換爲大寫 對應的還有Lower()

Left() 返回串左邊的字符

Length() 返回串的長度

Locate() 找到串的一個子串

SubString() 返回子串的字符

Soundex() 返回串的SOUNDEX值

SOUNDEX是一個將任意文本字符串轉化爲描述其語音表示的字母數字模式的算法

數值處理函數:

Abs() 返回一個數的絕對值

Cos () 返回一個角度的餘弦

Exp 返回一個數的指數值

Mod 返回除操做的餘弦

Pi 返回圓周率

Rand() 返回一個隨機數

Sin() 返回一個角度的正弦

Sqrt() 返回一個數的平方根

Tan() 返回一個角度的正切

彙總數據

彙集函數

AVG() 返回某列的平均值 只能用於單列 忽略值爲NULL的行

COUNT() 返回某列的行數 COUNT(*) 對全部行的數目 進行統計 COUNT(column) 對指定列中具備值的行進行計數,忽略NULL值。

MAX() 返回某列的最大值

MAX() 對文本數據進行計算時 返回最後一行

MIN () 返回某列的最小值 MIN ()對文本數據進行計算時 返回最前面一行

SUM() 返回某列的值的和

DISTINCT()

分組數據

GROUP BY

HAVING

HAVING和WHERE的差異

WHERE在數據分組前進行過濾

HAVING在數據分組後進行過濾

SELECT -> FROM -> WHERE -> GROUP BY ->HAVING -> ORDER BY -> LIMIT

使用子查詢

SELECTFROMWHERE 條件 INSELECT 條件 FROMWHERE 另外一個條件)
複製代碼

建議格式化SQL

相關子查詢 涉及到外部查詢的子查詢

聯結表

Join

等值聯結

SELECT vend_name,prod_name,prod_price FROM vebdors INNER JOIN products ON vendirs.vend_id = products.vend_id
複製代碼

笛卡兒積 由沒有聯結條件的表關係返回的結果是笛卡兒積

自聯結

SELECT p1.prod_id,p1.prod_name FROM products AS p1,products AS p2

WHERE p1.vend_id = p2.vend_id AND p2.prod_id = 'DTNTR'
複製代碼

天然聯結

外部聯結

組合查詢

UNION

必須由兩條或者兩條以上的SELECT語句構成

每一個查詢必須包含相同的列表達式或聚合函數

UNION會從查詢結果中集中的自動去除了重複的行

全文本查詢

兩個最常使用的引擎爲MyISAM和InnoDB,

前者支持全文本搜索,然後者不支持。

插入數據

INSERT

INSERT INTO Customers VALUES(***)
複製代碼

簡單 可是並不安全 不建議使用

在表名後的括號裏明確地給出列名是一種繁瑣而安全的方式,建議使用

爲了提高總體的性能

若是數據檢索是重要的,就能夠在INSERT 和 INTO 之間加入LOW_PRIORITY

提升INSERT的性能 由於MySQL用單條INSERT語句處理多個插入比使用多條INSERT語句快

更新和刪除數據

UPDATE

由三部分組成

  1. 要更新的表
  2. 列名和他們的新值
  3. 肯定要更新的行的過濾條件

DELECT

刪除的是表的內容而不是表

若是要刪除全部行 可以使用TRUNCATE TABLE 語句

建立和操做表

建立表

CREATE TABLE 表名 IF NOT EXISTS
複製代碼

引擎類型

InnoDB 是一個可靠的事務處理引擎,不支持全文本搜索

MEMORY 在功能上等同於MyISAM 可是數據存儲在內存(不是磁盤),速度很快

MyISAM 是一個性能極高的引擎,支持全文本搜索,但不支持事務處理

刪除表

DROP TABLE
複製代碼

重命名錶

RENAME TABLE 
複製代碼

使用視圖

視圖僅僅是用於查看存儲在別處的數據的一種設施,視圖自己不包含數據

CREATE VIEW 語句來建立
複製代碼

使用存儲過程

所謂的存儲過程 就是爲之後的使用而保存的一條或者多條MySQL語句的集合

主要有三個好處, 簡單 安全 高性能

建立存儲過程

CREATE PROCEDURE productpricing()

BEGIN

	SELECT  ...

FROM

END;
複製代碼

使用存儲過程

CALL productpricing()
複製代碼

刪除相似表的刪除

使用遊標

只能用於存儲過程

使用遊標的步驟

  1. 在使用以前,必須聲明或者定義它
  2. 一旦聲明,必須打開遊標以供使用
  3. 對填有數據的遊標 根據須要取出各行
  4. 在結束遊標的使用時,必須關閉遊標
CREATE PROCEDURE processorders()

BEGIN

DECLARE ordernumbers CURSOR 

FOR 

SELECT order_num FROM orders;

END;
複製代碼

打開遊標 OPEN

關閉遊標 CLOSE

觸發器

觸發器是MySQL響應一下任意語句而自動執行的一條MySQL語句

支持 DELETE INSERT UPDATE

使用CREATE TRIGGER 建立

例如

GREATE TRIGGER new AFTER INSERT ON products FOR EACH ROW SELECT 「***」
複製代碼

事務處理

事務:指一組SQL語句

回退:指撤銷指定SQL語句的過程

提交:指將未存儲的SQL語句結果寫入數據庫表

保留點:指事務處理中設置的臨時佔位符

開始事務

START TRANSACTION

...

ROLLBACK
複製代碼
相關文章
相關標籤/搜索