我必须根据某些条件从一个超过1亿行的表中删除大约10K行.当我执行查询时,大约需要5分钟.我运行了一个解释计划(自MySQL不支持后delete转换为查询)并发现MySQL使用了错误的索引.select *explain delete
我的问题是:有没有办法告诉MySQL在删除期间使用哪个索引?如果没有,我该怎么办?选择临时表然后从临时表中删除?
我有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)
但它不会编译.如何制作一次从两个表中删除的触发器?
我有一个运行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)
真的很感激帮助.
我最近遇到了一个奇怪的问题.以下是有效的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)
那么它做了什么以及我可以用它做什么?
我需要使用从另一个表中删除的值来更新表.情况是评论投票记分员类似于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.
有吗?我正在研究一些存储过程,在一个地方我找到了以下行:
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)
或者是语法错误,还是完全不同的东西?
我正在使用一些相当敏感的数据,所以我想绝对确定我做得很好.
我试图删除表中与另一个表关联的行
关联表的唯一方法是通过另外两个表加入......
这是确切的查询:
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)
如你所见,它并不漂亮.
我通过MySQL查询浏览器得到一个奇怪的错误...
MULTI DELETE中的未知表'Transaction_Amount'
我试过阅读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) 好的,所以这里已有几个帖子,网上还有更少的帖子.我真的尝试了每一个,无法得到任何工作.希望有人在这里可以怜悯我:)
这是我正在使用的数据.我想删除所有这些记录.
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) 我一直在寻找并没有设法找到解决方案或工作示例,所以这里.
我已经建立了一个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) sql-delete ×10
mysql ×6
sql ×3
postgresql ×2
android ×1
config ×1
count ×1
having ×1
php ×1
select ×1
sql-update ×1
sqlite ×1
subquery ×1
syntax ×1
t-sql ×1
transactions ×1
triggers ×1
where-clause ×1