Update

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

基本的な UPDATE

UPDATE users SET name = ?, updated_at = ? WHERE id = ?
mysql.Update("users").
    Set("name", mysql.Arg("Updated Name")).
    Set("updated_at", mysql.Arg(time.Now())).
    Where(mysql.Quote("id").EQ(mysql.Arg(1)))

複数条件での UPDATE

UPDATE users SET active = ? 
WHERE created_at < ? AND last_login IS NULL
mysql.Update("users").
    Set("active", mysql.Arg(false)).
    Where(
        mysql.Quote("created_at").LT(mysql.Arg(time.Now().AddDate(0, -6, 0))),
        mysql.Quote("last_login").IsNull(),
    )

JOIN を使用した UPDATE

UPDATE users u
JOIN user_profiles p ON u.id = p.user_id
SET u.status = ?
WHERE p.verified = ?
mysql.Update("users").As("u").
    Join("user_profiles").As("p").
    On(mysql.Quote("u", "id").EQ(mysql.Quote("p", "user_id"))).
    Set("u.status", mysql.Arg("verified")).
    Where(mysql.Quote("p", "verified").EQ(mysql.Arg(true)))

LIMIT 付きの UPDATE

UPDATE users SET processed = ? 
WHERE processed = ? 
ORDER BY created_at ASC
LIMIT ?
mysql.Update("users").
    Set("processed", mysql.Arg(true)).
    Where(mysql.Quote("processed").EQ(mysql.Arg(false))).
    OrderBy(mysql.Quote("created_at").Asc()).
    Limit(100)

計算式を使用した UPDATE

UPDATE products SET price = price * ?
WHERE category = ?
mysql.Update("products").
    Set("price", mysql.Quote("price").Mul(mysql.Arg(1.1))).
    Where(mysql.Quote("category").EQ(mysql.Arg("electronics")))

JSON フィールドの UPDATE

UPDATE users SET metadata = JSON_SET(metadata, '$.last_login', ?)
WHERE id = ?
mysql.Update("users").
    Set("metadata", mysql.F("JSON_SET", 
        mysql.Quote("metadata"), 
        mysql.Arg("$.last_login"), 
        mysql.Arg(time.Now()))).
    Where(mysql.Quote("id").EQ(mysql.Arg(1)))

CASE 文を使用した UPDATE

UPDATE users SET status = 
    CASE 
        WHEN last_login > ? THEN 'active'
        WHEN last_login > ? THEN 'inactive'
        ELSE 'dormant'
    END
mysql.Update("users").
    Set("status", mysql.Case().
        When(mysql.Quote("last_login").GT(mysql.Arg(time.Now().AddDate(0, 0, -30))), mysql.Arg("active")).
        When(mysql.Quote("last_login").GT(mysql.Arg(time.Now().AddDate(0, -3, 0))), mysql.Arg("inactive")).
        Else(mysql.Arg("dormant")))

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