2012-11-25 30 views
5

Attualmente ho questo tavolo nella mia DB:MySQL unica stringa colonna

CREATE TABLE `twMCUserDB` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `mc_userName` text NOT NULL, 
    `mc_userPass` text NOT NULL, 
    `tw_userName` text NOT NULL, 
    `tw_userPass` text NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1; 

Ora quello che voglio fare è che la colonna mc_userName sarà unica per (proprio come id). Ma mc_userName deve essere una stringa.

ora Lo ho provato a farlo anche la chiave primaria, ma che non ha funzionato ...

Quindi la mia domanda a voi ragazzi è la seguente:

Quando aggiungo dati alla tabella, devo prima controllare se mc_userName esiste già? O c'è una funzione incorporata in Mysql, che posso usare (come nella query di inserimento o altrove)

risposta

6

basta aggiungere UNIQUE

`mc_userName` text NOT NULL UNIQUE, 

o

CREATE TABLE `twMCUserDB` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `mc_userName` text NOT NULL, 
    `mc_userPass` text NOT NULL, 
    `tw_userName` text NOT NULL, 
    `tw_userPass` text NOT NULL, 
    PRIMARY KEY (`id`), 
    CONSTRAINT tb_uq UNIQUE (mc_userName) 
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1; 
+0

Come posso aggiungere UNICO alla colonna? sto usando Navicat come editor di database e phpmyadmin, ma non riesco a trovare qualcosa che possa gestire questo ... – Mathlight

+0

puoi provare ad alterare la tabella eseguendo questo DDL: 'ALTER TABLE twMCUserDB ADD UNICO tb_uq (mc_userName)' –

+0

Questo riporta: '[Err] 1170 - Colonna BLOB/TEXT 'mc_userName' usata nelle specifiche chiave senza una lunghezza della chiave' – Mathlight

1

Perché non si fa 'mc_userName' la chiave primaria invece di id? Dovrai cambiare il tipo di dati di mc_userName in VARCHAR come descritto in questo post: MySQL error: key specification without a key length. In alternativa, crea una chiave primaria composta contenente id e nome utente.

Se non è possibile farlo a causa della struttura del database, utilizzare la parola chiave EXISTS in una query. Date un'occhiata qui per maggiori informazioni: http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html

+0

io non posso farlo, perché ottengo l'errore 'MySQL Error 1170: BLOB/TEXT Colonna utilizzata nelle specifiche chiave senza una lunghezza chiave ... ... e darò un'occhiata a quel link – Mathlight

+0

Cosa non puoi fare? – w0051977

+0

scusate, intendevo quella prima parte ... Rendendo mc_userName la chiave primaria invece dell'id .... ottengo l'errore che ho detto sopra – Mathlight

Problemi correlati