我想对一个生产数据库运行一个更新查询,作为一个优秀的小开发人员,我正试图使它尽可能安全。我希望做到以下几点
BEGIN TRANSACTION
UPDATE table_x SET col_y = 'some_value'
.
.
.
IF (@@error <> 0)
BEGIN
ROLLBACK
END
ELSE
BEGIN
COMMIT
END
上面的代码应该可以在SQL Server中运行,但我需要在MySQL数据库中使用它。
EDIT:对不起,有多条语句要执行。是的,我知道不需要在一个事务中包装单个查询。
我有一个示例代码,它创建一个表,在其中插入一些行,然后尝试取消整个事务,但是conn.rollback()似乎只对INSERT语句有效,而created不受影响:新创建的表在数据库中保持永久不变,没有插入任何行。
这是在MySQL数据库管理系统中使用JDBC驱动程序时的标准行为吗?
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class TestBatch {
public stati
我正在对不同隔离级别下的MySQL进行基准测试。
对于SERIALIZABLE,我经常得到这样的错误:"Deadlock found when trying to get lock; try restarting transaction at the client side"。
阅读对我帮助不大。
我有以下问题:每当我收到消息时,数据库的状态是什么?一切都被冻结了,系统希望我做些什么,或者我的事务已经中止,而我只是得到了通知?
我正在使用jdbc驱动程序连接到MySQL。假设我的策略是重新发行此类失败的交易,我是否需要调用connection.rollback(),或者MySQ
我使用的是mysql 5.1.72-0ubuntu0.10.04.1 (Ubuntu)。我想创造一个触发器来阻止玩家和墙壁之间的碰撞。
播放器和墙壁表都有一个x和y列。
我有个扳机:
CREATE TRIGGER checkcollision AFTER UPDATE ON players BEGIN
SELECT RAISE(ABORT, 'collision') FROM walls WHERE NEW.x=x AND NEW.y=y;
END;
考虑到我的mysql版本,我想知道如果有实际选中的行,此触发器是否会回滚更新。还是我必须手动做回滚?
另外,我的触发
我打算创建几个数据库,并将权限授予相应的用户。例如,
CREATE DATABASE DB1;
GRANT .. ON .. TO DB1;
CREATE DATABASE DB2;
GRANT .. ON .. TO DB2;
CREATE DATABASE DB3;
GRANT .. ON .. TO DB3;
但是我想这样做,如果这条语句中的任何一条语句失败,前面的所有语句,如"CREATE DATABASE“或"GRANT ...”应该像事务语句的回滚一样取消
这个是可能的吗?
我正在编写一个SQL数据更新器,将旧的text/ntext/image类型的列转换为varchar/nvarchar/varbinary。当系统启动以从旧版本更新数据库时,将在事务内运行更新程序。我已经让SQL自己工作了,但是一些被更改的列是全文索引的,这意味着如果不先删除索引,我就不能更改它们的类型,如下所示:
ALTER FULLTEXT INDEX ON Table DROP (Column)
exec dbo.ConvertDataType 'Table', 'Column', 'nvarchar(max)'
ALTER FULLTEXT
如果满足某个条件,我就不希望插入(事务应该回滚)。我可以在应用程序代码中编写这个逻辑,但是由于某种原因,它必须用MySQL本身编写(假设用不同语言编写的客户机将插入到这个MySQL InnoDB表中),这是一个单独的讨论。
表定义:
CREATE TABLE table1(x int NOT NULL);
触发器看起来如下所示:
CREATE TRIGGER t1 BEFORE INSERT ON table1
FOR EACH ROW
IF (condition) THEN
NEW.x = NULL;
END IF;
END;
我猜它也可以写成(未经测试):
CREATE T
假设我们在扭动JOOQ查询时有以下场景:
insertInto(TABLE)
.set(TABLE.NAME, "...")
.set(TABLE.FK, null) -- breaks FK constraint!
//...
.execute();
和:
transactional(configuration -> {
insertInto(TABLE)
// list of sets that are OK
.execute();
throw new RuntimeException();
}
以下是下列声明:
在数据库中执