Mysql是唯一的主键。需要了解行为
起初是这样的Mysql是唯一的主键。需要了解行为,mysql,Mysql,起初是这样的 NumberRenamed INT NOT NULL AUTO_INCREMENT, CompanyName char(255) NOT NULL, RegistrationNumber char(255), .... PRIMARY KEY (NumberRenamed), UNIQUE KEY `CompanyName` (`CompanyName`), ... 查询是这样的 INSERT INTO TableName (NumberRenamed, CompanyName,
NumberRenamed INT NOT NULL AUTO_INCREMENT,
CompanyName char(255) NOT NULL,
RegistrationNumber char(255),
....
PRIMARY KEY (NumberRenamed),
UNIQUE KEY `CompanyName` (`CompanyName`),
...
查询是这样的
INSERT INTO TableName (NumberRenamed, CompanyName, RegistrationNumber) VALUES
ON DUPLICATE KEY UPDATE RegistrationNumber = VALUES(RegistrationNumber), CompanyName = VALUES(CompanyName)
numberrename的值为1
CompanyName的值为NULL
RegistrationNumber的值为1
执行查询,获取
NumberRenamed | CompanyName | RegistrationNumber
------------------------------------------------
1 | NULL | 1
然后
numberrename的值为1
CompanyName的值为1
RegistrationNumber的值为1
而不是
NumberRenamed | CompanyName | RegistrationNumber
------------------------------------------------
1 | 1 | 1
得到
添加了唯一键'numberrename'('numberrename'),
。现在一切正常
我假设
numberrename
是主键,所以如果重复值(如果查询中的值与表中的值相同),则在重复键上更新。但不是为什么不呢?我怀疑这是对自动增量的特殊处理。为什么在插入时指定自动递增字段,通常希望允许DB自动分配该字段。自动递增没有特殊原因。可能我使用了一个例子,其中是自动增量
。您的意思是需要更改为numberrename INT NOT NULL,
(删除AUTO_INCREMENT
)?在任何情况下,所有这些都是有效的,我只想理解为什么示例模式与示例数据不兼容:您已将CompanyName
定义为notnull
,但随后为该列插入了一条带有NULL
值的记录。如果从该列中删除了notnull
属性,那么您的示例将完全按照您的预期工作:请参阅。只需注意。创建表的代码是CompanyName字符(255
,但如果在phpMyAdmin导出表中,则获取CompanyName
CHAR(255)不为空`
NumberRenamed | CompanyName | RegistrationNumber
------------------------------------------------
1 | NULL | 1
2 | 1 | 1