4

我的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 而不是增量值。

4

3 回答 3

5

运行以下查询。那就不用担心了。:)

   ALTER TABLE smsusers MODIFY COLUMN userid INT(20) AUTO_INCREMENT;

   ALTER TABLE smsusers AUTO_INCREMENT = 2335;
于 2013-11-04T10:33:31.277 回答
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;
}


}
于 2015-03-12T09:52:22.340 回答
0

由于您的表具有用户 ID 作为 PRIMARY KEY,因此您不能使用 DEFAULT 0 作为值。PRIMARY KEY 必须是唯一的,如果您有默认值,则不会。改为将 DEFAULT 0 更改为 AUTO_INCREMENT。

它从不使用自动递增值,因为您从不说哪一列应该是 auto_increment。

于 2013-11-04T09:52:14.823 回答