用 SELECT 的结果创建表

关系数据库的一个重要概念是,任何数据都表示为行和列组成的表,而每条 SELECT 语句的结果也都是一个行和列组成的表。在许多情况下,来自 SELECT 的“表”仅是一个随着您的工作在显示屏上滚动的行和列的图像。在 MySQL 3.23 以前,如果想将 SELECT 的结果保存在一个表中以便以后的查询使用,必须进行特殊的安排:

1) 运行 DESCRIBE 或 SHOW COLUMNS 查询以确定想从中获取信息的表中的列类型。

2) 创建一个表,明确地指定刚才查看到的列的名称和类型。

3) 在创建了该表后,发布一条 INSERT ... SELECT 查询,检索出结果并将它们插入所创建的表中。

在 MySQL 3.23 中,全都作了改动。CREATE TABLE ... SELECT 语句消除了这些浪费时间的东西,使得能利用 SELECT 查询的结果直接得出一个新表。只需一步就可以完成任务,不必知道或指定所检索的列的数据类型。这使得很容易创建一个完全用所喜欢的数据填充的表,并且为进一步查询作了准备。

如果你在CREATE语句后指定一个SELECT,MySQL将为在SELECT中所有的单元创键新字段。例如:

mysql> CREATE TABLE test

-> (a int not null auto_increment,primary key (a), key(b))

-> SELECT b,c from test2;

这将创建一个有3个列(a,b,c)的表,其中b,c列的数据来自表test2。注意如果在拷贝数据进表时发生任何错误,表将自动被删除。

可以通过选择一个表的全部内容(无 WHERE 子句)来拷贝一个表,或利用一个总是失败的 WHERE 子句来创建一个空表,如:

mysql> CREATE TABLE test SELECT * from test2;

mysql> CREATE TABLE test SELECT * from test2 where 0;

如果希望利用 LOAD DATA 将一个数据文件装入原来的文件中,而不敢肯定是否具有指定的正确数据格式时,创建空拷贝很有用。您并不希望在第一次未得到正确的选项时以原来表中畸形的记录而告终。利用原表的空拷贝允许对特定的列和行分隔符用 LOAD DATA 的选项进行试验,直到对输入数据的解释满意时为止。在满意之后,就可以将数据装入原表了。

可结合使用 CREATE TEMPORARY TABLE 与 SELECT 来创建一个临时表作为它自身的拷贝,如:

这允许修改 my_tbl 的内容而不影响原来的内容。在希望试验对某些修改表内容的查询,而又不想更改原表内容时,这样做很有用。为了使用利用原表名的预先编写的脚本,不需要为引用不同的表而编辑这些脚本;只需在脚本的起始处增加 CREATE TEMPORARY TABLE 语句即可。相应的脚本将创建一个临时拷贝,并对此拷贝进行操作,当脚本结束时服务器会自动删除这个拷贝。

要创建一个作为自身的空拷贝的表,可以与 CREATE TEMPORARY ... SELECT 一起使用 WHERE 0 子句,例如:

但创建空表时有几点要注意。在创建一个通过选择数据填充的表时,其列名来自所选择的列名。如果某个列作为表达式的结果计算,则该列的“名称”为表达式的文本。表达式不是合法的列名,可在 mysql 中运行下列查询了解这一点:

为了正常工作,可为该列提供一个合法的别称:

如果选择了来自不同表的具有相同名称的列,将会出现一定的困难。假定表 t1 和 t2 两者都具有列 c,而您希望创建一个来自两个表中行的所有组合的表。那么可以提供别名指定新表中惟一性的列名,如:通过选择数据进行填充来创建一个表并会自动拷贝原表的索引。

用ALTER TABLE语句修改表的结构

有时你可能需要改变一下现有表的结构,那么Alter Table语句将是你的合适选择。

增加列

alter table tbl_name add col_name type

例如,给表增加一列weight

mysql>alter table pet add weight int;

删除列

alter table tbl_name drop col_name

例如,删除列weight:

mysql>alter table pet drop weight;

改变列

alter table tbl_name modify col_name type

例如,改变weight的类型:

mysql> alter table pet modify weight samllint;

另一种方法是:

alter table tbl_name change old_col_name col_name type

例如:

mysql> alter table pet change weight weight samllint;

给列更名

mysql>alter table pet change weight wei;

给表更名

alter table tbl_name rename new_tbl

例如,把pet表更名为animal

mysql>alter table pet rename animal;

改变表的类型

另外,可以为列增加或删除索引等属性,不再详述,请参阅附录。

用DROP TABLE 语句删除数据表

DROP TABLE [IF EXISTS] tbl_name [, tbl_name,...]

DROP TABLE删除一个或多个数据库表。所有表中的数据和表定义均被删除,故小心使用这个命令!

在MySQL 3.22或以后版本,你可以使用关键词IF EXISTS类避免不存在表的一个错误发生。

例如:

mysql>USE mytest;

mysql>DROP TABLE guestbook;

或者,也可以同时指定数据库和表:

mysql>DROP TABLE mytest. guestbook;

总结

本节讲述了有关表的大部分操作,现在将所述内容总结如下:

MySQL的表的三种类型

如何创建表、删除表

如何改变表的结构、名字

如何使用mysqlshow实用程序

mysql 中用select建表_用 SELECT 的结果创建表相关推荐

  1. mysql附录建表_用CREATE TABLE 语句创建数据表

    用CREATE TABLE 语句创建数据表 用 CREATE TABLE 语句创建表.此语句的完整语法是相当复杂的,因为存在那么多的可选子句,但在实际中此语句的应用相当简单.如我们在第 1 章中使用的 ...

  2. mysql select符合查询_数据库select group by 和having语句 多表连接查询 复合查询

    1.SELECT --group by 子句 group by子句按照指定的列column_name对表数据进行分组 group by 后面跟的列也叫分组特性列 使用group by后,能选择的列   ...

  3. mysql 临时表建索引_使用select中的索引在MySQL中创建一个临时表

    我用CREATE TEMPORARY TABLE SELECT的正确语法摔了一会儿.想出了一些事情,我想与社区的其他人分享答案. 有关该语句的基本信息可以在以下MySQL链接中找到: 有时候,解释规范 ...

  4. mysql limit 5 5 正确_关于SELECT * FROM tb_book LIMIT 5,10描述正确的是( )。 (5.0分)_学小易找答案...

    [简答题]粉末片木栓细胞 [单选题]下列数据类型中适合存储PDF文档的是( ) (5.0分) [简答题]10.1第二大题 [单选题]下面在sh_goods表中根据cat_id升序排序,并对每个cat_ ...

  5. mysql账目表_数据库1(数据库、表及表数据、SQL语句)

    01数据库概念 A: 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来, 用户可以对数据库中的数据进行增加,修改,删除及查询操作. B: 什么是数据库管理 ...

  6. mysql和oracle的锁_关于数据库行锁与表锁的认识

    MySQL MySQL(InnoDB存储引擎)默认是自动提交事务的,所以这个测试,需要先将MySQL的autocommit设置为0,关闭自动提交,需要自己手动提交事务 -- 关闭自动提交 set au ...

  7. mysql 按月建表_MySQL之存储过程按月创建表

    具体不多说,直接上代码.欢迎一起交流和学习. 创建一个按月创建表的存储过程,SQL语句如下: DELIMITER // DROP PROCEDURE IF EXISTS create_table_by ...

  8. java动态是如何根据实体建表_传入Java对象 自动创建动态表 并录入数据

    看到Hibernate你给一个对象,他就能动态的创建配置文件里面指定的表名,然后把数据录入到数据库,当初感觉是很神奇,不过,好像 Hibernate不能动态的分表创建表和录入数据 我这里写了一个公用的 ...

  9. mysql 审批表_用sql统计信贷业务审批表、逾期表(即期)

    报表1:审批表 #DROP VIEW IF EXISTS approve_channel_grp ; #CREATE VIEW approve_channel_grp as SELECT date a ...

  10. 命令行使用mysql创建表空间_达梦命令行创建表空间

    1.2命令方式创建 到数据库安装目录   cd /home/dmdba/bin 执行创建数据库实例的命令: ./dminit  path=/home/dmdba/data db_name=数据库名 i ...

最新文章

  1. NeHe教程Qt实现——lesson16
  2. android studio 发布版本,Android Studio 4.1 Canary 版本发布
  3. 抛弃一键恢复。教你用vista一键还原备份多系统。图文教程
  4. python读取大文件csv_实现读取csv文件,文件里面是有限个百分数成绩(99.6、76.8等等...
  5. USACO-Section1.3 Milking Cows (区间问题)
  6. rust投递箱连接箱子_一种用于防盗的牛奶投递箱的制作方法
  7. android开发实例-标准意图方法Intent(二)
  8. Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (18) - 数据预取
  9. MySQL高级知识(四)——Explain
  10. Bootstrap 后台模板-AdminLTE
  11. 【预测模型】基于matlab离散状态空间模型模拟预测控制仿真系统(单输入单输出)【含Matlab源码 1537期】
  12. 创建属于自己的OneNote插件
  13. 【智慧工厂】一篇让你搞明白ERP、SAP、MES的文章
  14. 在计算机中表示一个信息容量的基本单位是,微型计算机中,存储器容量的基本单位是()。...
  15. ListView刷新单条item实现方法
  16. 熊拍拍是什么?熊拍拍是下一个风口吗?
  17. WIN7激活工具拒绝访问cannot open file C:\OEMSF解决方法
  18. Coverage [minx,miny,maxx,maxy] is [12, 4, 13, 6, 3], index [x,y,z] is [2, 5, 3]错误原因及其解决方式...
  19. [Kaggle]泰坦尼克号沉没预测
  20. Ubuntu 18.04 安装 xdm 2018 ( Xtreme Download Manager 2018 )

热门文章

  1. 给浏览器添加油猴插件 and 如何使用
  2. 计算机职业规划书备选方案,职业规划书备选方案
  3. 五分钟带你玩转rabbitmq(八)【真实案例】消息消费失败如何处理?
  4. Matlab中镜头畸变矫正
  5. 员工管理系统数据库课程设计
  6. 一阶滞后环节matlab,一个一阶惯性带有滞后环节的PID仿真程序
  7. 2018~2021年版北大中文核心期刊目录(最新第八版)
  8. 2020届 中国农业银行 研发中心 武汉研发部 校招 (面经)
  9. 《麦肯锡方法》第11章 用图表说明问题-思维导图
  10. 备战数学建模22-数学建模论文写作规范总结