任何宣告為 PRIMARY KEY, KEY, UNIQUE, 或 INDEX 的欄位都會自動建立索引。
要將索引建立到欄位用:
CREATE INDEX name ON employee(name);
這會建立一個叫 name 的索引到 employee 資料表裡的 name 欄位。
刪除資料庫,資料表,和索引
刪除整個資料庫,包括裡面的資料:
DROP DATABASE employee;
可以在 employee 的前面加上 IF EXISTS。
刪除一個資料表:
DROPTABLE assignment;
完整格式:
DROP [TEMPORARY] TABLE [IF EXISTS] table_name [, table_name...]
刪除索引:
DROP INDEX index_name ON employee;
改變資料表結構
如果要改變資料表的結構,建立 name 的索引在 employee 裡面的 name 欄位:
ALTER TABLE employee ADD INDEX name (name);
完整格式:
ALTER [IGNORE] TABLE table_name alter_spec [, alter_spec ...]
alter_spec:
ADD [COLUMN] create_definition [FIRST| AFTER col_name]
orADD [COLUMN] (create_definition, create_definition,...)
orADD INDEX [index_name] (index_col_name,...)
orADDPRIMARY KEY (index_col_name,...)
orADDUNIQUE [index_name] (index_col_name,...)
orADD FULLTEXT [index_name] (index_col_name,...)
orADD [CONSTRAINT symbol] FOREIGN KEY [index_name] (index_col_name,...)
[reference_definition]
orALTER [COLUMN] col_name {SETDEFAULT literal |DROPDEFAULT}
or CHANGE [COLUMN] old_col_name create_definition
[FIRST| AFTER column_name]
or MODIFY [COLUMN] create_definition [FIRST| AFTER col_name]
orDROP [COLUMN] col_name
orDROPPRIMARY KEYorDROP INDEX index_name
or DISABLE KEYS
or ENABLE KEYS
or RENAME [TO] new_table_name
orORDERBY col_name
or table_options
因為 ALTER 非常有彈性所以有很多的查詢子句。
CHANGE 和 MODIFY 相同,可以讓你改變欄位的定義或位置。
DROP COLUMN 會刪除資料表裡的欄位。
DROP PRIMARY KEY 和 DROP INDEX 會刪除相連的欄位索引。
DISABLE KEYS 會告訴 MySQL 停止更新索引,只能用在 MyISAM。
ENABLE KEYS 會繼續更新索引。
RENAME 可以讓你改變資料表的名稱。
ORDER BY 會重新排序欄位。
INSERT INTO department VALUES
(42, 'Finance'),
(128, 'Research and Development'),
(NULL, 'Human Resources');
INTO 可以不用。
INSERT INTO department SELECT ... 可以從其它的資料表裡取得資料,存到 department 這個資料表。
INSERT INTO department SET name = 'Asset Management'; 這會輸入一個欄位的資料,只提供 name 的欄位。其他沒有資料的欄位會是 NULL。
DEFAULT 會用預設值建立欄位。範例:INSERT INTO department VALUES(DEFAULT)
ON DUPLICATE KEY UPDATE 會解決跟 PRIMARY KEY 或 UNIQUE 的衝突。範例:INSERT INTO warning (employeeID) VALUES(6651) ON DUPLICATE KEY UPDATE count = count+1;
使用 REPLACE
使用方法跟 INSERT 相同。REPLACE 可以解決有衝突的輸入。如果有衝突欄位會被更新。
使用 DELETE
用來刪除欄位。
範例:DELETE FROM department; 會刪除 department 裡面所有的欄位。
如果要選擇哪個欄位,用 WHERE。
範例:DELETE FROM department WHERE name='Asset Management';
如果有開啟 --safe-updates 或 --i-am-a-dummy 選項可以避免一次刪除全部的欄位。所以必須選擇要刪除的欄位。
DELETE employee, employeeSkills
FROM employee, employeeSkills, department
WHERE employee.employeeID = employeeSkills.employeeID
AND employee.departmentID = department.departmentID
AND department.name='Finance';
上面的會刪除全部的有在 Finance department 裡面工作的 employees,然後刪除他們的 employeeSkills。
FROM 裡面的欄位不會被刪除,他們只是用來搜尋。只有在 employee 和 employeeSkills 裡面的欄位會被刪除。
AND 是包含的條件。employee.employeeID 表示 employee 資料表裡的 employeeID 欄位。
第三個格式跟第二個差不多,但是刪除 FROM 裡面的資料表,用 USING 來表示被搜尋的資料表。
額外的查詢子句:
LOW_PRIORITY 跟 INSERT 裡的意思相同。
QUICK 可用來加快 DELETE 的速度。
ORDER BY 是用來刪除欄位的順序。
LIMIT 可用來限制被刪除的欄位數量。
使用 TRUNCATE
可用來刪除全部的欄位。
TRUNCATETABLE employee;
速度比 DELETE 還快。
使用 UPDATE
可以用來更新欄位。
UPDATE employee
SET job='DBA'WHERE employeeID='6651';