使用 phpmyadmin 导入时在 mysql 中自动增加列
Posted
技术标签:
【中文标题】使用 phpmyadmin 导入时在 mysql 中自动增加列【英文标题】:Auto increment column in mysql when importing with phpmyadmin 【发布时间】:2020-05-20 16:08:40 【问题描述】:我在 mysql 中有一个带有以下标题的表:
staff_id,dept_id,role_id,username,firstname,lastname,passwd,backend,email,phone,phone_ext,mobile,signature,lang,timezone,locale,notes,isactive,isadmin,isvisible,onvacation,assigned_only,show_assigned_tickets,change_passwd,max_page_size,auto_refresh_rate,default_signature_type,default_paper_size,extra,permissions,created,lastlogin,passwdreset,updated
staff_id
是主键值,设置为 AUTO_INCREMENT。
我发现this post 中的 Queue 解决方案确实很有帮助,尽管在导入数据时,staff_id 列没有自动递增。我在 phpmysql 的格式特定选项中插入列名。如果我尝试导入的 csv 文件中存在 staff_id 值,我只能填充它。
所以如果数据看起来像这样:
2,1,1,agent,Mista,Busta,NULL,NULL,agent@company.org,,NULL,,,NULL,NULL,NULL,<p>this is an agent; mista busta; agent@company.org</p>,1,0,1,0,0,0,0,0,0,none,Letter,"""def_assn_role"":true","""user.create"":1,""user.delete"":1,""user.edit"":1,""user.manage"":1,""user.dir"":1,""org.create"":1,""org.delete"":1,""org.edit"":1,""faq.manage"":1",2020-02-04 10:18:42,NULL,NULL,2020-02-04 10:18:42
...注意第一个'2'是staff_id。我想做的是在 csv 中有这个:
,1,1,agent,Mista,Busta,NULL,NULL,agent@company.org,,NULL,,,NULL,NULL,NULL,<p>this is an agent; mista busta; agent@company.org</p>,1,0,1,0,0,0,0,0,0,none,Letter,"""def_assn_role"":true","""user.create"":1,""user.delete"":1,""user.edit"":1,""user.manage"":1,""user.dir"":1,""org.create"":1,""org.delete"":1,""org.edit"":1,""faq.manage"":1",2020-02-04 10:18:42,NULL,NULL,2020-02-04 10:18:42
...将 staff_id 列留空并允许 mysql 在它认为合适的时候自动填充(auto_increment)。
【问题讨论】:
不要将 staff_id 留空,这是一个必填字段 -- 而是将其完全删除(包括逗号) -- 如果适用,还要确保在实际插入语句中删除对 staff_id 的引用。 (IE 只是删除了整个列,包括标题 ..)—— MySQL 在导入期间将看不到对它的引用,并遵循“自动增量”,分配新的 ID 创建staff_id
作为简单的非索引字段,按原样导入数据,然后删除staff_id
并根据需要创建-auto_increment、主键等。
@Zak 就在兄弟身上!那行得通。把它放在一个答案中,我会接受它。
NULL 也将被替换为自动递增值
【参考方案1】:
AUTO INCREMENT
在 MySQL 中的服务器级别设置,如果在 CSV 或其他导入中手动分配,可以覆盖。如果您只是从导入中排除整个列,您将允许 MySQL 为该列执行设置为 default 的操作,并自动分配 ID,因为它认为您不想分配它们自己。
另外,如果您在不使用TRUNCATE TABLE
的情况下多次导入 - MySQL 将选择最后插入的 ID 并从那里继续,即使表是空的。因此,如果您想从 1 重新开始,则必须对表进行 trucate。
【讨论】:
以上是关于使用 phpmyadmin 导入时在 mysql 中自动增加列的主要内容,如果未能解决你的问题,请参考以下文章
使用 mamp、phpMyAdmin 导入 mysql 数据库
无法使用 phpmyadmin 向导将 csv 导入 mysql 数据库
MySQL/PHPMyAdmin - 使用 512MB RAM 导入 15,000 行