我的user
表之前有字符串主键,现在我添加了一个新字段userid bigint(20)
并创建了这个主键。
然后添加
ALTER TABLE smsusers AUTO_INCREMENT = 2335;
用户表中的总记录是2334,下一条记录的值应为2335 并且应该在添加记录时自动递增。
问题是从我的应用程序插入数据时显示 跟随错误
SQLException java.sql.SQLException: Field 'userid' doesn't have a default value
如何解决此问题
尝试插入新数据时编辑
INSERT INTO `dbname`.`smsusers` ( `password`, `fname`, `lname`,
`mailid`, `dob`, `gender`) VALUES ('asdf', 'asdf', 'asdf',
'asdf@asdf.com', '2013-10-10', 'm');
显示以下错误
#1062 - Duplicate entry '0' for key 1
编辑: 最初我的主键是id而不是我添加了userid并创建了这个主键
我的表结构是
CREATE TABLE `smsusers` (
`id` varchar(60) NOT NULL DEFAULT '',
`password` varchar(50) NOT NULL,
`fname` varchar(30) NOT NULL,
`lname` varchar(30) DEFAULT NULL,
`mailid` varchar(50) NOT NULL,
`dob` date NOT NULL,
`gender` varchar(10) NOT NULL,
`city` varchar(70) DEFAULT NULL,
`userid` int(20) NOT NULL DEFAULT '0',
PRIMARY KEY (`userid`),
KEY `id_pk_unique` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
在smsusers中插入数据时,它只将默认值设为0而不是递增值。
答案 0 :(得分:5)
运行以下查询。然后不用担心。 :)
ALTER TABLE smsusers MODIFY COLUMN userid INT(20) AUTO_INCREMENT;
ALTER TABLE smsusers AUTO_INCREMENT = 2335;
答案 1 :(得分:1)
确保您没有在模型类中使用setter作为主键。
@Entity
public class BlogDetails {
@Id
@GeneratedValue
@Column(name="B_Id",nullable=false)
private int b_Id;
@Column(name="EmailId")
private String emailId;
@Column(name="Title")
private String title;
@Column(name="BriefDetail")
private String briefDetail;
@Column(name="Detail")
private String detail;
public BlogDetails() {
}
public BlogDetails(String EmailId, String Title, String BriefDetail, String
Detail) {
this.emailId=EmailId;
this.title=Title;
this.briefDetail=BriefDetail;
this.detail=Detail;
}
public int getB_Id() {
return b_Id;
}
public String getEmailId() {
return emailId;
}
public void setEmailId(String emailId) {
this.emailId = emailId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getBriefDetail() {
return briefDetail;
}
public void setBriefDetail(String briefDetail) {
this.briefDetail = briefDetail;
}
public String getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail;
}
}
答案 2 :(得分:0)
由于您的表具有作为PRIMARY KEY的用户ID,因此您不能将DEFAULT 0用作值。 PRIMARY KEY必须是唯一的,如果你有一个默认值,它就不会有。改为将DEFAULT 0更改为AUTO_INCREMENT。
它从不使用自动递增的值,因为你从不说哪个列应该是auto_increment。