You can do it:
Find MAX school_id in the school target table -
SELECT MAX (school_id) INTO @max_school_id from school;
Change all school_id values ββin the source tables ( school , class ) - add MAX school_id from the previous point -
UPDATE school SET school_id = school_id + @max_school_id + 1;
It can be very useful to add the action "ON UPDATE CASCADE" to the foreign key, this will help to automatically change school_id in the child table, for example. -
ALTER TABLE class DROP FOREIGN KEY FK_name; ALTER TABLE class ADD CONSTRAINT FK_name FOREIGN KEY (school_id) REFERENCES school(school_id) ON UPDATE CASCADE;
Explanation and example:
Create source tables:
CREATE TABLE school( school_id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) ); INSERT INTO school (school_id, name) VALUES (1, 'Middle1'), (2, 'Middle2'), (3, 'Middle3'), (15, 'Middle'); CREATE TABLE class( class_id INT(11) NOT NULL, school_id INT(11) DEFAULT NULL, name VARCHAR(20) DEFAULT NULL, PRIMARY KEY (class_id), CONSTRAINT FK_class_school_school_id FOREIGN KEY (school_id) REFERENCES school (school_id) ON DELETE RESTRICT ON UPDATE CASCADE ) ENGINE = INNODB; INSERT INTO class (class_id, school_id, name) VALUES (11, 1, 'Sample1'); INSERT INTO class (class_id, school_id, name) VALUES (12, 15, 'Sample');
Create target tables:
CREATE TABLE school( school_id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) ); INSERT INTO school (school_id, name) VALUES (1, 'Top'), (2, 'Middle'), (3, 'Bottom'), (15, 'Top'); CREATE TABLE class( class_id INT(11) NOT NULL, school_id INT(11) DEFAULT NULL, name VARCHAR(20) DEFAULT NULL, PRIMARY KEY (class_id), CONSTRAINT FK_class_school_school_id FOREIGN KEY (school_id) REFERENCES school (school_id) ON DELETE RESTRICT ON UPDATE CASCADE ) ENGINE = INNODB; INSERT INTO class (class_id, school_id, name) VALUES (10, 2, 'Sample2'); INSERT INTO class (class_id, school_id, name) VALUES (12, 15, 'Sample');
Update source tables, increase id values: We must update all unique values, in our case we need to update class_id in the class table and school_id in the school table.
Find max class_id for table TARGET class
SELECT MAX(class_id) + 1000 FROM class;
Increase all values. SOURCE class_id class_id + 1012
UPDATE class SET class_id = class_id + 1012;
Find max school_id for table TARGET school
SELECT max(school_id) + 1000 FROM school;
Increase all values ββof SOURCE school_id school_id + 1015
UPDATE school SET school_id = school_id + 1015;
That's all. We can reset the source tables:
INSERT INTO school VALUES (1016, 'Middle1'), (1017, 'Middle2'), (1018, 'Middle3'), (1030, 'Middle'); INSERT INTO class VALUES (1023, 1016, 'Sample1'), (1024, 1030, 'Sample');
Now we can easily run this script in relation to the target database.