Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据另一个字段更改mysql中的一个字段_Mysql_Automation - Fatal编程技术网

根据另一个字段更改mysql中的一个字段

根据另一个字段更改mysql中的一个字段,mysql,automation,Mysql,Automation,我如何将宏/脚本/自动的东西组合在一起,使我能够批量对数据库进行以下更改: 如果第1列中的任何单元格为X,则将第2列(同一行)的内容更改为0。 如果第1列中的单元格不是X,则将第2列的内容单独保留。这只是一个简单的UPDATE语句,带有WHERE子句。运行一次以更新表中的所有行 UPDATE yourtable SET column2 = 0 WHERE column1 = 'X' 如果每当column1更改为X时,需要将column2自动更新为0,请在更新之前创建一个触发器 /* DELIM

我如何将宏/脚本/自动的东西组合在一起,使我能够批量对数据库进行以下更改:

如果第1列中的任何单元格为X,则将第2列(同一行)的内容更改为0。
如果第1列中的单元格不是X,则将第2列的内容单独保留。

这只是一个简单的
UPDATE
语句,带有
WHERE
子句。运行一次以更新表中的所有行

UPDATE yourtable SET column2 = 0 WHERE column1 = 'X'
如果每当
column1
更改为
X
时,需要将
column2
自动更新为0,请在更新之前创建一个
触发器

/* DELIMITER has been set to $$ in your client */
CREATE TRIGGER column1_is_X BEFORE UPDATE ON yourtable
FOR EACH ROW
BEGIN
  IF NEW.column1 = 'X' THEN
    SET NEW.column2 = 0;
  END IF;
END$$
/* Then you should set the DELIMITER back to ; */

您可以执行以下操作:

UPDATE table SET column2 = IF (column1 = 'X', 0, column2)

如果这个“规则”应该总是发生的话,那么你可以考虑一个触发器(在你首先设置了你想要的值之后)-触发器会在你保存CulnN1=X感谢你的行时,将Cyrn2设置为0。当你说“自动”时,我是否可以在phpMyAdmin中设置为持续运行,这样我就不必每次需要更改时都运行此语句?@user1863562每次更新一行时,触发器都会自动持续运行。要在PHPMyAdmin中创建触发器,可能需要暂时将分隔符设置为类似
$$
的其他值,以便创建触发器。我不使用PMA,所以我不知道确切的程序。在上面,我将语句编辑为以
$$
结尾,假设您将分隔符设置为该值。运行触发器脚本后,出现以下错误:“#1064-您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以获取在第6行“end IF;end”附近使用的正确语法”谢谢。关于方差的最后一个问题——不是column1=X,而是如何更改它,使之成为column1在字符中的某个地方包含X?在这种情况下,它实际上是一个*,而不是一个X。或者在触发器上下文中
LOCATE(NEW.column1,'*')>0