Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Problema alter

  1. #1

    Problema alter

    Ciao a tutti, ecco il mio problema: ho una tabella qualsiasi, per esempio la seguente:

    mysql> desc state;
    +-------+----------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +-------+----------+------+-----+---------+-------+
    | id | char(11) | | PRI | 0 | |
    | state | int(11) | | | 0 | |
    +-------+----------+------+-----+---------+-------+
    2 rows in set (0.02 sec)

    Ora voglio inserire una colonna prova dopo id che mi deve fare da chiave primaria, allora do il seguente comando:

    mysql> alter table state add column prova tinyint(3) unsigned default 0 primary key after id;

    La risposta pero' è:
    ERROR 1068: Multiple primary key defined

    Se pero' non la metto come chiave primaria funziona (almeno quello... )...
    Anche la combinazione

    mysql> alter table state add column prova tinyint(3) unsigned default 0 after id;
    mysql> alter table state add primary key (prova);

    non funziona!!!

    Ho provato a cercare in rete, ma nada de nada, manco una risposta a sta domanda.

    Mi date una mano per favore?
    It's just another bombtrack...
    Ogni can mena la coa, ogni coion vö gi' la soa!

  2. #2
    non puoi avere due chiavi primarie contemporaneamente... o metti l'id o l'altra...
    I'm your dreams, make you real... I'm your eyes when you must steel...I'm pain when you can't feel...sad but true !

  3. #3
    Di chiave primaria ce ne puo' essere una soltanto. Hai gia' 'id'. Se metti una colonna autoincrement questa deve essere obbligatoriamente una chiave primaria.


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

  4. #4
    No, in una tabella piu' colonne possono fare da chiave primaria.
    Il problema è che se creo una tabella nuova lo fa tranquillamente, la questione si pone quando devo alterare una tabella preesistente.

    P.S. Non posso ricreare la tabella, sarebbe un megacasino
    It's just another bombtrack...
    Ogni can mena la coa, ogni coion vö gi' la soa!

  5. #5
    Esempio:

    DROP TABLE IF EXISTS alarm_sended;
    CREATE TABLE `alarm_sended` (
    `id` varchar(11) NOT NULL default '0',
    `eventtime` timestamp(14) NOT NULL,
    `alarm_type` tinyint(3) unsigned NOT NULL default '0',
    PRIMARY KEY (`id`, `eventtime`,`alarm_type`)
    ) TYPE=MyISAM;

    In questo modo i tre campi sono tutti chiavi primarie :master: :master:
    It's just another bombtrack...
    Ogni can mena la coa, ogni coion vö gi' la soa!

  6. #6
    Originariamente inviato da raistlin76
    No, in una tabella piu' colonne possono fare da chiave primaria.
    Il problema è che se creo una tabella nuova lo fa tranquillamente, la questione si pone quando devo alterare una tabella preesistente.

    P.S. Non posso ricreare la tabella, sarebbe un megacasino
    Confusione....

    Non ho detto che la chiave primaria e' formata da una colonna, ma che in una tabella puo' esserci solo una chiave primaria....

    Poi nella chiave primaria ci puoi mettere tutte le colonne che vuoi... Anche se ci sono alcune regole che andrebbero rispettate.

    Gia' discusso varie volte questo argomento.


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

  7. #7
    OK, ci siamo capiti male, pero' il problema rimane...come faccio a creare con alter un campo che poi farà anche parte della chiave primaria?
    It's just another bombtrack...
    Ogni can mena la coa, ogni coion vö gi' la soa!

  8. #8
    Originariamente inviato da raistlin76
    OK, ci siamo capiti male, pero' il problema rimane...come faccio a creare con alter un campo che poi farà anche parte della chiave primaria?
    Leggiti questo thread....

    http://forum.html.it/forum/showthrea...y&pagenumber=2

    Con particolare attenzione dove si parla della chiave primaria e delle caratteristiche ideali.

    Per aggiungere una colonna alla chiave primaria...

    ALTER TABLE tabella DROP INDEX id, ADD INDEX id (id, new_campo)

    Si esegue un drop e si aggiunge un index


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

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.