1

firstmod と lastmod の両方が必要なテーブルがあります

firstmod は、行が作成されたときのタイムスタンプである必要があります。lastmod は、自身を現在の時刻に更新する必要があります。

これは私がこれまでに持っているものです..

CREATE  TABLE IF NOT EXISTS `SiteGen_JamesM_Live`.`PAGES` (
  `ID` INT(11) NOT NULL AUTO_INCREMENT ,
  `USER_ID` INT(11) NOT NULL ,
  `TITLE` VARCHAR(100) NOT NULL ,
  `HTML` LONGTEXT NOT NULL ,
  `FIRSTMOD` TIMESTAMP NOT NULL DEFAULT 0 ,
  `LASTMOD` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
  PRIMARY KEY (`ID`) )
ENGINE = InnoDB
AUTO_INCREMENT = 5
DEFAULT CHARACTER SET = latin1

そして、これは私が見返りに得るものです:

Executing SQL script in server
ERROR: Error 1067: Invalid default value for 'FIRSTMOD'
4

4 に答える 4

0

これを試して:

`FIRSTMOD` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ,
`LASTMOD` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,

そしてあなたの挿入物に

INSERT INTO PAGES (FIRSTMOD, LASTMOD) VALUES (NULL, NULL)

FIRSTMOD列は挿入時に有効なタイムスタンプを取得し、その後LASTMODは自動更新する必要があります。

于 2011-01-07T14:09:45.853 に答える
0

私は MySQL にあまり詳しくありませんが、回答するリスクがあります。

lastmod 列を定義する必要があると仮定します。

 `LASTMOD` TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP ,

DEFAULT を指定せずに。デフォルトは ON UPDATE 句を介して取得されます。

編集:

おっと、これらのことを危険にさらすべきではありません。マニュアルから:

現在のタイムスタンプをある列のデフォルト値にして、別の列の自動更新値にすることはできません。

于 2011-01-07T14:02:02.843 に答える
0

これを試して

CREATE TABLE IF NOT EXISTS `PAGES` (
  `ID` INT(11) NOT NULL AUTO_INCREMENT ,
  `USER_ID` INT(11) NOT NULL ,
  `TITLE` VARCHAR(100) NOT NULL ,
  `HTML` LONGTEXT NOT NULL ,
  `FIRSTMOD` datetime NOT NULL,  
  `LASTMOD` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
  PRIMARY KEY (`ID`) )
ENGINE = InnoDB
AUTO_INCREMENT = 5
DEFAULT CHARACTER SET = latin1 

挿入時にFIRSTMODを更新するトリガーを設定します

Create Trigger Insert_PAGES
  After INSERT On PAGES
  For Each Row
  Begin
   set new.FIRSTMOD = now();
  End

これは、レコードが作成されたときに firstmod = now() の時間を設定し、lastmod レコードに変更が加えられるたびに、現在の時間に自分自身を更新します

于 2011-01-07T14:26:12.587 に答える
0

テーブルには を含む列を 1 つだけ含めることができCURRENT_TIMESTAMPます。DEFAULT を使用するもの (挿入時) か、ON UPDATE を使用するもの (または両方の修飾子を 1 つの列に含めることもできます) を選択する必要があります。

両方を持つにはコツがありますが、文書化されていないため、信頼性も低くなります (実際、まだ機能するかどうかはわかりません)。

詳細はこちら: http://dev.mysql.com/doc/refman/5.5/en/timestamp.html

テーブル内の 1 つの TIMESTAMP 列に対して、現在のタイムスタンプをデフォルト値および自動更新値として割り当てることができます。現在のタイムスタンプを、列の初期化、自動更新値、またはその両方のデフォルト値にすることができます。現在のタイムスタンプをある列のデフォルト値にして、別の列の自動更新値にすることはできません

回避策として、BEFORE INSERT または BEFORE UPDATE トリガーを使用して、これらの値のいずれかを設定できます。

于 2011-01-07T14:04:34.053 に答える