Delete

Bob を使用した MySQL の DELETE クエリの例を示します。

基本的な DELETE

DELETE FROM users WHERE id = ?
mysql.Delete("users").
    Where(mysql.Quote("id").EQ(mysql.Arg(1)))

複数条件での DELETE

DELETE FROM users 
WHERE active = ? AND created_at < ?
mysql.Delete("users").
    Where(
        mysql.Quote("active").EQ(mysql.Arg(false)),
        mysql.Quote("created_at").LT(mysql.Arg(time.Now().AddDate(0, -1, 0))),
    )

JOIN を使用した DELETE

DELETE u FROM users u
JOIN user_profiles p ON u.id = p.user_id
WHERE p.status = ?
mysql.Delete("users").As("u").
    Join("user_profiles").As("p").
    On(mysql.Quote("u", "id").EQ(mysql.Quote("p", "user_id"))).
    Where(mysql.Quote("p", "status").EQ(mysql.Arg("inactive")))

LIMIT 付きの DELETE

DELETE FROM logs 
WHERE created_at < ?
ORDER BY created_at ASC
LIMIT ?
mysql.Delete("logs").
    Where(mysql.Quote("created_at").LT(mysql.Arg(time.Now().AddDate(0, -1, 0)))).
    OrderBy(mysql.Quote("created_at").Asc()).
    Limit(1000)

IN 句を使用した DELETE

DELETE FROM users WHERE id IN (?, ?, ?)
mysql.Delete("users").
    Where(mysql.Quote("id").In(mysql.Arg(1), mysql.Arg(2), mysql.Arg(3)))

サブクエリを使用した DELETE

DELETE FROM users 
WHERE id IN (
    SELECT user_id FROM user_sessions 
    WHERE last_activity < ?
)
subquery := mysql.Select("user_id").
    From("user_sessions").
    Where(mysql.Quote("last_activity").LT(mysql.Arg(time.Now().AddDate(0, -1, 0))))

mysql.Delete("users").
    Where(mysql.Quote("id").In(subquery))

複数テーブルからの DELETE

DELETE u, p FROM users u
JOIN user_profiles p ON u.id = p.user_id
WHERE u.active = ?
mysql.Delete("users", "user_profiles").
    From("users").As("u").
    Join("user_profiles").As("p").
    On(mysql.Quote("u", "id").EQ(mysql.Quote("p", "user_id"))).
    Where(mysql.Quote("u", "active").EQ(mysql.Arg(false)))

条件付きの一括削除

DELETE FROM audit_logs 
WHERE created_at < ? 
  AND level = 'DEBUG'
ORDER BY created_at ASC
LIMIT ?
mysql.Delete("audit_logs").
    Where(
        mysql.Quote("created_at").LT(mysql.Arg(time.Now().AddDate(0, -3, 0))),
        mysql.Quote("level").EQ(mysql.Arg("DEBUG")),
    ).
    OrderBy(mysql.Quote("created_at").Asc()).
    Limit(10000)

これらの例は、Bob を使用して MySQL で実行可能な様々な DELETE クエリパターンを示しています。