天天看點

資料庫、資料表的基本操作及查詢資料

資料庫、資料表的基本操作及查詢資料

資料庫的基本操作

建立資料庫 CREATE DATABASE database_name

database_name為要建立的資料庫的名稱

删除資料庫 DROP DATABASE database_name

database_name為要删除的資料庫的名稱

資料庫存儲引擎

資料庫存儲引擎是資料庫底層軟體組成,資料庫管理系統(DBMS)使用資料引擎進行建立、查詢、更新和删除資料操作。

MySQL的核心就是存儲引擎。

存儲引擎比較

功能 MyISAM Memory InnoDB Archive
存儲限制 256TB RAM 64TB None
支援事務 No Yes
支援全文索引
支援數索引
支援哈希索引
支援資料緩存 N/A
支援外鍵

資料表的基本操作

建立資料表

建立表的文法形式

SQL CREATE TABLE<表名> ( 字段名1 資料類型 [列級别限制條件] [預設值], 字段名2 資料類型 [列級别限制條件] [預設值], …… [表級别限制條件] );

使用主鍵限制

主鍵限制要求主鍵列的資料唯一,并且不允許為空。他能唯一地辨別表中的一條記錄,可以結合外鍵來定義不同資料表之間的關系,并且可以加快資料庫查詢的速度。

單字段主鍵

在定義列的同時指定主鍵。 字段名 資料類型 PRIMARY KEY [預設值]

在定義完所有列之後指定主鍵。 [CONSTRAINT <限制名>] PRIMARY KEY [字段名]

多字段聯合主鍵

主鍵由多個字段聯合組合而成。 PRIMARY KEY [字段1、字段2...]

其位置放置在定義完所有的主鍵之後

使用外鍵限制

外鍵用來在兩個表的資料之間建立連結,它可以是一列或者多列。一個表可以有一個或多個外鍵。

[CONSTRAINT<外鍵名>] FOREIGN KEY 字段1[,字段2...] REFERENCES<主表名> 主鍵列1[,主鍵列2...]

使用非空限制

非空限制指字段的值不能為空。對于使用了非空限制的字段,如果使用者在添加資料時沒有指定值,資料庫系統會報錯。 字段名 資料類型 NOT NULL

使用唯一性限制

唯一性限制要求該列唯一,允許為空,但隻能出現一個空值。

唯一限制可以確定一列或者幾列不出現重複值。

在定義完列之後直接指定唯一限制。字段名 資料類型 UNIQUE

在定義完所有列之後指定唯一限制。[CONSTRAINT<限制名>] UNIQUE(<字段名>)

使用預設限制

預設限制指定某列的預設值。 字段名 資料類型 DEFAULT 預設值

設定表的屬性值自動增加

在資料庫應用中,可以通過為表的主鍵添加 AUTO_INCREMENT關鍵字來實作:當每新增加一條記錄,使該主鍵自動加一。一個表隻能有一個字段使用 AUTO_INCREMENT限制,且該字段必須為主鍵的一部分。其限制的字段可以是任何整數類型。

字段名 資料類型 AUTO_INCREMENT

檢視資料表結構

檢視表基本結構語句

DESCRIBE 表名; 或者簡寫為 DESC 表名;

檢視表詳細結構語句

SHOW CREATE TABLE <表名/G>;

如果不加 /G參數,顯示的結果可能非常混亂,加上參數 /G後,可使顯示結果更加直覺,易于檢視。

修改資料表

修改表名

ALTER TABLE <舊表名> RENAME [TO] <新表名>;

修改字段的資料類型

ALTER TABLE <表名> MODIFY <字段名> <資料類型>;

修改字段名

ALTER TABLE <表名> CHANGE <舊字段名> <新字段名> <新資料類型>;

添加字段

ALTER TABLE <表名> ADD <新字段名> <新資料類型> [限制條件] [FIRST|AFTER 已存在字段名];

删除字段

ALTER TABLE <表名> DROP <字段名>;

修改字段的排列位置

ALTER TABLE <表名> MODIFY <字段1> <資料類型> FIRST|AFTER <字段2>;

更改表的存儲引擎

ALTER TABLE <表名> ENGINE=<更改後的存儲引擎名>;

删除表的外鍵限制

ALTER TABLE <表名> DROP FOREIGN KEY <外鍵限制名>;

删除資料表

DROP TABLE [IF EXISTS] 表1,表2...表n;

查詢資料

基本查詢語句

SELECT

{*|<字段清單>}
[
    FROM <表1>,<表2>...
    [WHERE <表達式>]
    [GROUP BY <group by definition>]
    [HAVING <expression>[{<operator><expression>}...]]
    [ORDER BY <order by definition>]
    [LIMIT [offset,] <row count>]
]
           

SELECT [字段1,字段2,...,字段n]

FROM [表或視圖]

WHERE [查詢條件];

單表查詢

查詢所有字段

SELECT * FROM 表名;

查詢指定字段

SELECT 字段名1[,字段名2,...,字段名n] FROM 表名;

查詢指定記錄

在 SELECT語句中,通過 WHERE子句可以對資料進行過濾。

SELECT 字段名1[,字段名2,...,字段名n] FROM 表名 WHERE 查詢條件;

帶 IN關鍵字的查詢

IN操作符用來查詢滿足指定範圍内的條件的記錄,使用 IN操作符,将所有檢索條件用括号括起來,檢索條件之間用逗号隔開,隻要滿足條件範圍内的一個值即為比對項。

在 IN關鍵字前面加上 NOT即可使得查詢的結果正好相反。

帶 BETWEEN AND的範圍查詢

BETWEEN AND用來查詢某個範圍内的值,該操作符需要有兩個參數,即範圍的開始值和結束。如果字段值滿足指定的範圍查詢條件,則這些記錄被傳回。

同樣,在BETWEEN AND關鍵字前面加上 NOT即可使得查詢的結果正好相反。

帶 LIKE的字元比對查詢

LIKE關鍵字即是使用通配符來進行比對查找。通配符是一種在SQL的 WHERE條件子句中擁有特殊意思的字元,可以和 LIKE一起使用的通配符有 %和 _。

百分号通配符 %,比對任意長度的字元,甚至包括零字元。

下劃線通配符 _ ,一次隻能比對任意一個字元。

查詢空值

空值不同于0,也不同于空字元串。空值一般表示資料未知、不适用或将在以後添加資料。

在 SELECT語句中使用 IS NULL子句,可以查詢某字段内容為空記錄。

帶 AND的多條件查詢

AND主要用于 WHERE子句中,用來連結兩個甚至多個查詢條件,表示所有的條件都需要滿足才會傳回值。

帶 OR的多條件查詢

OR也主要用于 WHERE子句中,用來連結兩個甚至多個查詢條件,表示所有的條件僅需滿足其中之一項便會傳回值。

查詢結果不重複

在 SELECT語句中,使用 DISTINCT關鍵字來訓示MySQL消除重複的記錄。

SELECT DISTINCT 字段名 FROM 表名;

對查詢結果排序

用 ORDER BY語句來對查詢的結果進行排序。

在後面添加 DESC表示降序排序

在後面添加 ASC或預設,表示升序排序

分組查詢

在MySQL中使用 GROUP BY來對資料進行分組

[GROUP BY 字段] [HAVING <條件表達式>] [WITH ROLLUP]

HAVING 關鍵字用來過濾資料,因為 WHERE不能和 GROUP BY混用

WITH ROLLUP關鍵字是在所有查詢出的記錄之後增加一條記錄,該記錄計算查詢出的所有記錄的總和,即統計記錄數量。但是ROLLUP和能夠與 GROUP BY同時使用的ORDER BY不能同時使用。

使用 LIMIT限制查詢結果的數量

LIMIT [位置偏移量,] 行數

使用集合函數查詢

AVG() 傳回某列的平均值

COUNT() 傳回某列的行數

MAX() 傳回某列的最大值

MIN() 傳回某列的最小值

SUM() 傳回某列值的和

連接配接查詢

内連接配接查詢

在内連接配接查詢中,隻有滿足條件的記錄才能出現在結果關系中。兩個表之間的關系通過 (INNER) JOIN指定。 使用這種文法的時候,連接配接的條件使用 ON子句給出,而不是用 WHERE。

外連接配接查詢

LEFT JOIN左連接配接

傳回包括左表中的所有記錄和右表中連接配接字段相等的記錄。

RIGHT JOIN右連接配接

傳回包括右表中的所有記錄和左表中連接配接字段相等的記錄。

複合條件連接配接查詢

複合條件連接配接查詢是在連接配接查詢的過程中,通過添加過濾條件,限制查詢的結果,使查詢的結果更加準确。

子查詢

子查詢指一個查詢語句嵌套在另一個查詢語句内部的查詢。

帶 ANY、SOME關鍵字的子查詢

ANY和 SOME關鍵字是同義詞,表示滿足其中任一條件,它們允許建立一個表達式對子查詢的傳回值清單進行比較,隻要滿足内層子查詢中的任何一個比較條件,就傳回一個結果作為外層查詢的條件。

帶 ALL關鍵字的子查詢

使用 ALL時,需要同時滿足所有内層查詢的條件。

帶 EXISTS關鍵字的子查詢

EXISTS關鍵字後面的參數是一個任一的子查詢,系統對子查詢進行運算以判斷它是否傳回行,如果至少傳回一行,那麼 EXISTS的結果為 true,此時外層查詢語句将進行查詢;如果子查詢沒有傳回任何行,那麼 EXISTS的結果為 false,此時外層語句不進行查詢。

帶 IN關鍵字的子查詢

使用 IN關鍵字進行子查詢時,内層查詢語句僅僅傳回一個資料列,這個資料列裡的值将提供給外層查詢語句進行比較操作。當外層查詢語句内隻要有一個内層查詢語句傳回的資料列中的資料時,則判斷為滿足條件,外層查詢語句将進行查詢。

帶比較運算符的子查詢

子查詢可以使用如 '<','<=','=','>','>=','!='等比較運算符。

合并查詢結果

利用 UNION關鍵字,可以給出多條 SELECT語句,并将他們的結果組合成單個結果集。合并時,兩個表對應的列數和資料類型必須相同。各個 SELECT語句之間使用 UNION或 UNION ALL關鍵字分割。 UNION不适用關鍵字 ALL,執行的時候删除重複的記錄,所有傳回的行都是唯一的;使用關鍵字 ALL的作用時不删除重複行也不對結果進行自動排序。

為表和字段取别名

為表取别名

表名 [AS] 表别名

為字段取别名

列名 [AS] 列别名

使用正規表達式查詢

MYSQL中使用 REGEXP關鍵字指定正規表達式的字元比對模式。

正規表達式常用字元比對清單

選項 說明
^ 比對文本的開始字元
$ 比對文本的結束字元
. 比對任何單子符
* 比對零個或多個在他前面的字元
+ 比對前面的字元1次或多次
<字元串> 比對保護指定的字元串的文本
[字元集合] 比對字元集合中的任何一個字元
[^] 比對不在括号中的任何字元
字元串{n,} 比對前面的字元串至少n次
字元串{n,m} 比對前面的字元串至少n次,至多m次

原文位址

https://www.cnblogs.com/danjinglc/p/10637332.html