28.笔记 MySQL学习——其他创建表方式
可以根据其他表或根据查询结果创建新表。
例如 CREATE TABLE … LIKE 根据原有表创建一个表,该表原有表的空副本。把原有表的结构复制过来,保留列的属性,索引也会被复制。
CREATE TABLE … SELECT可以一条SELECT 语句的查询结果创建一个新表,不会复制索引,也不会复制所有的列属性。
可以将两个配合使用,先创建表,再进行填充。
mysql> create table mytbl select pi() *2;
Query OK, 1 row affected (0.01 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> select * from mytbl;
+----------+
| pi() *2 |
+----------+
| 6.283185 |
+----------+
1 row in set (0.00 sec)
某些场合,可以采用在语句的SELECT部分使用CAST函数的方式,在新表里强制使用某些特定的属性。
mysql> create table mytbl select cast( 1 asunsigned) as i,cast(curtime() as time) as t, cast(pi() as decimal(10,5)) as d;
Query OK, 1 row affected (0.02 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> desc mytbl;
+-------+-----------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------+------+-----+---------+-------+
| i | int(1) unsigned | NO | | 0 | |
| t | time | YES | |NULL | |
| d | decimal(10,5) | NO | | 0.00000 | |
+-------+-----------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
可以在CREATE TABLE部分提供显示的列定义,以便将它们用在SELECT 部分检索的列里。