标签: sql-delete

MySQL,删除和索引提示

我必须根据某些条件从一个超过1亿行的表中删除大约10K行.当我执行查询时,大约需要5分钟.我运行了一个解释计划(自MySQL不支持后delete转换为查询)并发现MySQL使用了错误的索引.select *explain delete

我的问题是:有没有办法告诉MySQL在删除期间使用哪个索引?如果没有,我该怎么办?选择临时表然后从临时表中删除?

mysql query-optimization sql-execution-plan sql-delete

11
推荐指数
1
解决办法
9302
查看次数

我想在MySQL中从2个表中删除一个触发器

我有3个MySQL表(food,apple,和orange).

我想删除以下行:

apple(idapple, iduser, name) 
orange(idornge, iduser, name)
Run Code Online (Sandbox Code Playgroud)

food(iduser, name)使用一个触发器删除行时?

到目前为止,这是我的触发器:

  CREATE TRIGGER `food_before_delete`

    AFTER DELETE ON `food` 
    FOR EACH ROW 

      DELETE FROM apple, orange 
      WHERE 
      apple.iduser=OLD.iduser and 
      orange.iduser=OLD.iduser
Run Code Online (Sandbox Code Playgroud)

但它不会编译.如何制作一次从两个表中删除的触发器?

mysql triggers sql-delete

11
推荐指数
1
解决办法
3万
查看次数

SELECT然后立即DELETE mysql记录

我有一个运行SELECT查询的PHP脚本,然后立即删除该记录.有多台机器正在ping同一个php文件并从同一个表中获取数据.每台远程计算机都在cron作业上运行.

我的问题是,有时它无法快速删除,因为有些机器在同一时间ping.

我的问题是,我如何从数据库中选择一条记录,并在下一台机器抓取它之前将其删除.现在我只是添加了一个短暂的延迟,但效果并不好.我尝试过使用交易,但我不认为这适用于此.

这是我的脚本的示例片段:

<?php

$query = "SELECT * FROM `queue` LIMIT 1";
$result = mysql_query($query) or die(mysql_error());

while($row = mysql_fetch_array($result)){
    $email = $row['email'];
    $campaign_id = $row['campaign'];
}

$queryx = "DELETE FROM `queue` WHERE `email` = '".$email."'";
$resultx = mysql_query($queryx) or die(mysql_error());

?>
Run Code Online (Sandbox Code Playgroud)

真的很感激帮助.

php mysql select transactions sql-delete

11
推荐指数
3
解决办法
1万
查看次数

"DELETE FROM table"的output_expression有什么作用?

我最近遇到了一个奇怪的问题.以下是有效的SQL:

DELETE FROM customer *;
Run Code Online (Sandbox Code Playgroud)

PostgreSQL DELETE的文档说明星是一个可能的值output_expression:

删除每一行后由DELETE命令计算和返回的表达式.表达式可以使用USING中列出的表或表的任何列名.写*以返回所有列.

我在有星和没有星星的情况下尝试过它,看不出有什么区别.事实上,我可以在表名之后添加任何单个单词并且它被接受.它甚至不必是实际的列名.没有额外的东西返回.

db=> DELETE FROM customer wheeeeeee;
DELETE 19
Run Code Online (Sandbox Code Playgroud)

那么它做了什么以及我可以用它做什么?

问题也发布在PostgreSQL邮件列表上.

sql postgresql sql-delete

11
推荐指数
1
解决办法
256
查看次数

在Postgres中使用DELETE的返回值进行UPDATE

我需要使用从另一个表中删除的值来更新表.情况是评论投票记分员类似于SO上的评分投票记分员.我正在使用python来处理postgres,但这不应该有所作为.

query="""
UPDATE comment SET score=score-(DELETE FROM history
                                WHERE commentId=%(commentId)s AND
                                      userIdentity=%(userIdentity)s RETURNING vote)
WHERE commentId=%(commentId)s;
"""
cursor.execute(query, data)
Run Code Online (Sandbox Code Playgroud)

出现错误(DELETE FROM; 出现语法错误.我可以用DELETE声明替换SELECT声明,它会起作用,这里有什么我想念的吗?我想在更新中使用返回值.这可能吗?一切都有帮助.

相关模式:

CREATE TABLE history (
    commentId bigint,
    vote int,
    userIdentity varchar(256),
);
CREATE TABLE comment (
    id bigint,
    score bigint,
);
Run Code Online (Sandbox Code Playgroud)

history.vote通常是1-1.

postgresql syntax sql-update sql-delete

11
推荐指数
1
解决办法
7529
查看次数

SQL中的DELETE和DELETE FROM之间的区别?

有吗?我正在研究一些存储过程,在一个地方我找到了以下行:

DELETE BI_Appointments
WHERE VisitType != (
    SELECT TOP 1 CheckupType
    FROM BI_Settings
    WHERE DoctorName = @DoctorName)
Run Code Online (Sandbox Code Playgroud)

这会做同样的事情:

DELETE FROM BI_Appointments
WHERE VisitType != (
    SELECT TOP 1 CheckupType
    FROM BI_Settings
    WHERE DoctorName = @DoctorName)
Run Code Online (Sandbox Code Playgroud)

或者是语法错误,还是完全不同的东西?

sql t-sql sql-delete

11
推荐指数
2
解决办法
2万
查看次数

从表中删除数据,通过两个表连接

我正在使用一些相当敏感的数据,所以我想绝对确定我做得很好.

我试图删除表中与另一个表关联的行

关联表的唯一方法是通过另外两个表加入......

这是确切的查询:

DELETE tt.Transaction_Amount, tt.Transaction_ID
  FROM ItemTracker_dbo.Transaction_Type tt
  JOIN ItemTracker_dbo.Transaction t ON tt.Transaction_ID = t.Transaction_ID
  JOIN ItemTracker_dbo.Purchase p ON p.Transaction_ID = tt.Transaction_ID
  JOIN ItemTracker_dbo.Item i ON i.Item_ID = p.Item_ID
 WHERE i.Client_ID = 1
Run Code Online (Sandbox Code Playgroud)

如你所见,它并不漂亮.

我通过My​​SQL查询浏览器得到一个奇怪的错误...

MULTI DELETE中的未知表'Transaction_Amount'

我试过阅读mysql手册,看起来这应该对我有用......任何人都有任何想法?

mysql sql sql-delete

10
推荐指数
1
解决办法
2万
查看次数

使用子查询在mysql基础上删除非常慢

这个mysql查询运行了大约10个小时,但还没有完成.有些事情是可怕的错误.

这里有两个表(文本和垃圾邮件).垃圾邮件将垃圾邮件的ID存储在我要删除的文本中.

DELETE FROM tname.text WHERE old_id IN (SELECT textid FROM spam);
Run Code Online (Sandbox Code Playgroud)

垃圾邮件只有2列,都是整数.800K条目的文件大小为几Mbs.两个int都是主键.

文本有3列.id(prim键),文本,标志.大约1200K条目,大约2.1千兆字节(大多数垃圾邮件).

服务器是一个至强四核,2千兆字节的ram(不要问我为什么).只有apache(为什么?)和mysqld正在运行.它是一个旧的免费bsd和mysql 4.1.2(不要问我为什么)

主题:6个问题:188805慢查询:318打开:810刷新表:1打开表:157每秒查询数:7.532

Mysql my.cnf:

[mysqld]
datadir=/usr/local/mysql
log-error=/usr/local/mysql/mysqld.err
pid-file=/usr/local/mysql/mysqld.pid
tmpdir=/var/tmp
innodb_data_home_dir =
innodb_log_files_in_group = 2
join_buffer_size=2M
key_buffer_size=32M
max_allowed_packet=1M
max_connections=800
myisam_sort_buffer_size=32M
query_cache_size=8M
read_buffer_size=2M
sort_buffer_size=2M
table_cache=256
skip-bdb
log-slow-queries = slow.log
long_query_time = 1

#skip-innodb
#default-table-type=innodb
innodb_data_file_path = /usr/local/mysql/ibdata1:10M:autoextend
innodb_log_group_home_dir = /usr/local/mysql/
innodb_buffer_pool_size = 128M
innodb_log_file_size = 16M
innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit=1
#innodb_additional_mem_pool_size=1M
#innodb_lock_wait_timeout=50

log-bin
server-id=201

[isamchk]
key_buffer_size=128M
read_buffer_size=128M
write_buffer_size=128M
sort_buffer_size=128M

[myisamchk]
key_buffer_size=128M[server:~] dmesg | grep memory
real memory …
Run Code Online (Sandbox Code Playgroud)

mysql config subquery sql-delete

10
推荐指数
2
解决办法
4901
查看次数

从MySQL中删除COUNT(*)

好的,所以这里已有几个帖子,网上还有更少的帖子.我真的尝试了每一个,无法得到任何工作.希望有人在这里可以怜悯我:)

这是我正在使用的数据.我想删除所有这些记录.

SELECT
part_desc, count(*) as rec_num
FROM ag_master
GROUP BY part_desc HAVING COUNT(*) > 1000;

+--------------------------------------+---------+
| part_desc                            | rec_num |
+--------------------------------------+---------+
| SILICON DELAY LINE, TRUE OUTPUT      |    1092 |
| LOADABLE PLD                         |    1401 |
| 8-BIT, FLASH, 8 MHz, MICROCONTROLLER |    1411 |
| FPGA                                 |    1997 |
| 8-BIT, MROM, 8 MHz, MICROCONTROLLER  |    3425 |
+--------------------------------------+---------+
5 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

我最接近找到可以执行此操作的代码如下所示.语法检查正常并运行,但它似乎只是挂起数据库.我让它运行了长达10分钟,没有任何事情发生,所以我放弃它.

DELETE
FROM ag_master
WHERE part_id IN (
  SELECT part_id
  FROM ag_master …
Run Code Online (Sandbox Code Playgroud)

mysql count having sql-delete

10
推荐指数
2
解决办法
2万
查看次数

使用带有多个子句的where子句删除SQLite Row

我一直在寻找并没有设法找到解决方案或工作示例,所以这里.

我已经建立了一个SQLite数据库,它有五列不同的字段,可以有效地为用户构建一个列表.列表中将有多个值相同,除了设置为自动增量的ROWID.

无论是用户还是程序都知道的ROWID一旦值已被输入到数据库中,所以我希望用户能够删除一行,如果它包含了其他领域的所有四个.

我的代码看起来像这样:

Database
            .delete(DATABASE_TABLE,
                    "KEY_DATE='date' AND KEY_GRADE='style2' AND KEY_STYLE='style' AND KEY_PUMPLEVEL='pumpLevel'",
                    null);
Run Code Online (Sandbox Code Playgroud)

但这并没有删除任何值.我几乎可以肯定这个命令的语法是罪魁祸首.

如何使用多个where子句格式化delete命令的where子句?

解决方案如下:

ourDatabase.delete(DATABASE_TABLE, "ROWID = (SELECT Max(ROWID) FROM "
            + DATABASE_TABLE + " WHERE " + "date=? AND grade=? AND "
            + "style=? AND pump_level=?)", new String[] { date, grade,
            style, pumpLevel });
Run Code Online (Sandbox Code Playgroud)

sqlite android where-clause sql-delete

10
推荐指数
2
解决办法
3万
查看次数