Table des matières

Convertir une colonne timestamp Unix en DATETIME

ALTER TABLE sujet ADD tmpswap DATETIME;
UPDATE sujet SET tmpswap = FROM_UNIXTIME(ancien);
ALTER TABLE sujet DROP ancien;
ALTER TABLE sujet CHANGE tmpswap ancien DATETIME;

(sujet : nom de la table ; ancien : nom de la colonne initialement en (big)int)

Convertir une colonne VARCHAR pour dates au format fr (d/m/Y) en DATE

ALTER TABLE sujet ADD tmpswap DATE;
UPDATE sujet SET tmpswap = STR_TO_DATE(ancien, '%d/%m/%Y');
ALTER TABLE sujet DROP ancien;
ALTER TABLE sujet CHANGE tmpswap ancien DATE;

(sujet : nom de la table ; ancien : nom de la colonne initialement en varchar)

Pourquoi utiliser le type DATE ?

Mapper des valeurs en d'autres lors d'une requête

On peut aisément remplacer un CASE comme celui-ci :

SELECT CASE <in>
    WHEN 'FT' THEN 'Fiche Technique'
    WHEN 'PV' THEN 'Procès Verbal'
    WHEN 'NF' THEN 'Norme'
    ELSE 'Valeur par défaut'
END;

Par :

COALESCE(
    ELT(
        FIELD(<in>, 'FT', 'PV', 'NF'),
        'Fiche Technique', 'Procès Verbal', 'Norme'
    ),
    'valeur par défaut'
)

C'est l'"équivalent" PHP de :

$out = str_replace(array('FT', 'PV', 'NF'), array('Fiche Technique', 'Procès Verbal', 'Norme'), $in);
# ou, mieux :
$out = ['FT' => 'Fiche Technique', 'Procès Verbal', 'NF' => 'Norme'][$in];

Par contre : ça revient éventuellement à "réinventer" le type ENUM

Désactiver (temporairement) les clés étrangères

SET FOREIGN_KEY_CHECKS=0;
 
-- les différentes opérations sql à exécuter en ignorant les clés étrangères
 
SET FOREIGN_KEY_CHECKS=1;

Les timezones et comment régler l'heure

Déplacé sur http://www.julp.fr/blog/posts/5-les-timezones-et-comment-regler-l-heure

Optimisation : éviter des SELECT inutiles

Déplacé sur http://www.julp.fr/blog/posts/6-optimisation-eviter-des-select-inutiles