Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara mencegah penggunaan digit dalam kolom VARCHAR menggunakan mysql?

Anda mencari CHECK operator SQL. Sayangnya, yang satu ini tidak didukung oleh salah satu mesin MySQL.

Namun, ada solusi dengan memanfaatkan pemicu SQL. Anda dapat menemukan informasi lebih lanjut di CHECK kendala di MySQL adalah tidak berfungsi dan http://dev.mysql.com/doc/ refman/5.7/en/create-trigger.html

Jadi, bagi saya (diperlukan MySQL 5.5+), cuplikan berikut berfungsi:

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 terakhir pernyataan memunculkan Error Code: 1644. Invalid username containing only digits sementara

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

telah dimasukkan dengan benar.

NB:Beberapa pujian juga untuk Throw kesalahan dalam pemicu MySQL pada signal ide.

Perhatikan bahwa contoh ini hanya melindungi dari INSERT s. Jika Anda ingin aman, Anda juga perlu menerapkan pemicu pada UPDATE .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zen cart:Saya ingin menanyakan dari kategori tertentu nama, harga, gambar, deskripsi, dan atribut produknya

  2. com.mchange.v2.resourcepool.CannotAcquireResourceException:ResourcePool tidak dapat memperoleh sumber daya dari pabrik atau sumber utamanya

  3. Bagaimana cara menguji apakah driver JDBC diinstal dengan benar dan apakah DB dapat terhubung?

  4. Buat tabel SQL sebaris dengan cepat (untuk gabungan kiri yang tidak termasuk)

  5. Apa cara terbaik untuk memigrasikan Django DB dari SQLite ke MySQL?