我想改变一个没有主键和auto_increment列的表。我知道如何添加主键列,但我想知道是否可以自动将数据插入到主键列中(我已经在数据库中有500行并希望给它们id,但我不想手动执行) 。有什么想法吗?非常感谢。插入自动增量主键到现有表
回答
的ALTER TABLE
语句添加PRIMARY KEY
列正常工作在我的测试:
ALTER TABLE tbl ADD id INT PRIMARY KEY AUTO_INCREMENT;
在用于测试目的创建的临时表,上面的语句创建的AUTO_INCREMENT
id
柱插入自动递增值,为每个现有的行的表,从1开始
开始,这是我的经验。永远不要记得必须运行一个单独的脚本来填充auto_increment ID ... – 2012-01-30 21:11:34
哈哈..谢谢。我的错。绿色的标志是你的,因为你的更容易实现。 :D – FlyingCat 2012-01-30 21:24:14
+1,在5.1.51-ndb-7.1.9a-log中工作,在带引擎的表上MyISAM – 2012-08-28 13:16:53
是,这样的事情会做到这一点,可能不是最好的,虽然,你可能要进行备份
$get_query = mysql_query("SELECT `any_field` FROM `your_table`");
$auto_increment_id = 1;
while($row = mysql_fetch_assoc($get_query))
{
$update_query = mysql_query("UPDATE `your_table` SET `auto_increment_id`=$auto_increment_id WHERE `any_field` = '".$row['any_field']."'");
$auto_increment_id++;
}
注意您选择的any_field
必须在更新时相同。
不错。谢谢。 – FlyingCat 2012-01-30 21:20:46
对于那些像我一样得到一个Multiple primary key defined
错误,请尝试:
ALTER TABLE `myTable` ADD COLUMN `id` INT AUTO_INCREMENT UNIQUE FIRST NOT NULL;
在MySQL v5.5.31此设置id
列作为我的主键和填充每一行和递增值。
假设你没有像ID自动递增,否定的,那么你可以添加使用下面的查询栏:
ALTER TABLE table_name ADD id int NOT NULL AUTO_INCREMENT primary key FIRST
如果你已经列,使用下面的查询,然后改变为自动增量:
ALTER TABLE table_name MODIFY column_name datatype(length) AUTO_INCREMENT PRIMARY KEY
最后的'FIRST'有什么作用? – Dementic 2015-01-20 15:39:49
它将使新的'id'列成为表中的第一个,而不是最后一个,这是默认行为。 – 2015-10-24 20:24:38
最简单快捷的,我觉得是这样的
ALTER TABLE mydb.mytable
ADD COLUMN mycolumnname INT NOT NULL AUTO_INCREMENT AFTER updated,
ADD UNIQUE INDEX mycolumnname_UNIQUE (mycolumname ASC);
我能够适应这些插件使用现有的非增量主键,并将增量主键添加到表中,并使用以下代码创建一个新旧复合主键,其中旧键和新键作为组合主键:
DROP TABLE IF EXISTS SAKAI_USER_ID_MAP;
CREATE TABLE SAKAI_USER_ID_MAP (
USER_ID VARCHAR (99) NOT NULL,
EID VARCHAR (255) NOT NULL,
PRIMARY KEY (USER_ID)
);
INSERT INTO SAKAI_USER_ID_MAP VALUES ('admin', 'admin');
INSERT INTO SAKAI_USER_ID_MAP VALUES ('postmaster', 'postmaster');
ALTER TABLE SAKAI_USER_ID_MAP
DROP PRIMARY KEY,
ADD _USER_ID INT AUTO_INCREMENT NOT NULL FIRST,
ADD PRIMARY KEY (_USER_ID, USER_ID);
完成此操作后,_USER_ID字段将存在,并且主键的所有数值都与您预期的完全相同。使用顶部的“DROP TABLE”,您可以反复运行以试验变化。
我无法工作的是传入的FOREIGN KEY已经指向USER_ID字段的情况。当我尝试使用另一个表中的传入外键执行更复杂的示例时,我收到了此消息。
#1025 - Error on rename of './zap/#sql-da07_6d' to './zap/SAKAI_USER_ID_MAP' (errno: 150)
我猜测,我需要做的ALTER TABLE之前拆除所有外键,然后在以后重建。但就目前而言,如果其他人遇到这种情况,我想将这个解决方案分享给原始问题的更具挑战性的版本。
导出您的表格,然后清空您的表格,然后将字段添加为唯一的INT,然后将其更改为AUTO_INCREMENT,然后再次导入您以前导出的表格。
如何将PHP写入ALTER已存在的字段(在本例中为名称)以使其成为主键? W/O,当然,增加任何附加的 'id' 字段表..
此当前创建的表的 - 记录的数量:4名VARCHAR(20)是 品种VARCHAR(30)是 颜色VARCHAR(20)是 重量SMALLINT(7)是
这最终结果寻求(表说明) -
数目的记录:4 名VARCHAR(20)NO PRI 品种VARCHAR(30)是 颜色VARCHAR(20)是 重量SMALLINT(7)是
非但没有这样的 -
记录的数量:5 ID INT(11)否PRI 名VARCHAR(20)是 品种VARCHAR(30)是 颜色VARCHAR(20)是 重量SMALLINT (7)是
尝试后..
$查询= “ALTER TABLE赛马ADD ID INT NOT NULL AUTO_INCREMENT首先,添加PRIMARY KEY(ID)”;
如何得到这个? -
数目的记录:4 名VARCHAR(20)NO PRI 品种VARCHAR(30)是 颜色VARCHAR(20)是 重量SMALLINT(7)是
即INSERT/ADD ..等等主键INTO第一个字段记录(没有添加额外的'id'字段,如前所述
您可以添加一个新的主键列到现有的表,它可以有序列号,使用命令:
ALTER TABLE mydb.mytable ADD pk_columnName INT IDENTITY
我正面临同样的问题,所以我做了什么,我放弃了主键字段,然后重新创建并确保它是自动递增的。这对我有效。我希望它可以帮助其他人
- 1. 将自动增量主键插入到外键表中
- 2. 插入到带有自动增量主键的视图中?
- 3. MySQL-Update插入自动增量主键到自定义值
- 4. Python - 没有自动增量主键值的Sqlite插入元组
- 5. 自动增量主键
- 6. 主键自动增量
- 7. 如何从具有主键自动增量的表中将数据插入到具有外键的表中?
- 8. 用自动增量外键插入值
- 9. SQL Server将自动增加主键添加到现有表
- 10. 用自动增量主键在c#中插入一行到一个sql表中
- 11. 德尔福SQLite插入到一个表中,主键为自动增量
- 12. 用自动增量主键将值插入表中?我不断收到错误
- 13. 获取自动增量ID并插入到外键表中
- 14. 设置自动增量到主键
- 15. 插入带自动增量主键的记录
- 16. SQL插入多个条目非自动增量主键
- 17. 当主键自动增量时,在MySql中插入忽略
- 18. 插入的表pirmary键自动递增
- 19. 重复键主键自动增量
- 20. 在Access表中插入一个自动递增的主键
- 21. 插入增量主键SQL多行
- 22. 外国主键插入(增量发行)
- 23. FMDB插入自动增量
- 24. 用自动增量值插入表格
- 25. 现有表中添加自动递增的主键 - SQL
- 26. 插入2表并设置两个外键自动增量
- 27. 插入一个自动增量键到SQL Server Compact数据库
- 28. Postgres的表没有设置自动增量的主键
- 29. npoco.Insert <T>表上没有失败自动增量主键
- 30. C#将数据表添加到SQL与主键自动增量
您可以轻松地使用alter table来添加密钥,但MySQL不会为尚未拥有密钥的字段生成ID。你必须手动更新现有的字段,然后确保你的新auto_increment从右偏移量开始 - 它默认为'1',并且你最终只会有重复键错误。 – 2012-01-30 21:07:51
@MarcB我刚刚测试过,它确实插入了现有行的ID,从1 – 2012-01-30 21:09:28