Как вставить две или более записей из «уникального» поля в MySQL?

#mysql #sql

#mysql #sql

Вопрос:

У меня есть эти таблицы

  CREATE TABLE persona( 
id INT PRIMARY KEY AUTO_INCREMENT,
 nombre VARCHAR(30),
 apPaterno VARCHAR(30), 
 ine VARCHAR(12) unique);
 
 CREATE TABLE cliente( cuenta INT PRIMARY KEY, 
 saldoapertura DOUBLE,
 fechaRe&istro DATE, 
 sucursal VARCHAR(30), 
 idPersona int, 
 FOREIGN KEY(idPersona) REFERENCES persona(id));
  

Речь идет о моделировании банка, в котором идентификация уникальна для каждого человека (ine), я хочу знать, есть ли способ вставить человека с разными учетными записями несколько раз. Даже если предложение ‘unique’ существует в поле (ine).

Хранимая процедура заключается в следующем:

 delimiter ##
 create procedure sp_aperturaCuenta(
    IN p_nombre varchar(30),
    in p_apellidoPaterno varchar (30),
    in p_ine varchar (12),
    in p_cuenta int,
    in p_saldoApertura double,
    in p_sucursal varchar (30)
 )
 be&in
 declare id int;
 declare fallo boolean default  0; 
 declare continue handler for sqlexception
 be&in
 set fallo = 1;
 end;
 start transaction;
 
 insert  into persona (nombre, apPaterno, ine) values (p_nombre,p_apellidoPaterno, p_ine);
    set id = last_insert_id();
    insert  into cliente values (p_cuenta,p_saldoApertura, curdate(), p_sucursal, id ); 
   
    if fallo = 0 then
    commit; 
    else
    rollback;
    end if;
 end ##
 delimiter ;
  

Вот вызовы процедуры:

 Call sp_aperturaCuenta('Carlos','Montes','12302002120',1121,1000,'Delta'); 
Call sp_aperturaCuenta('Carlos','Montes','12302002120',1231,5000,'Delta');
  

Как можно видеть, единственная разница между одним вызовом и другим заключается в том, что учетная запись отличается. И я не могу вставить вторую.

Ответ №1:

Чтобы добавить вторую cliente запись к существующей persona , переименуйте свою id переменную в v_id :

 declare v_id int;
  

Затем попробуйте выполнить поиск persona по ine и вставить только в том случае, если вы не можете найти запись.

     select id into v_id from persona where ine = p_ine;
    if v_id is null then 
      insert  into persona (nombre, apPaterno, ine) values (p_nombre,p_apellidoPaterno, p_ine);
      set v_id = last_insert_id();
    end if;
    insert  into cliente values (p_cuenta,p_saldoApertura, curdate(), p_sucursal, v_id ); 
    
  

Ответ №2:

Ограничение уникальности является ограничением по определенной причине, и RBDMS отлично справляются с ограничениями.

Пока у вас есть уникальное ограничение в определении таблицы, столбец, для которого определено уникальное ограничение, не может иметь несколько равных значений.

Единственный способ обойти ограничение — это удалить его, чего я не предлагаю, если это противоречит требованиям к дизайну вашей базы данных.