| |
|
|關聯式資料庫|Index|Key|資料正規化|SQL (1)|SQL (3)|SQL (4)|SQL (5)| |
|
資料庫簡介 |
|
SQL:維護資料庫與資料表
|
|
以下將介紹部份 MySQL 所支援的 SQL 敘述,其中有些用法可能不適用於其它的資料庫產品。 |
建立、移除與選擇資料庫 |
|
•CREATE DATABASE:建立資料庫。 |
|
CREATE DATABASE [IF NOT EXISTS] db_name |
•DROP DATABASE:移除資料庫。 |
|
DROP DATABASE [IF EXISTS] db_name |
•USE:選取將連線的資料庫。 |
|
USE db_name |
建立、修改與刪除資料表 |
|
•CREATE TABLE:建立資料表。 |
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)] [table_options] [select_statement]
create_definition:
col_name type [NOT NULL | NULL] [DEFAULT default_value]
[AUTO_INCREMENT] [PRIMARY KEY] [reference_definition]
or PRIMARY KEY (index_col_name,...)
or KEY [index_name] (index_col_name,...)
or INDEX [index_name] (index_col_name,...)
or UNIQUE [INDEX] [index_name] (index_col_name,...)
or FULLTEXT [INDEX] [index_name] (index_col_name,...)
or [CONSTRAINT symbol] FOREIGN KEY [index_name] (index_col_name,...) [reference_definition]
or CHECK (expr)
type:
TINYINT[(length)] [UNSIGNED] [ZEROFILL]
or SMALLINT[(length)] [UNSIGNED] [ZEROFILL]
or MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]
or INT[(length)] [UNSIGNED] [ZEROFILL]
or INTEGER[(length)] [UNSIGNED] [ZEROFILL]
or BIGINT[(length)] [UNSIGNED] [ZEROFILL]
or REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]
or DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
or FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
or DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL]
or NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL]
or CHAR(length) [BINARY]
or VARCHAR(length) [BINARY]
or DATE
or TIME
or TIMESTAMP
or DATETIME
or TINYBLOB
or BLOB
or MEDIUMBLOB
or LONGBLOB
or TINYTEXT
or TEXT
or MEDIUMTEXT
or LONGTEXT
or ENUM(value1,value2,value3,...)
or SET(value1,value2,value3,...)
index_col_name:
col_name [(length)]
reference_definition:
REFERENCES tbl_name [(index_col_name,...)]
[MATCH FULL | MATCH PARTIAL]
[ON DELETE reference_option]
[ON UPDATE reference_option]
reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
table_options:
TYPE = {BDB | HEAP | ISAM | InnoDB | MERGE | MRG_MYISAM | MYISAM }
or AUTO_INCREMENT = #
or AVG_ROW_LENGTH = #
or CHECKSUM = {0 | 1}
or COMMENT = "string"
or MAX_ROWS = #
or MIN_ROWS = #
or PACK_KEYS = {0 | 1 | DEFAULT}
or PASSWORD = "string"
or DELAY_KEY_WRITE = {0 | 1}
or ROW_FORMAT= { default | dynamic | fixed | compressed }
or RAID_TYPE= {1 | STRIPED | RAID0 } RAID_CHUNKS=# RAID_CHUNKSIZE=#
or UNION = (table_name,[table_name...])
or INSERT_METHOD= {NO | FIRST | LAST }
or DATA DIRECTORY="absolute path to directory"
or INDEX DIRECTORY="absolute path to directory"
select_statement:
[IGNORE | REPLACE] SELECT ... (Some legal select statement)
|
|
看完上述的語法,您可能會大吃一驚。其實在實作時,有許多設定可以直接引用其預設值,因此語法得以簡化不少。以下就是兩個 CREATE TABLE 的使用實例,沒那麼複雜: |
CREATE TABLE friend (
sn INT(4) NOT NULL AUTO_INCREMENT,
realname CHAR(10),
address CHAR(50),
phone CHAR(15),
PRIMARY KEY (sn)
); |
|
CREATE TABLE new_friend SELECT * FROM old_friend |
•ALTER TABLE:修改現有的資料表。 |
ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...]
alter_specification:
ADD [COLUMN] create_definition [FIRST | AFTER column_name ]
or ADD [COLUMN] (create_definition, create_definition,...)
or ADD INDEX [index_name] (index_col_name,...)
or ADD PRIMARY KEY (index_col_name,...)
or ADD UNIQUE [index_name] (index_col_name,...)
or ADD FULLTEXT [index_name] (index_col_name,...)
or ADD [CONSTRAINT symbol] FOREIGN KEY
[index_name] (index_col_name,...) [reference_definition]
or ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
or CHANGE [COLUMN] old_col_name create_definition [FIRST | AFTER column_name]
or MODIFY [COLUMN] create_definition [FIRST | AFTER column_name]
or DROP [COLUMN] col_name
or DROP PRIMARY KEY
or DROP INDEX index_name
or DISABLE KEYS
or ENABLE KEYS
or RENAME [TO] new_tbl_name
or ORDER BY col
or table_options
|
|
ALTER TABLE 在 MySQL 裡功用很多,不但可以用來建立或刪除 index,也可以用來更改資料表的名稱或結構。
要使用時,您只要指定 tbl_name,然後就可以在後頭寫上一到多組異動的敘述。例如: |
|
增加兩個欄位:ALTER TABLE friend ADD email CHAR(50), ADD age INT |
|
刪除一個欄位:ALTER TABLE friend DROP email |
|
加上 INDEX:ALTER TABLE friend ADD INDEX (realname) |
|
刪除 INDEX:ALTER TABLE friend DROP INDEX realname |
•DROP TABLE:移除資料表。 |
|
DROP TABLE tbl_name |
|
|
|關聯式資料庫|Index|Key|資料正規化|SQL (1)|SQL (3)|SQL (4)|SQL (5)| |
|