我有一个表格,我希望在找到重复的主(唯一)键时替换一行。
Create table History (
id varchar(5) not null,
name varcah(30),
primary key (id)
) engine=InnoDB character set utf8;
我正在使用hibernate。 id列声明为@Id @Column(name="id", unique=true, nullable=false)
帮我修改上面的SQL,Hibernate注释允许在重复的主键上找到REPLACE
答案 0 :(得分:1)
数据库主键无意更新/替换。有一些解决方法,但这些都是不好的做法。
您最好使用AUTO INCREMENT(MySQL),IDENTITY(MSSQL)或SEQUENCE(ORACLE,PostgreSQL)ID生成。
如果使用MANUAL ID分配并且您发现主键违规重复,则必须检查当前的应用程序并发设计。手动ID分配不是线程安全的吗?
数据库序列或AUTO-INCREMENT ID将使您免于获得重复的主键冲突。