Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di P75
    Registrato dal
    Jul 2001
    Messaggi
    41

    Chiavi primary... duplicate?

    Ciao, sto realizzando un'interfaccia che tramite php si collega ad un db MYSQL esistente.

    Ora, ho un dubbio, nel db ho trovato questa tabella:

    Codice PHP:
       CREATE TABLE `character_inventory` (
      `
    guidbigint(20unsigned NOT NULL default '0' COMMENT 'Global Unique Identifier',
      `
    bagbigint(20unsigned NOT NULL default '0',
      `
    slottinyint(3unsigned NOT NULL default '0',
      `
    itembigint(20unsigned NOT NULL default '0' COMMENT 'Item Global Unique Identifier',
      `
    item_templateint(11unsigned NOT NULL default '0' COMMENT 'Item Identifier',
      
    PRIMARY KEY (`guid`,`bag`,`slot`)
    ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='Player System'
    In cui alcuni campi, fra cui guid sono messi come chiavi primarie.

    Il problema è che il contenuto della tabella, specialmente nel campo guid contiene chiavi identiche:

    codice:
    guid bag slot  ...  .......
    2     255  6    16 22417 
    2     255  5    26 22422 
    2     255  4    14 22416 
    2     255  2    20 22419 
    4     255  30  40 6120 
    4     255  29  44 2362 
    4     255  28  42 6122
    Com'è possibile? Le chiavi non dovrebbero essere diverse le une dalle altre in un campo primary?
    Se faccio un insert ottengo giustamente un errore di chiave duplicata.
    So che si può usare IGNORE, ma non è comunque un uso sbagliato di primary?

    Grazie per l'attenzione!

  2. #2
    PRIMARY KEY (`guid`,`bag`,`slot`)

    la chiave primaria e' realizzata su tre campi. Quindi l'unicita' e' data dai tre campi.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di P75
    Registrato dal
    Jul 2001
    Messaggi
    41
    Ok, grazie per la risposta...
    Ma l'unicità data dai tre campi combinati è riconosciuta da mysql?
    O è semplicemente garantita dal fatto che i tre campi assieme sono differenti?

    Te lo chiedo perché quando tento di fare un INSERT ottengo comunque un messaggio di chiave duplicata.

    Questo è allora un caso in cui è corretto usare IGNORE?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,325
    Qualsiasi DBMS che si possa considerare tale deve garantire la consistenza delle chiavi primarie (non è, quindi, una caratteristica propria di MySQL, ma di qualunque DBMS).
    La chiave primaria di una tabella è data da un numero di campi (da 1 al numero di campi di cui è composta) che, presi tutti assieme, consentono l'univocità del record all'interno della tabella.

    Se ottieni un errore di chiave primaria duplicata, significa che stai tentando di inserire un record la cui chiave esiste già, ovvero esiste già nella tabella un record che abbia la stessa ennupla di valori nei campi chiave.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.