MySQL索引 索引分類: 索引兩種存儲類型:B型樹(BTREE)索引和哈希(HASH)索引,其中B型樹為系統默認索引方法。MySQL的索引包括普通索引、唯一索引、全文索引、單列索引、多列索引和空間索引。
注意:只有MyISAM類型的數據表支持FULLTEXT全文索引,其他類型的數據表不支持全文索引。當用戶在建立全文索引的時候,返回“ERROR 1283 (HY000): Column 'number' cannot be part of FULLTEXT index”的錯誤,則說明用戶操作的當前數據表不支持全文索引,即不為MyISAM類型的數據表。
只有MyISAM類型表支持空間索引。而且,索引字段必須有非空約束。創建索引 在建立數據表時創建索引
語法結構如下:
create table table_name(
屬性名 數據類型 [約束條件],
屬性名 數據類型 [約束條件],
^……
屬性名 數據類型
[UNIQUE | FULLTEXT | SPATIAL ] INDEX }KEY
[別名](屬性名1 [(長度)] [ASC | DESC]) 創建多列索引
觸發多列索引的條件是用戶必須使用索引的第一字段,如果沒有用到第一字段,則索引不起任何作用,用戶想要優化查詢速度,可以應用該類索引形式。在已建立的數據表中創建索引 基本命令結構如下:
CREATE [UNIQUE | FULLTEXT |SPATIAL ] INDEX index_name
ON table_name(屬性 [(length)] [ ASC | DESC]); 修改數據表結構添加索引 基本結構如下:
ALTER TABLE table_name ADD [ UNIQUE | FULLTEXT | SPATIAL ] INDEX index_name(屬性名[(length)] [ASC | DESC]);注意:
從功能上看,修改數據表結構添加索引與在已存在數據表中建立索引所實現功能大體相同,二者均是在已經建立的數據表中添加或創建新的索引。 刪除索引 基本命令如下:
DROP INDEX index_name ON table_name; MySQL存儲過程 創建存儲過程和存儲函數 創建存儲過程
基本形式:CREATE PROCEDUER sp_name ([proc_parameter [,...]]) [characteristic ...] routine_body
存儲過程調用方法:call 存儲過程名;注意:MySQL中默認的語句結束符為分號; 存儲過程中的SQL語句需要分號來結束,為了避免沖突,首先,用“DELIMITER // ”將MySQL的結束符設置為//。最後用“DELIMITER;”來將結束符恢復成分號。這與觸發器的創建是一樣的。創建存儲函數
基本形式:CREATE FUNCTION sp_name ([func_parameter[,...]])
RETURNS types
[characteristic ...] routine_body變量的應用
MySQL存儲過程中的參數主要有局部參數和會話參數兩種,又可被稱為局部變量和會話變量。局部變量只在定義該局部變量的begin……end范圍內有效,會話變量在整個存儲過程范圍內均有效。
局部變量以關鍵字declare聲明,後跟變量名和變量類型,例如 declare a int
也可以用關鍵字default為變量指定默認值,例如declare a int default 10MySQL中的會話變量不必聲明即可使用,會話變量在整個過程中有效,會話變量名以字符“@”作為起始字符。為變量賦值 用DECLARE關鍵字定義變量:DECLARE var_name[,...] type [default value]使用SET關鍵字為變量賦值:SET var_name=expr[, var_name=expr]...SELETC col_name [ ,...] INTO var_name [, ...] FROM table_name where condition
示例:select tel into customer_tel from studentinfo where name='LeonSK';注意:上述賦值語句必須存在於創建的存儲過程中,且需要將賦值語句放置在BEGIN……END之間。若脫離此范圍,該變量將不能使用或被賦值。光標的運用
聲明光標
光標必須聲明在處理程序之前,且聲明在變量和條件之後。
語法:DECLARE cursor_name CURSOR FOR select_statement
select 子句中不能包含INTO子句,並且光標只能在存儲過程或存儲函數中使用。打開光標
語法:OPEN info_of_student使用光標
使用FETCH...INTO語句來讀取數據,語法如下:
FETCH cursor_name INTO var_name[, var_name]...關閉光標
語法:CLOSE curso_name
對於以關閉的光標,在其關閉之後則不能使用FETCH來使用光標,光標在使用完畢後一定要關閉。查看存儲過程和函數 SHOW STATUS語句
SHOW {PROCEDUER | FUNCTION} STATUS[LIKE 'pattern' ]SHOW CREATE語句
SHOW CREATE { PROCEDUER | FUNCTION } sp_name;SHOW STATUS語句只能查看存儲過程或函數所操作的數據庫對象,如存儲過程或函數的名稱、類型、定義者、修改時間等信息,並不能查詢存儲過程或函數的具體定義。如需要查看詳細定義,需要使用SHOW CREATE語句。修改存儲過程和函數 語法如下:
ALTER {PROCEDUER | FUNCTION} sp_name [characteristic ...]
characteristic:
{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'