Como zerar o auto-increment de uma chave primária em uma tabela MySql

6 09 2011

Pra zerar o auto-increment de uma tabela MySql que seja Chave Primávia é bem simples, com apenas uma linha SQL resolvemos este problema. Segue a solução:

ALTER TABLE USUARIO AUTO_INCREMENT = 1

Neste caso, estamos definindo que o auto-increment desta tabela vai ser reiniciado para 1. Podemos definir por exemplo que o auto-increment comece com 1 milhao por exemplo.

ALTER TABLE USUARIO AUTO_INCREMENT = 1000000

Abraço!





PHP – Como debugar uma query no Pear DB DataObject?

19 08 2011

Pessoal, depois de muito tempo debugando o Pear através do arquivo .ini de configuração do banco, apesar do inconveniente de toda a equipe receber um debug na tela e ainda atrapalhar a execução de determinadas requisições JS, resolvi pesquisar um pouco sobre o debug do Pear.

Após ler algumas documentações, identifiquei o método debugLevel, que pode ser utilizado diretamente na instanciação da classe DO.

Vamos à um exemplo, pra ficar bem fácil de identificar:

Imagine que você instanciou a classe DB_DataObject da tabela usuário. Você pode chamar o método de debug da seguinte forma:

$doUSUARIO = new DO_USUARIO();

Até agora temos uma instância do objeto DO_USUARIO da tabela USUARIO.

Agora vamos dizer para o código que queremos um debug da query na tela:

$doUSUARIO->debugLevel(5);

Ótimo! Assim você pode acompanhar o debug da execução do SQL no próprio firebug!

Ainda assim, todo o resto do código que utiliza PEAR no mesmo DB não sobre com debugs indesejáveis! ;)

Claro, ao final do trecho de código que executa a query, no caso um “find” ou um “fetch” por exemplo, você seta o debugLevel para vazio:

$docoordenadas->debugLevel();

Pronto! Agora ficou mais fácil trabalhar com PEAR – DB_DataObject! Abraço!

Fonte: pear.php.net





MYSQL: Alter table – de Float para Decimal com 2 casas – Problema com PagSeguro

9 01 2011

Primeiro post sobre desenvolvimento do ano de 2011!

Surgiu a seguinte questão de um cliente: Na tabela produtos o campo ‘valor’ estava como float. Porém isso causava um grande problema. Quando o cliente ia realizar a compra através do PagSeguro, o valor 6.4 (Seis reais e quarenta centavos) ia através do pag seguro sem virgula (64) e então o pagSeguro convertia automaticamente para a seguinte forma 0,64! Ou seja, um produto que custava 6 reais passou a custar 64 centavos! :-| Tenso né?! Pois é.

Nota-se que os produtos que possuem o valor: 5.44 o pagSeguro convertia corretamente, ou seja, ele tirava a virgula, ficando 544, e depois incluía a virgula após as 2 primeiras casas, ficand 5,44. Desta forma podemos identificar que os produtos que tinham apenas 1 casa decimal depois da virgula eram os que causavam o problema.

Vamos à solução! :)

Estudando os tipos de campo, achamos que é perfeitamente viável utilizar o tipo DECIMAL. Assim, montamos o seguinte comando SQL:

ALTER TABLE produtos MODIFY valor DECIMAL(5,2)

Explicando o código: Altere a tabela produtos, modificando o campo valor para o tipo decimal, onde este decimal tem no máximo 5 dígitos (99.999), neste caso temos produtos de no máximo 100 mil reais. E que o valor decimal sempre fique com 2 casas decimais após a vírgula.

Boa Semana!





Como inserir CONSTRAINT depois que a tabela já existe? Alter table!

17 12 2010

Essa semana surgiu a seguinte necessidade:

Foram criadas tabelas sem constraints! E agora chegou a hora de corrigir este problema! Como?

Imagine uma tabela endereco, onde esta tabela tem ligação com a tabela usuario. Ou seja, se o usuário que está na tabela tiver um endereço cadastrado na tabela endereco, ele não pode ser deletado. Primeiro devemos deletar o registro da tabela endereco!

Segue o exemplo!

ALTER TABLE endereco 
ADD CONSTRAINT FK_endereco_id_usuario
FOREIGN    KEY (id_usuario)
REFERENCES usuario(id)

Explicação:
1 – Tabela a ser alterada
2 – Ação à ser executada: Adicionar Constraint com o nome de FK_endereco_id_usuario
3 – Chave estrangeira desta tabela
4 – Tabela pai e o campo de ligação

Bom final de semana!








Seguir

Obtenha todo post novo entregue na sua caixa de entrada.