Insert

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

基本的な INSERT

INSERT INTO users (name, email) VALUES (?, ?)
mysql.Insert("users").
    Columns("name", "email").
    Values(mysql.Arg("John Doe"), mysql.Arg("john@example.com"))

複数行の INSERT

INSERT INTO users (name, email) VALUES 
    (?, ?),
    (?, ?)
mysql.Insert("users").
    Columns("name", "email").
    Values(mysql.Arg("John Doe"), mysql.Arg("john@example.com")).
    Values(mysql.Arg("Jane Smith"), mysql.Arg("jane@example.com"))

INSERT IGNORE

INSERT IGNORE INTO users (name, email) VALUES (?, ?)
mysql.Insert("users").
    Ignore().
    Columns("name", "email").
    Values(mysql.Arg("John Doe"), mysql.Arg("john@example.com"))

ON DUPLICATE KEY UPDATE

INSERT INTO users (id, name, email) VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE 
    name = VALUES(name),
    email = VALUES(email)
mysql.Insert("users").
    Columns("id", "name", "email").
    Values(mysql.Arg(1), mysql.Arg("John Doe"), mysql.Arg("john@example.com")).
    OnDuplicateKeyUpdate().
    Set("name", mysql.F("VALUES", mysql.Quote("name"))).
    Set("email", mysql.F("VALUES", mysql.Quote("email")))

INSERT SELECT

INSERT INTO backup_users (name, email)
SELECT name, email FROM users WHERE active = ?
selectQuery := mysql.Select("name", "email").
    From("users").
    Where(mysql.Quote("active").EQ(mysql.Arg(true)))

mysql.Insert("backup_users").
    Columns("name", "email").
    Query(selectQuery)

REPLACE INTO

REPLACE INTO users (id, name, email) VALUES (?, ?, ?)
mysql.Replace("users").
    Columns("id", "name", "email").
    Values(mysql.Arg(1), mysql.Arg("John Doe"), mysql.Arg("john@example.com"))

JSON データの INSERT

INSERT INTO users (name, metadata) VALUES (?, ?)
metadata := map[string]interface{}{
    "age": 30,
    "city": "Tokyo",
}

metadataJSON, _ := json.Marshal(metadata)

mysql.Insert("users").
    Columns("name", "metadata").
    Values(mysql.Arg("John Doe"), mysql.Arg(string(metadataJSON)))

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