“而不是”mysql中的触发器

时间:2014-08-24 07:48:04

标签: mysql sql triggers

我有一位顾客。

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中执行此操作。

2 个答案:

答案 0 :(得分:4)

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

另请参阅我对"INSERT IGNORE" vs "INSERT ... ON DUPLICATE KEY UPDATE"

的回答

答案 1 :(得分:0)

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

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

更多信息here