mysql - 如何在运行 SQL Update 语句之前对其进行测试?

标签 mysql sql database testing myisam

在某些情况下,在生产环境中运行 UPDATE 语句可以节省时间。然而,一个糟糕的更新可能比最初的问题更糟糕。

没有使用测试数据库,有哪些选项可以告诉更新语句在运行之前会做什么?

最佳答案

事务呢?它们具有 ROLLBACK 功能。

@见 https://dev.mysql.com/doc/refman/5.0/en/commit.html

例如:

START TRANSACTION;
SELECT * FROM nicetable WHERE somthing=1;
UPDATE nicetable SET nicefield='VALUE' WHERE somthing=1;
SELECT * FROM nicetable WHERE somthing=1; #check

COMMIT;
# or if you want to reset changes 
ROLLBACK;

SELECT * FROM nicetable WHERE somthing=1; #should be the old value

回答下面@ri​​ckozoe 的问题:

通常这些行不会被执行一次。在 PHP 中你会写这样的东西(也许有点干净,但想快速回答;-)):

$MysqlConnection->query('START TRANSACTION;');
$erg = $MysqlConnection->query('UPDATE MyGuests SET lastname='Doe' WHERE id=2;');
if($erg)
    $MysqlConnection->query('COMMIT;');
else
    $MysqlConnection->query('ROLLBACK;');

另一种方法是使用 MySQL 变量(参见 https://dev.mysql.com/doc/refman/5.7/en/user-variables.htm l 和 https://stackoverflow.com/a/18499823/1416909 ):

# do some stuff that should be conditionally rollbacked later on

SET @v1 := UPDATE MyGuests SET lastname='Doe' WHERE id=2;
IF(v1 < 1) THEN
    ROLLBACK;
ELSE
    COMMIT;
END IF;

但我建议使用您最喜欢的编程语言中可用的语言包装器。

关于mysql - 如何在运行 SQL Update 语句之前对其进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11011384/

相关文章:

sql - postgresql 中缺少 block 号 0 的错误,我已经弄清楚哪个字段已损坏

mysql - 显示错误页面 : Application Instantiation Error. 时出错 .. 数据库问题 i thnik(详细信息 : wamp, joomla)

php - 使用 CodeIgniter 创建 SQL 函数

sql - 衡量 SQL 语句的复杂性

php - 邮件系统数据库结构,需要帮助

database - Firebase 实时数据库 : Retrieving "limited" data on "backend"

mysql - 显示90天前的所有记录

java - 并发请求下程序耗时较长

MySQL 多列唯一索引与列无关

sql - 在 Pyspark 数据框上查找迄今为止的月份和月份