mysql更加旧表创建新表_MySQL临时表创建及旧表建新表

1、创建临时表

临时表是一张表,用来临时保存一些数据

特点:

只对创建该临时表的用户可见;

当会话结束时,MySQL自动删除临时表。

临时表的核心:建表和删表消耗资源极其少

创建临时表的基本格式:

CREATE TEMPORARY TABLE  tbl_name(……);

①创建的临时表在当前会话,正常使用

②断开连接,再重新连接后执行查询,抛出异常:

错误代码: 1146

Table ‘db_name.temtbl_name’ doesn‘t exist。//该临时表在会话结束的时候被系统删除。

注意:用户可以创建一个和已有的普通表名字相同的临时表。

在这种情况下,

该用户只能看到临时表而看不见同名的普通表;

当临时表被删除后,才可以看到普通表。

示例:使用相同的名字创建一个普通表和临时表

mysql> create table test_table(num int);

Query OK, rows affected (0.12 sec)

mysql> insert into test_table values();

Query OK, row affected (0.04 sec)

mysql> create temporary table test_table(num int,name varchar());

Query OK, rows affected (0.04 sec)

mysql> insert into test_table values(,'临时表测试');

Query OK, row affected (0.00 sec)

mysql> select * from test_table;

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

| num | name |

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

| | 临时表测试 |

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

row in set (0.00 sec)

mysql> drop table test_table;

Query OK, rows affected (0.00 sec)

mysql> select * from test_table;

+------+

| num |

+------+

| |

+------+

row in set (0.00 sec)

Q:当创建表时,如果表已经存在了,则MySQL会返回出错消息,我们不希望看到报错的信息,该如何处理?

A:添加IF NOT EXISTS选项,则强制不显示这个出错消息;但是,语句执行失败---建表失败。

mysql> create table if not exists PLAYERS(id int(),name varchar());

Query OK, rows affected, warning (0.00 sec)

mysql> show warnings;

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

| Level | Code | Message |

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

| Note | | Table 'PLAYERS' already exists |

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

row in set (0.00 sec)

mysql> show tables;

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

| Tables_in_TENNIS |

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

| COMMITTEE_MEMBERS |

| MATCHES |

| PENALTIES |

| PLAYERS |

| TEAMS |

| test_table |

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

6 rows in set (0.00 sec)

2、根据已有的表来创建新表

语法1:只想拷贝表结构

CREATE TABLE new_tbl LIKE orig_tbl;

将从源表复制列名、数据类型、大小、非空约束以及索引;而表的内容以及其它约束不会复制,新表是一张空表。

mysql> desc TEAMS;

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

| Field | Type | Null | Key | Default | Extra |

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

| TEAMNO | int() | NO | PRI | NULL | |

| PLAYERNO | int() | NO | | NULL | |

| DIVISION | char() | NO | | NULL | |

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

rows in set (0.00 sec)

mysql> create table copy_TEAMS like TEAMS;

Query OK, rows affected (0.11 sec)

mysql> select * from copy_TEAMS;

Empty set (0.00 sec)

mysql> desc copy_TEAMS;

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

| Field | Type | Null | Key | Default | Extra |

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

| TEAMNO | int() | NO | PRI | NULL | |

| PLAYERNO | int() | NO | | NULL | |

| DIVISION | char() | NO | | NULL | |

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

rows in set (0.00 sec)

语法2:根据SELECT子查询的拷贝

CREATE TABLE new_tbl [AS] SELECT {*|column,...} FROM orig_tbl;

新表的结构由select列表决定;同时把查询返回的结果集中的行插入到目标表中;只能把非空约束带入到新表中(在有的时候就会显得很鸡肋了),也不会复制索引

mysql> create table p_m

-> as

-> select a.NAME,a.SEX,b.MATCHNO,b.WON,b.LOST

-> from PLAYERS a,MATCHES b

-> where a.PLAYERNO=b.PLAYERNO;

Query OK, rows affected (0.15 sec)

Records: Duplicates: Warnings:

mysql> select * from p_m;

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

| NAME | SEX | MATCHNO | WON | LOST |

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

| Parmenter | M | | | |

| Parmenter | M | | | |

| Parmenter | M | | | |

| Baker | M | | | |

| Hope | M | | | |

| Everett | M | | | |

| Brown | M | | | |

| Newcastle | F | | | |

| Collins | F | | | |

| Moorman | F | | | |

| Bailey | F | | | |

| Bailey | F | | | |

| Newcastle | F | | | |

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

rows in set (0.00 sec)

通过根据已有表来创建新表,添加选项temporary,创建临时副本用来做练习最合适:表内容可一样,会话结束,临时表自动删除,原始表中的内容不受任何影响。

注意:

如果在表名后面指定的列名和原始表中的列名相同,则可以改变列的大小和非空约束;

如果在表名后面指定的列名和原始表中的列名不同,则它作为一个新的列。

mysql> select * from TEAMS;

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

| TEAMNO | PLAYERNO | DIVISION |

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

| | | first |

| | | second |

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

mysql> CREATE TABLE teams_copy

-> (

-> teamno INTEGER NOT NULL PRIMARY KEY,

-> playerno INTEGER NULL,

-> division char() NOT NULL,

-> coach varchar()

-> )

-> as

-> select * from TEAMS;

Query OK, rows affected (0.11 sec)

Records: Duplicates: Warnings:

mysql> select * from teams_copy;

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

| coach | TEAMNO | PLAYERNO | DIVISION |

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

| NULL | | | first |

| NULL | | | second |

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

Mysql数据库多对多关系未建新表

原则上,多对多关系是要新建一个关系表的,当遇到没有新建表的情况下如何查询多对多的SQL呢? FIND_IN_SET(str,strlist) 官网:http://dev.mysql.com/doc/r ...

MySQL通过SQL语句来直接生成新表

1. 既复制表结构,也复制表数据 mysql> CREATE TABLE tmp_table SELECT * FROM dede_news; 说明:这种方法的缺点就是新表中没有了旧表的prim ...

MySQL临时表创建

和SQL SERVER 创建临时表不同 不能直接写 Create table #Test_Table 而是需要在 Create 和 table 之间 加入 TEMPORARY(temporary&lt ...

Oracle之现有表上建新表、操作符、字符函数

#PLSQL技术培训15页PPT利用现有表创建表(百度) 说明:做新操作前要对旧表备份  具体百度 语法: create table as select ...

MySQL 复制已存在的表生成新表

从已有的表创建一个新的空表 CREATE TABLE new_table LIKE old_table; 注意: create table ... like 创建的表会保留原有表的字段.索引的定义,但 ...

MYSQL临时表创建索引

DROP TEMPORARY TABLE IF EXISTS tmp_record_t2;CREATE TEMPORARY TABLE tmp_record_t2(consumption_id INT ...

MySQL完整复制表到另一个新表

1. 复制表结构 CREATE TABLE newuser LIKE user; 2. 导入数据 INSERT INTO newauser SELECT * FROM user;

linux定时查询mysql数据库并把结果保存到新表 然后备份数据库

脚本文件名:myshell内容如下: #!/bin/bash # mysql用户名 username="root" # mysql密码 password="root&qu ...

mysql 查询去除空格字符然后倒入新表

/* 导入数据的时候,有空白字符,去除一下然后导出. 四年前干的事,现在再干一遍. */ $dbhost= '127.0.0.1'; $dbuser= 'root'; $dbpass= '123456 ...

随机推荐

「JavaScript」四种跨域方式详解

超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...

CPU阿甘

本系列文章全部摘选自"码农翻身"公众号,仅供个人学习和分享之用.文章会给出原文的链接地址,希望不会涉及到版权问题. 个人感言:真正的知识是深入浅出的,码农翻身" 公共号将 ...

关于自定义的NavigationBar

系统的NavigationBar局限太大,而且现在我要做的navigationBar需要四个按钮,一个Label,一个ImageView,所以不能用系统默认的. 刚刚咨询了一个高手,她的建议是,将系统 ...

oracle删除字段时候判断字段是否存在

declare v_count number; begin ) into v_count from all_tab_columns a where a.TABLE_NAME = 'XXX1' and ...

SQL sever 创建定时执行任务

在SQL的使用过程中,我们经常要做些数据备份以及定时执行的任务. 这些任务能够帮助我们简化工作过程. 下面我们了解下如何创建一个定时执行的存储过程. 首先我们要打开 SQL server 代理服务 选 ...

Linux命令行学习

"mkdir + 文件夹名字" 创建文件夹 "pwd" 显示当前工作目录的绝对路径. "touch" 创建空文件. "cat /p ...

MySQL 5.7 关闭严格模式

If your app was written for older versions of MySQL and is not compatible with strict SQL mode in My ...

html5-output的用法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值