Answers:
在我的测试中,ALTER TABLE
添加PRIMARY KEY
列的语句可以正常工作:
ALTER TABLE tbl ADD id INT PRIMARY KEY AUTO_INCREMENT;
在为测试目的而创建的临时表上,以上语句创建了该AUTO_INCREMENT
id
列,并为表中的每个现有行插入了从1开始的自动增量值。
FIRST
例如ALTER TABLE tbl1 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST;
LAST_INSERT_ID()
了该值,SELECT * FROM table_name WHERE id = LAST_INSERT_ID()
并且大多数编程语言API提供了一些函数/方法来在应用程序代码中返回该值。
假设您没有自动递增列,例如id,no,那么您可以使用以下查询进行添加:
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
在结束呢?
id
列成为表中的第一列,而不是最后一列,这是默认行为。
是的,这样的事情可能会做到,虽然可能不是最好的,但您可能想要备份
$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
您选择的更新时必须相同。
我能够按照以下说明进行调整:选择一个具有现有非递增主键的表,并向该表中添加一个递增主键,并使用以下命令创建一个新的组合主键,其中旧键和新键均作为组合主键码:
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表之前先拆掉所有外键,然后再重建它们。但是目前,我想将这个解决方案与原始问题的更具挑战性的版本共享,以防其他人遇到这种情况。
您可以使用以下命令将新的“主键”列添加到现有表中,该表可以具有序列号:
ALTER TABLE mydb.mytable ADD pk_columnName INT IDENTITY
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTITY' at line 1
如何编写PHP以更改已经存在的字段(在此示例中为name)以使其成为主键?当然,不带任何其他“ id”字段到表中。
当前创建的此表-找到的记录数:4名称VARCHAR(20)是品种VARCHAR(30)是颜色VARCHAR(20)是重量SMALLINT(7)是
寻求的最终结果(表说明)-
找到的记录数:4名称VARCHAR(20)否PRI品种VARCHAR(30)是颜色VARCHAR(20)是重量SMALLINT(7)是
而不是得到这个-
找到的记录数:5 id int(11)否PRI名称VARCHAR(20)是品种VARCHAR(30)是颜色VARCHAR(20)是重量SMALLINT(7)是
经过尝试..
$ query =“ ALTER TABLE赛马添加ID INT不为空AUTO_INCREMENT FIRST,添加主键(id)”;
怎么得到这个?--
找到的记录数:4名称VARCHAR(20)否PRI品种VARCHAR(30)是颜色VARCHAR(20)是重量SMALLINT(7)是
即INSERT / ADD ..等主键INTO第一个字段记录(如前所述,不添加其他“ id”字段)。
alter table
以添加密钥,但是MySQL不会为尚不存在的字段生成ID。您必须手动更新现有字段,然后确保新的auto_increment从正确的偏移量开始-默认为“ 1”,并且无论如何都会导致重复的键错误。