Inizializzazione automatica di una colonna di tipo DATE in MySQL

Ho creato una tabella da phpmyadmin in questo modo:

CREATE TABLE `news` (
   `id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
   `autore` VARCHAR(255) NOT NULL ,
   `data` DATE NOT NULL ,
   `titolo` VARCHAR(255) NOT NULL,
   `descrizione rapida` VARCHAR(255) NOT NULL,
   `testo` LONGTEXT NOT NULL,
   PRIMARY KEY ( `id` )
) ENGINE = MYISAM

Questa tabella mi serve, come penso abbiate immaginato, a creare un sistema di news. Il problema è che vorrei che nella pagina dove si inseriscono i dati in questa tabella, non devi scrivere nessuna data, ma quando i campi della tabella si riempiono, data (di tipo DATE) si compila da sola con la data giusta.

Spero di essermi spiegato.. Qualcuno sarebbe in grado di aiutarmi?

inviato un anno fa
Clear
Clear
21
modificato un anno fa
Gianni Tomasicchio
X 0 X

Con MySQL 5.6 è possibile specificare CURRENT_TIMESTAMP come valore di default per le colonne di tipo DATE:

CREATE TABLE `news` (  
   ...
   `data` DATETIME DEFAULT CURRENT_TIMESTAMP
   ...
)

In MySQL 5.5 e precedenti solo le colonne di tipo TIMESTAMP accettano CURRENT_TIMESTAMP come valore di default. Poiché una colonna TIMESTAMP può memorizzare solo date successive al 1 gennaio 1970, se questa restrizione non è un problema è possibile preferire una colonna TIMESTAMP ad una DATETIME.

Per simulare l'inizializzazione automatica di una colonna di tipo DATETIME anche in MySQL 5.5 si può definire un trigger di questo tipo:

CREATE TRIGGER inizializza_news BEFORE INSERT ON `news` 
FOR EACH ROW SET NEW.data = IFNULL(NEW.data, NOW());
risposto un anno fa
Gianni Tomasicchio
X 1 X X

Per fortuna da MySQL 5.6 si può inserire un campo che sia impostato di default con il datetime attuale. Ecco come:

data DATETIME DEFAULT CURRENT_TIMESTAMP

Il tuo comando di creazione della tabella diventerà quindi:

CREATE TABLE `news` (
   `id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
   `autore` VARCHAR(255) NOT NULL ,
   `data` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL ,
   `titolo` VARCHAR(255) NOT NULL,
   `descrizione rapida` VARCHAR(255) NOT NULL,
   `testo` LONGTEXT NOT NULL,
   PRIMARY KEY ( `id` )
) ENGINE = MYISAM

Fonte

risposto un anno fa
zeropingas
modificato un anno fa
Quanto detto è vero solo per MySQL 5.6 e successivi. Fino a MySQL 5.5 solo le colonne di tipo TIMESTAMP accettano DEFAULT CURRENT_TIMESTAMP.Gianni Tomasicchio un anno fa
Giusta osservazione Gianni! Proprio qualche settimana fa mi ero imbattuto in questo problema.zeropingas un anno fa
X 1 X
Effettua l'accesso o registrati per rispondere a questa domanda