如何重命名表中的列xyz
?列是:
Manufacurerid, name, status, AI, PK, int
Run Code Online (Sandbox Code Playgroud)
我想重命名为 manufacturerid
我尝试使用PHPMyAdmin面板,但是我收到此错误:
MySQL said: Documentation
#1025 - Error on rename of '.\shopping\#sql-c98_26' to '.\shopping\tblmanufacturer' (errno: 150)
Run Code Online (Sandbox Code Playgroud) 我有一个表,其主键在其他几个表中使用,并有几个外键到其他表.
CREATE TABLE location (
locationID INT NOT NULL AUTO_INCREMENT PRIMARY KEY
...
) ENGINE = InnoDB;
CREATE TABLE assignment (
assignmentID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
locationID INT NOT NULL,
FOREIGN KEY locationIDX (locationID) REFERENCES location (locationID)
...
) ENGINE = InnoDB;
CREATE TABLE assignmentStuff (
...
assignmentID INT NOT NULL,
FOREIGN KEY assignmentIDX (assignmentID) REFERENCES assignment (assignmentID)
) ENGINE = InnoDB;
Run Code Online (Sandbox Code Playgroud)
问题是,当我试图删除其中一个外键列(即locationIDX)时,它会给我一个错误.
"ERROR 1025(HY000):重命名时出错"
如何在不发生此错误的情况下删除上面的分配表中的列?
我在mysql中试过这个:
mysql> alter table region drop column country_id;
Run Code Online (Sandbox Code Playgroud)
得到了这个:
ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?外键的东西?
所以我试图将一个主键添加到我的数据库中的一个表.现在它有一个这样的主键:
PRIMARY KEY (user_id, round_number)
Run Code Online (Sandbox Code Playgroud)
其中user_id是外键.
我想把它改成这个:
PRIMARY KEY (user_id, round_number, created_at)
Run Code Online (Sandbox Code Playgroud)
我在phpmyadmin中通过单击表结构视图中的主键图标来执行此操作.
这是我得到的错误:
#1025 - Error on rename of './database/#sql-2e0f_1254ba7' to './database/table' (errno: 150)
Run Code Online (Sandbox Code Playgroud)
它是一个带有InnoDB表引擎的MySQL数据库.
我们正在尝试重命名MySQL(5.1.31,InnoDB)中的一个列,该列是另一个表的外键.
起初,我们尝试使用Django-South,但遇到了一个已知问题:
http://south.aeracode.org/ticket/243
OperationalError:(1025,"将./xxx/#sql-bf_4d'重命名为'./xxx/cave_event'(错误号:150)时出错")
和
将'./xxx/#sql-bf_4b'重命名为'./xxx/cave_event'时出错(错误号:150)
此错误150肯定与外键约束有关.见例如
什么是mysql错误1025(HY000):重命名'./foo'时出错(errorno:150)是什么意思?
http://www.xaprb.com/blog/2006/08/22/mysqls-error-1025-explained/
所以,现在我们正在尝试在原始SQL中重命名.看起来我们必须首先删除外键,然后重命名,然后再次添加外键.听起来不错吗?有没有更好的方法,因为这看起来很混乱和麻烦?
任何帮助将非常感激!
我想在我的表中删除外键但是已经进入此错误消息
mysql> alter table customers drop foreign key customerid;
ERROR 1025 (HY000): Error on rename of '.\products\customers' to '.\products\#sql2-7ec-a3' (errno: 152)
mysql>
Run Code Online (Sandbox Code Playgroud) mysql foreign-keys foreign-key-relationship mysql-error-1025
这是我的表:
CREATE TABLE `alums_alumphoto` (
`id` int(11) NOT NULL auto_increment,
`alum_id` int(11) NOT NULL,
`photo_id` int(11) default NULL,
`media_id` int(11) default NULL,
`updated` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `alums_alumphoto_alum_id` (`alum_id`),
KEY `alums_alumphoto_photo_id` (`photo_id`),
KEY `alums_alumphoto_media_id` (`media_id`),
CONSTRAINT `alums_alumphoto_ibfk_1` FOREIGN KEY (`media_id`) REFERENCES `media_mediaitem` (`id`),
CONSTRAINT `alum_id_refs_id_706915ea` FOREIGN KEY (`alum_id`) REFERENCES `alums_alum` (`id`),
CONSTRAINT `photo_id_refs_id_63282119` FOREIGN KEY (`photo_id`) REFERENCES `media_mediaitem` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=63 DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)
我想删除列photo_id
,可能还需要删除外键约束和索引.
问题是当我尝试删除列时出现错误:
ERROR 1025 (HY000): Error on rename of '.\dbname\#sql-670_c5c' to …
我有一个生产数据库,我已经重命名了几个外键的列.显然,mysql使我的经历真的很痛苦.
我的解决方案是删除所有索引和外键,重命名id列,然后重新添加索引和外键.
这适用于开发数据库的Windows上的mysql 5.1.
我去我的debian服务器上运行我的迁移脚本,它也使用mysql 5.1,它给出了以下错误:
mysql> ALTER TABLE `company_to_module`
-> ADD CONSTRAINT `FK82977604FE40A062` FOREIGN KEY (`company_id`) REFERENCES `company` (`company_id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ERROR 1005 (HY000): Can't create table 'jobprep_production.#sql-44a5_76' (errno: 150)
Run Code Online (Sandbox Code Playgroud)
此表中没有值与我尝试添加的外键冲突.数据库没有改变.外键DID存在于...之前,因此数据很好.我们没有提到我使用了服务器上的SAME数据库,它可以在Windows上正常迁移.但是这些相同的外键迁移并没有采用Debian.
列使用相同的类型 - BIGINT(20)
这些名称实际上存在于各自的表中.
这些表是innodb.它们已经在其他列中具有外键.这不是一个新的数据库.
我不能删除表,因为这是一个生产数据库.
我的数据库中的"按原样"表格:
CREATE TABLE `company_to_module` (
`company_id` bigint(20) NOT NULL,
`module_id` bigint(20) NOT NULL,
KEY `FK8297760442C8F876` (`module_id`),
KEY `FK82977604FE40A062` (`company_id`) USING BTREE,
CONSTRAINT `FK8297760442C8F876` FOREIGN KEY (`module_id`) REFERENCES `module` (`module_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)
和
Create Table: CREATE TABLE …
Run Code Online (Sandbox Code Playgroud) mysql foreign-keys alter-table mysql-error-1025 mysql-error-1005
我有两个已经存在的表,看起来(部分)大致是这样的:
CREATE TABLE parent (
old_pk CHAR(8) NOT NULL PRIMARY KEY
) ENGINE=InnoDB;
CREATE TABLE child (
parent_key CHAR(8),
FOREIGN KEY (parent_key) REFERENCES parent(old_pk)
ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)
我想添加一个新的自动递增整数id
列,parent
并将其用作主键,同时仍保留old_pk
为唯一键,并允许其他表喜欢child
在外键约束中引用它.不幸的是,简单说ALTER TABLE parent DROP PRIMARY KEY
不起作用:
错误代码:1025
将'./data/#sql-4013_70f5e'重命名为'./data/parent'时出错(错误号:150)
一些谷歌搜索表明这是由于现有的外键引用child
.从本质上讲,我需要一种方法告诉MySQL"使用其他列作为主键,但不要忘记原始列的唯一键 - ".有没有办法实现这一点,除了从中删除关键约束child
并在之后恢复它们?
假设我必须在适当的位置更改表,而不是使用相同的数据创建副本并在以后交换它们.我SET FOREIGN_KEY_CHECKS = 0
在改变表之前尝试过使用,但它似乎没有帮助.
我有丢弃外键索引的问题,我总是得到同样的错误
ALTER TABLE `comments` DROP INDEX `id_user`
Run Code Online (Sandbox Code Playgroud)
哪个输出
1025 - Error on rename of './postuj_cz1/#sql-d834_a0c704'
to './postuj_cz1/comments' (errno: 150)
Run Code Online (Sandbox Code Playgroud)
在id_user
上其他表是简单主键索引.
我使用的是MySQL 5.0.85版本
mysql ×10
mysql-error-1025 ×10
foreign-keys ×5
sql ×3
alter-table ×2
constraints ×2
innodb ×2
database ×1
phpmyadmin ×1
primary-key ×1