我有一位顾客。
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中执行此操作。
答案 0 :(得分:4)
MySQL没有触发器,但它确实有REPLACE和INSERT...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