kider 发表于 2007-7-26 15:00:23

"CREATE TABLE"语法及例子

作者:kider

沉寂的列规格变更
(在有些情况下,较早版本的MySQL会静默地更改在CREATE TABLE或ALTER TABLE语句中给定的列规约。在MySQL 5.1中不会进行这类变更。如果使用指定的数据类型无法创建列,则会出现错误。)

CREATE TABLE tbl_name
    [(create_definition,...)]
   
或:

CREATE TABLE tbl_name
    [(] LIKE old_tbl_name [)];

create_definition:
    column_definition
| ] PRIMARY KEY (index_col_name,...)
| KEY (index_col_name,...)
| INDEX (index_col_name,...)
| ] UNIQUE
       (index_col_name,...)
| (index_col_name,...)
| ] FOREIGN KEY
       (index_col_name,...)
| CHECK (expr)

column_definition:
    col_name type
       | KEY]
      

type:
    TINYINT[(length)]
| SMALLINT[(length)]
| MEDIUMINT[(length)]
| INT[(length)]
| INTEGER[(length)]
| BIGINT[(length)]
| REAL[(length,decimals)]
| DOUBLE[(length,decimals)]
| FLOAT[(length,decimals)]
| DECIMAL(length,decimals)
| NUMERIC(length,decimals)
| DATE
| TIME
| TIMESTAMP
| DATETIME
| CHAR(length)
| VARCHAR(length)
| TINYBLOB
| BLOB
| MEDIUMBLOB
| LONGBLOB
| TINYTEXT
| TEXT
| MEDIUMTEXT
| LONGTEXT
| ENUM(value1,value2,value3,...)
| SET(value1,value2,value3,...)
| spatial_type

index_col_name:
    col_name [(length)]

reference_definition:
    REFERENCES tbl_name [(index_col_name,...)]
               
               
               

reference_option:
    RESTRICT | CASCADE | SET NULL | NO ACTION

table_options: table_option ...

table_option:
    {ENGINE|TYPE} = engine_name
| AUTO_INCREMENT = value
| AVG_ROW_LENGTH = value
| CHARACTER SET charset_name
| CHECKSUM = {0 | 1}
| COMMENT = 'string'
| C
| MAX_ROWS = value
| MIN_ROWS = value
| PACK_KEYS = {0 | 1 | DEFAULT}
| PASSWORD = 'string'
| DELAY_KEY_WRITE = {0 | 1}
| ROW_FORMAT = {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}
| UNION = (tbl_name[,tbl_name]...)
| INSERT_METHOD = { NO | FIRST | LAST }
| DATA DIRECTORY = 'absolute path to directory'
| INDEX DIRECTORY = 'absolute path to directory'

partition_options:
    PARTITION BY
          HASH(expr)
      | KEY(column_list)
      |RANGE(expr)
      |LIST(column_list)
   
    [SUBPARTITION BY
          HASH(expr)
         | KEY(column_list)
      
    ]
    [(partition_definition), [(partition_definition)], ...]

partition_definition:
    PARTITION partition_name
      [VALUES {
                  LESS THAN (expr) | MAXVALUE
                | IN (value_list) }]
      [ ENGINE [=] engine-name]
       'comment_text' ]
       'data_dir']
       'index_dir']
       max_number_of_rows]
       min_number_of_rows]
       (tablespace_name)]
       node_group_id]
      [(subpartition_definition), [(subpartition_definition)], ...]

subpartition_definition:
    SUBPARTITION logical_name
      [ ENGINE [=] engine-name]
       'comment_text' ]
       'data_dir']
       'index_dir']
       max_number_of_rows]
       min_number_of_rows]
       (tablespace_name)]
       node_group_id]

select_statement:
    SELECT ...   (Some legal select statement)
CREATE TABLE用于创建带给定名称的表。您必须拥有表CREATE权限。


例子:
部分复制表
1、已经有table1存在如下;
+-------+-------------+------+-----+---------+----------------+
| Field | Type      | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| a   | int(11)   | NO   | PRI | NULL    | auto_increment |
| b   | varchar(30) | YES|   | NULL    |                |
| c   | varchar(50) | YES|   | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

2、创建(复制)表
mysql> create table table2 select a, b as bb from table1;
Query OK, 6 rows affected (0.09 sec)
Records: 6Duplicates: 0Warnings: 0

3、结果
mysql> desc table2;
+-------+-------------+------+-----+---------+-------+
| Field | Type      | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| a      | int(11)   | NO   |   | 0       |       |
| bb    | varchar(30) | YES|   | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
数据也会有了
mysql> select * from table2;
+----+----------+
| a| bb       |
+----+----------+
| 1 | ab       |
| 2 | bc       |
| 3 | ca       |
| 4 | s      |
| 5 | Ac       |
| 6 | Ba       |
+----+----------+
6 rows in set (0.00 sec)

[ 本帖最后由 kider 于 2007-7-26 15:38 编辑 ]
页: [1]
查看完整版本: "CREATE TABLE"语法及例子