數據庫相關知識總結

E1-數據庫基礎

1.數據庫範式

一、表中每項獨立唯一、

二、主鍵被依賴

三、非主鍵依賴主鍵,無法傳遞依賴

2.SQL語句

SQL (結構化查詢語言)是用於執行查詢,也包含用於更新、插入和刪除記錄的語法。

數據操作語言 (DML) :查詢和更新指令

  • SELECT - 獲取數據
  • UPDATE - 更新數據
  • DELETE - 刪除數據
  • INSERT INTO - 插入數據

數據定義語言 (DDL) :創建或刪除表格,定義索引(鍵),規定表間鏈接,施加表間的約束

DDL 語句:

  • CREATE DATABASE - 創建新數據庫
  • ALTER DATABASE - 修改數據庫
  • CREATE TABLE - 創建新表
  • ALTER TABLE - 變更(改變)數據庫表
  • DROP TABLE - 刪除表
  • CREATE INDEX - 創建索引(搜索鍵)
  • DROP INDEX - 刪除索引

E2-MySQL

1.存儲引擎

InnodB和MyISAM

​ 最大缺點:崩潰後無法安全恢復

特點和使用場景

​ 行級鎖:MyISAM 不支持

​ 事務:MyISAM 不支持

​ 外鍵:MyISAM 不支持

2.索引

索引數據結構

哈希:絕大多數需求爲單條記錄查詢時的選擇,查詢性能最快

B樹:B+Tree,MyISAM和InnoDB實現方式是不同的

MyISAM

  • 葉節點data域存放數據地址
  • 非聚集索引(輔助索引)
    • ①B+樹查找Key取出value(其 data 域值)
    • ②按地址讀取相應數據記錄

InnoDB

  • 葉節點data域存放完整數據記錄
  • 聚集索引(主索引)
    • 定義:索引排序方式和表中數據記錄排序方式一致

3.事務

① 四大特性-ACID

  • 原子性A
    • 事務是最小的執行單位,不允許分割
  • 一致性C
    • 數據保持一致
  • 隔離性I
    • 不被其他事務干擾
  • 持久性D
    • 數據庫中數據的改變是持久的

② 四大問題-髒丟不幻

  • 髒讀
    • 修改了數據卻未提交,其他事務訪問了“髒數據”
  • 丟失修改
    • 事務T1先訪問數據,事務T2覆蓋了T1對於數據的修改
  • 不可重複讀
    • T1事務多次讀同一數據,中間被T2事務修改,導致多次讀取數據不一致
  • 幻讀
    • T1事務讀取幾行數據,另個併發事務T2插入或刪除數據。T1發現不存在的記錄

③ 四大隔離-提交重序

  • 1.讀未提交

    • 最低隔離級別
    • 允許讀取尚未提交的數據變更
  • 2.讀已提交(sql/oracle默認)

    • 允許讀取併發事務已提交數據
    • 允許不可能重複讀和幻讀
  • 3.可重複讀 (mysql默認)

    • 對同一字段的多次讀取結果一致
    • 防止髒讀和不可重複度
  • 4.序列化

    • 最高隔離級別,完全服從ACID

    • 事務一次執行,不能干擾

    • 防止髒讀、不可重複讀、幻讀

4.鎖機制

MVCC:多版併發控制系統。行級鎖變種,它能夠避免更多情況下的加鎖操作。

MVCC只在read committed和repeatable read兩個隔離級別下工作

鎖的類型

  1. 共享鎖
    • 加鎖條件:讀取數據
    • 解鎖條件:讀取完畢
    • 兼容性:放置了共享鎖的資源,能再放置共享鎖和獨佔鎖
    • 併發性:多事務訪問相同數據,多鎖同時讀
  2. 獨佔鎖(排它鎖)
    • 加鎖條件:修改數據且無其他鎖存在
    • 解鎖條件:事務結束
    • 兼容性:不與其他鎖兼容
  3. 更新鎖
    • 加鎖條件:update操作
    • 加鎖更新步驟:
      1. 獲得共享鎖,讀數據
      2. 升級獨佔鎖,更新數據
    • 兼容性:與共享鎖兼容,同一資源最多一把更新鎖,能有效避免死鎖產生,我們知道,共享鎖的兼容性是最好的,加入一個數據同時被兩把共享鎖鎖住,如果這時兩條線程併發修改數據,由於共享鎖的非排他性,可能會同時出現兩把獨佔鎖鎖住數據,這樣就會產生死鎖了,而更新鎖排斥獨佔鎖,當出現更新操作時,只能將更新鎖本身升級爲獨佔鎖,而有效避免死鎖產生。
    • 併發性:性能一般,多事務訪問,單事務修改。

鎖的粒度

  • 表級鎖:粒度最大
    • 優點:簡單、消耗資源小、加速快
    • 缺點:衝突多
  • 行級鎖(默認):粒度最小
    • 優點:併發高
    • 缺點:加鎖慢,易死鎖

兩種引擎

**MyISAM **:表級鎖

InnoDB:行級鎖

意向鎖:事務需要獲取資源鎖定時,若遇到需要的資源已被排他鎖佔用,該事務可以在需要鎖定行的表上面添加意向鎖,包括意向共享鎖(IS)和意向排他鎖(IX)

InnoDB的鎖定模式實際上可以分爲四種共享鎖(S)排他鎖(X)意向共享鎖(IS)和意向排他鎖(IX)

鎖兼容模式

鎖算法

  • Record lock
    • 單個行記錄上的鎖
  • Gap lock
    • 鎖定一個範圍,不包括記錄本身(間歇鎖)
  • Next-key lock:
    • 鎖定一個範圍,包含記錄本身(record+gap)

5.DB執行的順序

  • ① 連接器
    • 身份及權限認證
  • ② 查詢緩存
  • ③ 分析器
    • 詞法分析:提取關鍵詞(要幹嘛)
    • 語法分析:是否正確(對不對)
  • ④ 優化器
    • 選擇最優的方案
  • ⑤ 執行器
    • 執行語句,然後從存儲引擎返回數據

6.大表優化

① 限定數據範圍

​ 查詢語句進行數據範圍限制

② 讀寫分離

​ 數據庫拆分方案:主庫寫,從庫讀

③ 垂直分區

​ 根據數據表相關性拆分

舉例:用戶的登錄信息和用戶的基本信息,獨立拆分。列比較多的表拆分爲多張表。

  • 優點:
    • 列數據變小,查詢時減少讀取的Block數和I/O,
    • 簡化表的結構,易於維護
  • 缺點:
    • 主鍵冗餘
    • 事務複雜

④ 水平分區

​ 數據表結構不變,數據分散實現分佈式

7.SQL執行慢

  • 偶爾慢
    • 刷新髒頁
    • 拿不到鎖
  • 一直慢
    • 沒用到索引:無索引/索引失效
    • 選錯索引:索引的區分度

E3-Redis

簡介

  • 存儲在內存,也被用於緩存,也常用來做分佈式鎖

  • 多種數據類型來支持不同場景, 支持事務 、持久化多種集羣方案

1.爲什麼用Redis

高性能:操作緩存=操作內存

高併發:直接操作緩存可承受的併發請求大

2.爲什麼不用map

Map/guava:本地緩存。輕量快速,多實例下不一致

Redis:分佈式緩存。體系複雜,但具備一致性

3.Redis 和 Memcached 區別

參考鏈接

  • 應用場景:
    • Redis支持更多數據類型:String,hash,list,set,zset
    • memcache支持簡單數據類型:String
  • 持久化:
    • Redis支持數據持久化(內存中數據存在磁盤中,重啓時重新加載即可)
    • Memecache不支持持久化(數據全部存在內存中)
  • 集羣模式:
    • redis 原生支持集羣模式的(分區技術)
    • memcached沒有原生的集羣模式,需要依靠客戶端來實現往集羣中分片寫入數據
  • 併發性:
    • Redis使用單線程的多路 IO 複用模型,管道技術(提高性能)
      • 客戶端向服務端發送一個查詢請求,並監聽Socket返回,通常是以阻塞模式,等待服務端響應。
      • 服務端處理命令,並將結果返回給客戶端。
    • Memcached是多線程,非阻塞IO複用的網絡模型

4.Redis常見數據結構

① String

String數據結構是簡單的key-value類型,value其實不僅可以是String,也可以是數字。

常用命令: set,get,decr,incr,mget

舉例:常規計數,微博數,粉絲數等。

② Hash

hash 是一個 string 類型的 field 和 value 的映射表

常用命令: hget,hset,hgetall 等。

舉例:用於存儲對象(用戶信息,商品信息)

③ List

雙線鏈表,支持反向查找和遍歷(方便操作,但額外內存開銷大)

常用命令: lpush,rpush,lpop,rpop,lrange等

舉例:微博關注列表,粉絲列表,消息列表

注意:可通過 lrange 命令,就是從某個元素開始讀取多少個元素,可以基於 list 實現分頁查詢,這個很棒的一個功能,基於 redis 實現簡單的高性能分頁,可以做類似微博那種下拉不斷分頁的東西(一頁一頁的往下走),性能高。

④ Set

列表功能與list類似,自動去重。可輕易實現交集、並集、差集的操作

常用命令: sadd,spop,smembers,sunion 等

舉例:微博中如共同關注、共同粉絲等功能。(將用戶關注和粉絲分別存在兩個set中,並集查找即可)

⑤ Sorted Set

增加一個權重參數score,使得集合中元素按score有序排列。

常用命令: zadd,zrange,zrem,zcard等

舉例: 直播系統中的實時排行信息,包含直播間在線用戶列表,各種禮物排行榜,彈幕消息等信息

5.持久化機制

① 快照RDB(默認)

存儲在內存裏面的數據的副本,可以備份或複製其他服務站(Redis主從結構,提高Redis性能)

② 只追加文件AOF

實時寫入硬盤,實時性更好

6.緩存雪崩、穿透

**1.緩存雪崩:**緩存同時大面積失效,後續請求落到DB,造成短時間內承受大量請求而崩掉

解決辦法:

  • 事前:儘量保證集羣高可用性,發現機器宕機儘快補上。選擇合適內存淘汰策略。
  • 事中:本地ehcache緩存 + hystrix限流&降級,避免MySQL崩掉
  • 事後:利用 redis 持久化機制保存的數據儘快恢復緩存

2.緩存穿透:黑客故意請求緩存中不存在的數據,導致所有請求落到DB,造成短時間內大量請求而崩掉

解決辦法:

  • 布隆過濾器:將數據哈希到bitmap中,不存在數據會被bitmap攔截,減輕查詢壓力。
  • 簡單方法(常用):若查詢返回數據爲空(數據不存在或系統故障),空結果仍進緩存但過期時間大大縮短。

7.Redis併發競爭key

問題:多個系統同時對一個 key 操作,最後執行順序和期望順序不同導致結果出錯

推薦方案:分佈式鎖(zookeeper 和 redis 都可以實現分佈式鎖)

​ 基於zookeeper臨時有序節點。大致思想爲:每個客戶端對某方法加鎖時,在zookeeper上與該方法對應的指定節點的目錄下,生成唯一的瞬時有序節點。

​ 是否獲取鎖只需判斷有序節點中序號最小的一個。

​ 釋放鎖只需將這個瞬時節點刪除即可。爲避免服務宕機導致的鎖無法釋放而產生死鎖,完成業務後刪除對應的子節點釋放鎖(參考資料:分佈式鎖解決併發的三種實現方式

8.緩存和數據庫雙寫數據一致問題

問題:使用緩存,會導致到緩存與數據庫雙寫問題,進而導致數據一致性問題

​ 解決:串行化

9.內存淘汰機制

redis 提供 6種數據淘汰策略:

  1. volatile-lru:從已設置過期時間的數據集(server.db[i].expires)中挑選最近最少使用的數據淘汰
  2. volatile-ttl:從已設置過期時間的數據集(server.db[i].expires)中挑選將要過期的數據淘汰
  3. volatile-random:從已設置過期時間的數據集(server.db[i].expires)中任意選擇數據淘汰
  4. allkeys-lru:當內存不足以容納新寫入數據時,在鍵空間中,移除最近最少使用的key(這個是最常用的)
  5. allkeys-random:從數據集(server.db[i].dict)中任意選擇數據淘汰
  6. no-eviction:禁止驅逐數據,也就是說當內存不足以容納新寫入數據時,新寫入操作會報錯。這個應該沒人使用吧!

附1:SQL語句

參考資料
SQL基礎知識

SQL高級知識

SQL函數

SQL總結

注意:SQL大小寫不敏感

SQL基礎知識

SQL (結構化查詢語言)是用於執行查詢,也包含用於更新、插入和刪除記錄的語法。

DML

數據操作語言 (DML) :查詢和更新指令

  • SELECT - 獲取數據
  • UPDATE - 更新數據
  • DELETE - 刪除數據
  • INSERT INTO - 插入數據

DDL

數據定義語言 (DDL):創建或刪除表格,定義索引(鍵),規定表間鏈接,施加表間的約束

  • CREATE DATABASE - 創建新數據庫
  • ALTER DATABASE - 修改數據庫
  • CREATE TABLE - 創建新表
  • ALTER TABLE - 變更(改變)數據庫表
  • DROP TABLE - 刪除表
  • CREATE INDEX - 創建索引(搜索鍵)
  • DROP INDEX - 刪除索引

1.Select

SELECT 列 From表

注:**DISTINCT** 沒有重複值  
SELECT DISTINCTFROM

2.Where

SELECTFROMWHERE 列 運算符 值 

注:字符單引號,數字無引號

操作符 描述
~~~~ 常規(大小等)
<> 不等於
BETWEEN 在某個範圍內
LIKE 搜索某種模式

3.And & OR

兩條件都成立,AND顯示一條記錄

只要一個成立,OR顯示一條記錄

SELECT * FROMWHERE 條件1 AND 條件2 

4.Order by

指定結果排序,默認升序

SELECT1,2 FROMORDER BY1 Desc //按照表1的順序降序(逆轉)排列

5.Insert into

INSERT INTOVALUES (1,2,....) INSERT INTO(1,2,...) VALUES (1,2,....) 

6.Update

UPDATESET= vaue  WHERE= 某值 //注:先給修改值,後找位置

7.Delete

DELETE FROMWHERE=

SQL高級知識

1.Top

定義:前多少個數據

SELECT TOP 2 * FROM 表 TOP PERCENT:前百分比

2.Like

定義:搜索列中的指定模式

SELECT * FROM 表 WHERE 列 LIKE ‘%N%’ SELECT * FROM 表 WHERE 列 Not LIKE ‘%N%’

3.通配符

% _ [charlist] [!charlist]

通配符 描述 例子
% N個字符
_ 1個字符
[charlist] 包含單一字符 LIKE ‘[ALN]%’
[!charlist] 不包含單一字符

4.In

定義: WHERE 子句中規定多個值

SELECT * FROMWHEREIN ('val1','cal2') 

5.Between

定義: 選取介於兩個值之間的數據範圍

SELECT * FROMWHEREBETWEEN 'val1' AND 'cal2' // 注:不同DB對於邊界包含定義不同

6.Alias(as)

定義: 定義別名

SELECT1 AS  別名1, 列2  AS 別名2 FROM
主鍵和外鍵

​ 主鍵:表中唯一標識的一列,保證數據完整性,只有一個

​ 外鍵:用於與另一張表的關聯,保持數據一致性,可以多個

  • 索引:提高查詢排序效率,可以有多個唯一索引

    • 聚集索引,索引頁裏放數據
    • 非聚集索引,索引頁裏放索引(指向數據頁)

    補充知識:稠密索引 vs 稀疏索引

7.Join

定義: 根據多表中的列之間的關係查詢數據

SELECTFROM1 Inner Join2E 列 BETWEEN 'val1' AND 'cal2'

注:不同DB對於邊界包含定義不同

Persons表

img

Orders表

img

img

img

img

img

8.Union

合併兩個或多個 SELECT 語句的結果集

SELECT2 FROM1 UNION SELECT2 FROM2 

9.Select into

將原有表的列數據插入新表

作用:製作表的備份

SELECTINTO 新表 FROM 已有表 
//從 "Persons" 表中提取居住在 "Beijing" 的人的信息,創建了一個帶有兩個列的名爲 "Persons_backup" 的表 SELECT LastName,Firstname INTO Persons_backup FROM Persons WHERE City='Beijing' 

10.Drop

刪除:索引、表和數據庫

 DROP TABLE 表名稱  DROP DATABASE 數據庫名稱  TRUNCATE TABLE 表名稱 //清空表中數據 

11.Alter

在已有的表中添加、修改或刪除列

添加:ALTER TABLEADD 列 數據類型
刪除:ALTER TABLEDROP COLUMN 列  (某些DB不允許) 
修改:ALTER TABLEALTER COLUMN 列 數據類型 

12.Auto-Increment

新記錄插入表中時生成一個唯一的數字

13.Constraints 約束

約束加入表的數據類型(Create建表時、Alter改表時)

常見約束:

  • NOT NULL 不爲空
  • UNIQUE 唯一
  • PRIMARY KEY 主鍵
  • FOREIGN KEY 外鍵
  • CHECK 值範圍
  • DEFAULT 默認值

CREATE TABLE Persons( Id int UNIQE Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), City varchar(255) DEFAULT ‘Sandnes’ CHECK (Id_P>0) )

CHEAK

修改過程

// 匿名 ALTER TABLE 表 ADD CHECK (列 >0) // 命名 ALTER TABLE Persons ADD CONSTRAINT 約束名 CHECK ( 列 >0 AND City=‘Sandnes’)

刪除

ALTER TABLEDROP CHECK 約束名 

Default

修改過程

ALTER TABLEALTERSET DEFAULT 'value'

刪除過程

ALTER TABLEALTER City DROP DEFAULT

14.Create Index

創建索引

(未完待續)

http://www.w3school.com.cn/sql/sql_create_index.asp

15.View

可視化表。內容:創建、更新和刪除視圖

1.什麼是試圖

基於 SQL 語句結果集的可視化的表,包含行列。

可添加 SQL 函數、WHERE 以及 JOIN 語句,以及提交數據

2.基本用法

a.創建視圖 CREATE VIEW [視圖名] AS SELECT 列(s) FROM 表 WHERE 條件 //查詢視圖 SELECT * FROM [視圖名] b.更新視圖 c.撤銷視圖 SQL DROP VIEW Syntax DROP VIEW [視圖名]

16.Date

包括一些基本操作函數 http://www.w3school.com.cn/sql/sql_dates.asp

MySQL 使用下列數據類型在數據庫中存儲日期或日期/時間值:

  • DATE - 格式 YYYY-MM-DD
  • DATETIME - 格式: YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
  • YEAR - 格式 YYYY 或 YY

17.數據類型

Text 類型
數據類型 描述
CHAR(size) 保存固定長度字符串(可包含字母、數字以及特殊字符)括號中指定字符串的長度,最多 255 個字符
VARCHAR(size) 保存可變長度的字符串(可包含字母、數字以及特殊字符)註釋:如果值的長度大於 255,則被轉換爲 TEXT 類型。
TINYTEXT 存放最大長度爲 255 個字符的字符串。
TEXT 存放最大長度爲 65,535 個字符的字符串。
BLOB 用於 BLOBs (Binary Large OBjects)。存放最多 65,535 字節的數據。
MEDIUMTEXT 存放最大長度爲 16,777,215 個字符的字符串。
MEDIUMBLOB 用於 BLOBs (Binary Large OBjects)。存放最多 16,777,215 字節的數據。
LONGTEXT 存放最大長度爲 4,294,967,295 個字符的字符串。
LONGBLOB 用於 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字節的數據。
ENUM(x,y,z,etc.) 允許你輸入可能值的列表。可以在 ENUM 列表中列出最大 65535 個值。如果列表中不存在插入的值,則插入空值。註釋:這些值是按照你輸入的順序存儲的。可以按照此格式輸入可能的值:ENUM(‘X’,‘Y’,‘Z’)
SET 與 ENUM 類似,SET 最多隻能包含 64 個列表項,不過 SET 可存儲一個以上的值。
Number類型
數據類型 描述
TINYINT(size) -128 到 127 常規。0 到 255 無符號*。在括號中規定最大位數。
SMALLINT(size) -32768 到 32767 常規。0 到 65535 無符號*。在括號中規定最大位數。
MEDIUMINT(size) -8388608 到 8388607 普通。0 to 16777215 無符號*。在括號中規定最大位數。
INT(size) -2147483648 到 2147483647 常規。0 到 4294967295 無符號*。在括號中規定最大位數。
BIGINT(size) -9223372036854775808 到 9223372036854775807 常規。0 到 18446744073709551615 無符號*。在括號中規定最大位數。
FLOAT(size,d) 帶有浮動小數點的小數字。在括號中規定最大位數。在 d 參數中規定小數點右側的最大位數。
DOUBLE(size,d) 帶有浮動小數點的大數字。在括號中規定最大位數。在 d 參數中規定小數點右側的最大位數。
DECIMAL(size,d) 作爲字符串存儲的 DOUBLE 類型,允許固定的小數點。

* 這些整數類型擁有額外的選項 UNSIGNED。通常,整數可以是負數或正數。如果添加 UNSIGNED 屬性,那麼範圍將從 0 開始,而不是某個負數。

Date 類型
數據類型 描述
DATE() 日期。格式:YYYY-MM-DD註釋:支持的範圍是從 ‘1000-01-01’ 到 ‘9999-12-31’
DATETIME() *日期和時間的組合。格式:YYYY-MM-DD HH:MM:SS註釋:支持的範圍是從 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’
TIMESTAMP() *時間戳。TIMESTAMP 值使用 Unix 紀元(‘1970-01-01 00:00:00’ UTC) 至今的描述來存儲。格式:YYYY-MM-DD HH:MM:SS註釋:支持的範圍是從 ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-09 03:14:07’ UTC
TIME() 時間。格式:HH:MM:SS 註釋:支持的範圍是從 ‘-838:59:59’ 到 ‘838:59:59’
YEAR() 2 位或 4 位格式的年。註釋:4 位格式所允許的值:1901 到 2155。2 位格式所允許的值:70 到 69,表示從 1970 到 2069。

SQL函數

語法

SELECT function(列) FROM 表

類型

  • Aggregate 合計函數----面向一系列的值,並返回一個單一的值
  • Scalar 數量函數—某個單一的值,並返回基於輸入值的一個單一的值

在 SQL Server 中的合計函數

函數 描述
AVG(column) 返回某列的平均值
COUNT(column) 函數返回匹配指定條件的行數(數目)
COUNT(*) 返回被選行數
COUNT(DISTINCT column) 返回相異結果的數目
FIRST(column) 返回在指定的域中第一個記錄的值(SQLServer2000 不支持)
LAST(column) 返回在指定的域中最後一個記錄的值(SQLServer2000 不支持)
MAX(column) 返回某列的最高值
MIN(column) 返回某列的最低值
SUM(column) 返回某列的總和

MS Access 中的 Scalar 函數

函數 描述
UCASE(列名) 將某個域轉換爲大寫
LCASE(列名) 將某個域轉換爲小寫
MID(列名,start[,end]) 從某個文本域提取字符
LEN(列) 返回某個文本域的長度
ROUND(列名,小數位數) 對某個數值域進行指定小數位數的四捨五入
MOD(x,y) 返回除法操作的餘數
NOW() 返回當前的系統日期
FORMAT(列名,規定格式) 改變某個域的顯示方式

1.Group by

定義: 根據一個或多個列對結果集進行分組

SELECT 列名, 函數名(列名) FROM 表名 
	WHERE 條件 
	GROUP BY 列名1,列名2 

2.Having

WHERE 關鍵字無法與合計函數一起使用

SELECT 列名, 函數名(列名) FROM 表名 
	WHERE 條件 GROUP BY 列名1,列名2 
	HAVING 函數名(列名) operator value 
SELECT Customer,SUM(OrderPrice) FROM Orders 
	WHERE Customer='Bush' OR Customer='Adams' GROUP BY Customer 
	HAVING SUM(OrderPrice)>1500 

SQL快速參考

語句 語法
AND / OR SELECT column_name(s)FROM table_nameWHERE conditionAND|OR condition
ALTER TABLE (add column) ALTER TABLE table_name ADD column_name datatype
ALTER TABLE (drop column) ALTER TABLE table_name DROP COLUMN column_name
AS (alias for column) SELECT column_name AS column_aliasFROM table_name
AS (alias for table) SELECT column_nameFROM table_name AS table_alias
BETWEEN SELECT column_name(s)FROM table_nameWHERE column_nameBETWEEN value1 AND value2
CREATE DATABASE CREATE DATABASE database_name
CREATE INDEX CREATE INDEX index_nameON table_name (column_name)
CREATE TABLE CREATE TABLE table_name(column_name1 data_type,column_name2 data_type,…)
CREATE UNIQUE INDEX CREATE UNIQUE INDEX index_nameON table_name (column_name)
CREATE VIEW CREATE VIEW view_name ASSELECT column_name(s)FROM table_nameWHERE condition
DELETE FROM DELETE FROM table_name (Note: Deletes the entire table!!)orDELETE FROM table_nameWHERE condition
DROP DATABASE DROP DATABASE database_name
DROP INDEX DROP INDEX table_name.index_name
DROP TABLE DROP TABLE table_name
GROUP BY SELECT column_name1,SUM(column_name2)FROM table_nameGROUP BY column_name1
HAVING SELECT column_name1,SUM(column_name2)FROM table_nameGROUP BY column_name1HAVING SUM(column_name2) condition value
IN SELECT column_name(s)FROM table_nameWHERE column_nameIN (value1,value2,…)
INSERT INTO INSERT INTO table_nameVALUES (value1, value2,…)orINSERT INTO table_name(column_name1, column_name2,…)VALUES (value1, value2,…)
LIKE SELECT column_name(s)FROM table_nameWHERE column_nameLIKE pattern
ORDER BY SELECT column_name(s)FROM table_nameORDER BY column_name [ASC|DESC]
SELECT SELECT column_name(s)FROM table_name
SELECT * SELECT *FROM table_name
SELECT DISTINCT SELECT DISTINCT column_name(s)FROM table_name
SELECT INTO(used to create backup copies of tables) SELECT INTO new_table_nameFROM original_table_nameor*SELECT column_name(s)INTO new_table_nameFROM original_table_name
TRUNCATE TABLE(deletes only the data inside the table) TRUNCATE TABLE table_name
UPDATE UPDATE table_nameSET column_name=new_value[, column_name=new_value]WHERE column_name=some_value
WHERE SELECT column_name(s)FROM table_nameWHERE condition

附2:常見問題

img

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章