mysql> select * from fruit;
+----+--------+-------+
| id | name | price |
+----+--------+-------+
| 1 | apple | 0 |
| 2 | banana | 0 |
| 3 | orange | 0 |
| 4 | mango | 0 |
| 5 | pomelo | 0 |
+----+--------+-------+
5 rows in set (0.00 sec)

  

  要求很简单,将上面fruit表的price列的值改为id列的值,比如第一条记录的price改成1(对应id)。

  刚开始,我很天真的这样想:

  1、用php或者其他的将所有记录都取出来

  2、然后每一条记录,单独修改一次

  这样就存在一个问题,效率并不高,首先,发请求、等待数据库执行,然后在迭代下一条记录。

  然后换了一种方法,就是下面这个语句:

mysql> update fruit a set price = (select id from fruit b where a.id = b.id);

  其实SQL语句写的特别明白,意思也没问题,但是,mysql不支持更改一种表,这种表就是在from子句中的表。

  所以,上面报错信息如下:

  ERROR 1093 (HY000): You can't specify target table 'a' for update in FROM clause

公布答案:

  直接更新price=id  

mysql> update fruit set price=id;
Query OK, 5 rows affected (0.00 sec)
Rows matched: 5 Changed: 5 Warnings: 0 mysql> select * from fruit;
+----+--------+-------+
| id | name | price |
+----+--------+-------+
| 1 | apple | 1 |
| 2 | banana | 2 |
| 3 | orange | 3 |
| 4 | mango | 4 |
| 5 | pomelo | 5 |
+----+--------+-------+
5 rows in set (0.00 sec)

  

  首先,我们在平常的update、insert、where筛选中,如果值的类型是字符串型,那么我们通常会使用引号将其括起来,但是我们并没有将字段名括起来。

  在上面这一条命令中,set price=id,其实id也是字段名,并不是id的值。更新的时候,会自动取出其中的值来进行更新。

最新文章

  1. Ubuntu下的MySQL安装
  2. C# redis使用
  3. CSS VS JS动画,哪个更快[译]
  4. HTTP 错误 500.19 - Internal Server Error 错误解决
  5. 客户端配置文件tnsname.ora
  6. [转]mysql-5.6.17-win32免安装版配置
  7. bzoj 2741 分块+可持久化trie
  8. codeforces 598B Queries on a String
  9. robot framework 怎么点击文本总结
  10. ASP.NET Aries 高级开发教程:主题样式及多语言(标签化控制)
  11. Linux 桌面玩家指南:08. 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码
  12. 漫画:SOA中怎样确定服务的粒度?
  13. centos6.7 配置外网端口映射
  14. LOJ#2245 魔法森林
  15. 基于git命令的代码统计方法
  16. SQL注入之重新认识
  17. A1069. The Black Hole of Numbers
  18. 在Raid模式下装Win10找不到固态硬盘怎么办
  19. Tidb数据库报错:Transaction too large
  20. 非微信内如何调起wap版微信支付

热门文章

  1. 关于.NET字符串驻留的问题
  2. 解决“Eclipse中启动Tomcat后,http://localhost:8080/无法访问”的问题
  3. esxi网络中虚拟机的相关操作
  4. LeetCode算法题-Merge Sorted Array(Java实现)
  5. PXE 自动安装物理机 (DHCP服务由路由提供, 不能再配置)
  6. 我的游戏学习日志3——三国志GBA
  7. 基于python的Selenium使用小结
  8. Gulp的简单使用
  9. 5.04-requests_cookies
  10. 【足迹C++primer】32、定制操作_2