在MySQL中建立关系后,如何将ID更改为自动增量

时间:2014-08-12 09:12:22

标签: mysql jdbc

我正在尝试研究MySQL和JDBC,因此我创建了一个数据库。我不知道我必须让我的ID自动递增。因此,当我尝试创建一个在JDBC中的数据库中插入数据的函数时,我被告知ID应该是自动增量的,我不应该手动添加它们。因为我已经添加了所有数据并构建了数据库(建立关系,添加外键和主键),所以我无法使用我的ID自动增量,因为它们是不同表中的外键。我不想从我的数据库中删除数据并从头开始。除了在JDBC中手动提供ID之外,我有哪些选择? 我可以以某种方式更改我的ID并使其成为Auto Incrimental吗?

我认为我在其他表中使用外键是问题所在。但是我不想删除它们,因为我在我的数据库中放了很多数据。

这是MySQL工作台。我试着补充一下。从这里自动增加。

enter image description here

MySQL工作台应用此SQL脚本:

ALTER TABLE `university`.`student` 
CHANGE COLUMN `StudentID` `StudentID` INT(11) NOT NULL AUTO_INCREMENT ;

最后我得到了这个错误:

ERROR 1833: Cannot change column 'StudentID': used in a foreign key constraint 'studentsection_ibfk_1' of table 'university.studentsection'
SQL Statement:
ALTER TABLE `university`.`student` 
CHANGE COLUMN `StudentID` `StudentID` INT(11) NOT NULL AUTO_INCREMENT

ERROR: Error when running failback script. Details follow.

ERROR 1046: No database selected
SQL Statement:
CREATE TABLE `student` (
  `StudentID` int(11) NOT NULL DEFAULT '0',
  `LastName` varchar(255) COLLATE latin1_general_ci DEFAULT NULL,
  `FirstName` varchar(255) COLLATE latin1_general_ci DEFAULT NULL,
  `StudentGPA` float DEFAULT NULL,
  `Major` varchar(255) COLLATE latin1_general_ci DEFAULT NULL,
  `MajorID` int(11) DEFAULT NULL,
  PRIMARY KEY (`StudentID`),
  KEY `MajorID` (`MajorID`),
  CONSTRAINT `student_ibfk_1` FOREIGN KEY (`MajorID`) REFERENCES `major` (`MajorID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci

P.S。我正在使用MySQL Workbench,PHPMyAdmin和Eclipse for JDBC。

1 个答案:

答案 0 :(得分:0)

您只需将id列设为键并将属性更改为autoincrement:

CREATE TABLE `test` (
    `id` INT NULL,
    `value` INT NULL
)
COLLATE='latin1_swedish_ci'
ENGINE=MyISAM;    

INSERT INTO `test` (`id`, `value`) VALUES (1, 23);
INSERT INTO `test` (`id`, `value`) VALUES (5, 42);

使用上面的代码,我用你的值模拟一个填充的表。然后,这是您感兴趣的代码:

ALTER TABLE `test`
CHANGE COLUMN `id` `id` INT(11) NULL AUTO_INCREMENT FIRST,
ADD INDEX `Índice 1` (`id`);

之后,您将拥有自动增量字段,因此您无需再次添加ID:

INSERT INTO `test` (`value`) VALUES (23);
相关问题