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

Menggunakan pemicu untuk memastikan data yang dimasukkan tidak melewati batas

Untuk jawaban yang cepat dan baik, Anda memerlukan lebih banyak hal daripada yang Anda berikan contoh data yang berfungsi misalnya

Pemicu ini akan memblokir setiap upaya untuk memasukkan jika room_size lebih kecil dari jumlah kursi.

Silakan baca sampai selesai di sana saya jelaskan, di mana Anda harus meletakkan beberapa pekerjaan

DELIMITER $$
CREATE TRIGGER check_roomsize_Before_Insert BEFORE insert on booked 
FOR EACH ROW
begin 
    if (SELECT SUM(booked_seats) + NEW.booked_seats FROM booked  WHERE room_id  = NEW.room_id  AND booked  = NEW.booked  GROUP BY room_id) 
        > (select room_size from rooms where rooms.room_id= new.room_id) then
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Roomsize too smal!';
    end if;
END$$
DELIMITER ;

Skema (MySQL v5.7)

create table rooms ( room_id int primary key,
   room_size int);

 create table booked (room_id int,
   booked datetime, booked_seats int, remaining_seats int,    CONSTRAINT fk_category
    FOREIGN KEY (room_id) 
        REFERENCES rooms(room_id));

INSERT INTO rooms VALUES ( 1,5);

DELIMITER $$
CREATE TRIGGER check_roomsize_Before_Insert BEFORE insert on booked 
FOR EACH ROW
begin 
    if (SELECT SUM(booked_seats) + NEW.booked_seats FROM booked  WHERE room_id  = NEW.room_id  AND booked  = NEW.booked  GROUP BY room_id) 
        > (select room_size from rooms where rooms.room_id= new.room_id) then
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Roomsize too smal!';
    end if;
END$$
DELIMITER ;

INSERT INTO booked VALUES (1,now(),3,2);
#INSERT INTO booked VALUES (1,now(),3,0);

Kueri #1

SELECT * FROM booked;

| room_id | booked              | booked_seats | remaining_seats |
| ------- | ------------------- | ------------ | --------------- |
| 1       | 2020-04-19 20:04:07 | 3            | 2               |

Lihat di DB Fiddle

Seperti yang Anda lihat pada contoh 1 baris dimasukkan dan baris kedua, memberikan pengecualian.

Anda perlu meningkatkan bagian di mana saya meringkas kursi yang dipesan di sana saya membuat

Karena saya tidak tahu pasti kriteria waktu yang akan dihitung untuk menjumlahkan jumlah kursi yang lengkap. Stempel waktu sekarang tidak masuk akal untuk menguji pemicu saya perlu beberapa tanggal.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cara menghapus nilai duplikat dari tabel MySQL

  2. Beberapa Atribut Penghapusan Gabung Dalam

  3. Menambahkan kolom SQL baru dengan nilai default

  4. Bagaimana cara memeriksa NULL di MySqlDataReader dengan nama kolom?

  5. Tidak dapat memasukkan karakter Yunani dengan benar ke dalam database mysql