我正在尝试研究MySQL和JDBC,因此我创建了一个数据库。我不知道我必须让我的ID自动递增。因此,当我尝试创建一个在JDBC中的数据库中插入数据的函数时,我被告知ID应该是自动增量的,我不应该手动添加它们。因为我已经添加了所有数据并构建了数据库(建立关系,添加外键和主键),所以我无法使用我的ID自动增量,因为它们是不同表中的外键。我不想从我的数据库中删除数据并从头开始。除了在JDBC中手动提供ID之外,我有哪些选择? 我可以以某种方式更改我的ID并使其成为Auto Incrimental吗?
我认为我在其他表中使用外键是问题所在。但是我不想删除它们,因为我在我的数据库中放了很多数据。
这是MySQL工作台。我试着补充一下。从这里自动增加。
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。
答案 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);