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 2 anni fa
Clear
Clear
21
modificato 2 anni 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 2 anni 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 2 anni fa
zeropingas
modificato 2 anni 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 2 anni fa
Giusta osservazione Gianni! Proprio qualche settimana fa mi ero imbattuto in questo problema.zeropingas 2 anni fa
X 1 X
Effettua l'accesso o registrati per rispondere a questa domanda