Programação

Este é um artigo rapido, porém contém algumas sugestões que podem melhorar significativamente sua produtividade ao fazer código. Além de consultoria, meu foco é desenvolvimento backend, e programação em PHP, mas todas as ferramentas aqui que eu uso servem para mais de uma linguagem, e são gratuitas. É importante ressaltar que o fato de ser opensource não quer dizer que eu apenas sou um entusiasta de software livre: eu uso essas ferramentas porque, pra mim, elas são boas, e mesmo se eu encontrasse uma ferramenta comercial que fosse melhor e mais flexível do que estas em não me importaria em pagar. A questão é que para IDEs, ao menos quando não envolve pesadamente questões mais visuais ou que tenham que ser extremamente fáceis para o usuário, nenhuma outra IDE me faz mudar de ideia de forma consistemte.

Leia mais:Melhore sua produtividade ao fazer código
CREATE  TABLE IF NOT EXISTS `jos_current_timestamp_workaround` (
  `id` INT(11) NOT NULL AUTO_INCREMENT ,
  `title` VARCHAR(255) NULL DEFAULT NULL COMMENT 'your fields here...' ,
  `hits` INT(11) NULL DEFAULT NULL COMMENT 'See J!API JTable' ,
  `ordering` INT(11) NULL DEFAULT NULL COMMENT 'See J!API JTable' ,
  `checked_out` INT(11) NULL COMMENT 'See J!API JTable' ,
  `checked_out_time` DATETIME NULL COMMENT 'See J!API JTable' ,
  `publish_up` DATETIME NULL COMMENT 'See J!API' ,
  `publish_down` DATETIME NULL COMMENT 'See J!API' ,
  `published` TINYINT NULL DEFAULT 1 COMMENT 'See J!API ' ,
  `params` TEXT NULL COMMENT 'See J!API JParameter...' ,
  `created` DATETIME NULL COMMENT 'See tigger' ,
  `updated` DATETIME NULL COMMENT 'See tigger' ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;

DELIMITER $$

DROP TRIGGER IF EXISTS `jos_ctw_created` $$
CREATE TRIGGER jos_ctw_created BEFORE INSERT ON `jos_current_timestamp_workaround` FOR EACH ROW SET
NEW.created = IFNULL(NEW.created, NOW()),
NEW.updated = IFNULL(NEW.updated, '0000-00-00 00:00:00')$$


DROP TRIGGER IF EXISTS `jos_ctw_updated` $$
CREATE TRIGGER jos_ctw_updated BEFORE UPDATE ON `jos_current_timestamp_workaround` FOR EACH ROW SET
NEW.updated = CASE
                  WHEN NEW.updated IS NULL THEN OLD.updated
                  WHEN NEW.updated = OLD.updated THEN NOW()
                  ELSE NEW.updated
              END,
    NEW.updated= IFNULL(NEW.updated, OLD.updated)$$

#1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

O Código acima é um exemplo de código que você pode testar para resolver seu problema. Se você chegou nesta página é porque provavelmente tentou usar vários CURRENT_TIMESTAMP e descobriu que o MySQL exibe esse erro.

O que esse exemplo faz?
Este exemplo além de conter alguns campos padrões do Joomla, em vez de usar o CURRENT_TIMESTAMP, usa Trigger (gatilhos) do MySQL que são executados antes de inserir um novo dado, e ao atualizar este dado. Como você pode perceber, ele por exemplo não comete o erro de dizer que foi atualizado quando é criado.

Short link: http://goo.gl/ZjsiM