鎖定表的方法可以維護資料的完整性,但是它卻不能保證資料的關聯性。這個時候我們就可以使用外來鍵。例如,外來鍵可以保證每一條銷售記錄都指向 某乙個存在的客戶。在這裡,外來鍵可以把customerinfo 表中的customerid對映到salesinfo表中customerid,任何一條沒有合法customerid的記錄都不會被更新或插入到 salesinfo中。
create table customerinfo
( customerid int not null ,
primary key ( customerid )
) type = innodb;
create table salesinfo
( salesid int not null,
customerid int not null,
primary key(customerid, salesid),
foreign key (customerid) references customerinfo
(customerid) on deletecascade
) type = innodb;
注 意例子中的引數「on delete cascade」。該引數保證當 customerinfo 表中的一條客戶記錄被刪除的時候,salesinfo 表中所有與該客戶相關的記錄也會被自動刪除。如果要在 mysql 中使用外來鍵,一定要記住在建立表的時候將表的型別定義為事務安全表 innodb型別。該型別不是 mysql 表的預設型別。定義的方法是在 create table 語句中加上 type=innodb。如例中所示。
7、使用索引
索引是提高資料庫效能的常用方法,它可以令資料庫伺服器以比沒有 索引快得多的速度檢索特定的行,尤其是在查詢語句當中包含有max(), min()和orderby這些命令的時候,效能提高更為明顯。那該對哪些字段建立索引呢?一般說來,索引應建立在那些將用於join, where判斷和order by排序的字段上。盡量不要對資料庫中某個含有大量重複的值的字段建立索引。對於乙個enum型別的字段來說,出現大量重複值是很有可能的情況,例如 customerinfo中的「province」.. 字段,在這樣的字段上建立索引將不會有什麼幫助;相反,還有可能降低資料庫的效能。我們在建立表的時候可以同時建立合適的索引,也可以使用alter table或create index在以後建立索引。此外,mysql
從版本3.23.23開始支援全文索引和搜尋。全文索引在 mysql 中是乙個fulltext型別索引,但僅能用於myisam 型別的表。對於乙個大的資料庫,將資料裝載到乙個沒有fulltext索引的表中,然後再使用alter table或create index建立索引,將是非常快的。但如果將資料裝載到乙個已經有fulltext索引的表中,執行過程將會非常慢。
8、優化的查詢語句
絕 大多數情況下,使用索引可以提高查詢的速度,但如果sql語句使用不恰當的話,索引將無法發揮它應有的作用。下面是應該注意的幾個方面。首先,最好是在相 同型別的字段間進行比較的操作。在mysql 3.23版之前,這甚至是乙個必須的條件。例如不能將乙個建有索引的int欄位和bigint欄位進行比較;但是作為特殊的情況,在char型別的字段和 varchar型別欄位的字段大小相同的時候,可以將它們進行比較。其次,在建有索引的字段上盡量不要使用函式進行操作。
例如,在乙個date型別的字段上使用yeae()函式時,將會使索引不能發揮應有的作用。所以,下面的兩個查詢雖然返回的結果一樣,但後者要比前者快得多。
select * from order where year(orderdate)<2001;
select * from order where orderdate<"2001-01-01";
同樣的情形也會發生在對數值型字段進行計算的時候:
select * from inventory where amount/7<24;
select * from inventory where amount<24*7;
上面的兩個查詢也是返回相同的結果,但後面的查詢將比前面的乙個快很多。第三,在搜尋字元型字段時,我們有時會使用 like 關鍵字和萬用字元,這種做法雖然簡單,但卻也是以犧牲系統效能為代價的。例如下面的查詢將會比較表中的每一條記錄。
select * from books
where name like "mysql%"
但是如果換用下面的查詢,返回的結果一樣,但速度就要快上很多:
select * from books
where name>="mysql"and name<"mysqm"
最後,應該注意避免在查詢中讓mysql進行自動型別轉換,因為轉換過程也會使索引變得不起作用。
mysql的高階用法 mysql的一些高階用法
軟體安裝 裝機軟體必備包 sql是structured query language 結構化查詢語言 的縮寫。sql是專為資料庫而建立的操作命令集,是一種功能齊全的資料庫語言。在使用它時,只需要發出 做什麼 的命令,怎麼做 是不用使用者考慮的。sql功能強大 簡單易學 使用方便,已經成為了資料庫操作...
mysql的一些高階語句
mysql insert into table field values value on duplicate key update field concat value ifnull field 具體本條sql的用法,請檢視手冊 二,講一下統計的用法,主要介紹如何用一條sql語句,統計某個使用者的...
MySQL的一些內建函式(高階函式)
bin x 返回 x 的二進位制編碼 15 的 2 進製編碼 select bin 15 1111 binary s 將字串 s 轉換為二進位制字串 select binary csdn csdn case expression when condition1 then result1 when c...