MySQL

Général

Rechercher les doublons dans une table

SELECT DISTINCT *
FROM `table` t1
WHERE EXISTS (
    SELECT *
    FROM `table` t2
    WHERE
        t1.id <> t2.id
    AND t1.champ1 = t2.champ1
)
ORDER BY t1.champ1

Rechercher des entrées qui ont plusieurs relations

SELECT
	sub.IND_ID, sub.IND_NOM_USUEL, sub.IND_PRENOM_USUEL,
	sub.CAT_ID
FROM (
    SELECT
		ind.IND_ID, ind.IND_NOM_USUEL, ind.IND_PRENOM_USUEL,
        cat.CAT_ID
    FROM
        INDIVIDU ind
    LEFT JOIN J_CAT_IND jci ON jci.IND_ID = ind.IND_ID
    LEFT JOIN CATEGORIE_USAGER cat on cat.CAT_ID = jci.CAT_ID
    WHERE
        cat.CAT_ID IN ('i_etu', 'i_ens_vac', 'x_doc_cont', 'x_autres')
) AS sub
GROUP BY 
	sub.IND_ID
HAVING COUNT(*) >= 2
ORDER BY
	sub.IND_NOM_USUEL ASC,
	sub.IND_PRENOM_USUEL ASC

Manipuler un champ binaire

UPDATE TABLE
SET FIELD = FIELD - 8
WHERE FIELD & 8 = 8

Dump

Exclure des tables

mysqldump <schema> --ignore-table=schema.table1

Exclure les données de tables

mysqldump <schema> --no-data > db-structure.sql
mysqldump <schema> --no-create-info --ignore-table=schema.table1 > db-data.sql
cat db-structure.sql > db-all.sql && cat db-data.sql >> db-all.sql

Ne pas perturber la réactivité de la base

mysqldump <schema> --single-transaction --quick

Accélérer le dump

mysqldump <schema> --max_allowed_packet=512M

Supprimer les données d'une table dans un dump SQL

$ grep -n 'Table structure\|Dumping data for table' dump.sql 
19:-- Table structure for table `t1`
37:-- Dumping data for table `t1`
47:-- Table structure for table `t2`
66:-- Dumping data for table `t2`
76:-- Table structure for table `t3`
96:-- Dumping data for table `t3`

Pour supprimer les données de la table t2 :

$ sed '66,75 d' dump.sql > cleandump.sql

Divers

Construire un fichier CSV avec les résultats d'une requête

$ mysql -u user -p db < req.txt | sed 's/\t/;/g' > out.csv