[OFF] Criar uma coluna auto_increment que não seja Primary Key - MySQL

4,602 views
Skip to first unread message

Darkzad

unread,
Jul 8, 2009, 9:32:51 AM7/8/09
to list...@googlegroups.com
Olá pessoal,

Como faço para criar uma coluna auto_increment que não seja Primary Key
no MySQL?

Tento fazer mas sempre me retorna esse erro:
ERROR 1075 (42000): Incorrect table definition; there can be only one
auto column and it must be defined as a key

Desde já Agradeço

Marcelo Pomarolli
__________________________________________________
Faça ligações para outros computadores com o novo Yahoo! Messenger
http://br.beta.messenger.yahoo.com/

Gustavo Almeida

unread,
Jul 8, 2009, 9:57:10 AM7/8/09
to list...@googlegroups.com
Cara...
 
Não tenho certeza, mas lendo a mensagem de erro, me parece que você tem a resposta.
 
Só é possível ter 1 coluna auto increment e ela precisa ser definida como KEY.

Carlos Alberto Pinto

unread,
Jul 8, 2009, 9:56:04 AM7/8/09
to list...@googlegroups.com
Que eu saiba isso não é possivel em mysql para auto_increment vc precisa ter a coluna como primary key.

Em que outro banco vc conseguiu isso.

Carlos

2009/7/8 Darkzad <dar...@yahoo.com.br>



--
Comunidade de XNA (sobre Games PC e XBOX)
http://www.xnablog.com.br/
(Eu apoio, e participo)

Seja um PubliPT (Vc ganha em Euros)
http://www.publipt.com/pages/index.php?refid=caneto

Visite meu site de venda de DVDs
Muitos filmes a venda e produtos em geral
http://www.dvdrio.com.br

Visite o jogo Worldwar um jogo de mmog baseado em Web.
http://www.worldwar.com.br

Meu portfolio para contato... freelances
http://www.freela.com.br/caneto

Bruno Gross

unread,
Jul 8, 2009, 10:06:02 AM7/8/09
to list...@googlegroups.com
em sql server vc pode definir um auto increment não primary

2009/7/8 Carlos Alberto Pinto <can...@gmail.com>



--
Visite: www.UpaLele.com

att.
Bruno Gross
Analista de Sistemas
Celular: (21) 78545483
Rádio ID: 83*39379

Esta mensagem, incluindo seus anexos, pode conter informações confidenciais e/ou privilegiadas. Se você não for a pessoa autorizada a receber esta mensagem, não pode usar, copiar ou divulgar as informações nela contidas ou tomar qualquer ação baseada nessas informações. Caso esta mensagem tenha sido recebida por engano, por favor avise imediatamente o remetente, respondendo o e-mail e em seguida elimine-a do seu sistema. Agradeço sua cooperação.

Jonathan

unread,
Jul 8, 2009, 10:07:00 AM7/8/09
to list...@googlegroups.com


acho que se tem auto increment tem que ter uma chave, mas não necessariamente a coluna chave  tem que ser a coluna do auto_increment

create table ai (
    id int auto_increment not null,
    xx varchar(9),
    key(id),
    primary key (xx))


funcionou aqui, tirei do:
http://forums.mysql.com/read.php?22,264498,264967#msg-264967

me corrijam se eu estiver errado!


2009/7/8 Bruno Gross <bruno...@gmail.com>



--
Grato.
---
Jonathan dos Santos, Web Developer e SEO,

Diego Reis Carvalho

unread,
Jul 8, 2009, 10:10:55 AM7/8/09
to list...@googlegroups.com
isso é preciso uma chave mesmo... pra que vc possa ter um autoincrement

você pode usar de outros recursos não sei se o mysql tem mais usar um sequencia para ir colocando no campo (seria um auto_increment) mais teria que manipular isso via SQL o que vira um caus.

2009/7/8 Jonathan <jonat...@gmail.com>



--
[]s
DiReis (Diego Reis Carvalho)
www.direis.com

Moisés Viana

unread,
Jul 8, 2009, 10:14:40 AM7/8/09
to list...@googlegroups.com
inseri com zero e depois faz uma trigger "after insert" que busca o maior valor, soma um e atualiza.



2009/7/8 Diego Reis Carvalho <dir...@gmail.com>



--
Moisés Viana
(51) 9302.3460
(53) 9147.6019
www.moisesviana.com.br

Bruno Gross

unread,
Jul 8, 2009, 10:24:58 AM7/8/09
to list...@googlegroups.com
isso, a meu ver, é o cúmulo do bacalhau

2009/7/8 Moisés Viana <moise...@gmail.com>

João Batista Neto

unread,
Jul 8, 2009, 10:50:36 AM7/8/09
to list...@googlegroups.com
> Olá pessoal,
>
> Como faço para criar uma coluna auto_increment que não seja Primary Key
> no MySQL?

Não faz...

Você só pode ter uma coluna de auto_incremento e ela precisa ser a chave
primária.

porém você pode utilizar um trigger para mudar o valor da sua coluna
antes de inseri-la no banco:

Sua tabela ficaria assim:

CREATE TABLE `autoincremento` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`id2` mediumint(8) unsigned DEFAULT NULL,
`teste` varchar(20) NOT NULL,
PRIMARY KEY (`id`),
KEY `id2` (`id2`)
) ENGINE=MyISAM;

Onde o id2 será nosso fake_autoincrement, ai criamos o trigger:

create trigger
fake_autoincremento
before insert on
autoincremento
for each row
set NEW.id2=(select ifnull( max(id2) , 0 ) + 1 "proximo" from
autoincremento)


Agora é só inserir os dados:

insert into
autoincremento
values

(NULL,NULL,"primeiro" ),(NULL,NULL,"segundo"),(NULL,NULL,"terceiro")

O resultado:

mysql> select * from autoincremento;
+----+------+----------+
| id | id2 | teste |
+----+------+----------+
| 1 | 1 | primeiro |
| 2 | 2 | segundo |
| 3 | 3 | terceiro |
+----+------+----------+
3 rows in set (0.00 sec)


--
[]'s
João Batista Neto
neto.joa...@gmail.com
joao...@visualcom.com.br

Darkzad

unread,
Jul 8, 2009, 1:51:31 PM7/8/09
to list...@googlegroups.com
Bom para ser exato não criei em outro banco.
Mas no firebird consigo criar um generator.

Aí posso definir para qualquer coluna.

Valeu

Carlos Alberto Pinto escreveu:
Reply all
Reply to author
Forward
0 new messages