【问题标题】:"Instead of" Triggers in mysqlmysql中的“代替”触发器
【发布时间】:2014-08-24 07:48:03
【问题描述】:

我有一个客户。

CREATE TABLE `customer` (
    `cNic` VARCHAR(50) NOT NULL DEFAULT '',
    `cName` VARCHAR(100) NULL DEFAULT NULL,
    `cAddress` VARCHAR(500) NULL DEFAULT NULL,
    `cTp` VARCHAR(50) NULL DEFAULT NULL,
    `cEmail` VARCHAR(50) NULL DEFAULT NULL,
    `creditLimit` DOUBLE NULL DEFAULT NULL,
    `CustomerStatus` INT(11) NULL DEFAULT '0',
    PRIMARY KEY (`cNic`)
)

当向此客户表添加新行时,如果新行的 cNic(主键)已在客户表中,我想与另一行更新现有(旧)行字段。 (Update customer set cName='NewName' where cNic = 'enteredNic')。

否则(如果cNic 不在表中)插入新行。我知道我可以使用 instead of 触发器在 mssql 中执行此操作。有没有办法在mysql中做到这一点。

【问题讨论】:

    标签: mysql sql triggers


    【解决方案1】:

    MySQL 没有代替触发器,但它确实有 REPLACEINSERT...ON DUPLICATE KEY UPDATE(请参阅文档)。

    另见我对"INSERT IGNORE" vs "INSERT ... ON DUPLICATE KEY UPDATE"的回复

    【讨论】:

      【解决方案2】:

      另一件值得注意的事情是MySQL 中的视图是可更新的,这意味着您对视图的插入或更新语句将自动在您的基表上运行。当然,前提是您的插入或更新操作不会造成任何歧义。

      例如,您有一个表R(A, B),它有一个元组(1, 2)。视图V(A)(1)。如果将(10) 添加到V,则会导致歧义,因为MySQL 不知道应该在基表中插入(10, 1)(10, 2)(10, NULL)

      更多信息here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-11
        • 2013-03-09
        • 2013-03-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多