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

mysqlを使用してVARCHAR列で数字を使用しないようにするにはどうすればよいですか?

    CHECKを探しています SQL演算子。残念ながら、これはどのMySQLエンジンでもサポートされていません。

    ただし、SQLトリガーを使用することで回避策があります。詳細については、MySQLのCHECK制約を参照してください。動作しない および http://dev.mysql.com/doc/ refman / 5.7 / en / create-trigger.html

    したがって、私にとって(MySQL 5.5以降が必要)、次のスニペットが機能しました:

    use test;
    
    CREATE TABLE user (
      `user_id` INT NOT NULL,
      `username` VARCHAR(50) NULL,
      PRIMARY KEY (`id`)
    );
    
    delimiter //
    
    create trigger trg_trigger_test_ins before insert on user
    for each row
    begin
        if new.username REGEXP '^[0-9]*$' then
            signal sqlstate '45000' set message_text = 'Invalid username containing only digits';
        end if;
    end
    //
    
    delimiter ;
    
    insert into user values(1, '1234');
    

    最後のINSERT ステートメントはError Code: 1644. Invalid username containing only digits

    insert into `test`.`user` values(1, 'a1234');
    

    正しく挿入されました。

    注意: Throw MySQLトリガーのエラー signalで アイデア。

    この例はINSERTに対してのみ保護することに注意してください s。安全を確保したい場合は、UPDATEにトリガーを実装する必要もあります。 。



    1. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:

    2. ノードjsmysqlクエリのスラッシュを削除します

    3. 存在する場合は1つの値を選択し、存在しない場合は別の値を選択します

    4. MariaDB LTRIM()とLTRIM_ORACLE():違いは何ですか?