powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как блокировать дубликаты ID в запись таблиц ?Помогите пожалуйста.
12 сообщений из 12, страница 1 из 1
Как блокировать дубликаты ID в запись таблиц ?Помогите пожалуйста.
    #38383551
yannet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Собственно такая проблема ,есть 3 таблицы. players ,inventory и mail . Периодически в table3 записываются записи с таким же айди как в первых двух таблицах (не всегда но за день из 10000 записей 5-10 будет дублирующими). Помогает вот такой вот запросы.
DELETE FROM `mail` WHERE `mail_unique_id` IN (SELECT `id` FROM `players`);
DELETE FROM `mail` WHERE `mail_unique_id` IN (SELECT `item_unique_id` FROM `inventory`);


Как можно сделать ,что бы в третью таблицу не поступали такие записи ? Все таблицы работают в innodb
...
Рейтинг: 0 / 0
Как блокировать дубликаты ID в запись таблиц ?Помогите пожалуйста.
    #38383553
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажите DDL таблиц, опишите их логику, о каком именно дублировании речь и почему это плохо?
...
Рейтинг: 0 / 0
Как блокировать дубликаты ID в запись таблиц ?Помогите пожалуйста.
    #38383607
yannet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пожалуйста
CREATE TABLE `players` (
`id` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
`account_id` int(11) NOT NULL,
`account_name` varchar(50) NOT NULL,,
`heading` int(11) NOT NULL,
`world_id` int(11) NOT NULL,
`world_owner` int(11) NOT NULL DEFAULT '0',
`gender` enum('MALE','FEMALE') NOT NULL,
`quest_expands` tinyint(1) NOT NULL DEFAULT '0',
`npc_expands` tinyint(1) NOT NULL DEFAULT '0',
`advenced_stigma_slot_size` tinyint(1) NOT NULL DEFAULT '0',
`warehouse_size` tinyint(1) NOT NULL DEFAULT '0',
`mailbox_letters` tinyint(4) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `name_unique` (`name`),
KEY `account_id` (`account_id`),
KEY `setPartnerNull` (`partner_id`),
CONSTRAINT `setPartnerNull` FOREIGN KEY (`partner_id`) REFERENCES `players` (`id`) ON DELETE SET NULL ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8


Вторая
CREATE TABLE `inventory` (
`item_unique_id` int(11) NOT NULL,
`item_id` int(11) NOT NULL,
`item_count` bigint(20) NOT NULL DEFAULT '0',
`item_color` int(11) NOT NULL DEFAULT '0',
`item_owner` int(11) NOT NULL,
`fusioned_item` int(11) NOT NULL DEFAULT '0',
`optional_socket` int(1) NOT NULL DEFAULT '0',
`optional_fusion_socket` int(1) NOT NULL DEFAULT '0',
`charge` mediumint(9) NOT NULL DEFAULT '0',
`rnd_bonus` smallint(6) DEFAULT NULL,
`unSeal` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`item_unique_id`),
KEY `item_location` (`item_location`),
KEY `index3` (`item_owner`,`item_location`,`is_equiped`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8



И третья в которую попадают дубликаты
CREATE TABLE `mail` (
`mail_unique_id` int(11) NOT NULL,
`mail_recipient_id` int(11) NOT NULL,
`sender_name` varchar(20) NOT NULL,
`mail_title` varchar(20) NOT NULL,
`mail_message` varchar(1000) NOT NULL,
`unread` tinyint(4) NOT NULL DEFAULT '1',
`attached_item_id` int(11) NOT NULL,
`attached_kinah_count` bigint(20) NOT NULL,
`express` tinyint(4) NOT NULL DEFAULT '0',
`recieved_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`mail_unique_id`),
KEY `mail_recipient_id` (`mail_recipient_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
...
Рейтинг: 0 / 0
Как блокировать дубликаты ID в запись таблиц ?Помогите пожалуйста.
    #38383608
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftопишите их логику, о каком именно дублировании речь и почему это плохо?внешних ключей на таблицах нет, так что догадаться о том, что это за "мэйл" такой и почему дубликаты в нём не есть гуд (и что это вообще за "дубликаты"), малореально без дополнительных разъяснений.
...
Рейтинг: 0 / 0
Как блокировать дубликаты ID в запись таблиц ?Помогите пожалуйста.
    #38383617
yannet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На таблице mail изначально был ключ
CONSTRAINT `FK_mail` FOREIGN KEY (`mail_recipient_id`) REFERENCES `players` (`id`) ON DELETE CASCADE. Его удалили думали он возможно создает ее но не помогло.

Объясняю. Это таблици игрового сервера. Собственно сервер выдает ошибку ,что мол
ID FACTORY такой то ID erorr и не может запуститься . Приходиться выполнять вон те запросы которые я в 1 сообщение написал и все нормально работает.
...
Рейтинг: 0 / 0
Как блокировать дубликаты ID в запись таблиц ?Помогите пожалуйста.
    #38383619
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yannet. Его удалили думали он возможно создает ее но не помогло.кого/что "её"? ошибку, что ли?
yannetСобственно сервер выдает ошибку ,что мол ID FACTORY такой то ID erorr и не может запуститьсятак может, спросить у разработчиков "сервера", что значит эта ошибка и как её исправить?
А ваши запросы тупо удаляют из таблицы "мэйл" всё , что может быть связано с другими двумя таблицами (по крайней мере судя по тексту запросов, т.к. логика всего этого так и осталась тайной, покрытой мраком)
...
Рейтинг: 0 / 0
Как блокировать дубликаты ID в запись таблиц ?Помогите пожалуйста.
    #38383637
yannet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ошибка эта значит ,что в таблицах баззы данных в данном случае трьех этих таблиц где-то одинаковый айди и сервер не может считать одинаковые ID помогает удаления дублирующих . ТО есть в таблице mail создался такой же айди как в players /inventory
...
Рейтинг: 0 / 0
Как блокировать дубликаты ID в запись таблиц ?Помогите пожалуйста.
    #38383753
yannet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ребята вот суть проблемы.

Записи в таблицу mail в mail_unique_id такие же числа которые уже есть в таблице inventory (item_unique_id)
.Собственно как можно добавить что-то типо такого ключа

CONSTRAINT `dublicat` FOREIGN KEY (`mail_unique_id`) REFERENCES `inventory` (`item_unique_id`) ON DELETE CASCADE ??
...
Рейтинг: 0 / 0
Как блокировать дубликаты ID в запись таблиц ?Помогите пожалуйста.
    #38383755
yannet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть такой ключ только наоборот ,что бы не было такого id в таблице invenory (item_unique_id) . Если нету ,то значит хорошо запись проходит
...
Рейтинг: 0 / 0
Как блокировать дубликаты ID в запись таблиц ?Помогите пожалуйста.
    #38383787
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yannet, это такой глобальный айди, что ли? один на три (или больше) таблицы?
ну разве что триггер before update, в нём искать вводимый ключ в других таблицах, если нашли - вызывать ошибку...
...
Рейтинг: 0 / 0
Как блокировать дубликаты ID в запись таблиц ?Помогите пожалуйста.
    #38383791
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Требование единого уникального идентифицирующего признака для разных сущностей, являющегося одновременно первичным ключом таблиц, свидетельствует об ошибке проектирования.
Разделите эти функции.
...
Рейтинг: 0 / 0
Как блокировать дубликаты ID в запись таблиц ?Помогите пожалуйста.
    #38387701
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yannet,

Пробежаться про проекту и заменить доставание id последней записи на select last_insert_id();

если id как-то вычисляется, заменить все его вычисления, на потокобезопасные.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как блокировать дубликаты ID в запись таблиц ?Помогите пожалуйста.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]