【问题标题】:SQL max number of recordsSQL 最大记录数
【发布时间】:2019-12-10 16:28:19
【问题描述】:

所以我有下表:

 CREATE TABLE Hospital_MedicalRecord(
        recNo CHAR(5),
        patient CHAR(9),
        doctor CHAR(9),
        enteredOn DATE NOT NULL,
        diagnosis VARCHAR(50) NOT NULL,
        treatment VARCHAR(50),
        PRIMARY KEY (recNo, patient),
        FOREIGN KEY (patient) REFERENCES Hospital_Patient(NINumber),
        FOREIGN KEY (doctor) REFERENCES Hospital_Doctor(NINumber)
    );

我想做到这一点,因此单个患者的医疗记录永远不会超过 65,535 条。我应该做一个新的声明还是应该在上表中实现它。如果需要,我可以张贴患者表。

【问题讨论】:

  • 听起来你想要insert trigger。但是,如果您希望(可能)将较旧的医疗记录简单地从系统中删除,我必须询问您的系统架构是否有其他问题。
  • 如果表中有单个患者的 65,535(顺便说一句,如果患者在同一个数据库中,它不应该是外键)并且有人试图插入新记录,你想要什么那会发生吗?防止它?
  • @BobKaufman 借调插入触发器
  • 或者,您可以将逻辑构建到 INSERT 本身中
  • 检查这个问题,你可能会找到你要找的东西:stackoverflow.com/questions/39758422/…

标签: mysql sql database max database-trigger


【解决方案1】:

您通常会为此使用 before insert 触发器,如果​​患者的记录数达到限制并尝试新的插入,则会引发错误:

delimiter //

create trigger Trg_Hospital_MedicalRecord
before insert on Hospital_MedicalRecord
for each row
begin
    if (
        select count(*) from Hospital_MedicalRecord where patient = new.patient
    ) = 65535 then
            set msg = concat('Patient ', new.patient, ' cannot have more than 65535 records');
            signal state '45000' set message_text = msg;
    end if;
end
//

delimiter ;

我假设您不应该允许在现有记录上更新 patient。但如果这可能发生,那么您还需要一个before update 触发器(使用完全相同的代码)。

【讨论】:

    【解决方案2】:

    考虑以下...

     DROP TABLE IF EXISTS my_table;
    
     CREATE TABLE my_table(id SERIAL PRIMARY KEY, user_id INT NOT NULL);
    
     INSERT INTO my_table (user_id)
    SELECT 1
      FROM (SELECT 1) x
      LEFT
      JOIN (SELECT user_id FROM my_table GROUP BY user_id HAVING COUNT(*) >=3) y
        ON y.user_id = 1
     WHERE y.user_id IS NULL
     LIMIT 1;
    

    这将每个 user_id 的 INSERTS 限制为 3 个。

    【讨论】:

      猜你喜欢
      • 2013-01-14
      • 1970-01-01
      • 2018-07-11
      • 1970-01-01
      • 2020-08-22
      • 2019-03-15
      • 2014-09-10
      • 2011-02-09
      相关资源
      最近更新 更多