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: 1 Duplicates: 0 Warnings: 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;
mysql select table_MySQL中的CREATE TABLE……SELECT语句相关推荐
- MYSQL:Error Code: 1786 Statement violates GTID consistency: CREATE TABLE ... SELECT.
这是因为在5.6及以上的版本内,开启了 enforce_gtid_consistency=true 功能导致的,MySQL官方解释说当启用 enforce_gtid_consistency 功能的时候 ...
- mysql create table as select from_MySQL不能用create table as select 的原因
1.新表不会自动创建创建和原表相同的索引. 2.一个事务中混合了事务和非事务语句.它会提交当前和未完成的事务. 例如,该例子中,第2个update未执行成功,会导致第1个update回滚,但是其中的C ...
- Statement violates GTID consistency: CREATE TABLE ... SELECT.
1.情况描述 在执行sql:create table table_a_copy as select * from table_a 时,发现sql执行后,并未生成新的表,而是提示Statement v ...
- 【数据分析师自学系列-MySQL】创建新表create table、create table as、create table like的区别
[数据分析师自学系列-MySQL]创建新表create table.create table as.create table like的区别 1.create table:基本创建新表方式 格式如下: ...
- mysql的sql_quote_show_create与SHOW CREATE TABLE命令介绍
来源:http://blog.sina.com.cn/s/blog_86d9fde701014dm1.html 技术背景: 刚开始学习MySQL时候,有时偷懒,会用SHOW CREATE TABLE ...
- mysql create table select from_mysql create table select复制表结构和数据实例讲解
比如现在有一张表,我们要将该表复制一份,以备以后使用,那么如何使用mysql语句来实现呢?其实我们可以直接使用create ... select ... from语句来实现,具体实现方法请看下面实例. ...
- MySQL创建数据表(CREATE TABLE语句)
在创建数据库之后,接下来就要在数据库中创建数据表.所谓创建数据表,指的是在已经创建的数据库中建立新表. 创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性.引用完整性和域 ...
- ireport修改jrxml中的sql语句_SQL中的create table与insert into语句
学习交流,欢迎留言~~ 今天学习SQL的时候遇到了个小疑问,创建数据表肯定是用create table语句的,但是为什么后面总是跟随着insert into呢? 身为一个不弄白不舒服斯基,走起~~~ ...
- MySQL错误:Can't create table‘..’ (errno:150)解决方案
场景 含有学生表s(sno,sname,sage).课程表c(cno,cname) 选课表(sc)创建时,设置(sno,cno)为主键.sno和cno为外键 drop table if exists ...
最新文章
- 数据库查询近七天的数据
- T4((Text Template Transformation Toolkit))模版引擎之基础入门 C#中文本模板(.tt)的应用...
- Java 程序员必须掌握的 8 道数据结构面试题,你会几道
- python去掉列表中的单引号_Python:如何从列表项中删除单引号(Python: How to remove single quotes from list item)...
- php注册机制,php自动注册登录验证机制实现代码_PHP教程
- 天玥运维安全网关_智慧灯杆网关
- IDEA项目目录里下找不到src,但是src确实存在的的解决方案
- 解除webservice上下传文件大小限制
- 汽车质量管理体系IATF 16949和培训及相关的标准(主要是电动汽车)
- 园林景观cad_景观广场及绿化设计(附CAD平面图)
- 动态代理(JDK动态代理)初步详解
- 计算机中的根源证书是什么,安全证书过期怎么办
- 儿童python编程入门-一款儿童编程入门的理想工具——PythonTurtle
- c语言二进制转十进制大小,c语言二进制转换成十进制的方法
- h5 js 打开微信客户端
- 世硕电子厂的故事!!测!
- CNCERT在FIRST会议关于国内PC被攻击的数据
- 集成讯飞离线语音合成SDK报:“ 未经授权的语音应用.(错误码:11210)“ 问题解决
- 2019年最新出搜索引擎蜘蛛网页爬虫大全
- HBase Shell 命令