sql >> データベース >  >> RDS >> Mysql

MySQL:存在しない場所に挿入

    insert . . . select

    INSERT INTO USER (name, email)
        SELECT 'John', '[email protected]'
        WHERE NOT EXISTS
            (SELECT id FROM USER WHERE email = '[email protected]');
    

    私はこれを次のように書きます:

    INSERT INTO USER (name, email)
        SELECT name, email
        FROM (SELECT 'John' as name, '[email protected]' as email) t
        WHERE NOT EXISTS (SELECT 1 FROM USER u WHERE u.email = t.email);
    

    ただし、より適切なアプローチは、データベースがデータを保護するように、一意のインデックスを挿入することです。

    create unique index idx_users_email on user(email);
    


    1. MySQL InnoDBは影響を受ける行のみをロックしますか?

    2. 説明に使用するデータ型は何ですか?

    3. UTF8のエンコーディングがロケールen_USと一致しません。選択したLC_CTYPE設定には、LATIN1のエンコードが必要です

    4. MySQLとMariaDB