一、前言 今天天氣很好,大晴天,心情也好好的。就將MySQL常用的語句總結一下,記錄在隨筆里,也順便分享分享。日後,這篇隨筆我將會持續更新,作為我自己的MySQL語句大全。 二、常用SQL語句 我將由外到里進行編寫(資料庫到表再到數據) 庫層: 1、SHOW DATABASES; 2、CREATE ...
一、前言
今天天氣很好,大晴天,心情也好好的。就將MySQL常用的語句總結一下,記錄在隨筆里,也順便分享分享。日後,這篇隨筆我將會持續更新,作為我自己的MySQL語句大全。
二、常用SQL語句
我將由外到里進行編寫(資料庫到表再到數據)
庫層:
1、SHOW DATABASES;
2、CREATE DATABASE dbname;
3、DROP DABABASE dbname;
4、ALTER DATABASE dbname set=新字元集 collate=新校對集;
5、USE dbname;
6、SHOW CREATE DATABASE dbname;
表層:
1、創建表形式:
CREATE TABLE tabname
(
欄位名1,數據類型 [列級別約束條件] [預設值],
欄位名1,數據類型 [列級別約束條件] [預設值],
…
[表級別約束條件]
);
a、使用主鍵約束PRIMARY KEY
兩個地方添加:1、列約束條件位置(PRIMARY KEY) 2、表級別約束條件位置([CONSTRAINT <約束名>] PRIMARY KEY [欄位名])
b、使用唯一性約束UNIQUE
同上兩個地方添加:1、UNIQUE 2、[CONSTRAINT <約束名>] UNIQUE(<欄位名>)
與主鍵的區別,兩者同樣要求唯一,但是UNIQUE可以是NULL,主鍵不可以。且一個表中PRIMARY KEY只能是一個,UNIQUE可以存在多個。
c、使用外鍵約束(InnoDB) FOREIGN KEY
一個地方添加:1、表級別約束條件位置添加 [CONSTRAINT <外鍵名>] FOREIGN KEY 欄位名1[,欄位名2,…] REFERENCES <主表名> 主鍵列 [,主鍵列2,….]
註意:兩個表之間有了外鍵的聯繫,不能直接刪除主表,否則會出錯!若必須要刪除主表,可以先刪除外鍵,再來刪除主表。
d、非空約束 NOT NULL
一個地發添加:1、列約束條件位置 NOT NULL
e、使用預設約束 DEFAULT
一個位置添加:1、列約束條件位置 DEFAULT 預設值
f、設置表的屬性值自動增加 AUTO_INCREMENT
一個位置添加:1、列約束條件位置 AUTO_INCREMENT
註意:此時的列必須是主鍵或者唯一鍵!
索引問題:以下是普通索引、全文索引、空間索引。上面創建約束的同時也是創建相應的索引,主鍵索引、唯一索引等等。
g、普通索引 INDEX/KEY
一個位置添加:1、列約束條件位置 INDEX(<欄位名>);
h、全文索引(MyISAM) FULLTEXT
一個位置添加:1、列約束條件位置 FULLTEXT KEY [‘名字’] (‘欄位名’);
i、創建空間索引(MyISAM) SPATIAL
一個位置添加:1、列約束條件位置 SPATIAL KEY [‘名字’] (‘欄位名’);
2、DESCRIBE/DESC tabname;
3、SHOW CREATE TABLE tabname;
4、DROP TABLE [IF EXISTS] <表名>;
5、ALTER TABLE <表名> ENGINE=<更改後的存儲引擎>;
6、ALTER TABLE <舊表名> RENAME [TO] <新表名>;
7、ALTER TABLE <表名> MODIFY <欄位名> <數據類型>;
8、ALTER TABLE <表名> CHANGE <舊欄位名> <新欄位名> <新數據類型>;
9、ALTER TABLE <表名> ADD <新欄位名> <新欄位類型> [約束條件] [FIRST|AFTER 已存在的欄位名];
10、ALTER TABLE <表名> MODIFY <欄位1> <數據類型> FIRST|AFTER <欄位2>;
11、ALTER TABLE <表名>DROP <欄位名>;
#在已有的表上創建索引
12、ALTER TABLE <表名> ADD INDEX [索引名] (欄位名);
13、ALTER TABLE <表名> ADD PRIMARY KEY (欄位名);
14、ALTER TABLE <表名> ADD FOREIGN KEY (欄位名) REFERENCES <主表名> (主鍵欄位);
15、ALTER TABLE <表名> ADD UNIQUE KEY (欄位名);
16、ALTER TABLE <表名> ADD FULLTEXT KEY(欄位名);
17、ALTER TABLE <表名> ADD SPATIAL KEY (欄位名);
18、ALTER TABLE <表名> ALTER <欄位名> SET DEFAULT 預設值;
#刪除索引
19、ALTER TABLE <表名> ALTER <欄位名> DROP DEFAULT;
20、ALTER TABLE <表名> DROP PRIMARY KEY;
21、ALTER TABLE <表名> DROP FOREIGN KEY 外鍵名;
22、ALTER TABLE <表名> DROP INDEX 索引名;
23、DROP INDEX index_name ON tabname;
數據層:
1、插入數據
INSERT INTO tabname (column_list) VALUES (value_list);
INSERT INTO tabname (column_list) VALUES (value_list1),(value_list2),….,(value_listn);
INSERT INTO tabname SET 欄位名1=值1,欄位名2=值2,…..,欄位名n=值n;\
2、更新數據
UPDATE tabname SET column_name1=value1,column_name2=value2,…column_namen=valuen WHERE (condition);
3、刪除數據
DELETE FROM tabname[WHERE <condition>];
TRUNCATE [TABLE] tabname;
DELETE與TRUNCATE的區別:TRUNCATE直接刪除整個表,再創建一個一模一樣的表。
4、數據查詢
(1)、SELECT {*|<欄位列表>}
[
FROM <表1>,<表2>,…,<表n>
WHERE <表達式>
GROUP BY <分組欄位>
HAVING <expression>
ORDER BY <排序欄位>
LIMIT <num>
]
(2)、SELECT [欄位1,欄位2,…,欄位n] from [表|視圖] WHERE [查詢條件];
(3)、連接查詢
a、內連接查詢 SELECT tab1.* tab2.* FROM tab1 INNER JOIN tab2 ON <condition>;
b、左連接查詢 SELECT tab1.* tab2.* FROM tab1 LEFT [OUTER] JOIN tab2 ON <condition>;
c、右連接查詢 SELECT tab1.* tab2.* FROM tab1 RIGHT [OUTER] JOIN tab2 ON <condition>;
(4)、合併查詢結果
SELECT column,… FROM tab1
UNION [ALL]
SELECT column,…FROM tab2;
(以上是自己的一些見解,若有不足或者錯誤的地方請各位指出)
作者:壹葉隨風
聲明:本博客文章為原創,只代表本人在工作學習中某一時間內總結的觀點或結論。轉載時請在文章頁面明顯位置給出原文鏈接。