Pouvez-vous m'aider à résoudre un problème? La tâche consiste à insérer un enregistrement dans la base de données MySQL. termes:
Les colonnes de clé de la table 'Netflow'. 'Mois' sont:
La chose est la question aussi rapidement que possible et si possible dans une requête.
Le texte de la requête actuelle est:
INSERT INTO `netflow`.`Month` (`Year`, `Month`, `Day`, `Hour`, `srcaddr`,`dstaddr`, `doctets`)
(
SELECT
YEAR( FROM_UNIXTIME( `unix_secs` ) ) AS `YEAR`,
MONTH( FROM_UNIXTIME( `unix_secs` ) ) AS `MONTH`,
DAYOFMONTH( FROM_UNIXTIME( `unix_secs` ) ) AS `DAY`,
HOUR( FROM_UNIXTIME( `unix_secs` ) ) AS `HOUR`,
`srcaddr` ,
`dstaddr` ,
`doctets`
FROM `netflow`.`raw`
WHERE `unix_secs` <= 1394179200
GROUP BY
`YEAR`,
`MONTH`,
`DAY`,
`HOUR`,
`srcaddr`,
`dstaddr`
)
ON DUPLICATE KEY UPDATE
...
si vous souhaitez modifier la valeur avec le nouveau, vous pouvez utiliser:
ON DUPLICATE KEY UPDATE
doctets = VALUES(doctets) ;
ou si vous souhaitez ajouter la nouvelle valeur à l'existant:
ON DUPLICATE KEY UPDATE
doctets = doctets + VALUES(doctets) ;
INSERT INTO `netflow`.`Month` (`Year`, `Month`, `Day`, `Hour`, `srcaddr`,`dstaddr`, `doctets`)
(
SELECT
YEAR( FROM_UNIXTIME( `unix_secs` ) ) AS `YEAR`,
MONTH( FROM_UNIXTIME( `unix_secs` ) ) AS `MONTH`,
DAYOFMONTH( FROM_UNIXTIME( `unix_secs` ) ) AS `DAY`,
HOUR( FROM_UNIXTIME( `unix_secs` ) ) AS `HOUR`,
`srcaddr` ,
`dstaddr` ,
`doctets`
FROM `netflow`.`raw`
WHERE `unix_secs` <= 1394179200
GROUP BY
`YEAR`,
`MONTH`,
`DAY`,
`HOUR`,
`srcaddr`,
`dstaddr`
)
ON DUPLICATE KEY UPDATE SET col_name1 = val1, col_name2 = val2
vous pouvez aussi utiliser REPLACE INTO
. Si la clé existe déjà, il mettra à jour le disque d'autre que cela insérera un nouvel enregistrement.
REPLACE INTO `netflow`.`Month` (`Year`, `Month`, `Day`, `Hour`, `srcaddr`,`dstaddr`, `doctets`)
(
SELECT
YEAR( FROM_UNIXTIME( `unix_secs` ) ) AS `YEAR`,
MONTH( FROM_UNIXTIME( `unix_secs` ) ) AS `MONTH`,
DAYOFMONTH( FROM_UNIXTIME( `unix_secs` ) ) AS `DAY`,
HOUR( FROM_UNIXTIME( `unix_secs` ) ) AS `HOUR`,
`srcaddr` ,
`dstaddr` ,
`doctets`
FROM `netflow`.`raw`
WHERE `unix_secs` <= 1394179200
GROUP BY
`YEAR`,
`MONTH`,
`DAY`,
`HOUR`,
`srcaddr`,
`dstaddr`
)