我正在尝试使用SQL从连接在一起的多个表中删除多个行.
表A与表B相连.表B与表C相连
我想删除表B和C中与表A中的行对应的所有行
CREATE TABLE `boards` (
`boardid` int(2) NOT NULL AUTO_INCREMENT,
`boardname` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`boardid`)
);
-- --------------------------------------------------------
--
-- Table structure for table `messages`
--
CREATE TABLE `messages` (
`messageid` int(6) NOT NULL AUTO_INCREMENT,
`boardid` int(2) NOT NULL DEFAULT '0',
`topicid` int(4) NOT NULL DEFAULT '0',
`message` text NOT NULL,
`author` varchar(255) NOT NULL DEFAULT '',
`date` datetime DEFAULT NULL,
PRIMARY KEY (`messageid`)
);
-- --------------------------------------------------------
--
-- Table structure for table `topics` …Run Code Online (Sandbox Code Playgroud) 假设我有一张10000000记录的表.这两种解决方案有什么区别?
删除数据如:
DELETE FROM MyTable
Run Code Online (Sandbox Code Playgroud)使用应用程序逐行删除所有数据:
DELETE FROM MyTable WHERE ID = @SelectedID
Run Code Online (Sandbox Code Playgroud)第一种解决方案是否具有最佳性能?对日志和性能有什么影响?
我试图从大约4000万中删除267条记录.查询看起来像:
delete from pricedata
where
pricedate > '20120413'
Run Code Online (Sandbox Code Playgroud)
定价是一个char(8)领域.
我知道调整innodb_buffer_pool_size,但如果我能做到
select from pricedata
where
pricedate > '20120413'
Run Code Online (Sandbox Code Playgroud)
并获得267条记录(这就是全部),没有错误,为什么它会删除?
如果调整innodb_buffer_pool_size不起作用,我该怎么办?
由于某种原因,我无法找到我需要的确切答案.我在这里搜索了最后20分钟.
我知道这很简单.非常简单.但出于某种原因我无法触发触发器..
我有一个有两列的表
dbo.HashTags
|__Id_|_name_|
| 1 | Love |
Run Code Online (Sandbox Code Playgroud)
我想将删除的值插入另一个dbo.HashTagsArchive在DELETE查询上调用的表中.
例:
DELETE FROM [dbo].[HashTags] WHERE Id=1
Run Code Online (Sandbox Code Playgroud)
这个例子后,我应该有删除的行dbo.HashTagsArchive和列有Id=1应被删除dbo.HashTags
我试过这个TRIGGER:
ALTER TRIGGER [dbo].[HashTags_BeforeDelete]
ON [dbo].[HashTags]
FOR DELETE
AS
BEGIN
INSERT INTO HashTagsArchive
( Id,
HashTagId,
delete_date)
SELECT d.Id, m.HashTagId,GETUTCDATE() FROM deleted d
JOIN dbo.HashTags m ON m.Id=d.Id
DELETE FROM dbo.HashTags
WHERE ID IN(SELECT deleted.Id FROM deleted)
END
GO
Run Code Online (Sandbox Code Playgroud)
它已经到了,Deleted但没有Inserted排HashTagsArchive
我需要从临时表中删除重复字段,其中有问题的字段不完全相同.
例如,我有以下数据:
First Last DOB
John Johnson 10.01.02
Steve Stephens 23.03.02
John Johnson 2.02.99
Dave Davies 3.03.03
Run Code Online (Sandbox Code Playgroud)
这里有约翰约翰逊的两个.我只想要一个约翰逊 - 我不在乎哪一个.所以结果表看起来像:
First Last DOB
John Johnson 10.01.02
Steve Stephens 23.03.02
Dave Davies 3.03.03
Run Code Online (Sandbox Code Playgroud)
我正在使用TSQL,但我更喜欢使用非专有的SQL.
谢谢
您好我试图从我的数据库中删除一行.我没有错,但它什么也没做,任何帮助或建议都会很棒!
public static void DeleteRow(String name)
{
try
{
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection(url, username, password);
PreparedStatement st = connection.prepareStatement("DELETE FROM Table WHERE name = " + name + ";");
st.executeUpdate();
}
catch(Exception e)
{
System.out.println(e);
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个DELETE查询,我需要在PostgreSQL 9.0.4上运行.我发现它是高性能的,直到它在subselect查询中遇到524,289行.
例如,在524,288,没有使用物化视图,成本看起来很不错:
explain DELETE FROM table1 WHERE pointLevel = 0 AND userID NOT IN
(SELECT userID FROM table2 fetch first 524288 rows only);
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Delete (cost=13549.49..17840.67 rows=21 width=6)
-> Index Scan using jslps_userid_nopt on table1 (cost=13549.49..17840.67 rows=21 width=6)
Filter: ((NOT (hashed SubPlan 1)) AND (pointlevel = 0))
SubPlan 1
-> Limit (cost=0.00..12238.77 rows=524288 width=8)
-> Seq Scan on table2 (cost=0.00..17677.92 rows=757292 width=8)
(6 rows)
但是,一旦我达到524,289,物化视图就会发挥作用,DELETE查询变得更加昂贵:
explain DELETE FROM table1 WHERE pointLevel = 0 AND userID NOT IN …
database postgresql materialized-views query-performance sql-delete
我有一个使用类表继承的MySql架构,但我希望子表从父表和外表中进行级联删除.
create table parent (
_key bigint unsigned not null,
name varchar(64) unique not null,
primary key(_key)
);
create table child_a (
_key bigint unsigned not null,
foreign_key_a bigint unsigned not null,
foreign key(_key) references parent(_key) on delete cascade,
foreign key(foreign_key_a) references a(_key) on delete cascade,
primary key(_key)
);
create table child_b (
_key bigint unsigned not null,
foreign_key_b bigint unsigned not null,
foreign key(_key) references parent(_key) on delete cascade,
foreign key(foreign_key_b) references b(_key) on delete cascade,
primary …Run Code Online (Sandbox Code Playgroud) 我有一个包含3列的表格如下:
one | two | three | name
------------------------------------
A1 B1 C1 xyz
A1 B1 C1 pqr -> should be deleted
A1 B1 C1 lmn -> should be deleted
A2 B2 C2 abc
A2 B2 C2 def -> should be deleted
A3 B3 C3 ghi
------------------------------------
Run Code Online (Sandbox Code Playgroud)
该表没有任何主键列.我对表没有任何控制权,因此我无法添加任何主键列.
如图所示,我想删除一列,两列和三列组合相同的行.因此,如果A1B1C1发生三次(如上所述),则应删除其他两个,只留下一个.
如何通过DB2中的一个查询实现这一目标?
我的要求是单个查询,因为我将通过java程序运行它.
我需要从行号475删除到948,因为它们是1-474行的重复。我想这可能与之接近,或者还有更多呢?
DELETE FROM dbo.industry WHERE row_number between 475 and 948
Run Code Online (Sandbox Code Playgroud) sql-delete ×10
sql ×4
mysql ×3
sql-server ×3
database ×2
t-sql ×2
cascade ×1
db2 ×1
delete-row ×1
innodb ×1
java ×1
locking ×1
performance ×1
postgresql ×1
schema ×1
ssms ×1
triggers ×1