• Из-за обновления GTA 5 (был добавлен новый патч) может временно не работать вход в RAGE Multiplayer.

    ERROR: Your game version is not supported by RAGE Multiplayer.

    Данная ошибка говорит о том, что GTA V обновилась до новой версии (GTA Online тоже). Вам необходимо обновить саму игру в главном меню вашего приложения (Steam / Epic Games / Rockstar Games).
    Если после этого RAGE:MP все равно не работает - вам нужно дождаться выхода патча для самого мультиплеера (обычно это занимает от нескольких часов до нескольких дней).

    Новости и апдейты Rockstar Games - https://www.rockstargames.com/ru/newswire/
    Статус всех служб для Rockstar Games Launcher и поддерживаемых игр: https://support.rockstargames.com/ru/servicestatus


    Grand Theft Auto 5 (+ GTA Online) последний раз были обновлены:

Требуется подсказка по работе с базой данных

NΞITHΞR#0001

Начинающий специалист
Автор темы
2 Сен 2021
43
10
52
Вопрос заключается в следующем:

Как можно удалить пользователей, чтобы id, которые были связаны с другими таблицами ( house_entity к примеру ) так же были удалены. Поскольку, если я удаляю аккаунты игроков, то высвечивается соответствующая ошибка при запуске сервера, что другие таблицы зависят от id и это гарантируется ключом. Чистить все таблицы конечно же не выход из ситуации.


usersbd.png
 

Jerry (ChatGPT)

AI-powered language model
VIP
helper
17 Окт 2023
877
1,159
5
Если вы хотите удалить пользователя и все связанные с ним записи в других таблицах, вам нужно использовать операторы SQL для удаления с каскадом. Вот пример:

Код:
DELETE FROM users
WHERE id = <id пользователя>;

Вместо <id пользователя> вы должны указать конкретный ID пользователя, которого вы хотите удалить. Затем, чтобы удалить все связанные записи из других таблиц, вы должны создать внешний ключ с опцией ON DELETE CASCADE. Например:

Код:
CREATE TABLE house_entity (
    id INT PRIMARY KEY,
    user_id INT,
    ...
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);

Теперь, когда вы удалите пользователя из таблицы users, все связанные записи из таблицы house_entity также будут удалены автоматически.
 
  • Like
Реакции: NΞITHΞR#0001

Inoi

/dev/null
VIP
15 Окт 2020
2,372
1,413
208
34
Не очень знаю как работает ON DELETE CASCADE, вроде есть очевидно самый простой способ - просто сначала почистить дочерние таблицы.
То есть ты сначала удаляешь записи с существующими айдишниками, проверяя есть ли такой юзер в основной таблице, а потом уже юзеров.

SQL:
DELETE FROM house_entity
WHERE id IN (SELECT id FROM users);

Вот это уточнение правда слегка смущает
Чистить все таблицы конечно же не выход из ситуации
Почему? Ты выборочно удаляешь юзеров только? Тогда можно условие добавить какое-нибудь с никнеймом, например

В любом случае если чатжпт правильно подсказала про ON DELETE CASCADE - в целом и заебись
 

NΞITHΞR#0001

Начинающий специалист
Автор темы
2 Сен 2021
43
10
52
Не очень знаю как работает ON DELETE CASCADE, вроде есть очевидно самый простой способ - просто сначала почистить дочерние таблицы.
То есть ты сначала удаляешь записи с существующими айдишниками, проверяя есть ли такой юзер в основной таблице, а потом уже юзеров.

SQL:
DELETE FROM house_entity
WHERE id IN (SELECT id FROM users);

Вот это уточнение правда слегка смущает

Почему? Ты выборочно удаляешь юзеров только? Тогда можно условие добавить какое-нибудь с никнеймом, например

В любом случае если чатжпт правильно подсказала про ON DELETE CASCADE - в целом и заебись
Мне нужно удалить учетные записи из account entity, user_entity. Но когда я удалял в прошлый раз, то остальные таблицы, зависящие от id, не могли найти из за удаления, что логично. Еще есть другие таблицы где так же связаны все аккаунты.


Причем при попытке удалить данные в account то таблица отсылается к user и говорит, что ключ настроен на бездействие: ON DELETE NO ACTION ON UPDATE NO ACTION)
 

NΞITHΞR#0001

Начинающий специалист
Автор темы
2 Сен 2021
43
10
52
Все сложно и я не могу догадаться как это сделать o_O
 

Inoi

/dev/null
VIP
15 Окт 2020
2,372
1,413
208
34
Мне нужно удалить учетные записи из account entity, user_entity. Но когда я удалял в прошлый раз, то остальные таблицы, зависящие от id, не могли найти из за удаления, что логично. Еще есть другие таблицы где так же связаны все аккаунты.


Причем при попытке удалить данные в account то таблица отсылается к user и говорит, что ключ настроен на бездействие: ON DELETE NO ACTION ON UPDATE NO ACTION)
А почему ты не хочешь очистить просто все таблицы?
Тебе нужно удалить не все аккаунты?
 

NΞITHΞR#0001

Начинающий специалист
Автор темы
2 Сен 2021
43
10
52
А почему ты не хочешь очистить просто все таблицы?
Тебе нужно удалить не все аккаунты?
Так даже, если я удалю все аккаунты, мне нужно чтоб связанные с ними id в других таблицах так же были удалены

Но и прикол в том, что дошло до того, что я удалил все прописанные дома в house, так как:
1700140481006.png


А дома соответственно мне нужно оставить
 

Dmitry_V

Начинающий специалист
23 Июн 2023
682
135
62
26
Дай, угадаю оникс?
 

akudinov28

Гуру
24 Фев 2021
263
119
105
Чат ЖПТ дал действительно рабочий способ. Когда ты создаешь таблицу, записи в которой связаны с записями в другой таблице, ты создаешь ключ (foreign_key). При создании ключа можно задать действие, которое будет выполняться при удалении исходной записи, с которой строится связь. Например, у тебя имеется таблица accounts, и имеется таблица characters, которая связана с таблицей accounts посредством ключа user_id. Что нужно сделать:

Шаг первый: удаляем старый ключ.
Код:
ALTER TABLE `characters` DROP FOREIGN KEY `user_id`;

Шаг второй: создаем новый ключ и задаем действие при удалении.
Код:
ALTER TABLE `characters` ADD CONSTRAINT `user_id` FOREIGN KEY (`user_id`) REFERENCES `accounts` (`id`) ON DELETE CASCADE;

Эти шаги нужно повторить со всеми таблицами, записи в которых связаны с записями в таблице accounts. При выполнении вышеописанных действий при удалении записи из таблицы accounts также будут автоматически удалены все записи в связанных таблицах, поле user_id которых равно id удаленного пользователя.

P.S. Обратите внимание, что указанные выше действия автоматически обнулят ключи во всех изменяемых таблицах. Соответственно, в вашей ситуации все занесенные в таблицу дома будут иметь владельца null. Такая же петрушка будет с остальными таблицами, что может потенциально привести к проблемам. Например, предмет в инвентаре вдруг перестанет кому-либо принадлежать.

P.P.S. Запросы примерные, писались с телефона, возможно содержат ошибки.


P.P.P.S. Строить связи в таблицах и не продумать действие при удалении - проектирование вышло из чата...
 
Последнее редактирование:
  • Like
Реакции: NΞITHΞR#0001