あなたはこれを行うことができます:
school_id
ターゲットschool
テーブルでMAXを検索します-
SELECT MAX(school_id) INTO @max_school_id FROM school;
school_id
ソーステーブルのすべての値を変更します( school
、 )-前のポイントからclass
MAXを追加します-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_id
TARGETclass
テーブルの最大値を見つける
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_id
TARGETschool
テーブルの最大値を見つける
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');
これで、ターゲットデータベースに対してこのスクリプトを簡単に実行できます。