设置主键有两个整数

时间:2010-03-28 02:14:30

标签: sql mysql

我有一个主键表(ColumnA,ColumnB)。我想创建一个函数或过程,当传递两个整数时,会在表中插入一行,但要确保最大的整数始终进入ColumnA,较小的整数进入ColumnB。

因此,如果我们有SetKeysWithTheseNumbers(17,19)将返回

|-----------------|
|ColumnA | ColumnB|
|-----------------|
|19      | 17     |
|-----------------|

SetKeysWithTheseNumbers(19,17)将返回相同的内容

|-----------------|
|ColumnA | ColumnB|
|-----------------|
|19      | 17     |
|-----------------|

3 个答案:

答案 0 :(得分:3)

使用:

INSERT INTO your_table
  (COLUMN_A, COLUMN_B)
VALUES(GREATEST(@param_a, @param_b), 
       LEAST(@param_a, @param_b))

参考:

答案 1 :(得分:0)

这是一个商店程序

DELIMITER $$

DROP PROCEDURE IF EXISTS `SetKeysWithTheseNumbers` $$
CREATE PROCEDURE `SetKeysWithTheseNumbers` (

n1 integer,
n2 integer


)
BEGIN

declare n3 integer;
declare n4 integer;

if( n1 > n2 ) then
 set n3=n1;
 set n4=n2;
else
 set n3=n2;
 set n4=n1;
end if;

insert into mytable values(n3,n4);



END $$

DELIMITER ;

答案 2 :(得分:0)

您可以尝试triggers

delimiter //

CREATE TRIGGER greater_ColA_table
  BEFORE INSERT ON table 
  FOR EACH ROW 
  BEGIN
    DECLARE a INTEGER;
    IF NEW.ColumnA < NEW.ColumnB THEN
      SET a=NEW.ColumnA; 
      SET NEW.ColumnA=NEW.ColumnB, NEW.ColumnB=a;
    END IF; 
  END //

delimiter ;

重复BEFORE UPDATE事件。