MySQL UNIQUE约束..如何修复此错误?

时间:2011-10-20 15:00:17

标签: php mysql

首先,通过使用主键,我正确应用UNIQUE约束吗?

<?php
// Make a MySQL Connection
mysql_connect("localhost", "oassda", "oas53a") or die(mysql_error());
mysql_select_db("o345ja") or die(mysql_error());

// Create a MySQL table in the selected database
mysql_query("CREATE TABLE PersonInfo(
Email VARCHAR(45) NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(Email),
 PNumber VARCHAR(45))")
 or die(mysql_error());  

echo "Table Created!";

?>

我正在尝试这样做,因此电子邮件和PNumber不能插入重复的行。但是我得到的错误是“列'电子邮件'的列指示符不正确”显然这是一个错误,因为AUTO_INCREMENT仅适用于INT类型。 ...任何想法如何使这两列没有重复?抱歉,我对MySQL的经验不是很久,因为我很久以前就已经这么做了,从那时起就出现了新的错误..

3 个答案:

答案 0 :(得分:2)

您在寻找复合主键吗?如果是这样,这是修复错误的代码。

mysql_query("CREATE TABLE PersonInfo(
Email VARCHAR(45) NOT NULL, 
 PNumber VARCHAR(45),
PRIMARY KEY(Email,PNumber))")
 or die(mysql_error());

如果不是,您只需要一个主键 - AUTO_INCREMENT标志仅用于INT类型

mysql_query("CREATE TABLE PersonInfo(
    Email VARCHAR(45) NOT NULL, 
     PNumber VARCHAR(45),
    PRIMARY KEY(Email))")
     or die(mysql_error());

或者你可能只需要UNIQUE约束,例如

mysql_query("CREATE TABLE PersonInfo(
        Email VARCHAR(45) NOT NULL, 
         PNumber VARCHAR(45),
        PRIMARY KEY(Email),
        UNIQUE(PNumber))")
         or die(mysql_error());

答案 1 :(得分:1)

  • 是的,使用主键您将没有重复的电子邮件(您也没有添加PNumber字段)
  • 您在非整数字段(或类似smallint的子类型)上使用AUTO_INCREMENT

答案 2 :(得分:1)

  • 取出AUTO_INCREMENT,它是整数,对于你手动填充的字段没有任何意义。
  • 您不需要NOT NULL,因为主键使其隐式。
  • 考虑让你的领域更广阔。我有超过45个字符的电子邮件地址。 (即,因为TMDA。)

    CREATE TABLE PersonInfo
    (
        Email VARCHAR(45),
        PNumber VARCHAR(45),
        PRIMARY KEY (Email, PNumber)
    );