あなたはこれを行うことができます:
school_idターゲットschoolテーブルでMAXを検索します-
SELECT MAX(school_id) INTO @max_school_id FROM school;
school_idソーステーブルのすべての値を変更します( school、 )-前のポイントからclassMAXを追加します-school_id
UPDATE school SET school_id = school_id + @max_school_id + 1;
外部キーにアクションを追加すると非常に便利な場合があります。子テーブルを自動的にON UPDATE CASCADE変更するのに役立ちます。例:-school_id
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;
説明と例:
ソーステーブルを作成します。
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 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');
ソーステーブルの更新、ID値の増分:
すべての一意の値を更新する必要があります。この場合class_id、classテーブルとテーブルを更新する必要school_idがありschoolます。
class_idTARGETclassテーブルの最大値を見つける
SELECT MAX(class_id) + 1000 FROM class; -- This will return => 1012
すべてのSOURCEclass_id値をインクリメントしますclass_id + 1012
UPDATE class SET class_id = class_id + 1012;
school_idTARGETschoolテーブルの最大値を見つける
SELECT max(school_id) + 1000 FROM school; -- This will return =>1015
すべてのSOURCEschool_id値をインクリメントしますschool_id + 1015
UPDATE school SET school_id = school_id + 1015;
以上です。ソーステーブルをダンプできます。
INSERT INTO school VALUES
(1016, 'Middle1'),
(1017, 'Middle2'),
(1018, 'Middle3'),
(1030, 'Middle');
INSERT INTO class VALUES
(1023, 1016, 'Sample1'),
(1024, 1030, 'Sample');
これで、ターゲットデータベースに対してこのスクリプトを簡単に実行できます。