(php)import .sql 并在表存在时添加列或创建新表

Posted

技术标签:

【中文标题】(php)import .sql 并在表存在时添加列或创建新表【英文标题】:(php)import .sql and add columns if table exists or create new table 【发布时间】:2015-09-19 09:31:24 【问题描述】:

不知道有没有可能。

我发布了一个脚本版本 1.0 现在我即将发布 1.2 版本,我对数据库表进行了一些升级,例如更改名称字段大小或默认值,还添加了一些新列和表,然后将完整 db 导出到 .sql 文件(新 db)。

是否可以从 php 导入新的 .sql 文件并添加新表并更改列结构而不从表中删除任何数据并在现有表中添加新列?

我尝试导入它,但它显示此错误: '改变表table1添加主键(id); ': 定义了多个主键

例子:

旧数据库 v1.0

表 1

ID(主键,AI)

名字(大小 50,默认 - 无)

姓(size-50,默认 - 无)

电子邮件(大小 50,默认 - 无)

密码(size-50 ,default - none)


新数据库 v1.2

表 1

ID(主键,AI)

名字(大小 100,默认 - 无)

姓(size-100,默认 - 无)

电子邮件(大小 255,默认 - 无)

密码(size-50 ,default - none)

性别(大小 10,默认 - 无)

添加表 2

ID(主键,AI)

coloum1 (size-100 ,default - none)

coloum2 (size-255 ,default - none)


是否可以在不丢失任何 php 数据的情况下在旧数据库上导入新的 .sql 并从新数据库中添加数据?

我已经尽力解释了希望你能理解。

编辑:我使用此代码导入新的 .sql 文件,但它不起作用:how to import .sql file in mysql database using php

【问题讨论】:

是的,绝对有可能。但是,当您创建 ALTER TABLE 语句时,您应该只包含更改 - 保留任何已经存在且不需要单独更新的内容。 【参考方案1】:

您收到该消息是因为列 id 已经存在并且具有 KEY,如果它的 PRIMARY KEY 和 AUTOINCREMENTED 那么它不能被复制,试试这个:

ALTER TABLE Table1 ADD COLUMN Gender varchar(10) NOT NULL DEFAULT 'none';
ALTER TABLE Table2 ADD COLUMN coloum1 varchar(100) NOT NULL DEFAULT 'none';
ALTER TABLE Table2 ADD COLUMN coloum2 varchar(255) NOT NULL DEFAULT 'none';

或者只是导入新列

【讨论】:

以上是关于(php)import .sql 并在表存在时添加列或创建新表的主要内容,如果未能解决你的问题,请参考以下文章

SqlAlchemy 将新字段添加到类并在表中创建相应的列

SQL比较2个日期并在> 3天时显示在表中

Sql 触发器在表更新时添加新行

php 用PHP连接数据库并检索数据并在表中显示它们

SQL Server:导入 Excel 并在表中放置列名和值

SQL加入并在表中获取计数