建立一個資料庫最主要的目的就是要存放資料, 以供查詢利用, 而在MySQL系統存放資料的最基本物件就是資料表, 今天我們就談談資料表的建立, 以及其維護的方法
要建立資料表, 使用者帳號一定要有'CREATE'權限...
在前幾天, 我們用'root'帳號建立了資料庫'ShopMall', 現在必需要授權帳號'simon'有管理Table的權限, 要用GRANT命令:
<<請先以'root'帳號登入MySQL>>
Linux# mysql -u root -p密碼 <<我用'Linux#'代表由Linux root帳號執行指令>>
mysql> GRANT CREATE ON ShopMall TO simon@localhost;
mysql> quit; <<離開root>>
<<以帳號'simon'登入資料庫ShopMall, 以'Linux$'代表由Linux使用者帳號執行指令>>
Linux$ mysql -u simon -p密碼 ShopMall
mysql> CREATE TABLE account
(Loginname VARCHAR(20) NOT NULL, RealName VARCHAR(30) NULL,
Addr VARCHAR(100) NULL, Tel VARCHAR(24) NOT NULL,
pwd VARCHAR(50) NOT NULL, CreateDate DATETIME NOT NULL,
LastLoginIn DATETIME NULL)
上面命令立了一個名為'account'的資料表, 包含7個資料欄, 用了兩種資料型態: VARCHAR(...)和DATETIME. 資料型態, 我們明天會討論....account資料表中有四個欄位不能為空值: Loginname、Tel、pwd和CreateDate, 其他三個欄位則允許空值
這時可以用INSERT指令建立第一筆記錄
mysql> INSERT INTO account VALUES
('simon581923', 'Simon Huang', 'Kaohsiung', '+886-7-5551234',
'12345678', '2009/10/18', NULL);
要確認已經完成資料新增, 可以'SELECT'指令:
mysql> SELECT * FROM ShopMall;
關於資料表建立的完整指令為:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[table_options]
[partition_options]
create_definition:
col_name column_definition
| [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)
[index_option] ...
| {INDEX|KEY} [index_name] [index_type] (index_col_name,...)
[index_option] ...
| [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY]
[index_name] [index_type] (index_col_name,...)
[index_option] ...
| {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...)
[index_option] ...
| [CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name,...) reference_definition
| CHECK (expr)
column_definition:
data_type [NOT NULL | NULL] [DEFAULT default_value]
[AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]
[COMMENT 'string']
[COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]
[STORAGE {DISK|MEMORY|DEFAULT}]
[reference_definition]
table_option:
ENGINE [=] engine_name
| AUTO_INCREMENT [=] value
| AVG_ROW_LENGTH [=] value
| [DEFAULT] CHARACTER SET [=] charset_name
| CHECKSUM [=] {0 | 1}
| [DEFAULT] COLLATE [=] collation_name
| COMMENT [=] 'string'
| CONNECTION [=] 'connect_string'
| DATA DIRECTORY [=] 'absolute path to directory'
| DELAY_KEY_WRITE [=] {0 | 1}
| INDEX DIRECTORY [=] 'absolute path to directory'
| INSERT_METHOD [=] { NO | FIRST | LAST }
| KEY_BLOCK_SIZE [=] value
| MAX_ROWS [=] value
| MIN_ROWS [=] value
| PACK_KEYS [=] {0 | 1 | DEFAULT}
| PASSWORD [=] 'string'
| ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}
| TABLESPACE tablespace_name [STORAGE {DISK|MEMORY|DEFAULT}]
| UNION [=] (tbl_name[,tbl_name]...)
partition_options:
PARTITION BY
{ [LINEAR] HASH(expr)
| [LINEAR] KEY(column_list)
| RANGE(expr)
| LIST(expr) }
[PARTITIONS num]
[SUBPARTITION BY
{ [LINEAR] HASH(expr)
| [LINEAR] KEY(column_list) }
[SUBPARTITIONS num]
]
[(partition_definition [, partition_definition] ...)]
除了資料型態, 還有如何建立索引INDEX、一些與資料表有關的屬性定義和分割的設計, 這些我會在以後的分享中陸續說明...咱們明天先談資料型態...