免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2448 | 回复: 5
打印 上一主题 下一主题

达人请进 数据删除问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-28 17:09 |只看该作者 |倒序浏览
目的是删除ab_url表中mainhash字段不在ab_data表中mainhash字段的数据记录,查询的结果如下:
  1. select ab_url.mainhash from ab_url left join ab_data on ab_url.mainhash = ab_data.mainhash where ab_data.mainhash is null;
复制代码
  1. +----------------------------------+
  2. | mainhash                         |
  3. +----------------------------------+
  4. | NULL                             |
  5. | 0000070c44b6c2c792efeb5ce2ed8109 |
  6. | 00022babbf720ed0e5c0df566a1baac0 |
  7. | 00060e9e44c7446fae4ab84e068a1298 |
  8. | 0006707b2c42f5e99977cfb8458ec668 |
  9. | 000a7b914dffa38b95eba2d5bc06e403 |
  10. | 000fe9861acfaf8748ff043a15930bcd |
  11. | 00113de7d39f0f26d77a367eff04b9d0 |
  12. | 001282891104656804f2612c0e8db968 |
  13. | 00160a4854c8c871ffef57ca18fac34e |
  14. +----------------------------------+
复制代码
这些数据我现在无法使用
  1. delete from ab_url left join ab_data on ab_url.mainhash = ab_data.mainhash where ab_data.mainhash is null
复制代码
;语句删除,
当尝试用
  1. delete ab_url,ab_data from ab_url left join ab_data on ab_url.mainhash = ab_data.mainhash where ab_data.mainhash is null
复制代码
;语句时,发现执行时间特别长,不知该语句是否真有效,望各位兄弟指点迷津!谢谢

另外,表结构
  1. mysql> desc ab_url;
  2. +-----------+---------------+------+-----+---------+-------+
  3. | Field     | Type          | Null | Key | Default | Extra |
  4. +-----------+---------------+------+-----+---------+-------+
  5. | url       | varchar(1024) | YES  |     | NULL    |       |
  6. | urlhash   | varchar(40)   | NO   | PRI |         |       |
  7. | mainhash  | varchar(40)   | YES  | MUL | NULL    |       |
  8. | dir       | varchar(32)   | YES  |     | NULL    |       |
  9. | filename  | varchar(512)  | YES  |     | NULL    |       |
  10. | flag      | int(4)        | YES  |     | 0       |       |
  11. | uptime    | datetime      | YES  |     | NULL    |       |
  12. | page_url  | char(32)      | YES  | MUL | NULL    |       |
  13. | partorder | int(4)        | YES  |     | 0       |       |
  14. +-----------+---------------+------+-----+---------+-------+
  15. 9 rows in set (0.00 sec)

  16. mysql> desc ab_data;
  17. +-----------------+--------------+------+-----+---------+-------+
  18. | Field           | Type         | Null | Key | Default | Extra |
  19. +-----------------+--------------+------+-----+---------+-------+
  20. | uptime          | datetime     | YES  |     | NULL    |       |
  21. | filesize        | double       | YES  | MUL | NULL    |       |
  22. | filename        | varchar(512) | YES  |     | NULL    |       |
  23. | load_path       | varchar(32)  | YES  |     | NULL    |       |
  24. | server_ip       | varchar(36)  | YES  |     | NULL    |       |
  25. | adduction_num   | int(4)       | YES  |     | 0       |       |
  26. | hits            | int(4)       | YES  |     | 0       |       |
  27. | dir             | varchar(32)  | YES  |     | NULL    |       |
  28. | mainhash        | varchar(40)  | NO   | PRI |         |       |
  29. | lastvisitedtime | datetime     | YES  | MUL | NULL    |       |
  30. | keyhash         | varchar(40)  | YES  |     | NULL    |       |
  31. | name            | varchar(256) | YES  |     | NULL    |       |
  32. | page_name       | varchar(512) | YES  |     | NULL    |       |
  33. | type            | varchar(10)  | YES  |     | NULL    |       |
  34. +-----------------+--------------+------+-----+---------+-------+
  35. 14 rows in set (0.00 sec)
复制代码

论坛徽章:
0
2 [报告]
发表于 2011-01-28 17:31 |只看该作者
回复 1# bacon1001


   看半天,不是很清楚

我理解,就是删除ab_url中的数据,条件是 mainhash不在 ab_data的该字段中。

直接建个表 保存 join的数据(on mainhash)

trancate掉ab_url表,然后新表 换名字

论坛徽章:
0
3 [报告]
发表于 2011-01-28 17:39 |只看该作者
回复  bacon1001


   看半天,不是很清楚

我理解,就是删除ab_url中的数据,条件是 mainhash不在 a ...
jiwang1980 发表于 2011-01-28 17:31



    恩 你理解是正确的 可能是我表述不清。:wink:
但是这个过程具体是如何实现的呢,因为有子查询,在这里相当麻烦,望兄台给出具体的操作语句,甚谢!

论坛徽章:
0
4 [报告]
发表于 2011-01-28 17:45 |只看该作者
补充一句 原来想使用not in的子查询 但执行效率真是出奇的慢,所以后面采用 left join的方式,但这种方式造成删除上的困难
  1. mysql> delete from ab_url where mainhash not in (select mainhash from ab_data);
  2. ^CQuery aborted by Ctrl+C
  3. ERROR 1317 (70100): Query execution was interrupted
复制代码
  1. mysql> select count(*) from ab_url;
  2. +----------+
  3. | count(*) |
  4. +----------+
  5. |   374392 |
  6. +----------+
  7. 1 row in set (0.00 sec)

  8. mysql> select count(*) from ab_data;
  9. +----------+
  10. | count(*) |
  11. +----------+
  12. |   347020 |
  13. +----------+
  14. 1 row in set (0.00 sec)
复制代码

论坛徽章:
0
5 [报告]
发表于 2011-01-28 18:10 |只看该作者
回复 4# bacon1001


1. create table test as select ab_url.* from ab_url join ab_data using(mainhash);
2. drop table ab_url; (如果不删除,就改名字)
3. alter table test rename ab_url;


自己判断,出错不负责哈

论坛徽章:
0
6 [报告]
发表于 2011-01-28 18:20 |只看该作者
{:2_168:} 回复 5# jiwang1980


    恩 谢谢 回头试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP