Duplicate entry '2' for key 'PRIMARY'错误(综合总结)

法1:

数据表中设置了主键(Primary Key),而主键对应的值是不允许重复的。
设置主键自增,已经设置的请忽略;

法2

优化Insert语句,加上ignore关键词即可,意思是如果该主键已存在,则不执行该条sql。如果没有成功添加该数据,接口返回值就为0(@新增0条数据),然后需要再次调用插入接口对该数据进行二次插入。!!!这里提醒接口返回值用void的同学,返回值最好用int(@返回值是有意义的)。

INSERT IGNORE INTO tase1......

法3:

当前id为10000的并没有数据,但是Insert id=10000时还是报这个错!我们需要放弃这个id,直接把该表当前自增数调大,即可:

alter table Table_Name AUTO_INCREMENT=11000;
id=10000的有问题,我直接把自增数调到11000(不要调的太大,因为每条都会有空间的资源浪费),这下不会冲突了

法4:(重点)

1.将主键设置为自动增长。可以在数据库手动将相关表设置ID为自增长
2.手动将表设置为自增长有弊端,建议在annotation里边的POJO类使用注解方式设置自增长。mysql的数据库如图所示设置。
@GeneratedValue(strategy = GenerationType.IDENTITY)

@Entity
@Table(name = "f_user")
@Data
public class FUser implements Serializable {
    private static final long serialVersionUID = 8060959602677501490L;
    //    @Id:声明主键字段
    //    @Data:构造set get方法
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer uid;

    private String uname;

    private String utime;

    private String upwd;

    @Column(insertable = false,updatable = false)
    private Integer hid;

    private String filePath;

    @OneToOne
    @JoinColumn(name = "hid",referencedColumnName = "hid")
    private FHospital fHospitalDemo;
    //@joincolumn 中name的属性对用数据库中的字段addressId,referencedColumn Name属性对应关联表的主键

}
发布了14 篇原创文章 · 获赞 4 · 访问量 247

猜你喜欢

转载自blog.csdn.net/Red_rose9/article/details/105257507