關聯式資料庫IndexKey資料正規化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

關聯式資料庫IndexKey資料正規化SQL (1)SQL (3)SQL (4)SQL (5)