-
Total de itens
3.089 -
Registro em
-
Última visita
Posts postados por Denis Courcy
-
-
Experimente passar o campo para BIGINT NOT NULL AUTO_INCREMENT.
Se suas tabelas não passarem de 63 bits (9223372036854775807) você pode usar UNSIGNED. Senão, utilize sem esta opção.
-
Tente assim:
SELECT * FROM tabela WHERE campo LIKE 'auto%eletrica%'
-
O mais correto é a letra B.
-
Abaixo segue um exemplo de uma storage procedure que uso em meus sistemas:
DELIMITER $$ USE `meubancodedados`$$ DROP PROCEDURE IF EXISTS `minhaprocedure_crud`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `minhaprocedure_crud`(IN Acao CHAR(1), IN pidCampo INTEGER, IN pnmCampo VARCHAR(50), IN pidUsuarioRespInclusao INTEGER, IN pidUsuarioRespAlteracao INTEGER) BEGIN DECLARE msg VARCHAR(1000) DEFAULT "MySQL: Sem mensagem"; DECLARE excecao SMALLINT DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET excecao = 1; IF pnmCampo = "" OR (Acao <> "I" AND pidCampo = 0) THEN SET msg = "MySQL: Erro na passagem de parametros"; ELSE START TRANSACTION; /*Inclusao*/ IF Acao = "I" THEN INSERT INTO minhaTabela(nmCampo, idUsuarioRespInclusao, dhInclusaoInformacao) VALUES (pnmCampo, pidUsuarioRespInclusao, NOW()); IF excecao = 1 THEN SET msg = "MySQL: Erro ao inserir na tabela de minhaTabela"; ROLLBACK; END IF; END IF; IF excecao <> 1 THEN IF Acao <> "I" THEN SET @idCampo = pidCampo; END IF; /*Alteracao*/ IF Acao = "A" THEN UPDATE minhaTabela SET nmCampo = pnmCampo, idUsuarioRespAlteracao = pidUsuarioRespAlteracao WHERE idCampo = @idCampo; IF excecao = 1 THEN SET msg = "MySQL: Erro ao atualizar minhaTabela"; ROLLBACK; END IF; END IF; END IF; /*Exclusao*/ IF excecao <> 1 THEN IF Acao = "E" THEN DELETE FROM minhaTabela WHERE idCampo = @idCampo; IF excecao = 1 THEN SET msg = "MySQL: Erro ao excluir minhaTabela"; ROLLBACK; END IF; END IF; END IF; /*Se tudo deu certo, então finaliza confirmando a gravacao.*/ IF excecao <> 1 THEN COMMIT; IF Acao = "I" THEN SET msg = "MySQL: minhaTabela Incluido com sucesso"; ELSE IF Acao = "A" THEN SET msg = "MySQL: minhaTabela Alterado com sucesso"; ELSE SET msg = "MySQL: minhaTabela Excluido com sucesso"; END IF; END IF; END IF; END IF; SELECT msg AS msg; END$$ DELIMITER ;
-
Utilize chave primária somente para ligar uma tabela a outra.
Campo integer unsigned not null auto_increment, resolve o problema de chave primária com auto sequenciamento.
-
Procure no manual do mysql a função DATE_ADD
DATE_ADD(CURDATE(), INTERVAL 30 DAY)
ou
DATE_ADD(CURDATE(), INTERVAL 1 MONTH)
-
O manual do MySQL na versão 4 está em português e servirá para seu propósito.
https://downloads.mysql.com/docs/refman-4.1-pt.pdf
Qual quer dúvida poste aqui e te ajudarei
-
Em 16/09/2017 at 09:50, Markus Magnus disse:
Então não precisa nem criar o campo DatMes só faz assim.
SELECT * FROM `suatabela` WHERE DATE_FORMAT(Data, '%Y-%m') = '2017-09';
Fazendo desta forma (usando função na representação de um campo e comparando-o com um literal) você corre um grande risco de que sua busca vire um TABLE SCAN, ou seja ela não usará índices e poderá demorar muito.
Eu substituiria a função pelo LIKE e, melhor ainda, pelo BETWEEN .
Exemplo:
SELECT * FROM `suatabela` WHERE `data` LIKE "2017-09%";
ou
SELECT * FROM `suatabela` WHERE `data` BETWEEN "2017-09-01" AND "2017-09-30";
Desta forma você aproveitará todo o potencial de seus índices.
-
Faça assim:
SELECT * FROM cliente WHERE nome LIKE 'josé%' AND nome LIKE '%xavier'
-
SQL_MODE é a variável que informa como a sintaxe SQL será tratada. Qual o comportamento que ela terá
Para mais detalhes leia https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html
-
Tente assim:
DELIMITER $ DROP PROCEDURE CRIAR_CONSULTA$ CREATE PROCEDURE CRIAR_CONSULTA(IN IDPAC INT, IN IDMED INT, IN IDHOS INT) BEGIN DECLARE msg VARCHAR(200) DEFAULT ''; DECLARE excecao SMALLINT DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET excecao = 1; start transaction; if (IDPAC > 0 AND IDMED > 0 AND IDHOS > 0) THEN INSERT INTO CONSULTA (IDCONSULTA, ID_PACIENTE, ID_MEDICO, ID_HOSPITAL, DATA) VALUES(NULL, IDPAC, IDMED, IDHOS, CURTIME()); IF excecao = 1 THEN SET msg = "Erro ao inserir na tabela usuario" AS Msg; ROLLBACK; END IF; ELSE SET excecao =1; SET msg = 'INSIRA OS DADOS CORRETAMENTE'; ROLLBACK; END IF; IF excecao = 0 THEN SET msg = 'DADOS INSERIDOS COM SUCESSO'; COMMIT; END IF; SELECT msg AS mensagem; END$ DELIMITER ;
-
Movendo MySQL -->> PHP
-
Faça com 3 deletes. Assim não funcionará.
-
Salvar em um só registro?
Se você modelou corretamente a tabela de orcamento receberá os dados gerais e a de item_orcamento receberá um registro para cada item daquele orçamento.
A gravação pode ocorrer de uma única vez, através de uma storage procedure com controle de sucesso ou fracasso de gravação.
Passe o modelo de dados para o forum de MySQL e veremos o que pode ser feito.
Depois, você poderá retornar a este forum para saber como integrar a linguagem de programação com o banco.
-
Remova esta linha de seu código:
DECLARE pcodven int;
Você já declarou esta variável como parâmetro. A Redeclaração como variável ordinária anula os dados vindos como parâmetro e o select perde o valor que deveria ser usado na cláusula where
-
Movendo para o forum de PHP
-
Movendo para o forum de PHP
-
Faça assim:
CREATE DEFINER=`root`@`localhost` PROCEDURE `verificapagamento`(IN pinfcodigo INT, IN ppagcodigo INT, IN pvencodigo INT, IN pvalor DOUBLE) BEGIN DECLARE valorvenda DOUBLE; DECLARE somavalores DOUBLE; DECLARE msg VARCHAR(1000) DEFAULT "sem mensagem"; DECLARE excecao SMALLINT DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET excecao = 1; SELECT venvalortotal INTO valorvenda FROM venda WHERE vencodigo = pvencodigo; SELECT COALESCE(SUM(valor),0) INTO somavalores FROM informaformapgto WHERE vencodigo = pvencodigo; IF somavalores > valorvenda THEN SET mensagem = "Valor não confere"; SELECT mensagem AS msg; ELSE START TRANSACTION; INSERT INTO informaformapgto(infcodigo, pagcodigo, vencodigo, valor) VALUES (pinfcodigo, ppagcodigo, pvencodigo, pvalor); IF excecao = 1 THEN SET mensagem = "Erro na gravação"; ROLLBACK; ELSE SET mensagem = "Gravado com sucesso"; COMMIT; END; SELECT mensagem AS msg; END IF; END
Não testei o código. Por favor informe o resultado.
-
Movendo para o forum de PHP
-
em
insert into pedido_detalhe (270,1,1);
O correto seria
insert into pedido_detalhe (valor, curso, pedido)
values (270,1,1);
-
Tente restaurar usando o prompt de comando.
digite mysql -uroot -p;
informe a senha
em mysql>
digite source info16br;
aguarde a restauração
digite quit para encerrar o mysql
-
WHERE data=DATE(NOW())
-
WEEK ( data_trabalho ,1) = WEEK( NOW( ), 1 )
-
Proceda usando LIKE '%expressão1%expressao2%' ou mudando a forma de busca.
Em vez de usar o LIKE, que da forma que você quer vai entrar em TABLE SCAN, use indexação por FULLTEXT.
Com FULLTEXT você conseguirá fazer a pesquisa do jeito que você quer e deforma mais eficaz.
Até a versão 5.6 o FULLTEXT só funcionava com engine MyISAM. A partir da versão 5.6 ele passou a funcionar em tabelas INNODB.
Leia sobre FULLTEXT no manual de sua versão do MySQL.
(Resolvido) Ajuda numa consulta SQL
em MySQL
Postado
Faça assim: