如何在原有的MYSQL数据表增加一个字段,而不会使原来的 数据不会丢失?

时间:2020-12-07 14:37:27
由于刚开始使用 MYSQL时,没有建立一个关键字段,所以到现在随着数据越来越多,对数据库的超作越来越不方便了。请教高手,如何在不丢失原来的数据的情况下,增加一个ID关键字段?
我的原表如下:
  SKRQ  KRMC  HTHM  SKR BZ  
改为:
  ID SKRQ KRMC HTHM SKR BZ

20 个解决方案

#1


把数据导出来,重新建一张表
别无他法

#2


alter table yourtable add id int unsigned not Null auto_increment primary key

#3


Reve(仨仁仕)回答的正确,就是这条命令可以增加一个子段。 
 acev (acev) 试试吧一定能行

#4


to:bombshell
怎么个正确法?
他每条记录的id怎么办?
你是不是想让他们就怎么空着????????
ft~

#5


谢谢各位。
anybody1(随便编一个) 说的是,能否id自动生成数据呢?

#6


我觉得可以先去掉原表中的primary key,再新增加ID字段,然后导入所有的ID数据,再把primary key加上去,不知这样可不可行

注:我只是不知道假如表中已有不符合unique index的数据再硬加primary key在MySQL中会如何操作?

#7


to:acev
太麻烦了,如果你想这样的话,还是要建一张表
那么,还不如。。。
你说是不是呢?

#8


to: anybody1(随便编一个)
ft
我试验过了,完全可以。以前的数据id 自动增加。不信自己试验。没时间和你打嘴仗。
mysql>alter table yourtable add id int unsigned not Null auto_increment primary key;
to:acev (acev) 
这个问题我给你回答的你先可以自己建个表试验然后在执行。不要听那些纸上谈兵的,没意思,你说呢?
 




#9


错误 



SQL 语句 :  [编辑] 

alter table administrator add idid int unsigned not Null auto_increment primary key


MySQL 返回:


Incorrect table definition; There can only be one auto column and it must be defined as a key


返回

#10


这样的错误造成的原因是,在你的表中已经有一个自动增加的字段。如果你在添加一个自动增加的字段就会提示你说的错误。

#11


为什么不用phpMyAdmin?

#12


to:bombshell
我不是不认识英文。不需要翻译
to:acev
如果你是需要一个自己一个一个从1到n垒加的而不是随机自动生成的id字断
那你就采用bombshell的方法(不过,安全性很差,呵呵~~)

#13


你好:
     anybody1(随便编一个)!
    今天在论坛很高兴遇到你,希望以后大家互相帮助。

你好:
    acev!
   我不知道你在表中建id 的目的。如果你是为了让纪录不重复的话。最好设成自动增加,这是最简单的。哈哈!难道你想得到重复的记录吗。

#14


我宁愿得到一个12位(比如你的随机数设的是12位)有可能重复的随机数
也不愿意有一个像您那样的自动生成的id
 
而且,您说的重复,只要用一个if。。。else就可以避免

bombshell,您说是不是呢?

#15


还有:如果他的表中已经有了一个primary key
怎么办?
还有,我说的方法只是一个比较稳妥的办法,并不完全对
而且,我说的安全问题,同样用脚本也可以避免,关键是
帖主想怎么去解决的问题了。

您说是吗?

#16


alter table administrator add idid int unsigned not Null auto_increment primary key

#17


to bombshell(水中鱼)
谢谢你,我按你的语句执行了,成功!
Query OK, 567 rows affected (0.28 sec)
Records: 567  Duplicates: 0  Warnings: 0

 但id跑到后面去了,不过成功了,谢谢你。

#18


如果我又要删除id呢?xixi

我增加id后,发现许多连接mysql数据库的程序、网页无法正常运行!

#19


to bombshell(水中鱼)
谢谢你,我按你的语句执行了,成功!
Query OK, 567 rows affected (0.28 sec)
Records: 567  Duplicates: 0  Warnings: 0

 但id跑到后面去了,不过成功了,谢谢你。

#20


1.可以放到前面。具体这样实现:
mysql>alter table yourtable_name add id int unsigned not Null auto_increment primary key first;

2.如果想删掉id 也简单,具体这样实现:
mysql>alter table yourtable_name drop id ;

#1


把数据导出来,重新建一张表
别无他法

#2


alter table yourtable add id int unsigned not Null auto_increment primary key

#3


Reve(仨仁仕)回答的正确,就是这条命令可以增加一个子段。 
 acev (acev) 试试吧一定能行

#4


to:bombshell
怎么个正确法?
他每条记录的id怎么办?
你是不是想让他们就怎么空着????????
ft~

#5


谢谢各位。
anybody1(随便编一个) 说的是,能否id自动生成数据呢?

#6


我觉得可以先去掉原表中的primary key,再新增加ID字段,然后导入所有的ID数据,再把primary key加上去,不知这样可不可行

注:我只是不知道假如表中已有不符合unique index的数据再硬加primary key在MySQL中会如何操作?

#7


to:acev
太麻烦了,如果你想这样的话,还是要建一张表
那么,还不如。。。
你说是不是呢?

#8


to: anybody1(随便编一个)
ft
我试验过了,完全可以。以前的数据id 自动增加。不信自己试验。没时间和你打嘴仗。
mysql>alter table yourtable add id int unsigned not Null auto_increment primary key;
to:acev (acev) 
这个问题我给你回答的你先可以自己建个表试验然后在执行。不要听那些纸上谈兵的,没意思,你说呢?
 




#9


错误 



SQL 语句 :  [编辑] 

alter table administrator add idid int unsigned not Null auto_increment primary key


MySQL 返回:


Incorrect table definition; There can only be one auto column and it must be defined as a key


返回

#10


这样的错误造成的原因是,在你的表中已经有一个自动增加的字段。如果你在添加一个自动增加的字段就会提示你说的错误。

#11


为什么不用phpMyAdmin?

#12


to:bombshell
我不是不认识英文。不需要翻译
to:acev
如果你是需要一个自己一个一个从1到n垒加的而不是随机自动生成的id字断
那你就采用bombshell的方法(不过,安全性很差,呵呵~~)

#13


你好:
     anybody1(随便编一个)!
    今天在论坛很高兴遇到你,希望以后大家互相帮助。

你好:
    acev!
   我不知道你在表中建id 的目的。如果你是为了让纪录不重复的话。最好设成自动增加,这是最简单的。哈哈!难道你想得到重复的记录吗。

#14


我宁愿得到一个12位(比如你的随机数设的是12位)有可能重复的随机数
也不愿意有一个像您那样的自动生成的id
 
而且,您说的重复,只要用一个if。。。else就可以避免

bombshell,您说是不是呢?

#15


还有:如果他的表中已经有了一个primary key
怎么办?
还有,我说的方法只是一个比较稳妥的办法,并不完全对
而且,我说的安全问题,同样用脚本也可以避免,关键是
帖主想怎么去解决的问题了。

您说是吗?

#16


alter table administrator add idid int unsigned not Null auto_increment primary key

#17


to bombshell(水中鱼)
谢谢你,我按你的语句执行了,成功!
Query OK, 567 rows affected (0.28 sec)
Records: 567  Duplicates: 0  Warnings: 0

 但id跑到后面去了,不过成功了,谢谢你。

#18


如果我又要删除id呢?xixi

我增加id后,发现许多连接mysql数据库的程序、网页无法正常运行!

#19


to bombshell(水中鱼)
谢谢你,我按你的语句执行了,成功!
Query OK, 567 rows affected (0.28 sec)
Records: 567  Duplicates: 0  Warnings: 0

 但id跑到后面去了,不过成功了,谢谢你。

#20


1.可以放到前面。具体这样实现:
mysql>alter table yourtable_name add id int unsigned not Null auto_increment primary key first;

2.如果想删掉id 也简单,具体这样实现:
mysql>alter table yourtable_name drop id ;

#21