临时表的使用
临时表:是一种仅在当前会话中可见,并在当前会话关闭时自动删除的数据表。
作用:主要用于临时存储数据。
语法:只需在 CREATE 与 TABLE 关键中间添加 TEMPORARY 即可。
方式 1:创建临时表
CREATE TEMPORARY TABLE mydb.tmp_table1 (id int);
方式 2:创建临时表
CREATE TEMPORARY TABLE mydb.tmptable2 SELECT id,name FROM shop.shgoods;
建临时表时指定的数据库可以是 MySQL 服务器中存在的数据库也可以是不存在的数据库。
若数据库不存在,操作临时表时必须使用“数据库.临时表名”指定临时表所在的数据库。
临时表中数据的操作与普通表相同,都可以进行 SELECT、INSERT、UPDATE 和 DELETE 操作。
SHOW TABLES 不能查看指定数据库下有哪些临时表.
临时表的表名必须使用 ALTER TABLE 修改,而不能使用 RENAME TABLE…TO 修改。
提出问题:向一个表 插入数据时,如何解决主键冲突的问题?
具体示例:mydb.my_goods 表经过数据复制以后,再插入编号为 20 的商品信息(橡皮,文具类,用于修正书写错误)会发生主键冲突。
mysql> INSERT INTO mydb.my_goods(id, name, content, keyword)
-> VALUES (20, '橡皮', '修正书写错误', '文具');
ERROR 1062 (23000): Duplicate entry '20' for key 'PRIMARY'
当插入数据的过程中若发生主键冲突,则插入数据操作利用更新的方式实现。
INSERT [INTO] 数据表名 [(字段列表)] {VALUES | VALUE} (字段列表)
ON DUPLICATE KEY UPDATE 字段名 1 = 新值 1[,字段名 2 = 新值 2] …;
方式一:主键冲突更新
mysql> INSERT INTO mydb.my_goods (id, name, content, keyword)
-> VALUES (20, '橡皮', '修正书写错误', '文具')
-> ON DUPLICATE KEY UPDATE name = '橡皮', content = '修正书写错误',
-> keyword = '文具';
Query OK, 2 rows affected (0.00 sec)
mysql> SELECT name, content, keyword FROM mydb.my_goods WHERE id = 20;
+------+------------+---------+
| name | content | keyword |
+------+------------+---------+
| 橡皮 | 修正书写错误| 文具 |
+------+------------+---------+
1 row in set (0.00 sec)
当插入数据的过程中若发生主键冲突,则删除此条记录,并重新插入。
REPLACE [INTO] 数据表名 [(字段列表)]
{VALUES | VALUE} (值列表) [, (值列表)] …;
版权声明: 本文为 InfoQ 作者【在即】的原创文章。
原文链接:【http://xie.infoq.cn/article/3cef985f9b2164f040a0a1ee2】。文章转载请联系作者。
评论