Foreign Key Constraints - DB won't import. - Magento - mysql

I followed the advice here, but I'm still running into the same issues after importing my database to a local XAMPP installation.
My sql dump is wrapped in these tags:
SET FOREIGN_KEY_CHECKS=0;
// FULL DB DUMP
SET FOREIGN_KEY_CHECKS=1;
Even still, I get this error message:
Error
SQL query:
ALTER TABLE `mage_catalog_eav_attribute` ADD CONSTRAINT `FK_CATALOG_EAV_ATTRIBUTE_ID` FOREIGN KEY ( `attribute_id` ) REFERENCES `mage_eav_attribute` ( `attribute_id` ) ON DELETE CASCADE ON UPDATE CASCADE ;
MySQL said: Documentation
#1452 - Cannot add or update a child row: a foreign key constraint fails (`myDB_NAME`.<result 2 when explaining filename '#sql-2e0_5a'>, CONSTRAINT `FK_CATALOG_EAV_ATTRIBUTE_ID` FOREIGN KEY (`attribute_id`) REFERENCES `mage_eav_attribute` (`attribute_id`) ON DE)
Can anyone help me understand what else I would need to disable these checks, or prevent this error?
I am running Magento 1.4.2, and importing with phpmyadmin via xampp.

When I took a phpMyAdmin MySQL export and put it into another phpMyAdmin interface, I found that pre-existing tables caused the constraint problem. Deleting the tables was also problematic because of the key constraints.
When importing, make sure the present database tables do not have key constraints. I did this by dropping the tables.
To drop the tables, I turned off the constraint check by executing SQL code like this in the SQL screen of phpMyAdmin for the database in question.
SET foreign_key_checks = 0;
DROP TABLE civicrm_acl;
... all of the problem tables with their constraints...
DROP TABLE civicrm_worldregion;
SET foreign_key_checks = 1;
(the latter SET is good housekeeping)
Then, I was able to do my import. When I looked at my MySQL export, it had added the constraints at the end of the import, after the data is in place. If your MySQL import puts the constraints in before the data is in place, that will prevent the import from working completely.

Do not import via Phpmyadmin. It usually works really bad. Use the command line.
This should work:
cat your_mysql_dump_file.sql | mysql -uyour_user -p myDB_NAME

Related

Migrating from MariaDB to Mysql - Duplicate Constraint Name

I am trying to migrate a MariaDB database to MySQL. To do this I have created a mysqldump of the MariaDB database and am attempting to import into MySQL. (This is being done with the official docker container mysql:latest).
I am getting the following error when importing into MySQL:
ERROR 3822 (HY000) at line 172: Duplicate check constraint name 'CONSTRAINT_1'.
If I look at the mysqldump file I can see why this is happening. All boolean columns in my database have a constraints that looks something like:
CONSTRAINT `CONSTRAINT_1` CHECK (`bool_col_1` in (0,1))
CONSTRAINT `CONSTRAINT_2` CHECK (`bool_col_2` in (0,1))
CONSTRAINT `CONSTRAINT_3` CHECK (`bool_col_3` in (0,1))
These constraints were not explicitly created by me but implicitly by Flask-SQLAlchemy (I think).
Notice how the constraint names are incremented starting with CONSTRAINT_1. Well the problem is that each table starts incrementing its constraint names starting with CONSTRAINT_1. Thus the error I am seeing gets thrown when trying to create the second table.
I'd like to know how best to solve this while keeping the integrity of my database intact.

How to disable all foreign keys in phpMyAdmin when exporting table data?

I exported all tables of my database. I opened the generated file then I saw that phpMyAdmin sorts the queries by table_name. So there is potential foreign key issues because master table is created/inserted after detail table! So how to disable foreign key checks when exporting table data with phpMyAdmin, and how to re-enable them at the end of the script?
Just disable foreign key checks before and re-enable them after you execute your script:
SET foreign_key_checks = 0;
-- run some queries
SET foreign_key_checks = 1;
From the Export tab, select the "Custom" export method.
In the "Format-specific options:" area, look for and check "Disable foreign key checks".
It does the same thing Misa Lazovic suggested to do, but since you're using phpMyAdmin to do the export this is the graphical way of adding those lines.
I also faced the same issue for importing the database in server. And tried all answers above but couldn't figure out. This tutorial fixed my issue and made me able to import my DB in phpmyadmin. Tutorial
Hope this one helped!
When creating the foreign key you should add this option :
ON DELETE CASCADE Or
On delete set null
So when you will delete the foreign key, there will be no PB.

BigDump can't import because of constraint of foreign key phpMyAdmin

We are trying to get our database imported in our new DataBase environment. At first we tried using the phpMyAdmin import function but the database is too big to do that. Next, we used BigDump but it also gave us an error of a constraint of the foreign key.
I already took a look what this meant and I saw that the table is unable to drop, replace or update because it can't break the foreign key.
Is there any way to avoid this error?
I have tried this query (I don't have experience using queries):
SET FOREIGN_KEY_CHECKS=0;
But unfortunately this didn't work.
Any more information needed? Feel free to ask!
Thanks in advance!
When you use my BigDump script uncomment this line in bigdump.php config section in order to disable foreign key checks for each import session:
$pre_query[]='SET foreign_key_checks = 0';

can't create a table without foreign key errno:150 MYSQL

I had a table "supplier" that had foreign key constraints, dropped it and now i want to re-create that table with no foreign key at all, however i'm getting the classical error 150, any idea what can be done to re-create this table.
In the file that the SQL is dumped in and that you are loading to recreate the database,
add SET FOREIGN_KEY_CHECKS = 0; at the start and SET FOREIGN_KEY_CHECKS = 1 at the end
It seems that there is an inconsistency there, as creating a table without constraints should be possible at any time. From the Mysql Manual, what you should do is run
SHOW ENGINE INNODB STATUS.
or
SHOW ERRORS
to check the detail of the error you are getting.

What does mysql error 1025 (HY000): Error on rename of './foo' (errorno: 150) mean?

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?
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!
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.
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 :)
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
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.
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.
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 ;-)
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;
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;
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.
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.
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:
Rt. click on your schema and select 'schema inspector'. This gives you various tables, columns, indexes, ect.
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'.
Now execute the query : ALTER table tableNamexx DROP KEY foreignKeyName;
Now you can execute the drop statement which shall execute successfully.
Doing
SET FOREIGN_KEY_CHECKS=0;
before the Operation can also do the trick.
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.