MySQL使用手冊

MySQL語法總結

MySQL結構:

數據庫中存放數據都是依託與一張張的數據表存在的,我們通過數據庫可以高效的利用數據;而我們對數據的操作就是對數據庫中的表的操作。

SQL數據類型:

字符型:<varchar> VS <char>
文本型:<text>
數值型:<int> VS <smallint> VS <tinyint>
浮點型:<float> VS <decinal>
邏輯型:<bit>
日期型:<datetime> VS <smalldatetime>

MySQL基本操作(格式):

登陸

mysql -u root -p
默認沒有密碼,直接回車,也可以自行修改密碼。
操作數據庫中的表單時,一定要先USE <數據庫名>來進入該數據庫

創建

  • 創建數據庫:CREATE databases <數據庫名>;
  • 創建表單:CREATE table <表名>;

查詢

單表查詢

SELECT <字段名一,字段名二,...>
FROM <表名>
WHERE <查詢條件>;
  • 查詢所有數據庫:SHOW DATABASE;
  • 選中某個數據庫進行操作:USE <數據庫名>
  • 查詢某數據庫中所有的表:SHOW TABLES;
  • 查詢表中某字段的數據:SELECT <字段名一,字段名二....> FROM <表名>;
  • 查詢某記錄:SELECT <字段一,字段二...> FROM <表名> WHERE <查詢條件>;
    • (多個)查詢條件:<字段名> =值 && <字段名> =值
  • 查詢表中的所有記錄:SELECT * FROM <表名>;
  • 查詢表結構字段名(不包含外鍵):DESC <表名>;
  • 查詢表創建時(修改後)的SQL語句:SHOW CREATE TABLE <表名>;可以用來查看外鍵信息

連接查詢:可以使用表的別名(eg:table1 A)
- 內連接-等值連接:指使用等號”=”比較兩個表的連接列的值,相當於兩表執行笛卡爾後,取兩表連結列值相等的記錄-SELECT <表名A.字段名(*)>,<表名B.字段名(*)> FROM <表名A> INNER JOIN <表名B> ON <表名A.字段名> = <表名B.字段名>;
- 內連接-非等值連接:SELECT <表名A.字段名(*)>,<表名B.字段名(*)> FROM <表名A> INNER JOIN <表名B> ON <表名A.字段名> >(或者<) <表名B.字段名>;
- 外連接-左外連接:指將左表的所有記錄與右表符合條件的記錄匹配,返回的結果除內連接的結果,同時如果有左表不符合條件的記錄,就在右表相應列中填NULL-SELECT <表名A.字段名(*)>,<表名B.字段名(*)> FROM <表名A> LEFT JOIN <表名B> ON <表名A.字段名> = <表名B.字段名>
- 外連接-右外連接:SELECT <表名A.字段名(*)>,<表名B.字段名(*)> FROM <表名A> RIGHT JOIN <表名B> ON <表名A.字段名> = <表名B.字段名>
- 自然連接:MySQL中的自然連接是自動將兩個表中相同名稱的列進行記錄匹配SELECT <表名A.字段名>,<表名B.字段名> FROM <表名A> NATURAL JOIN <表名B>;
- 自連接:用別的表實現自身表的連接-SELECT <表名B.字段名(*)> FROM <表名A.字段名(*)>,<表名B.字段名(*)> WHERE <表名A.字段名> = <表名B.字段名> AND <查詢條件>;

嵌套查詢:將一個查詢塊嵌套在另一個查詢塊的WHERE子句或者HAVING短語的條件中的查詢
- 含IN的子查詢:可以多層嵌套-SELECT <字段一,字段二...> FROM <表名> WHERE <字段名> IN (SELECT <字段一,字段二...> FROM <表名> WHERE <查詢條件>);
- 含ANY的子查詢:查詢的條件符合另一個查詢結果的任一個即可-SELECT <字段一,字段二...> FROM <表名> WHERE <字段名> <ANY(或者是>ANY、=ANY) (SELECT <字段一,字段二...> FROM <表名> WHERE <查詢條件>)
- 含EXISTS的子查詢:EXISTS代表存在量詞∃。帶有EXISTS謂詞的子查詢不返回任何數據,只產生邏輯值true或者false-SELECT <字段一,字段二...> FROM <表名> WHERE <字段名> EXISTS (SELECT <字段一,字段二...> FROM <表名> WHERE <查詢條件>)

集合查詢:SELECT語句的查詢結果是元組的集合,所以多個SELECT語句的結果可進行集合操作。集合操作主要包括並操作UNION、交操作INTERSECT、差操作EXCEPT,在MySQL替換過來就是ORANDEXISTS/IN
- 集合並查詢:實質上是進行兩次查詢操作然後將結果取並集-SELECT <字段一,字段二...> FROM <表名> WHERE <查詢條件> UNION SELECT <字段一,字段二...> FROM <表名> WHERE <查詢條件>,可以使用語句取代-SELECT <字段一,字段二...> FROM <表名> WHERE <查詢條件> OR <查詢條件>
- 集合交查詢:MySQL不支持直接的交集查詢,使用替代語句-SELECT <字段一,字段二...> FROM <表名> WHERE <查詢條件> AND <查詢條件>
- 集合差查詢:MySQL不支持直接的差集查詢-SELECT <字段一,字段二...> FROM <表名> WHERE <查詢條件> AND <查詢條件>,具體使用時邏輯符號會變。或者使用IN或者EXISTS

排序

  • 按照某字段升序排列:SELECT * FROM <表名> ORDER BY <字段名> LIMIT <待排列的記錄數>;
  • 降序排列:SELECT * FROM <表名> ORDER BY <字段名> DESC LIMIT <待排列的記錄數>;

插入

  • 插入記錄:INSERT INTO <表名> VALUES('...','','',....);
  • 插入某一字段:ALTER TABLE <表名> ADD <字段名> <字段類型> ;

刪除

  • 刪除數據庫:DROP DATABASE <數據庫名>;
  • 刪除未被外鍵關聯的表:DROP TABLE IF EXISTS <表名>;
  • 刪除已經外鍵關聯的表:先刪除子表再刪除父表
  • 刪除表中的某一條記錄:DELETE FROM <表名> WHERE <字段=值>;
  • 刪除表中的某一字段:ALTER TABLE <表名> DROP <字段名>;
  • 刪除外鍵約束:ALTER TABLE <表名> DROP FOREIGN KEY <外鍵名>

修改

  • 修改表名:ALTER TABLE <舊錶名> RENAME TO <新表名>;
  • 修改表中的字段名:ALTER TABLE <表名> CHANGE <舊字段名> <新字段名> <數據類型>;
  • 修改表中字段的數據類型:ALTER TABLE <表名> MODIFY <字段名> <新數據類型>;
  • 修改表中字段的順序:ALTER TABLE <表名> MODIFY <字段名> <數據類型> FIRST/AFTER <字段名>;
  • 修改表中某一記錄某一字段的值:UPDATE <表名> SET <字段名>=<新值> WHERE <查詢條件>;
  • 在表都創建之後添加外鍵:ALTER TABLE <需要添加外鍵的表名> ADD CONSTRAINT <外鍵名> FOREIGN KEY(<需添加外鍵的表的字段名>) REFERENCES <被作爲外鍵的表名> (<被作爲外鍵的字段名>);

索引

index索引可以有重複的值,而unique和primary key索引列中的值時唯一的
- ALTER創建索引(可同時添加多個表的索引列)
- ALTER TABLE <表名> ADD INDEX <索引名(可省缺)>(索引字段名);
- ALTER TABLE <表名> ADD UNIQUE(<索引字段名>);
- ALTER TABLE <表名> ADD PRIMARY KEY(<索引字段名>);
- CREATE增加索引
- CREATE INDEX <索引名> ON <表名> (<索引字段名>);
- CREATE INDEX <索引名> ON <表名> (<索引字段名>);
- 查詢索引:SHOW INDEX FROM <表名>;或者SHOW KEYS FROM <表名>;
- 刪除索引:DROP INDEX <索引名> ON <表名>;或者ALTER TABLE <表名> DROP INDEX <索引名>或者ALTER TABLE <表名> DROP PRIMARY KEY;

設置約束關係

主鍵,又稱主碼,主鍵約束就是作爲主鍵的字段在記錄中是唯一存在的,不可重複,並且也不許爲空。就像我們每個人都有自己唯一的身份ID一樣,唯一標識。利用這個特性,我們可以在數據庫中快速的查詢定位到一條記錄。
- 設置主鍵:創建表的時候,在定義字段以及數據類型的後面直接加上PRIMARY KEY (默認值);或者在定義完所有的字段以及數據類型後,加上PRIMARY KEY (<字段名一,....>)

外鍵,表中的一個或多個字段,可以不是本表的主鍵,但必須是另一個表的主鍵。外鍵用來在兩個表中建立連接關係,對於有關聯關係的兩個表而言,相關聯字段中主鍵所在的表爲父表,外鍵所在的表爲子表。
- 設置外鍵:在表中所有字段都定義後(包括外鍵名),加上CONSTRAINT <外鍵約束名> FOREIGN KEY(外鍵名) REFERENCES <關聯的外表名(外表的字段名)>;

注意的是,這裏的外鍵約束名與外鍵名是不同的意思
同一個數據庫中,外鍵約束名和外鍵名一定不可以重複!!! /(ㄒoㄒ)/~~

視圖

視圖包含行和列,其中的字段來自一個或多個數據庫中的真實的表中的字段,一起組合成一個類似真實的表。可以像基本表一樣,進行增刪改查的操作。記錄進行改動後,視圖與基本表都會更新
- 創建視圖:

CREATE VIEW <視圖名>(視圖字段名一,字段名二,...(可選)) AS <子查詢語句>
SELECT <字段名一,字段名二,...>
FROM <表名>
WHERE <查詢條件>;
  • 刪除視圖:DROP VIEW <視圖名>;
  • 查詢視圖:SELECT * FROM <視圖名>;或者SLECT <字段名> FROM <視圖名>;
  • 修改視圖:可以向上述修改字段/記錄的方式一樣來修改視圖,並且修改結果各個實際的表也會生效,也可以按下面的方法修改↓↓↓↓↓
CREATE OR REPLACE VIEW <視圖名>(視圖字段名一,字段名二,...(可選)) AS <子查詢語句>
SELECT <字段名一,字段名二,...>
FROM <表名>
WHERE <查詢條件>;

某些情況下可以缺省視圖的字段名,MySQL會自動補全。但是當SELECT後面的字段有來自函數查詢的結果時,不可以缺省。

添加註釋/備註

  • 給表添加描述:ALTER TABLE <表名> COMMENT='這裏是表的註釋'
  • 給列添加描述:ALTER TABLE <表名> MODIFY '<字段名>' DATETIME DEFAULT NULL COMMENT '字段描述'

心得

談一談外鍵約束關係
在兩個相關聯的表中,一個表的主鍵是另一個表的非主鍵字段,這個字段中的值可能有很多。就拿學生選課來說,某一個課程可能有很多學生選,學生的主鍵是學號,那麼該課程的表中,學號這一外鍵就會有很多值,同時,也把課程的數據表和學生的數據表關聯了起來。
吶,在這個例子中,課程的表就是子表,學生的數據表就是父表。倘若,父表的值改變了,那麼一定需要修改子表的值,而子表想去修改外鍵的值是沒有權限的;但是,子表可以刪除帶有外鍵值的記錄。這之中就有一種很明顯的約束關係。

發佈了51 篇原創文章 · 獲贊 89 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章