300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > mysql select table_MySQL中的CREATE TABLE……SELECT语句

mysql select table_MySQL中的CREATE TABLE……SELECT语句

时间:2019-09-28 01:41:42

相关推荐

mysql select table_MySQL中的CREATE TABLE……SELECT语句

在MySQL中,可使用CREATE TALBE. . .SELECT语句将查询结果转存到一个新表中。

创建新表

create table tabname(col1 type1 [not null] [primary key],col2

type2 [not null],..)

根据已有的表创建新表

create table tab_new like tab_old

(使用旧表创建新表)

create table tab_new as select col1,col2 . . . from tab_old

definition only

您可以在CREATE TABLE语句的末尾添加一个SELECT语句,在一个表的基础上创建表。

CREATE TABLE new_tbl SELECT * FROM orig_tbl;

MySQL会对SELECT中的所有项创建新列。举例说明:

mysql> CREATE TABLE test (a INT NOT NULL

AUTO_INCREMENT,

->PRIMARY KEY (a), KEY(b))

->TYPE=MyISAM SELECT b,c FROM test2;

本语句用于创建含三个列(a, b,

c)的MyISAM表。注意,用SELECT语句创建的列附在表的右侧,而不是覆盖在表上。参考以下示例:

mysql> SELECT * FROM foo;

+---+

| n |

+---+

| 1 |

+---+

mysql> CREATE TABLE bar (m INT) SELECT n FROM foo;

Query OK, 1 row affected (0.02 sec)

Records: 1Duplicates: 0Warnings: 0

mysql> SELECT * FROM bar;

+------+---+

| m| n

|

+------+---+

| NULL | 1 |

+------+---+

1 row in set (0.00 sec)

对应于表foo中的每一行,在表bar中插入一行,含有表foo中的值以及新列中的默认值。

在由CREATE TABLE...SELECT生成的表中,只在CREATE

TABLE部分中命名的列首先出现。在两个部分中都命名的列和只在SELECT部分中命名的列随后出现。也可以通过指定CREATE

TABLE部分中的列覆盖SELECT列中的数据类型。

如果在把数据复制到表中时出现错误,则表会自动被取消,不会被创建。

CREATE

TABLE...SELECT不会自动创建任何索引。索引需要专门创建,以便使语句的灵活性更强。如果您希望为已创建的表建立索引,您应在SELECT语句前指定索引。

mysql> CREATE TABLE bar (UNIQUE (n)) SELECT n FROM foo;

列的类型会发生部分转化。例如,AUTO_INCREAMENT属性不会被保留,VARCHAR列会变成CHAR列。

当使用CREATE...SELECT创建表时,在查询时一定要对功能调用和表达式起别名。如果不起别名,则CREATE语句会出现错误或者生成不符合需要的列名称。

CREATE TABLE artists_and_works

SELECT artist.name, COUNT(work.artist_id) AS number_of_works

FROM artist LEFT JOIN work ON artist.id = work.artist_id

GROUP BY artist.id;

您也可以明确地为一个已生成的列指定类型:

CREATE TABLE foo (a TINYINT NOT NULL) SELECT b+1 AS a FROM

bar;

根据其它表的定义(包括在原表中定义的所有的列属性和索引),使用LIKE创建一个空表:

CREATE TABLE new_tbl LIKE orig_tbl;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。