Ir para conteúdo
Fórum Script Brasil

Denis Courcy

Moderadores
  • Total de itens

    3.089
  • Registro em

  • Última visita

Tudo que Denis Courcy postou

  1. Denis Courcy

    Problema no MySQL

    Oi, 'TNT'! .frm é o arquivo que contém a estrutura de sua tabela. O MySQl está informando que este arquivo está danificado e que ele não consegue alterá-lo. Correção: 1 Crie outro banco, 2 Neste novo banco, crie a estrutura da tabela que está com defeito no outro banco, 3 Copie os dados da tabela antiga para a tabela nova. (Até este ponto outros usuários podem estar usando o banco) 4 Certifique-se que você está em "stand alone", ou seja, que ninguém mais está usando o banco, 5 Verifique o disco quanto a defeitos de bad block. 6 Dê um drop na tabela defeituosa 7 Copie a tabela do banco novo no banco correto, 8 Dê um drop no banco novo. 9 Libere o banco para uso.
  2. OI Tiago! Se sua tabela possui poucos registros use assim: SELECT * FROM minhatabela WHERE STR_TO_DATE(CONCAT(`minhadata`, ' ', minhahora), '%Y-%m-%d %H:%i:%s') >= DATE(SUBDATE(NOW(), INTERVAL 12 HOUR)); Se a tabela for maior crie um novo campo com formato datetime, atualize a data e hora para este novo campo Exclua os campos data e hora antigos e faça a consulta assim: SELECT * FROM minhatabela WHERE `minhanovadatahora` >= DATE(SUBDATE(NOW(), INTERVAL 12 HOUR)); Esta segunda forma, se você criar um índice para o novo campo, agilizará a resposta a sua consulta.
  3. Oi, Alex! Se você tiver dificuldade crie uma storage procedure, passe os valores em values como parametros e execute a operação SQL normalmente.
  4. Este é um caso de responder Sim e Não. Sim se o atributo escolhido para estar na cláusula where puder ser usado por algum índice desta tabela. Ou se a tabela possuir uma quantidade pequena de registros. Não se o atributo usado na cláusula where não puder ser usado por indices desta tabela, ou se a tabela possuir uma grande quantidade de registros. Quando se usa atributos na cláusula where o motor do MySQL tenta usar um índice para agilizar resposta a consulta. Quando a tabela possui muitos registros e o motor do MySQL não consegue usar um índice para agilizar a resposta a consulta então a consulta gera um TABLE SCAN, que é uma varredura completa registro a registro na tabela, do´primeiro ao último registro, o que pode demorar muito para dar resposta. Pense bem nos atributos e condições que você vai colocar na passagem de parâmetros para esta procedure.
  5. Oi, 'rafaeldorazio' PREPARE M_stmt FROM @meuSQL; -- cria uma área na memória e transforma a string em @meuSQL em comando EXECUTE M_stmt; -- Executa o comando gerado na área criada DEALLOCATE PREPARE stmt; -- Limpa e Libera a memória da área alocada Um pouco sim. Mas nada perceptível com as máquinas atuais.
  6. Oi, 'Carlos Rocha' Na query SELECT GROUP_CONCAT(pr.nome, CONCAT(' <?=formata_moeda(pp.preço);?><BR>')) Produtos, sum(pp.preço) Preco_Total, fo.nome Fornecedor FROM produtopreco pp inner join fornecedores fo ON pp.idFornecedor = fo.id inner join produtos pr ON pp.idProduto = pr.id where pp.idfornecedor = fo.id GROUP BY fo.nome Se pp.preço é atributo da tabela pp, então o concat CONCAT(' <?=formata_moeda(pp.preço);?><BR>') está escrito errado. O correto é CONCAT(' <?=formata_moeda(',pp.preço,');?><BR>'). Ou seja falta virgulas entre pp.preço para que o concat possa trazer o conteúdo do atributo. Quanto a segunda parte, ainda não sei como resolver.
  7. Oi, 'rafaeldorazio' O que você está pedindo é um gerador de query dinâmica. Faça assim: DELIMITER $$; DROP PROCEDURE IF EXISTS `sp_select_delete_funcionario` $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_select_delete_funcionario`(IN sp_query VARCHAR(100)) BEGIN SET @meuSQL = CONCAT('SELECT * FROM Funcionario WHERE ', sp_query); PREPARE M_stmt FROM @meuSQL; EXECUTE M_stmt; DEALLOCATE PREPARE stmt; END $$ DELIMITER; Para executar esta SP use:call sp_select_delete_funcionario('fun_nome="Rafael Fernandes" ');
  8. Oi, 'alexclima' Este é um exemplo em SQL de como funciona este tipo de insert. SET AUTOCOMMIT=0; START TRANSACTION; INSERT INTO pessoa(nome_pessoa, senha_pessoa, cpf_pessoa, rg_pessoa) VALUES('teste1', 'senha', '123', '456'); INSERT INTO Certificados(nome_certificado, lugar_certificado, idPessoa) values('cert1', 'rj', (select LAST_INSERT_ID())); COMMIT; SET AUTOCOMMIT=1;
  9. Oi, 'alexclima' São dois inserts distintos. Primeiro insira os dados na tabela pai (Pessoa), depois insira os dados na tabela filha (Certificados).
  10. Oi, 'wilhaods' Na tabela aluno (veja abaixo) Você não definiu o atributo matricula como primary key. Por isso a tabela inscreve não consegue ser gerada. ela precisa da chave para criar a foreign key que refrencia alunos a matricula.
  11. Oi, 'thiagojpa' Na sua consulta Ficou faltando a cláusula FROM e o atributo dscr que você quer listado. Tente assim:SELECT distinct fbai_erro, fmun, fnum, locf_erro, dscr FROM Bairros;
  12. Oi, 'Stoma' ! Existe uma formaa, sim. Mas você perderá o benefício odo uso de índices que acelerariam a resposta de sua consulta. A forma que vou expor abaixo SEMPRE gerará um TABLE SCAN, ou seja, uma varredura completa na tabela. SELECT * FROM usuarios WHERE "teste" IN (coluna1, coluna2) = A segunda forma que você postou é a forma correta de proceder.
  13. Oi, 'PhoenixWings' Use SET SET FOREIGN_KEY_CHECKS=0 antes de proceder o update. Este comando parará a checagem de constraint e permitirá que você ajuste seu banco. Ao final do serviço você deve voltar o comando ao seu estado normal com SET FOREIGN_KEY_CHECKS=1Preste muita atenção em suas modificações enquanto o banco estiver com a checagem desligada ou ele não vai conseguir voltar por falha na integridade referencial.
  14. Oi, 'cay0' Use DECLARE <minhavariavel> <tipodavariavel> [DEFAULT <x>] Onde: DECLARE é a cláusula de declaração da variável <minhavariavel> é o nome da variável que quero usar <tipodavariavel> é o tipo da variável (INTEGER, VARCHAR, etc) DEFAULT é a cláusula opcional para inicialização automática da variável no momento de sua criação e <x> é o valor de inicialização da variável.
  15. Oi, Marcelo! como definição posso dizer que função (única) de uma PK é ligar uma tabela a outra. Criar pk com chaves complexas como a sua é perigoso por causa deste tipo de problema que você está enfrentando. Para criar uma PK auto_increment sem estragar seus dados faça assim: 1º passo desctruir a pk existente e criar um índice único com a cahe da pk atual para que seus programas não se percam. ALTER TABLE tabela DROP PRIMARY KEY, ADD UNIQUE KEY nome_do_indice (campo); 2º passo criar um novo atributo auto incrementavel e uma nova PK para este atributo ALTER TABLE tabela ADD COLUMN nome_da_coluna INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (nome_da_coluna);
  16. Oi, 'calebeaires'! Esta forma de representção é conhecida como CROSS-REFERENCE. Você obtém este resultado da seguinte forma: SELECT PRODUTO, sum(IF(Vendedor='A', VALOR, 0)) AS Vendedor_A, sum(IF(Vendedor='B', VALOR, 0)) AS Vendedor_B FROM tabela Group by produto;
  17. Oi, 'João Carlos C.' Faça assim: SELECT DISTINCT * FROM EMPRESA_IDENTIDADE ei JOIN EMPRESA e ON ei.EMP_COD = e.EMP_COD WHERE e.EMP_CATEGORIA = 'F' AND e.EMP_PERMISSAO = 'C' AND ei.EMP_I_DATAMOD = (SELECT max(ei2.EMP_I_DATAMOD) FROM EMPRESA_IDENTIDADE ei2 WHERE ei2.EMP_COD = e.EMP_COD) Este código tem uma falha. Se houver datas e horas iguais para um mesmo ei2.EMP_COD ele trará duplicado, pois não saberá qual o maior.
  18. Oi, 'jguidi' Para poder responder sua pergunta fiz o seguinte exemplo: CREATE TABLE `teste` ( `id` tinyint(1) default NULL, `Valor` varchar(50) default NULL ) ENGINE=MyISAM INSERT INTO `teste`(id, valor) values (1, "1,31,12,435"),(2,"1,22,43,67"),(3,"43,12"); Sua pesquisa fica assim:select id from teste where FIND_IN_SET('1', valor); Retorna id=1 e id=2 select id from teste where FIND_IN_SET('12', valor);Retorna id=1 e id=3
  19. Para remoção de chave estrangeira a sintaxe é:DROP FOREIGN KEY fk_symbol Nomes de chaves são importantes para uma hora destas. Quando eu criei a chave estrangeira eu dei um nome a ela. Lembra? CONSTRAINT `FK_MY_CONTACTS001` FOREIGN KEY (`idjob`) REFERENCES `jobs` (`idjob`) ON DELETE CASCADE ON UPDATE CASCADE; `FK_MY_CONTACTS001` é o nome que dei a esta chave. para eliminá-la use: ALTER TABLE my_contacts DROP FOREIGN KEY `FK_MY_CONTACTS001`; Nota: A chave deve ser eliminada antes de eliminar o atributo.
  20. Oi, 'PhoenixWings' Você inseriu o código naquela tabela que enviei? Se sim então ela já tinha a constraint e é por isso que está dando erro. removi a constrint e o atributo e depois apliquei a atualização de tabela que passei no post anterior e funcionou sem erros. Faz toda a diferença. Constraints só funcionam em tabelas do tipo Innodb.
  21. Oi, 'jubeneve' pelo que você relatou o problema está em seu direito de acesso na máquina servidora. Seu usuário necessita ter direitos de SUPER para poder criar trigger. Fonte: seção 18.1. CREATE TRIGGER Syntax (manual Mysql Versão 5.0 em pdf)
  22. Oi, 'JonasFloripa' Qual atributo na tabela totalhoras realiza a ligação com a tabela candidatos?
  23. Então faça assim: ALTER TABLE my_contacts ( ADD COLUMN idjob INT(11) NOT NULL DEFAULT 0, ADD CONSTRAINT `FK_MY_CONTACTS001` FOREIGN KEY (`idjob`) REFERENCES `jobs` (`idjob`) ON DELETE CASCADE ON UPDATE CASCADE;
  24. Oi, 'PhoenixWings' Agora já sei o que você quer. Faça assim: CREATE TABLE jobs ( idjob INT(11) NOT NULL AUTO_INCREMENT, profession VARCHAR(20), PRIMARY KEY (idjob) ); CREATE TABLE my_contacts ( id_contact INT NOT NULL AUTO_INCREMENT, last_name varchar(30) , first_name varchar(20) , email varchar(50) , gender char(1), birthday date , idjob INT(11) NOT NULL DEFAULT 0, location varchar(50), status varchar(20), interests varchar(100), seeking varchar(100), city VARCHAR(20), state CHAR(2), PRIMARY KEY(id_contact), CONSTRAINT `FK_MY_CONTACTS001` FOREIGN KEY (`idjob`) REFERENCES `jobs` (`idjob`) ON DELETE CASCADE ON UPDATE CASCADE ); Veja idjob em my_contacts ele tem a mesma estrutura que idjob em jobs. Quando falei em sinalização falei no sentido de que um número inteiro pode ser representado no conjunto dos numeros naturais com a aplicação da cláusula UNSIGNED. Sem esta cláusula ele pertencerá ao conjunto dos inteiros. Matéria do 6º ano 1º grau - Conjuntos Numéricos.
×
×
  • Criar Novo...