Разработать скрипт для слияния баз данных на Java

4 000 руб. за проект
07 февраля 2023, 09:26 • 11 откликов • 64 просмотра
Написать скрипт на java языке, для объединения 2-3-4 mysql баз данных с одинаковой структурой, с решением конфликтов коллизий, применяя для одинаковых имен префиксы

Есть проект который можно использовать как референс, он работает не в полной мере и возможно имеет ещё какие дефекты

в базах есть определенные таблицы например таблица characters

CREATE TABLE IF NOT EXISTS `characters` ( `account_name` VARCHAR(45) NOT NULL DEFAULT '', `obj_Id` INT NOT NULL DEFAULT '0', `char_name` VARCHAR(35) CHARACTER SET UTF8 NOT NULL DEFAULT '', `face` TINYINT UNSIGNED DEFAULT NULL, `race` SMALLINT NOT NULL DEFAULT '0', `hairStyle` TINYINT UNSIGNED DEFAULT NULL, `hairColor` TINYINT UNSIGNED DEFAULT NULL, `sex` BOOLEAN DEFAULT NULL, `heading` mediumint DEFAULT NULL, `x` mediumint DEFAULT NULL, `y` mediumint DEFAULT NULL, `z` mediumint DEFAULT NULL, `karma` INT DEFAULT NULL, `pvpkills` INT DEFAULT NULL, `pkkills` INT DEFAULT NULL, `clanid` INT DEFAULT NULL, `createtime` INT UNSIGNED NOT NULL DEFAULT '0', `deletetime` INT UNSIGNED NOT NULL DEFAULT '0', `title` VARCHAR(30) CHARACTER SET UTF8 DEFAULT NULL, `rec_have` TINYINT UNSIGNED NOT NULL DEFAULT '0', `rec_left` TINYINT UNSIGNED NOT NULL DEFAULT '20', `rec_bonus_time` INT NOT NULL DEFAULT '3600', `hunt_points` INT NOT NULL DEFAULT '0', `hunt_time` INT NOT NULL DEFAULT '14400', `accesslevel` TINYINT DEFAULT NULL, `online` BOOLEAN DEFAULT NULL, `onlinetime` INT UNSIGNED NOT NULL DEFAULT '0', `lastAccess` INT UNSIGNED NOT NULL DEFAULT '0', `leaveclan` INT UNSIGNED NOT NULL DEFAULT '0', `deleteclan` INT UNSIGNED NOT NULL DEFAULT '0', `nochannel` INT NOT NULL DEFAULT '0', -- not UNSIGNED, negative value means 'forever' `pledge_type` SMALLINT NOT NULL DEFAULT '-128', `pledge_rank` TINYINT UNSIGNED NOT NULL DEFAULT '0', `lvl_joined_academy` TINYINT UNSIGNED NOT NULL DEFAULT '0', `apprentice` INT UNSIGNED NOT NULL DEFAULT '0', `key_bindings` varbinary(8192) DEFAULT NULL, `pcBangPoints` INT NOT NULL DEFAULT '0', `vitality` SMALLINT UNSIGNED NOT NULL DEFAULT '20000', `fame` INT NOT NULL DEFAULT '0', `bookmarks` TINYINT UNSIGNED NOT NULL DEFAULT '0', `last_teleport` INT UNSIGNED NOT NULL DEFAULT '0', `points` int(11) NOT NULL default '0', `bot_rating` int(10) NOT NULL DEFAULT 0, `raidkills` int(11) NOT NULL DEFAULT '0', `soloinstance` int(11) NOT NULL DEFAULT '0', `partyinstance` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (obj_Id), UNIQUE KEY `char_name` (`char_name`), KEY `account_name` (`account_name`), KEY `clanid` (`clanid`) ) ENGINE=MyISAM;
`account_name` эти данные уникальны и хранятся не только в этой таблице и если меняем тут то и в других таблицах, и там есть ещё нюанс к этой таблице, в account_name не может быть больше 7, персонажей, если при слиянии их становится больше, в таком случае, нужно создать новый account_name с префиксом 5_account_name и создавать его ещё в таблице accounts, дублирую данные пароля и прочего со старого и переносить лишних персонажей на него, то есть сразу в characters в account_name использовать префикс
DROP TABLE IF EXISTS `accounts`; CREATE TABLE `accounts` ( `login` varchar(32) NOT NULL, `password` varchar(255) NOT NULL, `last_access` int(11) NOT NULL DEFAULT '0', `access_level` int(11) NOT NULL DEFAULT '0', `last_ip` varchar(15) DEFAULT NULL, `last_hwid` varchar(255) DEFAULT NULL, `last_server` int(11) NOT NULL DEFAULT '0', `bonus` double NOT NULL DEFAULT '1', `bonus_expire` int(11) NOT NULL DEFAULT '0', `ban_expire` int(11) NOT NULL DEFAULT '0', `points` int(11) NOT NULL DEFAULT '0', `email` varchar(255) DEFAULT '', `secretcode` varchar(255) DEFAULT NULL, `online` int(11) NOT NULL DEFAULT '0', `report_points` TINYINT UNSIGNED NOT NULL DEFAULT '10', PRIMARY KEY (`login`), KEY `last_ip` (`last_ip`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
`obj_Id` 5673457 было значение и в первой базе уже есть такое, то его нужно изменить, но не только в этой таблице а по все базе, так как этот ид хранится ещё в других таблицах `char_name` nickname и если уже был в первой таблице такой, то делаем префикс 1_nickname