一、創建表
CREATE TABLE <表名> (<字段定義>,<字段定義>, …)TYPE=<表類型>;
1、表的命名和字段的命名
表的命名和字段的命名規則與數據庫的命名規則一致。表名和字段名中如果有MySQL的保留字則用單引號括起來。
2、字段類型
(1)數值類型
(2)字符類型
(3)日期時間類型
(4)聚合類型
3、字段約束
(1)NULL和NOT NULL修飾符
如果一個字段被修飾為NULL,則在表中插入數據時可以在此字段上輸入空值(創建表時每個字段默認是NULL修飾符)。如果一個字段被修飾為NOT NULL,則在表中插入數據時此字段必須輸入數據不能為空值(NULL)。
在自增和TIMESTAMP類型的字段中這個修飾符不適用,因為向這些字段插入NULL值將會導致插入下一個自動增加的值或插入當前時間截。
(2)DEFAULT修飾符
使用DEFAULT修飾符為字段指定一個默認值。
如果在字段定義中沒有指定DEFAULT修飾符,則MySQL會根據這個字段上的NULL和NOT NULL修飾符的不同來設定默認值。
如果指定字段上有NOT NULL修飾符,則MySQL對於數值類型字段插入0值,字符串類型字段插入空字符串,時間截類型字段插入當前時間,ENUM類型的字段插入集合中的第一個值(SET類型必須指定值)。
*在新的版本(5MySQL.0)中測試時數值類型、字符類型和日期時間類型字段NOT NULL修飾後沒有指定DEFAULT時如果表中插入數據時不輸入此字段的值時數據庫服務器出現錯誤,不讓插入數據。
(3)AUTO_INCREMENT修飾符
此修飾符只適用INT類型的字段,MySQL對此字段自動生成一個數(每次在前一個值的基礎上加1)。
*MySQL的表只能有一個AUTO_INCREMENT字段,而且這個字段必須被定義為鍵。
4、索引
(1)優點:對一個表的特定字段添加索引,使MySql在此字段上加快搜索速度,能夠減少查詢執行時間。MySQL可以為多個列創建索引。一個索引可以包括15個列。
(2)缺點:他會占據一定得磁盤空間;他會影響表上的INSERT,UPDATE和DELETE執行時間。
(3)什麼時候使用索引:對於經常使用WHERE,ORDER BY 和GROUP BY子句進行SELECT查詢的字段和用於連接表的字段應該使用索引。
(4)創建索引,在CREATE TABLE(<字段定義>,<字段定義>,… ,INDEX <索引名> (字段名),INDEX <索引名> (字段名),…) TYPE=<表類型>;
給現有表添加索引則使用,CREATE INDEX <索引名> ON <表名>(<字段名>,<字段名>,…);
(5)刪除索引,DROP INDEX <索引名> ON <表名>;
(6)特殊索引
UNIQUE索引:指定字段中的值必須是唯一的,也就是不能與其他行重復。一旦一個字段被設置為UNIQUE,則向他輸入重復數據的嘗試都會失敗。*UNIQUE字段允許存儲NULL值。
FULLTEXT索引:他是專門為MyISAM類型的表設計的索引。
一旦創建了索引,把要搜索的字符串作為AGAINST()函數的參數,然後使用MATCH函數搜索他。對於較大的數據集一般數據輸入完後再創建全文索引,這樣可以提高數據輸入效率!
例題:
CREATE TABLE articles ( id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, title VARCHAR(200),body TEXT,FULLTEXT (title,body));
INSERT INTO articles (title,body) VALUES('MySQL Tutorial','DBMS stands for DataBase ...'),('How To Use MySQL Well','After you went through a ...'),('Optimizing MySQL','In this tutorial we will show ...'),('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),('MySQL vs. YourSQL','In the following database comparison ...'),('MySQL Security','When configured properly, MySQL ...');
SELECT * FROM articlesWHERE MATCH (title,body) AGAINST ('database' IN NATURAL LANGUAGE MODE);
布爾搜索:
利用IN BOOLEAN MODE修飾符,MySQL可以執行布爾全文搜索。
布爾全文搜索具有以下特點:
布爾全文搜索的性能支持以下操作符:
一個前導的加號表示該單詞必須 出現在返回的每一行的開頭位置。
一個前導的減號表示該單詞一定不能出現在任何返回的行中。
例如:
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
這個查詢檢索所有包含單詞“MySQL”的行,但不檢索包含單詞“YourSQL”的行。
5、主鍵
主鍵約束保證某一字段或一組字段中的數據相對於表中的每一行都是唯一的。主鍵約束要求指定字段的值不能使空,也不能與其他行重復,所以被認為是NOT NULL和UNIQUE約束的組合。
6、外鍵
外鍵能夠在不同的表之間建立記錄到記錄的聯系,使MySQL在多個表上進行數據分析。(主表和參照表之間建立關系)
*在MySQL中自動為所有表的主鍵字段創建索引,但是外鍵字段必須由用戶進行明確地索引。
當外鍵與另一個表的字段有關系而且這種關系是唯一時,這個系統就稱為處於參照完整狀態。MySQL在除了InnoDB表類型之外的所有表類型中都忽略了這個功能。因為參照完整性會影響數據庫性能(插入、更新和刪除等操作)。
使用參照完整時必須清楚下面的三個約束:
(1)關系中的三個表必須是InnoDB表。 在非InnoDB表中,MySQL將會忽略FOREIGN KEY…REFERENCES修飾符。
(2)用於外鍵關系的字段必須在所有的參照表中進行明確地索引,InnoDB不能自動地創建索引。
(3)在外鍵關系中,字段的數據類型必須相似。
*刪除外鍵:ALTER TABLE <表名> DROP FOREIGN KEY <外鍵Id>
*ON DELETE 子句(CASCADE,SET NULL,RESTRICT,NO ACTION)。
7、表類型
(1)MyISAM表類型
MyISAM表優化了壓縮比例和速度,而且可以在不同的操作系統和平台之間進行移植。MyISAM表支持大表文件(大於4GB),並且允許對BLOB和TEXT列進行索引。
(2)ISAM表類型
此表類型與MyISAM表類型類似,但是性能方面不如MyISAM表類型,所以很少使用。
(3)HEAP表類型
他是內存中的表,數據處理速度比MyISAM表快很多。然而,此表的數據只在MySQL服務器的生命周期內有效,而且不支持TEXT和BLOB類型的字段。
(4)BerkeleyDB表類型
主要用於事務處理而設計的,此表類型基本被InnoDB表類型所替代。
(5)InnoDB表類型
他完全支持MySQL的事務處理並且不會降低速度或者性能,精細的(行級和表級)鎖定提高了MySQL事務處理能力。支持外鍵約束。目前是MySQL的默認表類型。
(6)MERGE表類型
通過把多個MyISAM表組合到一個單獨的表來創建的虛擬表。只有涉及到的表具有完全相同的表結構時才能對表進行組合。
8、復制表
通過使用 CREATE TABLE <目的表名> SELECT * FROM <源表名> 方法創建源表的一個副本。
注意:
(1)字段可以自行選擇
(2)SELECT 結合WHERE選出一部分記錄。
(3)通過使用WHERE 0=1 方法創建一個空副本。
(4)此類型的復制不能從源表中復制鍵。
*通過以下命令也能復制表,CREATE TABLE <目的表名> LIKE <源表名>
9、臨時表
MySQL允許我們使用CREATE TEMPORARY TABLE命令創建臨時表。這種表的生命周期是客戶與MySQL服務器連接會話期間,客戶端開連接後表被自動刪除。兩個不同的會話使用相同的表名互相不沖突。