【问题标题】:help in uniquely identifying combine columns帮助唯一标识组合列
【发布时间】:2011-08-18 10:38:36
【问题描述】:

如何唯一标识两列或多列,我在数据库中使用了名为地址的表,现在地址有街道名称、套房名称和街道编号等字段。

字符串 |字符串 |姓氏


1 | xyz | 32

1 | xyz | 32

现在我如何才能使这三列独一无二。那就是我想检查这三列是否已经插入。如果任何字段值更改为正常,它将插入新的。但万一所有三个相似的字段..帮助我结合识别这三个字段。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    您可以通过添加unique 约束来实现。

    ALTER TABLE your_table ADD UNIQUE(strnum, strnam, sutname);
    

    然后您执行以下操作:

    INSERT IGNORE INTO your_table (strnum, strnam, sutname) VALUES ('1', 'xyz', 'etc');
    

    如果值已经存在 - 不会发生插入,也不会引发错误(这就是 IGNORE 部分)。

    顺便问一下,您为什么使用如此短而模糊的列名?现在已经不是 DOS 时代了,你可以用你的列名来描述。

    【讨论】:

    • 如果我不使用简单的单一查询而唯一地创建或修改键是否与上述查询相同...??
    • @Aditii - 抱歉,我不明白你的意思。提供的示例带有解释,我认为它的作用、方式和原因非常清楚。如果没有,那么您需要阅读一些 mysql 文档。
    • ALTER TABLE your_table ADD UNIQUE(strnum); ALTER TABLE your_table ADD UNIQUE(strnam); ALTER TABLE your_table ADD UNIQUE(sutname);类似于上面的查询...??
    【解决方案2】:
    $query = "SELECT * FROM `address` WHERE `strnum` = '$strnum' AND `strnam` = '$strnam' AND `sutname` = '$sutname' LIMIT 1";
    $result = mysql_query($query);
    if (!mysql_num_rows($result)) {
        // If you get to here, there is no existing record
        $query = "INSERT INTO `address` (`strnum`,`strnam`,`sutname`) VALUES ('$strnum','$strnam','$sutname')";
        if (!mysql_query($query)) print('Insert failed!');
    } else print('Record already exists!');
    

    编辑我刚刚添加了一个缺失的;,所以这个解析...

    【讨论】:

    • 这不是处理关系数据库的正确方法。只是对于任何可能认为这是您检查记录是否存在然后插入的方式的人 - 不要这样做。我不是要抨击你,戴夫,我也没有反对。
    • @N.B.我接受你的说法并且没有冒犯 - 我会是第一个承认我不知道一切的人。我认为您正在做的是在您要链接的所有字段上添加UNIQUE 多字段索引?当您尝试进行重复插入时,这不会引发重复键错误吗?
    • 是的,但是如果您使用INSERT IGNORE,那么它不会出错并且会忽略您要插入的数据。或者,还有“INSERT... ON DUPLICATE KEY UPDATE”语句,允许您更新您点击的唯一键的行。
    【解决方案3】:

    只需将它们作为唯一键添加到表结构中,您将无法插入其中两个

    【讨论】:

      【解决方案4】:

      你可以这样做

       SELECT * FROM table WHERE col1 = $something AND col2 = $something2 AND col3 = $something3  
      

      (记住转义 php 变量) 如果记录被返回,则表示它存在。您还可以添加 LIMIT 1 以使其更快。

      如果您的问题是关于确保表中没有重复出现(对于这 3 列),那么最好的解决方案可能是在这三列上添加唯一索引。

      【讨论】:

      • 如何使用 php 执行此操作...这意味着我有 3 个字段和三个变量如何检查这三个变量的值在表的 3 列中是否相同...
      猜你喜欢
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 2022-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多