【问题标题】:MySQL: Create unique value constraint between two columns in the *same* row [duplicate]MySQL:在*相同*行中的两列之间创建唯一值约束[重复]
【发布时间】:2014-01-27 02:03:18
【问题描述】:

是否可以创建一个 MySQL 约束来强制同一行中的两列之间的唯一值

例如:

CREATE TABLE Buddies (
  User1 int,
  User2 int,
) Type = InnoDB;

我怎么会拒绝...

INSERT INTO MyTable SET User1 = '5', User2 = '5'?

否则那个用户会很孤独:)

编辑:这里的重点是,如果可能的话,我想纯粹在 MySQL 中而不是在应用程序层中执行此操作。

【问题讨论】:

标签: mysql constraints unique


【解决方案1】:

您好,这段代码使一行中的两列是唯一的:

ALTER TABLE 'tableName' ADD UNIQUE( 'column1', 'column2');

使用上面的代码,如果你将值插入column1column2 相同,它不会被插入。 例如:

$value1 = 1;
$value2 = 2;
$value3 = 3;
mysql_query("INSERT INTO tableName (column1, column2) VALUES ('$value1', '$value2')"); //This will work.
mysql_query("INSERT INTO tableName (column1, column2) VALUES ('$value1', '$value3')"); //This will work.
mysql_query("INSERT INTO tableName (column1, column2) VALUES ('$value1', '$value2')"); //This WILL NOT work THE SECOND time around because of the unique constraint.

或者参考这段代码:

$value1 = 1;
$value2 = 2;

$resultSet = mysql_query("SELECT column1 FROM tableName WHERE column1 = '$value1'");
$rows = mysql_num_rows($resultSet);

if($rows >= 1){
    echo $value1 . " already exist.";
}
else{
    $query = mysql_query("INSERT INTO tableName (column1, column2) VALUES('$value1','$value2')");

    if(){
        echo "Value inserted.";
    }else echo mysql_error();
}

上面的代码在插入两个值之前检查$value1 的值以确定$value1 是否已经存在。

希望这对您有所帮助。 :-)

【讨论】:

  • 我意识到我可以在应用层做到这一点,但我希望它可以完全在 MySQL 中完成。
  • @KielLabuca 。 .您的意思是创建一个包含两个字段的唯一索引。它允许将 (5, 5) 插入表中一次,但不能插入两次。
  • @GordonLinoff -- 正是 Linoff 先生,这就是我对上面第一组代码的意思。
  • 在他的问题中,他提到了同一张表中的两列,所以这就是我提供的代码,但是如果他只想要一列,那么他仍然可以只使用一个参数使用相同的代码,就像这样:ALTER TABLE 'tableName' ADD UNIQUE( 'column1' );
  • @KielLabuca 。 . .你错过了重点。 OP 正在寻找对同一行中的值的检查约束,而不是所有行。 MySQL 不执行检查约束。
猜你喜欢
  • 2019-02-27
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
相关资源
最近更新 更多