1025 ошибка при переименовании

I tried this in mysql:

mysql> alter table region drop column country_id;

And got this:

ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)

Any ideas? Foreign key stuff?

OMG Ponies's user avatar

OMG Ponies

324k80 gold badges520 silver badges499 bronze badges

asked Oct 1, 2008 at 23:33

Trenton's user avatar

2

You usually get this error if your tables use the InnoDB engine. In that case you would have to drop the foreign key, and then do the alter table and drop the column.

But the tricky part is that you can’t drop the foreign key using the column name, but instead you would have to find the name used to index it. To find that, issue the following select:

SHOW CREATE TABLE region;

This should show you the name of the index, something like this:

CONSTRAINT region_ibfk_1 FOREIGN
KEY (country_id) REFERENCES
country (id) ON DELETE NO
ACTION ON UPDATE NO ACTION

Now simply issue an:

alter table region drop foreign key
region_ibfk_1;

And finally an:

alter table region drop column
country_id;

And you are good to go!

answered Apr 11, 2011 at 0:45

Jeshurun's user avatar

JeshurunJeshurun

22.9k6 gold badges79 silver badges92 bronze badges

2

It is indeed a foreign key error, you can find out using perror:

shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed

To find out more details about what failed, you can use SHOW ENGINE INNODB STATUS and look for the LATEST FOREIGN KEY ERROR section it contains details about what is wrong.

In your case, it is most likely cause something is referencing the country_id column.

dmckee --- ex-moderator kitten's user avatar

answered Oct 7, 2008 at 17:24

Harrison Fisk's user avatar

Harrison FiskHarrison Fisk

7,0543 gold badges24 silver badges14 bronze badges

2

You can get also get this error trying to drop a non-existing foreign key. So when dropping foreign keys, always make sure they actually exist.

If the foreign key does exist, and you are still getting this error try the following:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

// Drop the foreign key here!

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

This always does the trick for me :)

answered Oct 22, 2009 at 8:40

Jeroen's user avatar

JeroenJeroen

1511 silver badge2 bronze badges

1

Simply run the alter table query using ‘KEY’ instead of ‘FOREIGN KEY’ in the drop statement. I hope it will help to solve the issue, and will drop the foreign key constraint and you can change the table columns and drop the table.

ALTER TABLE slide_image_sub DROP  KEY  FK_slide_image_sub;

here in DROP KEY instead of DROP FOREIGN KEY,

hope it will help.

Thanks

Prahalad Gaggar's user avatar

answered Feb 21, 2013 at 8:05

Muhammad Sohail's user avatar

0

I know, this is an old post, but it’s the first hit on everyone’s favorite search engine if you are looking for error 1025.

However, there is an easy «hack» for fixing this issue:

Before you execute your command(s) you first have to disable the foreign key constraints check using this command:

SET FOREIGN_KEY_CHECKS = 0;

Then you are able to execute your command(s).

After you are done, don’t forget to enable the foreign key constraints check again, using this command:

SET FOREIGN_KEY_CHECKS = 1;

Good luck with your endeavor.

answered Jan 9, 2017 at 8:25

Baccata's user avatar

BaccataBaccata

4351 gold badge7 silver badges14 bronze badges

1

I had a similar issues once. I deleted the primary key from TABLE A but when I was trying to delete the foreign key column from table B I was shown the above same error.

You can’t drop the foreign key using the column name and to bypass this in PHPMyAdmin or with MySQL, first remove the foreign key constraint before renaming or deleting the attribute.

answered Jan 12, 2016 at 5:40

Joomler's user avatar

JoomlerJoomler

2,5903 gold badges30 silver badges37 bronze badges

Take a look in error file for your mysql database. According to Bug #26305 my sql do not give you the cause. This bug exists since MySQL 4.1 ;-)

answered Mar 16, 2010 at 16:39

marabol's user avatar

marabolmarabol

1,2472 gold badges15 silver badges22 bronze badges

1

If you are using a client like MySQL Workbench, right click the desired table from where a foreign key is to be deleted, then select the foreign key tab and delete the indexes.

Then you can run the query like this:

alter table table_name drop foreign_key_col_name;

answered Jan 8, 2013 at 20:25

iltaf khalid's user avatar

iltaf khalidiltaf khalid

9,8285 gold badges30 silver badges34 bronze badges

There is probably another table with a foreign key referencing the primary key you are trying to change.

To find out which table caused the error you can run SHOW ENGINE INNODB STATUS and then look at the LATEST FOREIGN KEY ERROR section

Use SHOW CREATE TABLE categories to show the name of constraint.

Most probably it will be categories_ibfk_1

Use the name to drop the foreign key first and the column then:

ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;

answered Jan 11, 2016 at 13:24

youngdero's user avatar

youngderoyoungdero

3732 silver badges16 bronze badges

I got this error with MySQL 5.6 but it had nothing to do with Foreign keys. This was on a Windows 7 Professional machine acting as a server on a small LAN.

The client application was doing a batch operation that creates a table fills it with some external data then runs a query joining with permanent tables then dropping the «temporary» table. This batch does this approximately 300 times and this particular routine had been running week in week out for several years when suddenly we get the Error 1025 Unable to rename problem at a random point in the batch.

In my case the application was using 4 DDL statements a CREATE TABLE followed by 3 CREATE INDEX, there is no foreign key. However only 2 of the indexes actually get created and the actual table .frm file was renamed, at the point of failure.

My solution was to get rid of the separate CREATE INDEX statements and create them using the CREATE TABLE statement. This at the time of writing has solved the issue for me and my help someone else scratching their head when they find this thread.

answered Jan 4, 2019 at 21:27

Chris Millard's user avatar

I’d guess foreign key constraint problem. Is country_id used as a foreign key in another table?

I’m not DB guru but I think I solved a problem like this (where there was a fk constraint) by removing the fk, doing my alter table stuff and then redoing the fk stuff.

I’ll be interested to hear what the outcome is — sometime mysql is pretty cryptic.

answered Oct 1, 2008 at 23:42

itsmatt's user avatar

itsmattitsmatt

31.2k10 gold badges100 silver badges164 bronze badges

1

In my case, I was using MySQL workbench and I faced the same issue while dropping one of my columns in a table. I could not find the name of the foreign key. I followed the following steps to resolve the issue:

  1. Rt. click on your schema and select ‘schema inspector’. This gives you various tables, columns, indexes, ect.

  2. Go to the tab named ‘Indexes’ and search the name of the column under the column named ‘Column’. Once found check the name of the table for this record under the column name ‘Table’. If it matches the name of the table you want, then note down the name of the foreign key from the column named ‘Name’.

  3. Now execute the query : ALTER table tableNamexx DROP KEY foreignKeyName;

  4. Now you can execute the drop statement which shall execute successfully.

answered Feb 25, 2016 at 7:51

chepaiytrath's user avatar

chepaiytrathchepaiytrath

6681 gold badge9 silver badges20 bronze badges

Doing

SET FOREIGN_KEY_CHECKS=0;

before the Operation can also do the trick.

answered Jan 14, 2017 at 16:25

Jan Tchärmän's user avatar

Jan TchärmänJan Tchärmän

9171 gold badge8 silver badges13 bronze badges

averageRatings= FOREACH groupedRatings GENERATE group AS movieID, AVG(ratings.rating) AS avgRating, COUNT(ratings.rating) AS numRatings;

If you are using any command like above you must use group in small letters. This may solve your problem it solved mine. At least in PIG script.

answered Apr 1, 2020 at 12:00

Naman Dhameja's user avatar

1

I get a #1025 error when this query is run.

SQL query:

ALTER TABLE  `routes` CHANGE  `end_loc`  `end_loc` VARCHAR( 500 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL

MySQL said:

#1025 - Error on rename of './ridestr/#sql-1f44_26eeb' to './ridestr/routes' (errno: 150) 

Which is funny because I set up this query in PHP MyAdmin…I don’t know why I’m getting a foreign key error…I’m just trying to change something from int to varchar

Can anyone help?

OMG Ponies's user avatar

OMG Ponies

324k80 gold badges520 silver badges499 bronze badges

asked Mar 17, 2011 at 11:20

joshdcomp's user avatar

2

If the routes.end_loc column is being used in a foreign key, then you can’t change its data type. You will need to drop the foreign key, change the data type of both the parent and child columns, and then add the foreign key again.

For details on this error, run SHOW ENGINE INNODB STATUSG and then look at the LATEST FOREIGN KEY ERROR section.

answered Mar 17, 2011 at 15:33

Ike Walker's user avatar

Ike WalkerIke Walker

64.1k14 gold badges108 silver badges108 bronze badges

but it is very hard if you want to change in the whole charset to utf8 of all tables
here is what i did

     1 export the database (all tables) and open by notepad

     2 replace all "latin1" by utf8 and save

     3 then try to restore using mysqlAdministrator but it says wrong

     4 so try restoring again but you have to select ignore errors radio button
     5 it tries to restore some tables 

     6 then you have to restore again until no error message 

i know this is the hard way but i am sure this will work for you too

answered Apr 30, 2015 at 17:18

Shishay Kidane's user avatar

Я пробовал это в mysql:

mysql> alter table region drop column country_id;

и получил это:

ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)

какие идеи? Иностранные ключевые вещи?

12 ответов


вы обычно получаете эту ошибку, если ваши таблицы используют движок InnoDB. В этом случае вам придется удалить внешний ключ, а затем выполнить alter table и удалить столбец.

но сложная часть заключается в том, что вы не можете удалить внешний ключ, используя имя столбца, но вместо этого вам придется найти имя, используемое для его индексирования. Чтобы найти это, выполните следующий выбор:

показать создать область таблицы;

Это должно показать вам имя индекс, что-то вроде этого:

ограничения region_ibfk_1 внешняя
Ключ (country_id) ссылки
country (id) ПРИ УДАЛЕНИИ НЕТ
ДЕЙСТВИЕ ПО ОБНОВЛЕНИЮ НЕТ ДЕЙСТВИЯ

теперь просто вопрос:

alter TABLE region drop внешний ключ
region_ibfk_1;

и наконец:

alter TABLE region drop column
country_id;

и вы хорошо идти!


это действительно ошибка внешнего ключа, вы можете узнать, используя perror:

shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed

чтобы узнать больше о том, что не удалось, вы можете использовать SHOW ENGINE INNODB STATUS и найдите последний раздел ошибки внешнего ключа, в котором содержатся сведения о том, что не так.

в вашем случае, это скорее всего что-то ссылается на столбец country_id.


вы также можете получить эту ошибку, пытаясь удалить несуществующий внешний ключ. Поэтому при удалении внешних ключей, всегда убедитесь, что они действительно существуют.

Если внешний ключ существует, и вы все еще получаете эту ошибку, попробуйте следующее:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

/ / отбросьте внешний ключ здесь!

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

это всегда делает трюк для меня :)


просто запустите запрос alter table, используя » KEY «вместо» FOREIGN KEY » в инструкции drop. Я надеюсь, что это поможет решить проблему и отбросит ограничение внешнего ключа, и вы можете изменить столбцы таблицы и удалить таблицу.

ALTER TABLE slide_image_sub DROP  KEY  FK_slide_image_sub;

здесь DROP KEY вместо DROP FOREIGN KEY,

надеюсь, что это поможет.

спасибо


У меня были подобные проблемы однажды. Я удалил первичный ключ из таблицы A, но когда я пытался удалить столбец внешнего ключа из таблицы B, мне была показана та же ошибка.

вы не можете удалить внешний ключ, используя имя столбца, и обойти это в PHPMyAdmin или с MySQL, сначала удалите ограничение внешнего ключа перед переименованием или удалением атрибута.


Я знаю, это старый пост, но это первый удар по любимой поисковой системе каждого, если вы ищете ошибку 1025.

тем не менее, есть простой «хак» для исправления этой проблемы:

перед выполнением команд сначала необходимо отключить проверку ограничений внешнего ключа с помощью этой команды:

SET FOREIGN_KEY_CHECKS = 0;

затем вы можете выполнить свою команду(ы).

после того как вы закончите, не забудьте включить внешний ключ ограничениями, проверьте еще раз, используя эту команду:

SET FOREIGN_KEY_CHECKS = 1;

удачи в ваших начинаниях.


посмотрите в файле ошибок для вашей базы данных mysql. Согласно ошибка #26305 мой SQL не дает вам причину. Эта ошибка существует с MySQL 4.1; -)


Если вы используете клиент, такой как MySQL Workbench, щелкните правой кнопкой мыши нужную таблицу, из которой должен быть удален внешний ключ, затем выберите вкладку Внешний ключ и удалите индексы.

затем вы можете запустить запрос следующим образом:

alter table table_name drop foreign_key_col_name;

вероятно, есть другая таблица с внешним ключом, ссылающимся на первичный ключ, который вы пытаетесь изменить.

чтобы узнать, какая таблица вызвала ошибку, вы можете запустить SHOW ENGINE INNODB STATUS а затем посмотрите на LATEST FOREIGN KEY ERROR раздел

используйте SHOW CREATE TABLE categories для отображения имени ограничения.

скорее всего, это будет categories_ibfk_1

используйте имя, чтобы сначала удалить внешний ключ, а затем столбец:

ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;

делаешь

SET FOREIGN_KEY_CHECKS=0;

перед операцией также может сделать трюк.


Я бы предположил, что проблема ограничения внешнего ключа. Это country_id используется в качестве внешнего ключа в другой таблице?

Я не DB guru, но я думаю, что решил такую проблему (где было ограничение fk), удалив fk, сделав мой материал alter table, а затем переделав материал fk.

Мне будет интересно услышать, каков результат-иногда mysql довольно загадочный.


в моем случае я использовал MySQL workbench, и я столкнулся с той же проблемой при удалении одного из моих столбцов в таблице. Я не смог найти имя внешнего ключа. Я выполнил следующие шаги, чтобы решить эту проблему:

  1. RT. нажмите на свою схему и выберите «инспектор схем». Это дает вам различные таблицы, столбцы, индексы, ect.

  2. перейдите на вкладку с именем «индексы» и найдите имя столбца под столбцом с именем «столбец». Однажды найдено проверьте имя таблицы для этой записи под именем столбца «таблица». Если он соответствует имени нужной таблицы, запишите имя внешнего ключа из столбца с именем «Name».

  3. теперь выполните запрос: ALTER table TABLENAMEXX DROP KEY foreignKeyName;

  4. теперь вы можете выполнить оператор drop, который должен успешно выполняться.


I tried this in mysql:

mysql> alter table region drop column country_id;

And got this:

ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)

Any ideas? Foreign key stuff?

OMG Ponies's user avatar

OMG Ponies

321k79 gold badges515 silver badges499 bronze badges

asked Oct 1, 2008 at 23:33

Trenton's user avatar

2

You usually get this error if your tables use the InnoDB engine. In that case you would have to drop the foreign key, and then do the alter table and drop the column.

But the tricky part is that you can’t drop the foreign key using the column name, but instead you would have to find the name used to index it. To find that, issue the following select:

SHOW CREATE TABLE region;

This should show you the name of the index, something like this:

CONSTRAINT region_ibfk_1 FOREIGN
KEY (country_id) REFERENCES
country (id) ON DELETE NO
ACTION ON UPDATE NO ACTION

Now simply issue an:

alter table region drop foreign key
region_ibfk_1;

And finally an:

alter table region drop column
country_id;

And you are good to go!

answered Apr 11, 2011 at 0:45

Jeshurun's user avatar

JeshurunJeshurun

22.7k6 gold badges80 silver badges91 bronze badges

2

It is indeed a foreign key error, you can find out using perror:

shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed

To find out more details about what failed, you can use SHOW ENGINE INNODB STATUS and look for the LATEST FOREIGN KEY ERROR section it contains details about what is wrong.

In your case, it is most likely cause something is referencing the country_id column.

dmckee --- ex-moderator kitten's user avatar

answered Oct 7, 2008 at 17:24

Harrison Fisk's user avatar

Harrison FiskHarrison Fisk

7,0163 gold badges24 silver badges14 bronze badges

2

You can get also get this error trying to drop a non-existing foreign key. So when dropping foreign keys, always make sure they actually exist.

If the foreign key does exist, and you are still getting this error try the following:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

// Drop the foreign key here!

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

This always does the trick for me :)

answered Oct 22, 2009 at 8:40

Jeroen's user avatar

JeroenJeroen

1511 silver badge2 bronze badges

1

Simply run the alter table query using ‘KEY’ instead of ‘FOREIGN KEY’ in the drop statement. I hope it will help to solve the issue, and will drop the foreign key constraint and you can change the table columns and drop the table.

ALTER TABLE slide_image_sub DROP  KEY  FK_slide_image_sub;

here in DROP KEY instead of DROP FOREIGN KEY,

hope it will help.

Thanks

Prahalad Gaggar's user avatar

answered Feb 21, 2013 at 8:05

Muhammad Sohail's user avatar

0

I know, this is an old post, but it’s the first hit on everyone’s favorite search engine if you are looking for error 1025.

However, there is an easy «hack» for fixing this issue:

Before you execute your command(s) you first have to disable the foreign key constraints check using this command:

SET FOREIGN_KEY_CHECKS = 0;

Then you are able to execute your command(s).

After you are done, don’t forget to enable the foreign key constraints check again, using this command:

SET FOREIGN_KEY_CHECKS = 1;

Good luck with your endeavor.

answered Jan 9, 2017 at 8:25

Baccata's user avatar

BaccataBaccata

3951 gold badge6 silver badges14 bronze badges

1

I had a similar issues once. I deleted the primary key from TABLE A but when I was trying to delete the foreign key column from table B I was shown the above same error.

You can’t drop the foreign key using the column name and to bypass this in PHPMyAdmin or with MySQL, first remove the foreign key constraint before renaming or deleting the attribute.

answered Jan 12, 2016 at 5:40

Joomler's user avatar

JoomlerJoomler

2,4902 gold badges29 silver badges36 bronze badges

Take a look in error file for your mysql database. According to Bug #26305 my sql do not give you the cause. This bug exists since MySQL 4.1 ;-)

answered Mar 16, 2010 at 16:39

marabol's user avatar

marabolmarabol

1,2472 gold badges15 silver badges22 bronze badges

1

If you are using a client like MySQL Workbench, right click the desired table from where a foreign key is to be deleted, then select the foreign key tab and delete the indexes.

Then you can run the query like this:

alter table table_name drop foreign_key_col_name;

answered Jan 8, 2013 at 20:25

iltaf khalid's user avatar

iltaf khalidiltaf khalid

9,6685 gold badges29 silver badges34 bronze badges

There is probably another table with a foreign key referencing the primary key you are trying to change.

To find out which table caused the error you can run SHOW ENGINE INNODB STATUS and then look at the LATEST FOREIGN KEY ERROR section

Use SHOW CREATE TABLE categories to show the name of constraint.

Most probably it will be categories_ibfk_1

Use the name to drop the foreign key first and the column then:

ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;

answered Jan 11, 2016 at 13:24

youngdero's user avatar

youngderoyoungdero

3642 silver badges16 bronze badges

I got this error with MySQL 5.6 but it had nothing to do with Foreign keys. This was on a Windows 7 Professional machine acting as a server on a small LAN.

The client application was doing a batch operation that creates a table fills it with some external data then runs a query joining with permanent tables then dropping the «temporary» table. This batch does this approximately 300 times and this particular routine had been running week in week out for several years when suddenly we get the Error 1025 Unable to rename problem at a random point in the batch.

In my case the application was using 4 DDL statements a CREATE TABLE followed by 3 CREATE INDEX, there is no foreign key. However only 2 of the indexes actually get created and the actual table .frm file was renamed, at the point of failure.

My solution was to get rid of the separate CREATE INDEX statements and create them using the CREATE TABLE statement. This at the time of writing has solved the issue for me and my help someone else scratching their head when they find this thread.

answered Jan 4, 2019 at 21:27

Chris Millard's user avatar

I’d guess foreign key constraint problem. Is country_id used as a foreign key in another table?

I’m not DB guru but I think I solved a problem like this (where there was a fk constraint) by removing the fk, doing my alter table stuff and then redoing the fk stuff.

I’ll be interested to hear what the outcome is — sometime mysql is pretty cryptic.

answered Oct 1, 2008 at 23:42

itsmatt's user avatar

itsmattitsmatt

31.1k10 gold badges100 silver badges163 bronze badges

1

In my case, I was using MySQL workbench and I faced the same issue while dropping one of my columns in a table. I could not find the name of the foreign key. I followed the following steps to resolve the issue:

  1. Rt. click on your schema and select ‘schema inspector’. This gives you various tables, columns, indexes, ect.

  2. Go to the tab named ‘Indexes’ and search the name of the column under the column named ‘Column’. Once found check the name of the table for this record under the column name ‘Table’. If it matches the name of the table you want, then note down the name of the foreign key from the column named ‘Name’.

  3. Now execute the query : ALTER table tableNamexx DROP KEY foreignKeyName;

  4. Now you can execute the drop statement which shall execute successfully.

answered Feb 25, 2016 at 7:51

chepaiytrath's user avatar

chepaiytrathchepaiytrath

6381 gold badge9 silver badges20 bronze badges

Doing

SET FOREIGN_KEY_CHECKS=0;

before the Operation can also do the trick.

answered Jan 14, 2017 at 16:25

Jan Tchärmän's user avatar

Jan TchärmänJan Tchärmän

9171 gold badge8 silver badges13 bronze badges

averageRatings= FOREACH groupedRatings GENERATE group AS movieID, AVG(ratings.rating) AS avgRating, COUNT(ratings.rating) AS numRatings;

If you are using any command like above you must use group in small letters. This may solve your problem it solved mine. At least in PIG script.

answered Apr 1, 2020 at 12:00

Naman Dhameja's user avatar

1

I tried this in mysql:

mysql> alter table region drop column country_id;

And got this:

ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)

Any ideas? Foreign key stuff?

OMG Ponies's user avatar

OMG Ponies

321k79 gold badges515 silver badges499 bronze badges

asked Oct 1, 2008 at 23:33

Trenton's user avatar

2

You usually get this error if your tables use the InnoDB engine. In that case you would have to drop the foreign key, and then do the alter table and drop the column.

But the tricky part is that you can’t drop the foreign key using the column name, but instead you would have to find the name used to index it. To find that, issue the following select:

SHOW CREATE TABLE region;

This should show you the name of the index, something like this:

CONSTRAINT region_ibfk_1 FOREIGN
KEY (country_id) REFERENCES
country (id) ON DELETE NO
ACTION ON UPDATE NO ACTION

Now simply issue an:

alter table region drop foreign key
region_ibfk_1;

And finally an:

alter table region drop column
country_id;

And you are good to go!

answered Apr 11, 2011 at 0:45

Jeshurun's user avatar

JeshurunJeshurun

22.7k6 gold badges80 silver badges91 bronze badges

2

It is indeed a foreign key error, you can find out using perror:

shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed

To find out more details about what failed, you can use SHOW ENGINE INNODB STATUS and look for the LATEST FOREIGN KEY ERROR section it contains details about what is wrong.

In your case, it is most likely cause something is referencing the country_id column.

dmckee --- ex-moderator kitten's user avatar

answered Oct 7, 2008 at 17:24

Harrison Fisk's user avatar

Harrison FiskHarrison Fisk

7,0163 gold badges24 silver badges14 bronze badges

2

You can get also get this error trying to drop a non-existing foreign key. So when dropping foreign keys, always make sure they actually exist.

If the foreign key does exist, and you are still getting this error try the following:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

// Drop the foreign key here!

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

This always does the trick for me :)

answered Oct 22, 2009 at 8:40

Jeroen's user avatar

JeroenJeroen

1511 silver badge2 bronze badges

1

Simply run the alter table query using ‘KEY’ instead of ‘FOREIGN KEY’ in the drop statement. I hope it will help to solve the issue, and will drop the foreign key constraint and you can change the table columns and drop the table.

ALTER TABLE slide_image_sub DROP  KEY  FK_slide_image_sub;

here in DROP KEY instead of DROP FOREIGN KEY,

hope it will help.

Thanks

Prahalad Gaggar's user avatar

answered Feb 21, 2013 at 8:05

Muhammad Sohail's user avatar

0

I know, this is an old post, but it’s the first hit on everyone’s favorite search engine if you are looking for error 1025.

However, there is an easy «hack» for fixing this issue:

Before you execute your command(s) you first have to disable the foreign key constraints check using this command:

SET FOREIGN_KEY_CHECKS = 0;

Then you are able to execute your command(s).

After you are done, don’t forget to enable the foreign key constraints check again, using this command:

SET FOREIGN_KEY_CHECKS = 1;

Good luck with your endeavor.

answered Jan 9, 2017 at 8:25

Baccata's user avatar

BaccataBaccata

3951 gold badge6 silver badges14 bronze badges

1

I had a similar issues once. I deleted the primary key from TABLE A but when I was trying to delete the foreign key column from table B I was shown the above same error.

You can’t drop the foreign key using the column name and to bypass this in PHPMyAdmin or with MySQL, first remove the foreign key constraint before renaming or deleting the attribute.

answered Jan 12, 2016 at 5:40

Joomler's user avatar

JoomlerJoomler

2,4902 gold badges29 silver badges36 bronze badges

Take a look in error file for your mysql database. According to Bug #26305 my sql do not give you the cause. This bug exists since MySQL 4.1 ;-)

answered Mar 16, 2010 at 16:39

marabol's user avatar

marabolmarabol

1,2472 gold badges15 silver badges22 bronze badges

1

If you are using a client like MySQL Workbench, right click the desired table from where a foreign key is to be deleted, then select the foreign key tab and delete the indexes.

Then you can run the query like this:

alter table table_name drop foreign_key_col_name;

answered Jan 8, 2013 at 20:25

iltaf khalid's user avatar

iltaf khalidiltaf khalid

9,6685 gold badges29 silver badges34 bronze badges

There is probably another table with a foreign key referencing the primary key you are trying to change.

To find out which table caused the error you can run SHOW ENGINE INNODB STATUS and then look at the LATEST FOREIGN KEY ERROR section

Use SHOW CREATE TABLE categories to show the name of constraint.

Most probably it will be categories_ibfk_1

Use the name to drop the foreign key first and the column then:

ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;

answered Jan 11, 2016 at 13:24

youngdero's user avatar

youngderoyoungdero

3642 silver badges16 bronze badges

I got this error with MySQL 5.6 but it had nothing to do with Foreign keys. This was on a Windows 7 Professional machine acting as a server on a small LAN.

The client application was doing a batch operation that creates a table fills it with some external data then runs a query joining with permanent tables then dropping the «temporary» table. This batch does this approximately 300 times and this particular routine had been running week in week out for several years when suddenly we get the Error 1025 Unable to rename problem at a random point in the batch.

In my case the application was using 4 DDL statements a CREATE TABLE followed by 3 CREATE INDEX, there is no foreign key. However only 2 of the indexes actually get created and the actual table .frm file was renamed, at the point of failure.

My solution was to get rid of the separate CREATE INDEX statements and create them using the CREATE TABLE statement. This at the time of writing has solved the issue for me and my help someone else scratching their head when they find this thread.

answered Jan 4, 2019 at 21:27

Chris Millard's user avatar

I’d guess foreign key constraint problem. Is country_id used as a foreign key in another table?

I’m not DB guru but I think I solved a problem like this (where there was a fk constraint) by removing the fk, doing my alter table stuff and then redoing the fk stuff.

I’ll be interested to hear what the outcome is — sometime mysql is pretty cryptic.

answered Oct 1, 2008 at 23:42

itsmatt's user avatar

itsmattitsmatt

31.1k10 gold badges100 silver badges163 bronze badges

1

In my case, I was using MySQL workbench and I faced the same issue while dropping one of my columns in a table. I could not find the name of the foreign key. I followed the following steps to resolve the issue:

  1. Rt. click on your schema and select ‘schema inspector’. This gives you various tables, columns, indexes, ect.

  2. Go to the tab named ‘Indexes’ and search the name of the column under the column named ‘Column’. Once found check the name of the table for this record under the column name ‘Table’. If it matches the name of the table you want, then note down the name of the foreign key from the column named ‘Name’.

  3. Now execute the query : ALTER table tableNamexx DROP KEY foreignKeyName;

  4. Now you can execute the drop statement which shall execute successfully.

answered Feb 25, 2016 at 7:51

chepaiytrath's user avatar

chepaiytrathchepaiytrath

6381 gold badge9 silver badges20 bronze badges

Doing

SET FOREIGN_KEY_CHECKS=0;

before the Operation can also do the trick.

answered Jan 14, 2017 at 16:25

Jan Tchärmän's user avatar

Jan TchärmänJan Tchärmän

9171 gold badge8 silver badges13 bronze badges

averageRatings= FOREACH groupedRatings GENERATE group AS movieID, AVG(ratings.rating) AS avgRating, COUNT(ratings.rating) AS numRatings;

If you are using any command like above you must use group in small letters. This may solve your problem it solved mine. At least in PIG script.

answered Apr 1, 2020 at 12:00

Naman Dhameja's user avatar

1

I tried this in mysql:

mysql> alter table region drop column country_id;

And got this:

ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)

Any ideas? Foreign key stuff?

OMG Ponies's user avatar

OMG Ponies

321k79 gold badges515 silver badges499 bronze badges

asked Oct 1, 2008 at 23:33

Trenton's user avatar

2

You usually get this error if your tables use the InnoDB engine. In that case you would have to drop the foreign key, and then do the alter table and drop the column.

But the tricky part is that you can’t drop the foreign key using the column name, but instead you would have to find the name used to index it. To find that, issue the following select:

SHOW CREATE TABLE region;

This should show you the name of the index, something like this:

CONSTRAINT region_ibfk_1 FOREIGN
KEY (country_id) REFERENCES
country (id) ON DELETE NO
ACTION ON UPDATE NO ACTION

Now simply issue an:

alter table region drop foreign key
region_ibfk_1;

And finally an:

alter table region drop column
country_id;

And you are good to go!

answered Apr 11, 2011 at 0:45

Jeshurun's user avatar

JeshurunJeshurun

22.7k6 gold badges80 silver badges91 bronze badges

2

It is indeed a foreign key error, you can find out using perror:

shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed

To find out more details about what failed, you can use SHOW ENGINE INNODB STATUS and look for the LATEST FOREIGN KEY ERROR section it contains details about what is wrong.

In your case, it is most likely cause something is referencing the country_id column.

dmckee --- ex-moderator kitten's user avatar

answered Oct 7, 2008 at 17:24

Harrison Fisk's user avatar

Harrison FiskHarrison Fisk

7,0163 gold badges24 silver badges14 bronze badges

2

You can get also get this error trying to drop a non-existing foreign key. So when dropping foreign keys, always make sure they actually exist.

If the foreign key does exist, and you are still getting this error try the following:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

// Drop the foreign key here!

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

This always does the trick for me :)

answered Oct 22, 2009 at 8:40

Jeroen's user avatar

JeroenJeroen

1511 silver badge2 bronze badges

1

Simply run the alter table query using ‘KEY’ instead of ‘FOREIGN KEY’ in the drop statement. I hope it will help to solve the issue, and will drop the foreign key constraint and you can change the table columns and drop the table.

ALTER TABLE slide_image_sub DROP  KEY  FK_slide_image_sub;

here in DROP KEY instead of DROP FOREIGN KEY,

hope it will help.

Thanks

Prahalad Gaggar's user avatar

answered Feb 21, 2013 at 8:05

Muhammad Sohail's user avatar

0

I know, this is an old post, but it’s the first hit on everyone’s favorite search engine if you are looking for error 1025.

However, there is an easy «hack» for fixing this issue:

Before you execute your command(s) you first have to disable the foreign key constraints check using this command:

SET FOREIGN_KEY_CHECKS = 0;

Then you are able to execute your command(s).

After you are done, don’t forget to enable the foreign key constraints check again, using this command:

SET FOREIGN_KEY_CHECKS = 1;

Good luck with your endeavor.

answered Jan 9, 2017 at 8:25

Baccata's user avatar

BaccataBaccata

3951 gold badge6 silver badges14 bronze badges

1

I had a similar issues once. I deleted the primary key from TABLE A but when I was trying to delete the foreign key column from table B I was shown the above same error.

You can’t drop the foreign key using the column name and to bypass this in PHPMyAdmin or with MySQL, first remove the foreign key constraint before renaming or deleting the attribute.

answered Jan 12, 2016 at 5:40

Joomler's user avatar

JoomlerJoomler

2,4902 gold badges29 silver badges36 bronze badges

Take a look in error file for your mysql database. According to Bug #26305 my sql do not give you the cause. This bug exists since MySQL 4.1 ;-)

answered Mar 16, 2010 at 16:39

marabol's user avatar

marabolmarabol

1,2472 gold badges15 silver badges22 bronze badges

1

If you are using a client like MySQL Workbench, right click the desired table from where a foreign key is to be deleted, then select the foreign key tab and delete the indexes.

Then you can run the query like this:

alter table table_name drop foreign_key_col_name;

answered Jan 8, 2013 at 20:25

iltaf khalid's user avatar

iltaf khalidiltaf khalid

9,6685 gold badges29 silver badges34 bronze badges

There is probably another table with a foreign key referencing the primary key you are trying to change.

To find out which table caused the error you can run SHOW ENGINE INNODB STATUS and then look at the LATEST FOREIGN KEY ERROR section

Use SHOW CREATE TABLE categories to show the name of constraint.

Most probably it will be categories_ibfk_1

Use the name to drop the foreign key first and the column then:

ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;

answered Jan 11, 2016 at 13:24

youngdero's user avatar

youngderoyoungdero

3642 silver badges16 bronze badges

I got this error with MySQL 5.6 but it had nothing to do with Foreign keys. This was on a Windows 7 Professional machine acting as a server on a small LAN.

The client application was doing a batch operation that creates a table fills it with some external data then runs a query joining with permanent tables then dropping the «temporary» table. This batch does this approximately 300 times and this particular routine had been running week in week out for several years when suddenly we get the Error 1025 Unable to rename problem at a random point in the batch.

In my case the application was using 4 DDL statements a CREATE TABLE followed by 3 CREATE INDEX, there is no foreign key. However only 2 of the indexes actually get created and the actual table .frm file was renamed, at the point of failure.

My solution was to get rid of the separate CREATE INDEX statements and create them using the CREATE TABLE statement. This at the time of writing has solved the issue for me and my help someone else scratching their head when they find this thread.

answered Jan 4, 2019 at 21:27

Chris Millard's user avatar

I’d guess foreign key constraint problem. Is country_id used as a foreign key in another table?

I’m not DB guru but I think I solved a problem like this (where there was a fk constraint) by removing the fk, doing my alter table stuff and then redoing the fk stuff.

I’ll be interested to hear what the outcome is — sometime mysql is pretty cryptic.

answered Oct 1, 2008 at 23:42

itsmatt's user avatar

itsmattitsmatt

31.1k10 gold badges100 silver badges163 bronze badges

1

In my case, I was using MySQL workbench and I faced the same issue while dropping one of my columns in a table. I could not find the name of the foreign key. I followed the following steps to resolve the issue:

  1. Rt. click on your schema and select ‘schema inspector’. This gives you various tables, columns, indexes, ect.

  2. Go to the tab named ‘Indexes’ and search the name of the column under the column named ‘Column’. Once found check the name of the table for this record under the column name ‘Table’. If it matches the name of the table you want, then note down the name of the foreign key from the column named ‘Name’.

  3. Now execute the query : ALTER table tableNamexx DROP KEY foreignKeyName;

  4. Now you can execute the drop statement which shall execute successfully.

answered Feb 25, 2016 at 7:51

chepaiytrath's user avatar

chepaiytrathchepaiytrath

6381 gold badge9 silver badges20 bronze badges

Doing

SET FOREIGN_KEY_CHECKS=0;

before the Operation can also do the trick.

answered Jan 14, 2017 at 16:25

Jan Tchärmän's user avatar

Jan TchärmänJan Tchärmän

9171 gold badge8 silver badges13 bronze badges

averageRatings= FOREACH groupedRatings GENERATE group AS movieID, AVG(ratings.rating) AS avgRating, COUNT(ratings.rating) AS numRatings;

If you are using any command like above you must use group in small letters. This may solve your problem it solved mine. At least in PIG script.

answered Apr 1, 2020 at 12:00

Naman Dhameja's user avatar

1

12 ответов

Обычно вы получаете эту ошибку, если ваши таблицы используют движок InnoDB. В этом случае вам придется отказаться от внешнего ключа, а затем сделать таблицу alter и отбросить столбец.

Но сложная часть заключается в том, что вы не можете удалить внешний ключ, используя имя столбца, но вместо этого вам нужно будет найти имя, используемое для его индексации. Чтобы найти это, выполните следующие действия:

ПОКАЗАТЬ СОЗДАТЬ область ТАБЛИЦЫ;

Это должно показать вам имя индекса, что-то вроде этого:

CONSTRAINT region_ibfk_1 ИНОСТРАННЫЙ КЛЮЧ (country_id) ССЫЛКИ country (id) ON УДАЛИТЬ НЕТ ACTION ON UPDATE NO ACTION

Теперь просто выпустите:

изменить внешний вид таблицы регистров region_ibfk_1;

И наконец:

изменить столбец падения таблицы таблицы COUNTRY_ID;

И тебе хорошо идти!

Jeshurun
11 апр. 2011, в 02:12

Поделиться

Это действительно ошибка внешнего ключа, вы можете узнать, используя perror:

shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed

Чтобы узнать более подробную информацию о том, что не удалось, вы можете использовать SHOW ENGINE INNODB STATUS и найти раздел LATEST FOREIGN KEY ERROR, содержащий подробные сведения о том, что не так.

В вашем случае это скорее всего приводит к тому, что что-то ссылается на столбец country_id.

Harrison Fisk
07 окт. 2008, в 17:53

Поделиться

Вы также можете получить эту ошибку, пытаясь сбросить несуществующий внешний ключ. Поэтому при удалении внешних ключей всегда убедитесь, что они действительно существуют.

Если внешний ключ существует и вы все еще получаете эту ошибку, попробуйте следующее:

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL';

//Оставьте здесь иностранный ключ!

SET [email protected]_SQL_MODE;
SET [email protected]_FOREIGN_KEY_CHECKS;
SET [email protected]_UNIQUE_CHECKS;

Это всегда делает трюк для меня:)

Jeroen
22 окт. 2009, в 10:36

Поделиться

Просто запустите запрос alter table, используя «KEY» вместо «FOREIGN KEY» в инструкции drop. Я надеюсь, что это поможет решить проблему, и упустит ограничение внешнего ключа, и вы можете изменить столбцы таблицы и отбросить таблицу.

ALTER TABLE slide_image_sub DROP  KEY  FK_slide_image_sub;

здесь, в DROP KEY вместо DROP FOREIGN KEY,

надеюсь, что это поможет.

Спасибо

Sohail
21 фев. 2013, в 08:52

Поделиться

Выполнение

SET FOREIGN_KEY_CHECKS=0;

до того, как Операция также может выполнить трюк.

Jan Tchärmän
14 янв. 2017, в 18:02

Поделиться

Я знаю, это старый пост, но это первый удар по каждой любимой поисковой системе, если вы ищете ошибку 1025.

Однако для устранения этой проблемы существует простой «взлом»:

Прежде чем выполнять свои команды, вам сначала нужно отключить проверку ограничений внешних ключей, используя следующую команду:

SET FOREIGN_KEY_CHECKS = 0;

Затем вы можете выполнить свои команды.

После того, как вы закончите, не забудьте снова включить ограничения внешнего ключа, используя следующую команду:

SET FOREIGN_KEY_CHECKS = 1;

Удачи вам в ваших усилиях.

Baccata
09 янв. 2017, в 09:41

Поделиться

У меня были похожие проблемы один раз. Я удалил первичный ключ из таблицы A, но когда я пытался удалить столбец внешнего ключа из таблицы B, мне была показана вышеприведенная ошибка.

Вы не можете удалить внешний ключ с помощью имени столбца и обходить его в PHPMyAdmin или MySQL, сначала удалите ограничение внешнего ключа перед переименованием или удалением атрибута.

Joomler
12 янв. 2016, в 06:34

Поделиться

Возможно, есть другая таблица с внешним ключом, ссылающаяся на первичный ключ, который вы пытаетесь изменить.

Чтобы узнать, какая таблица вызвала ошибку, вы можете запустить SHOW ENGINE INNODB STATUS, а затем посмотреть раздел LATEST FOREIGN KEY ERROR

Используйте категории SHOW CREATE TABLE, чтобы показать имя ограничения.

Скорее всего, это будут категории_ibfk_1

Используйте имя, чтобы сначала удалить внешний ключ и столбец:

ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;

youngdero
11 янв. 2016, в 14:47

Поделиться

Если вы используете такой клиент, как MySQL Workbench, щелкните правой кнопкой мыши нужную таблицу, из которой должен быть удален внешний ключ, затем выберите вкладку внешнего ключа и удалите индексы.

Затем вы можете запустить запрос следующим образом:

alter table table_name drop foreign_key_col_name;

iltaf khalid
08 янв. 2013, в 21:48

Поделиться

Взгляните в файл ошибки для вашей базы данных mysql. Согласно Ошибка № 26305 мой sql не дает вам причины. Эта ошибка существует с MySQL 4.1; -)

marabol
16 март 2010, в 17:34

Поделиться

В моем случае я использовал Workbench MySQL, и я столкнулся с той же проблемой при удалении одного из моих столбцов в таблице. Я не смог найти имя внешнего ключа. Для решения проблемы я выполнил следующие шаги:

  • Rt. нажмите на свою схему и выберите «инспектор схемы». Это дает вам различные таблицы, столбцы, индексы, ect.

  • Перейдите на вкладку с названием «Индексы» и найдите имя столбца под столбцом «Столбец». После обнаружения проверьте имя таблицы для этой записи под именем столбца «Таблица». Если он совпадает с именем нужной таблицы, запишите имя внешнего ключа из столбца с именем «Имя».

  • Теперь выполните запрос: ALTER table tableNamexx DROP KEY foreignKeyName;

  • Теперь вы можете выполнить оператор drop, который должен успешно выполняться.

Jatin Shashoo
25 фев. 2016, в 09:32

Поделиться

Я бы предположил проблему ограничения внешнего ключа. Используется ли country_id в качестве внешнего ключа в другой таблице?

Я не DB гуру, но я думаю, что я решил проблему вроде этого (там, где было ограничение fk), удалив fk, выполнив свой файл alter table, а затем переделав файл fk.

Мне будет интересно узнать, каков результат — иногда mysql довольно загадочный.

itsmatt
02 окт. 2008, в 00:32

Поделиться

Ещё вопросы

  • 0Видео не работает в веб-просмотре
  • 0prestashop 1.6 | Db :: getInstance () -> executeS возвращает строку запроса SQL
  • 1Восстановление базы данных SQL Server из снимка в C #
  • 1Столбец в моем dataframe, кажется, не соответствует входному списку (python)
  • 1Java HTTP GET-запрос выдаёт 403 Forbidden, но работает в браузере
  • 1Ссылка на объект не установлена на экземпляр объекта Unity3D c #
  • 0Странная ошибка DateTime?
  • 1ModuleNotFoundError: Нет модуля с именем ‘skimage.util.montage’
  • 0jQuery: использование .val () для присвоения значений переменным в цикле .each ()?
  • 0Как я могу перебрать вектор объектов базового класса?
  • 0Угловая переменная доступа / изменения ng-контроллера?
  • 0Как правильно вызывать конструкторы по умолчанию?
  • 1Можно ли применять фильтры автоматически к коллекциям при обновлении из привязки данных?
  • 1сортировка массива в Javascript по определенному значению ключа и повторная сортировка по другому значению ключа
  • 1Как улучшить производительность обнаружения столкновений в сложной геометрии, используя древовидные структуры данных?
  • 3Не могу получить Pyperclip использовать модули копирования и вставки на Python3
  • 1Как создать класс Arraylist, который может хранить несколько объектов типа данных в Java
  • 0Как правильно заполнить форму для доступа к данным?
  • 0Требуется ли PHP или включены файлы должны следовать порядку?
  • 1Группировка кадра данных и переупорядочение на основе даты и количества
  • 1Где я должен хранить настройки моего виджета на странице конфигурации на Android?
  • 0Чтение из ifstream несколько раз
  • 0MariaDB: командная строка не отображает количество возвращаемых строк
  • 1Как получить значение исключения сокета
  • 0Отладка CUDA — CudaUnknownError
  • 0Вывести несколько массивов?
  • 0Держите виджет метки GtkFrame включенным, когда фрейма нет
  • 1Dicom Images non square
  • 1Отображение текстуры на треугольную полосу из атласа Opengl ES
  • 0Как добавить локальный ресурс изображения в ионный
  • 0Контроллер возвращает значение несколько раз
  • 1реагировать на естественное прохождение
  • 0Как я могу объединить строку параметра в функции javascript на строку в добавленном HTML?
  • 0JQuery Colorbox странно не удается
  • 0Простое меню CSS, которое может перемещаться по произвольному контенту
  • 0Как я могу разрабатывать игры на устройствах Android
  • 0Я включаю <cmath>, но не могу скомпилировать std :: abs (double)
  • 1Spring использует провайдера анонимной аутентификации для использования гостевого пользователя
  • 1Формат даты и времени / Шаблоны в классе Java / SimpleDateFormat
  • 0Заполнение странной веб-формы в Python
  • 0Печать массива на странице просмотра Codeiginter
  • 0MySQL Stored Routine Error
  • 1В некоторых случаях DeprecationWarning: вставка устарела
  • 0Передать значения столбцов таблицы ng-repeat в массив
  • 0PHP htmlentities () не работает должным образом
  • 0Предупреждение: mysql_result () [function.mysql-result]: невозможно перейти к строке -1
  • 1org.json.simple: почему JSONParser.parse () возвращает объект, а не JSONObject?
  • 1Устранение неполадок java.lang.NullPointerException в учебном упражнении с Android SDK
  • 0Как создать таблицу в базе данных MySQL через приложение Android?
  • 1Относительно статических членов в классе [дубликаты]


поэтому я пытаюсь добавить первичный ключ к одной из таблиц в моей базе данных. Прямо сейчас он имеет первичный ключ, как это:

PRIMARY KEY (user_id, round_number)

где user_id-это внешний ключ.

Я пытаюсь изменить его к этому:

PRIMARY KEY (user_id, round_number, created_at)

Я делаю это в phpmyadmin, нажав на значок первичного ключа в представлении структуры таблицы.

Это ошибка, я получаю:

#1025 - Error on rename of './database/#sql-2e0f_1254ba7' to './database/table' (errno: 150)

это база данных MySQL с InnoDB table engine.


484  


7  

7 ответов:

вероятно, есть еще одна таблица с внешним ключом, ссылающимся на первичный ключ, который вы пытаетесь изменить.

чтобы узнать, какая таблица вызвала ошибку, вы можете запустить SHOW ENGINE INNODB STATUS а потом посмотрите на .

Как было сказано, вам нужно удалить FKs раньше. На Mysql сделать это так:

ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;

ALTER TABLE `table_name` DROP INDEX `id_name_fk`;

для тех, кто добирается до этого вопроса через google… эта ошибка также может произойти при попытке переименовать поле, которое действует как внешний ключ.

чтобы обойти это в PHPMyAdmin или с MySQL, сначала удалите ограничение внешнего ключа перед переименованием атрибута.

(для пользователей PHPMyAdmin: чтобы удалить ограничения FK в PHPMyAdmin, выберите атрибут и нажмите кнопку «вид связи » рядом с» вид печати » на панели инструментов под структурой таблицы)

если вы пытаетесь удалить столбец, который является внешним ключом, вы должны найти правильное имя, а не имя столбца. Например: если я пытаюсь удалить поле сервера в таблице тревог, которая является внешним ключом к таблице серверов.

  1. SHOW CREATE TABLE alarm;
    Ищите CONSTRAINT `server_id_refs_id_34554433` FORIEGN KEY (`server_id`) REFERENCES `server` (`id`) линии.
  2. ALTER TABLE `alarm` DROP FOREIGN KEY `server_id_refs_id_34554433`;
  3. ALTER TABLE `alarm` DROP `server_id`

это приведет к удалению сервера внешних ключей из таблицы аварийных сигналов.

у меня была эта проблема, это для внешнего ключа

нажмите на кнопку Relation View (как на картинке ниже) затем найдите имя поля, которое вы собираетесь удалить, и под Foreign key constraint (INNODB) столбец, просто поместите select в ничто! Значит нет внешнего ключа

enter image description here

надеюсь, что это работает!

Если вы добавляете внешний ключ и столкнулись с этой ошибкой, это может быть значение в дочерней таблице отсутствует в родительской таблице.

допустим, для столбца, к которому должен быть добавлен внешний ключ, все значения установлены в 0, и значение недоступно в таблице, на которую вы ссылаетесь.

вы можете установить некоторое значение, которое присутствует в родительской таблице, а затем добавить внешний ключ работал для меня.

Вероятно, существует другая таблица с внешним ключом, ссылающимся на первичный ключ, который вы пытаетесь изменить.

Чтобы узнать, какая таблица вызвала ошибку, вы можете запустить SHOW ENGINE INNODB STATUS а затем просмотреть раздел LATEST FOREIGN KEY ERROR .

Как было сказано, вам нужно удалить FK раньше. В Mysql это делается так:

ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;

ALTER TABLE `table_name` DROP INDEX `id_name_fk`;

Для тех, кто отвечает на этот вопрос через Google … эта ошибка также может произойти, если вы попытаетесь переименовать поле, которое действует как внешний ключ.

Чтобы обойти это в PHPMyAdmin или MySQL, сначала удалите ограничение внешнего ключа перед переименованием атрибута.

(Для пользователей PHPMyAdmin: чтобы удалить ограничения FK в PHPMyAdmin, выберите атрибут, затем щелкните «представление отношения» рядом с «представлением печати» на панели инструментов под структурой таблицы)

Если вы пытаетесь удалить столбец, который является ИНОСТРАННЫМ КЛЮЧОМ, вы должны найти правильное имя, которое не является именем столбца. Например: если я пытаюсь удалить поле сервера в таблице сигналов тревоги, которое является внешним ключом для таблицы серверов.

  1. SHOW CREATE TABLE alarm; Найдите строку CONSTRAINT `server_id_refs_id_34554433` FORIEGN KEY (`server_id`) REFERENCES `server` (`id`) .
  2. ALTER TABLE `alarm` DROP FOREIGN KEY `server_id_refs_id_34554433`;
  3. ALTER TABLE `alarm` DROP `server_id`

Это удалит сервер внешнего ключа из таблицы Alarms.

У меня была эта проблема, это для внешнего ключа

Нажмите на Relation View (как на изображении ниже), затем найдите имя поля, которое вы собираетесь удалить, и в столбце Foreign key constraint (INNODB) просто поместите выделение в ничто! Означает отсутствие внешнего ключа

enter image description here

Надеюсь, что это сработает!

Если вы добавляете внешний ключ и столкнулись с этой ошибкой, возможно, значение в дочерней таблице отсутствует в родительской таблице.

Скажем, для столбца, в который должен быть добавлен внешний ключ, все значения установлены на 0, и значение недоступно в таблице, на которую вы ссылаетесь.

Вы можете установить какое-то значение, которое присутствует в родительской таблице, а затем добавление внешнего ключа сработало для меня.

Я создал таблицу с помощью миграции следующим образом:

public function up()
{
Schema::create('despatch_discrepancies',  function($table) {
$table->increments('id')->unsigned();
$table->integer('pick_id')->unsigned();
$table->foreign('pick_id')->references('id')->on('picks');
$table->integer('pick_detail_id')->unsigned();
$table->foreign('pick_detail_id')->references('id')->on('pick_details');
$table->integer('original_qty')->unsigned();
$table->integer('shipped_qty')->unsigned();
});
}

public function down()
{
Schema::drop('despatch_discrepancies');
}

Мне нужно изменить эту таблицу и удалить ссылку на внешний ключ & колонка pick_detail_id и добавьте новый столбец varchar под названием sku после pick_id колонка.

Итак, я создал еще одну миграцию, которая выглядит следующим образом:

public function up()
{
Schema::table('despatch_discrepancies', function($table)
{
$table->dropForeign('pick_detail_id');
$table->dropColumn('pick_detail_id');
$table->string('sku', 20)->after('pick_id');
});
}

public function down()
{
Schema::table('despatch_discrepancies', function($table)
{
$table->integer('pick_detail_id')->unsigned();
$table->foreign('pick_detail_id')->references('id')->on('pick_details');
$table->dropColumn('sku');
});
}

Когда я запускаю эту миграцию, я получаю следующую ошибку:

[Осветите Database QueryException]
SQLSTATE [HY000]: общая ошибка: 1025 Ошибка при переименовании
«./dev_iwms_reboot/despatch_discrepancies» для
‘./dev_iwms_reboot/#sql2-67c-17c464’ (номер ошибки: 152) (SQL: изменить таблицу
despatch_discrepancies удалить внешний ключ pick_detail_id)
[PDOException]
SQLSTATE [HY000]: общая ошибка: 1025 Ошибка при переименовании
«./dev_iwms_reboot/despatch_discrepancies» для
‘./dev_iwms_reboot/#sql2-67c-17c464’ (номер ошибки: 152)

Когда я пытаюсь отменить эту миграцию, запустив php artisan migrate:rollback команда, я получаю Rolled back сообщение, но на самом деле он ничего не делает в базе данных.

Есть идеи, что может быть не так? Как удалить столбец со ссылкой на внешний ключ?

54

Решение

Вы можете использовать это:

$table->dropForeign(['pick_detail_id']);
$table->dropColumn('pick_detail_id');

Если вы возьмете пик в источнике dropForeign, он создаст для вас имя индекса внешнего ключа, если вы передадите имя столбца в виде массива.

103

Другие решения

Оказывается; когда вы создаете внешний ключ, как это:

$table->integer('pick_detail_id')->unsigned();
$table->foreign('pick_detail_id')->references('id')->on('pick_details');

Laravel однозначно называет ссылку на внешний ключ следующим образом:

<table_name>_<foreign_table_name>_<column_name>_foreign
despatch_discrepancies_pick_detail_id_foreign (in my case)

Поэтому, когда вы хотите удалить столбец со ссылкой на внешний ключ, вы должны сделать это так:

$table->dropForeign('despatch_discrepancies_pick_detail_id_foreign');
$table->dropColumn('pick_detail_id');

Обновить:

Laravel 4.2+ представляет новое соглашение об именах:

<table_name>_<column_name>_foreign

62

Передать массив с именем col

$table->dropForeign(['user_id']);

9

У меня было несколько внешних ключей в моей таблице, а затем я должен был удалить ограничения внешнего ключа одно за другим, передавая имя столбца как индекс массива в методе down:

public function up()
{
Schema::table('offices', function (Blueprint $table) {
$table->unsignedInteger('country_id')->nullable();
$table->foreign('country_id')
->references('id')
->on('countries')
->onDelete('cascade');

$table->unsignedInteger('stateprovince_id')->nullable();
$table->foreign('stateprovince_id')
->references('id')
->on('stateprovince')
->onDelete('cascade');
$table->unsignedInteger('city_id')->nullable();
$table->foreign('city_id')
->references('id')
->on('cities')
->onDelete('cascade');
});
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('offices', function (Blueprint $table) {
$table->dropForeign(['country_id']);
$table->dropForeign(['stateprovince_id']);
$table->dropForeign(['city_id']);
$table->dropColumn(['country_id','stateprovince_id','city_id']);
});
}

Использование нижеприведенного заявления не работает

$table->dropForeign(['country_id','stateprovince_id','city_id']);

Потому что dropForeign не считает их отдельными столбцами, которые мы хотим удалить. Поэтому мы должны отбросить их один за другим.

9

Ключ (для меня) к решению этой проблемы состоял в том, чтобы убедиться, что команде $ table-> dropForeign () было передано правильное имя отношения, а не имя столбца. Ты сделаешь не хочу передать имя столбца, так как было бы гораздо более интуитивным ИМХО.

Что сработало для меня:

$table->dropForeign('local_table_foreign_id_foreign');
$table->column('foreign_id');

Итак, строка, которую я передал dropForeign (), которая работала для меня, была в формате:

[локальная таблица]_[поле внешнего ключа]_foreign

Если у вас есть доступ к таким инструментам, как Sequel Pro или Navicat, возможность их визуализации будет очень полезна.

8

Что-то, что пришло мне в голову, было то, что я не знал, где поставить Schema::table блок.

Позже я обнаружил, что ключ находится на ошибке SQL:

[IlluminateDatabaseQueryException]
SQLSTATE[23000]: Integrity constraint violation: 1217 Cannot delete or update a parent row: a foreign key constraint fails (SQL: drop table if exists `lu_benefits_categories`)

Итак Schema::table блок должен идти в down() функция lu_benefits_categories миграция и до Schema::dropIfExists линия:

public function down()
{
Schema::table('table', function (Blueprint $table) {
$table->dropForeign('table_category_id_foreign');
$table->dropColumn('category_id');
});
Schema::dropIfExists('lu_benefits_categories');
}

После этого php artisan migrate:refresh или же php artisan migrate:reset сделает свое дело.

4

Вопрос:

Создать таблицу:

CREATE TABLE `phppos_register_log` (
`register_log_id` int(10) NOT NULL AUTO_INCREMENT,
`employee_id` int(10) NOT NULL,
`shift_start` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`shift_end` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`open_amount` decimal(23,10) NOT NULL,
`close_amount` decimal(23,10) NOT NULL,
`cash_sales_amount` decimal(23,10) NOT NULL,
`deleted` int(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`register_log_id`),
KEY `phppos_register_log_ibfk_1` (`employee_id`),
CONSTRAINT `phppos_register_log_ibfk_1` FOREIGN KEY (`employee_id`) REFERENCES `phppos_employees` (`person_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

SQL CODE для переименования столбца: (Это работает на mysql 5.5 и 5.6, но один пользователь сообщает об ошибке. (Точный номер версии 5.5.40)

//this is where error is happening
ALTER TABLE phppos_register_log DROP FOREIGN KEY phppos_register_log_ibfk_1;


ALTER TABLE  `phppos_register_log` CHANGE  `employee_id`  `employee_id_open` INT( 10 ) NOT NULL ;
ALTER TABLE `phppos_register_log`ADD CONSTRAINT `phppos_register_log_ibfk_1` FOREIGN KEY (`employee_id_open`) REFERENCES `phppos_employees` (`person_id`);

Есть ли что-нибудь в mysql 5.5.40, из-за чего этот код НЕ работает?

ОШИБКА сообщила:

#1025 - Error on rename of './sole_phppos_144/phppos_register_log' to './sole_phppos_144/#sql2-6224-22975' (errno: 152)

ПРИМЕЧАНИЕ. Я переименовываю столбец, поэтому я удаляю ограничение, переименовываю столбец и добавляю ограничение обратно.

Лучший ответ:

UPDATE:
Я экспериментировал еще несколько, и предыдущее найденное решение не работает должным образом, вы не можете удалить индекс перед удалением внешнего ключа, как указано в другой ссылке на stackoverflow.

Однако мне удалось найти обстоятельства, чтобы воспроизвести ошибку, а именно при выполнении DROP FOREIGN KEY на одном и том же внешнем ключении дважды. Во второй раз он произведет именно эту ошибку.


Перед обновлением:

Этот парень, похоже, понял это: http://lists.mysql.com/mysql/204199, поскольку его ответ был одобрен и указан в не удалось удалить внешний ключ

Он упоминает, что индексный ключ (KEY) предотвращает падение внешнего ключа. Поэтому его совет состоит в том, чтобы сначала сбросить индексный ключ, например:

ALTER TABLE phppos_register_log DROP KEY phppos_register_log_ibfk_1;

а затем внешний ключ:

ALTER TABLE phppos_register_log DROP FOREIGN KEY phppos_register_log_ibfk_1;

Я надеюсь, что это сработает, однако, к сожалению, я не смог воспроизвести ошибку сам, поэтому ни это решение. В моей системе он просто работает, чтобы сбросить внешний ключ.

Ответ №1

Я не смог воспроизвести это с помощью заявлений, которые вы предоставили. Но уверены ли вы, что они не пытаются сбросить внешний ключ по имени столбца?

ALTER TABLE phppos_register_log DROP FOREIGN KEY employee_id;
ALTER TABLE phppos_register_log CHANGE employee_id employee_id_open INT NOT NULL;
ALTER TABLE `phppos_register_log`ADD CONSTRAINT `phppos_register_log_ibfk_1`
FOREIGN KEY (`employee_id_open`) REFERENCES `phppos_employees` (`person_id`);

Выдает ту же ошибку, что и вы, в SQLFiddle 5.5.

Я пробовал это в mysql:

mysql> alter table region drop column country_id;

и получил это:

ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)

какие идеи? Иностранные ключевые вещи?

12 ответов


вы обычно получаете эту ошибку, если ваши таблицы используют движок InnoDB. В этом случае вам придется удалить внешний ключ, а затем выполнить alter table и удалить столбец.

но сложная часть заключается в том, что вы не можете удалить внешний ключ, используя имя столбца, но вместо этого вам придется найти имя, используемое для его индексирования. Чтобы найти это, выполните следующий выбор:

показать создать область таблицы;

Это должно показать вам имя индекс, что-то вроде этого:

ограничения region_ibfk_1 внешняя
Ключ (country_id) ссылки
country (id) ПРИ УДАЛЕНИИ НЕТ
ДЕЙСТВИЕ ПО ОБНОВЛЕНИЮ НЕТ ДЕЙСТВИЯ

теперь просто вопрос:

alter TABLE region drop внешний ключ
region_ibfk_1;

и наконец:

alter TABLE region drop column
country_id;

и вы хорошо идти!


это действительно ошибка внешнего ключа, вы можете узнать, используя perror:

shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed

чтобы узнать больше о том, что не удалось, вы можете использовать SHOW ENGINE INNODB STATUS и найдите последний раздел ошибки внешнего ключа, в котором содержатся сведения о том, что не так.

в вашем случае, это скорее всего что-то ссылается на столбец country_id.


вы также можете получить эту ошибку, пытаясь удалить несуществующий внешний ключ. Поэтому при удалении внешних ключей, всегда убедитесь, что они действительно существуют.

Если внешний ключ существует, и вы все еще получаете эту ошибку, попробуйте следующее:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

/ / отбросьте внешний ключ здесь!

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

это всегда делает трюк для меня :)


просто запустите запрос alter table, используя » KEY «вместо» FOREIGN KEY » в инструкции drop. Я надеюсь, что это поможет решить проблему и отбросит ограничение внешнего ключа, и вы можете изменить столбцы таблицы и удалить таблицу.

ALTER TABLE slide_image_sub DROP  KEY  FK_slide_image_sub;

здесь DROP KEY вместо DROP FOREIGN KEY,

надеюсь, что это поможет.

спасибо


У меня были подобные проблемы однажды. Я удалил первичный ключ из таблицы A, но когда я пытался удалить столбец внешнего ключа из таблицы B, мне была показана та же ошибка.

вы не можете удалить внешний ключ, используя имя столбца, и обойти это в PHPMyAdmin или с MySQL, сначала удалите ограничение внешнего ключа перед переименованием или удалением атрибута.


Я знаю, это старый пост, но это первый удар по любимой поисковой системе каждого, если вы ищете ошибку 1025.

тем не менее, есть простой «хак» для исправления этой проблемы:

перед выполнением команд сначала необходимо отключить проверку ограничений внешнего ключа с помощью этой команды:

SET FOREIGN_KEY_CHECKS = 0;

затем вы можете выполнить свою команду(ы).

после того как вы закончите, не забудьте включить внешний ключ ограничениями, проверьте еще раз, используя эту команду:

SET FOREIGN_KEY_CHECKS = 1;

удачи в ваших начинаниях.


посмотрите в файле ошибок для вашей базы данных mysql. Согласно ошибка #26305 мой SQL не дает вам причину. Эта ошибка существует с MySQL 4.1; -)


Если вы используете клиент, такой как MySQL Workbench, щелкните правой кнопкой мыши нужную таблицу, из которой должен быть удален внешний ключ, затем выберите вкладку Внешний ключ и удалите индексы.

затем вы можете запустить запрос следующим образом:

alter table table_name drop foreign_key_col_name;

вероятно, есть другая таблица с внешним ключом, ссылающимся на первичный ключ, который вы пытаетесь изменить.

чтобы узнать, какая таблица вызвала ошибку, вы можете запустить SHOW ENGINE INNODB STATUS а затем посмотрите на LATEST FOREIGN KEY ERROR раздел

используйте SHOW CREATE TABLE categories для отображения имени ограничения.

скорее всего, это будет categories_ibfk_1

используйте имя, чтобы сначала удалить внешний ключ, а затем столбец:

ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;

делаешь

SET FOREIGN_KEY_CHECKS=0;

перед операцией также может сделать трюк.


Я бы предположил, что проблема ограничения внешнего ключа. Это country_id используется в качестве внешнего ключа в другой таблице?

Я не DB guru, но я думаю, что решил такую проблему (где было ограничение fk), удалив fk, сделав мой материал alter table, а затем переделав материал fk.

Мне будет интересно услышать, каков результат-иногда mysql довольно загадочный.


в моем случае я использовал MySQL workbench, и я столкнулся с той же проблемой при удалении одного из моих столбцов в таблице. Я не смог найти имя внешнего ключа. Я выполнил следующие шаги, чтобы решить эту проблему:

  1. RT. нажмите на свою схему и выберите «инспектор схем». Это дает вам различные таблицы, столбцы, индексы, ect.

  2. перейдите на вкладку с именем «индексы» и найдите имя столбца под столбцом с именем «столбец». Однажды найдено проверьте имя таблицы для этой записи под именем столбца «таблица». Если он соответствует имени нужной таблицы, запишите имя внешнего ключа из столбца с именем «Name».

  3. теперь выполните запрос: ALTER table TABLENAMEXX DROP KEY foreignKeyName;

  4. теперь вы можете выполнить оператор drop, который должен успешно выполняться.


12 ответов

Обычно вы получаете эту ошибку, если ваши таблицы используют движок InnoDB. В этом случае вам придется отказаться от внешнего ключа, а затем сделать таблицу alter и отбросить столбец.

Но сложная часть заключается в том, что вы не можете удалить внешний ключ, используя имя столбца, но вместо этого вам нужно будет найти имя, используемое для его индексации. Чтобы найти это, выполните следующие действия:

ПОКАЗАТЬ СОЗДАТЬ область ТАБЛИЦЫ;

Это должно показать вам имя индекса, что-то вроде этого:

CONSTRAINT region_ibfk_1 ИНОСТРАННЫЙ КЛЮЧ (country_id) ССЫЛКИ country (id) ON УДАЛИТЬ НЕТ ACTION ON UPDATE NO ACTION

Теперь просто выпустите:

изменить внешний вид таблицы регистров region_ibfk_1;

И наконец:

изменить столбец падения таблицы таблицы COUNTRY_ID;

И тебе хорошо идти!

Jeshurun
11 апр. 2011, в 02:12

Поделиться

Это действительно ошибка внешнего ключа, вы можете узнать, используя perror:

shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed

Чтобы узнать более подробную информацию о том, что не удалось, вы можете использовать SHOW ENGINE INNODB STATUS и найти раздел LATEST FOREIGN KEY ERROR, содержащий подробные сведения о том, что не так.

В вашем случае это скорее всего приводит к тому, что что-то ссылается на столбец country_id.

Harrison Fisk
07 окт. 2008, в 17:53

Поделиться

Вы также можете получить эту ошибку, пытаясь сбросить несуществующий внешний ключ. Поэтому при удалении внешних ключей всегда убедитесь, что они действительно существуют.

Если внешний ключ существует и вы все еще получаете эту ошибку, попробуйте следующее:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

//Оставьте здесь иностранный ключ!

SET [email protected]_SQL_MODE;
SET FOREIGN_KEY_CHECKS[email protected]_FOREIGN_KEY_CHECKS;
SET [email protected]_UNIQUE_CHECKS;

Это всегда делает трюк для меня:)

Jeroen
22 окт. 2009, в 10:36

Поделиться

Просто запустите запрос alter table, используя «KEY» вместо «FOREIGN KEY» в инструкции drop. Я надеюсь, что это поможет решить проблему, и упустит ограничение внешнего ключа, и вы можете изменить столбцы таблицы и отбросить таблицу.

ALTER TABLE slide_image_sub DROP  KEY  FK_slide_image_sub;

здесь, в DROP KEY вместо DROP FOREIGN KEY,

надеюсь, что это поможет.

Спасибо

Sohail
21 фев. 2013, в 08:52

Поделиться

Выполнение

SET FOREIGN_KEY_CHECKS=0;

до того, как Операция также может выполнить трюк.

Jan Tchärmän
14 янв. 2017, в 18:02

Поделиться

Я знаю, это старый пост, но это первый удар по каждой любимой поисковой системе, если вы ищете ошибку 1025.

Однако для устранения этой проблемы существует простой «взлом»:

Прежде чем выполнять свои команды, вам сначала нужно отключить проверку ограничений внешних ключей, используя следующую команду:

SET FOREIGN_KEY_CHECKS = 0;

Затем вы можете выполнить свои команды.

После того, как вы закончите, не забудьте снова включить ограничения внешнего ключа, используя следующую команду:

SET FOREIGN_KEY_CHECKS = 1;

Удачи вам в ваших усилиях.

Baccata
09 янв. 2017, в 09:41

Поделиться

У меня были похожие проблемы один раз. Я удалил первичный ключ из таблицы A, но когда я пытался удалить столбец внешнего ключа из таблицы B, мне была показана вышеприведенная ошибка.

Вы не можете удалить внешний ключ с помощью имени столбца и обходить его в PHPMyAdmin или MySQL, сначала удалите ограничение внешнего ключа перед переименованием или удалением атрибута.

Joomler
12 янв. 2016, в 06:34

Поделиться

Возможно, есть другая таблица с внешним ключом, ссылающаяся на первичный ключ, который вы пытаетесь изменить.

Чтобы узнать, какая таблица вызвала ошибку, вы можете запустить SHOW ENGINE INNODB STATUS, а затем посмотреть раздел LATEST FOREIGN KEY ERROR

Используйте категории SHOW CREATE TABLE, чтобы показать имя ограничения.

Скорее всего, это будут категории_ibfk_1

Используйте имя, чтобы сначала удалить внешний ключ и столбец:

ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;

youngdero
11 янв. 2016, в 14:47

Поделиться

Если вы используете такой клиент, как MySQL Workbench, щелкните правой кнопкой мыши нужную таблицу, из которой должен быть удален внешний ключ, затем выберите вкладку внешнего ключа и удалите индексы.

Затем вы можете запустить запрос следующим образом:

alter table table_name drop foreign_key_col_name;

iltaf khalid
08 янв. 2013, в 21:48

Поделиться

Взгляните в файл ошибки для вашей базы данных mysql. Согласно Ошибка № 26305 мой sql не дает вам причины. Эта ошибка существует с MySQL 4.1; -)

marabol
16 март 2010, в 17:34

Поделиться

В моем случае я использовал Workbench MySQL, и я столкнулся с той же проблемой при удалении одного из моих столбцов в таблице. Я не смог найти имя внешнего ключа. Для решения проблемы я выполнил следующие шаги:

  • Rt. нажмите на свою схему и выберите «инспектор схемы». Это дает вам различные таблицы, столбцы, индексы, ect.

  • Перейдите на вкладку с названием «Индексы» и найдите имя столбца под столбцом «Столбец». После обнаружения проверьте имя таблицы для этой записи под именем столбца «Таблица». Если он совпадает с именем нужной таблицы, запишите имя внешнего ключа из столбца с именем «Имя».

  • Теперь выполните запрос: ALTER table tableNamexx DROP KEY foreignKeyName;

  • Теперь вы можете выполнить оператор drop, который должен успешно выполняться.

Jatin Shashoo
25 фев. 2016, в 09:32

Поделиться

Я бы предположил проблему ограничения внешнего ключа. Используется ли country_id в качестве внешнего ключа в другой таблице?

Я не DB гуру, но я думаю, что я решил проблему вроде этого (там, где было ограничение fk), удалив fk, выполнив свой файл alter table, а затем переделав файл fk.

Мне будет интересно узнать, каков результат — иногда mysql довольно загадочный.

itsmatt
02 окт. 2008, в 00:32

Поделиться

Ещё вопросы

  • 1java-связывание со свободной функцией c: как правильно освободить объект
  • 1System.ArgumentException: недопустимые символы в пути
  • 0заполнитель не работает должным образом в Firefox
  • 0обработчик событий на динамически добавленном элементе не работает с плагином select2
  • 1Как правильно смоделировать HttpContextBase, чтобы мои модульные тесты работали
  • 0Показывать электронные письма из Gmail на веб-сайте SaaS
  • 1Функция сна, не разрешающая обещание, переданное в нее
  • 0Разница между методами clear () и erase () вектора в c ++?
  • 0jqgrid deselectAfterSort для типа данных json
  • 0Встроенное переполнение: скрыто, только частично работает
  • 1Аутентификация веб-приложения для REST API Backend
  • 0Как использовать пользовательский поиск, чтобы получить данные в HTML-файл?
  • 0Как хранить несколько флажков с одним именем в одной ячейке базы данных MySQL в php.?
  • 0memset устанавливает случайные значения [дубликаты]
  • 1Панды поворачивают один столбец, используя то же значение столбца, что и заголовки столбцов
  • 0угловая анимация, сдвиньте вправо выдвиньте влево
  • 0Doxygen — групповые функции и их поиск по индексу
  • 0Показать разделы на основе значения флажка в jQuery (SharePoint 2010)
  • 0В AngularJs Как объединить функцию как универсальную для использования для контроллера изменений?
  • 1Добавление раскрытия двойным щелчком в Tree Viewer в SWT
  • 1Таймеры перезапускаются «для петель»? Я пытаюсь сделать таймер, чтобы панель циклически перебирала 5 разных цветов через заданный интервал времени.
  • 0Проверка jQuery внутри jQuery .each ()
  • 0Код CodeIgniter работает в браузере, умирает в тесте phpunit: вызов неопределенного метода CI_DB_mysql_driver :: where () в (… privacy ..) users.php в строке 36
  • 1Вызов хранимой процедуры от Lightswitch
  • 0необходимо сохранить значение ‘this’ в файле cookie JQuery
  • 0Java (или Android) версия установки отдельных частей Mat в OpenCV
  • 1Почему TextReader жалуется, когда файл открывается другим процессом?
  • 0Google API PHP и электронные таблицы Google
  • 0HREF работает вместо JavaScript
  • 0случайная работа cron
  • 1C # Windows Phone 8.1 Среда выполнения Inkmanager
  • 1Заголовки с несколькими ответами с одинаковым именем в Java
  • 0Удаление замораживающей панели после сбоя проверки на клиенте с использованием jQuery
  • 0Разматывать обещания и их обработчики
  • 0почему я вижу белую страницу при загрузке моего php на мой хост?
  • 0Mysqli Ошибка 2002: нет такого файла или каталога
  • 0Бесконечный цикл Date на одном сервере, но работает на другом и localhost
  • 0Как получить атрибут id текстовой области, который заменен редактором TinyMCE
  • 0рекурсия через функцию производных классов шаблонного класса
  • 1Запрограммируйте архитектуру нейронной сети с несколькими входами с помощью Keras
  • 1Как отключить макет обновления смахивания, когда RecyclerView не на первом элементе?
  • 1Выровнять по левому краю наибольшего вида с макетом ограничения
  • 1Медицинская визуализация (PyRadiomics) с файлами .nii.gz
  • 1Fragment Transition API с поддержкой библиотеки (14+) без каких-либо переходов
  • 0выберите для обновления дважды к той же таблице ключом diffrenet, вызывающим взаимоблокировку в MySQL
  • 0Php preg_replace () используя
  • 0DIV перестает обновляться при создании новой записи в базе данных
  • 1OnApplyWindowInsetsListener дает systemWindowInsetBottom, который всегда равен 0
  • 1HTML письмо с ссылкой на изображение в виде base64 String
  • 1Веб-формы .NET обновляют контент на стороне сервера

Понравилась статья? Поделить с друзьями:

Не пропустите эти материалы по теме:

  • Яндекс еда ошибка привязки карты
  • 1021 ошибка xbox 360
  • 10205 ошибка шкода рапид
  • 10205 ошибка vag
  • 102035 ошибка самсунг

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии