• Wenn du hier im Forum ein neues Thema erstellst, sind schon Punkte aufgeführt die du ausfüllen musst. Das dient im Allgemeinen dazu die notwendigen Informationen direkt mit der Frage bereitzustellen.
    Da in letzter Zeit immer wieder gerne das Formular gelöscht wurde und erst nach 3 Seiten Nachfragen die benötigten Infos für eine Hilfe kommen, werde ich nun jede Fragestellung die nicht einmal annähernd das Formular benutzt, sofort in den Sondermüll schicken.
    Füllt einfach die abgefragte Daten aus und alle können euch viel schneller helfen.

ID-Vergabe nach Löschen eines Users

Maddrax

Bekanntes Mitglied
Lizenzinhaber
Registriert
21. Sep. 2011
Beiträge
407
Punkte
93
XF Version
  1. 2.2.15
XF Instanz
Hosting
PHP-Version
8.2.x
MySQL/MariaDB
10.6.16
Provider/Hoster
all-inkl.com
Folgendes Phänomen trat gestern bei mir auf:

Der letzte registrierte User (ID 6380) wurde gelöscht.
Die gleiche ID (6380) wurde dem nächsten neuen User erneut vergeben.

Entsprechende Beiträge/Unterhaltungen des alten Users wurden dem neuen User hinzugefügt.
Was ja nicht sein darf!

In meinen Augen ist das ein Bug, da normalerweise die ID nicht erneut vergeben werden sollte.

Kann das jmd nachvollziehen ?
 
Wenn es mal einer versucht nachzustellen, wäre es ganz ok. ;)
Evtl. kommen wir ja einem Bug auf die Schliche. :D
 
User + IDs die mitten drin gelöscht werden, werden auch nicht wieder belegt.
 
Nein das ist kein Bug.

Schon allein bedingt durch die Logik der DB ist das ok.
Die jeweils nächste vergebene ID ist immer eine höher als die LETZTE höchste.

Wenn du also 6380 löschst dann ist die letzte höchste 6379.
Damit ist die nächste neue also 6380.

Wenn du mitten drin eine löschst, dann ist die letzte höchste 6380, also plus 1, macht 6381
für die nächste Registrierung.

Es ist alles ok. ;)
 
Dann war das also mehr oder weniger Zufall.

Blöd ist nur das evtl. schon Beiträge mit der schon einmal vergebenen ID existierten.
 
ÄHM, das wäre mir aber KOMPLETT NEU..AUTO_INCREMENT funktioniert definitiv nicht so!
Es wird keine verwendete ID bei AUTO_INCREMENT wiederverwendet...

es wirkt eher so, als ob die Usertabelle irgend ein Problem hat.
Schau mal ob die user_id ein Auto Increment Feld ist.


Nein das ist kein Bug.

Schon allein bedingt durch die Logik der DB ist das ok.
Die jeweils nächste vergebene ID ist immer eine höher als die LETZTE höchste.

Wenn du also 6380 löschst dann ist die letzte höchste 6379.
Damit ist die nächste neue also 6380.

Wenn du mitten drin eine löschst, dann ist die letzte höchste 6380, also plus 1, macht 6381
für die nächste Registrierung.

Es ist alles ok. ;)
 
Bitte, bitte verwechselt nicht RecordID mit UserID
 
Vergiss die Frage, habs hier:

Code:
Tabellenstruktur für Tabelle `user`
--
 
CREATE TABLE IF NOT EXISTS `user` (
  `user_id` int(10) unsigned NOT NULL auto_increment,
  `username` varchar(50) NOT NULL,
  `email` varchar(120) NOT NULL,
  `gender` enum('','male','female') NOT NULL default '' COMMENT 'Leave empty for ''unspecified''',
  `custom_title` varchar(50) NOT NULL default '',
  `language_id` int(10) unsigned NOT NULL,
  `style_id` int(10) unsigned NOT NULL COMMENT '0 = use system default',
  `timezone` varchar(50) NOT NULL COMMENT 'Example: ''Europe/London''',
  `visible` tinyint(3) unsigned NOT NULL default '1' COMMENT 'Show browsing activity to others',
  `user_group_id` int(10) unsigned NOT NULL,
  `secondary_group_ids` varbinary(255) NOT NULL,
  `display_style_group_id` int(10) unsigned NOT NULL default '0' COMMENT 'User group ID that provides user styling',
  `permission_combination_id` int(10) unsigned NOT NULL,
  `message_count` int(10) unsigned NOT NULL default '0',
  `conversations_unread` smallint(5) unsigned NOT NULL default '0',
  `register_date` int(10) unsigned NOT NULL default '0',
  `last_activity` int(10) unsigned NOT NULL default '0',
  `trophy_points` int(10) unsigned NOT NULL default '0',
  `alerts_unread` smallint(5) unsigned NOT NULL default '0',
  `avatar_date` int(10) unsigned NOT NULL default '0',
  `avatar_width` smallint(5) unsigned NOT NULL default '0',
  `avatar_height` smallint(5) unsigned NOT NULL default '0',
  `gravatar` varchar(120) NOT NULL default '' COMMENT 'If specified, this is an email address corresponding to the user''s ''Gravatar''',
  `user_state` enum('valid','email_confirm','email_confirm_edit','moderated') NOT NULL default 'valid',
  `is_moderator` tinyint(3) unsigned NOT NULL default '0',
  `is_admin` tinyint(3) unsigned NOT NULL default '0',
  `is_banned` tinyint(3) unsigned NOT NULL default '0',
  `like_count` int(10) unsigned NOT NULL default '0',
  `warning_points` int(10) unsigned NOT NULL default '0',
  `advanced_rules` smallint(5) default NULL,
  `friend_count` int(10) unsigned NOT NULL default '0',
  `personal_friend_count` int(10) unsigned NOT NULL default '0',
  PRIMARY KEY  (`user_id`),
  UNIQUE KEY `username` (`username`),
  KEY `email` (`email`),
  KEY `user_state` (`user_state`),
  KEY `last_activity` (`last_activity`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6383 ;
 
`user_id` int(10) unsigned NOT NULL auto_increment,

Dem ist wohl so wie ragtek sagte.

http://dev.mysql.com/doc/refman/5.1/de/example-auto-increment.html schrieb:
Beachten Sie, dass in diesem Fall (wenn die AUTO_INCREMENT-Spalte Teil eines mehrspaltigen Index ist) AUTO_INCREMENT-Werte neu verwendet werden, wenn Sie den Datensatz mit dem höchsten AUTO_INCREMENT-Wert in einer beliebigen Gruppe löschen. Dies gilt auch für MyISAM-Tabellen, bei denen AUTO_INCREMENT-Werte normalerweise nicht wiederverwendet werden.
Quelle: http://dev.mysql.com/doc/refman/5.1/de/example-auto-increment.html

Wenn ich das hier richtig interpretiere, dann hat DSF recht mit seiner Analyse ..
 
Die user_id ist aber nicht Teil eines mehrspaltigen Index. Das darf eigentlich nicht passieren.

Wenn da tatsächlich alte Beiträge & co, dem neuen zugewiesen wurden, ist der Bug dann in der Löschroutine zu suchen.
 
Jep so war es:

6380 war die letzte User-Id mit einigen Beiträgen und Unterhaltungen
der User wurde gelöscht, Beiträge und Unterhaltungen blieben erhalten
die ID 6380 wurde bei der nächsten Registration wieder vergeben
Beiträge und Unterhaltungen der ersten ID 6380 wurden der neuen zweiten ID 6380 zugeordnet

Und das kann in meinen Augen so nicht sein. Damit bekommt ein vollkommen anderer User Beiträge und vorallem Unterhaltungen, die ihn überhaupt nichts angehen.
 
Zurück
Oben