Php MySQL唯一约束..如何修复此错误?

Php MySQL唯一约束..如何修复此错误?,php,mysql,Php,Mysql,首先,通过使用主键,我是否正确地应用了唯一约束 <?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 T

首先,通过使用主键,我是否正确地应用了唯一约束

<?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!";

?>

我正试图使Email和PNumber不能插入重复的行。但我得到的错误是“列'Email'的列说明符不正确”。显然,这是一个错误,因为AUTO_INCREMENT只处理INT类型…知道如何使这两列不重复吗?很抱歉,我对MySQL没有太多的经验,因为我很久以前就这么做了,从那以后又出现了新的bug。

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

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

      mysql_query("CREATE TABLE PersonInfo(
      Email VARCHAR(45) NOT NULL, 
       PNumber VARCHAR(45),
      PRIMARY KEY(Email,PNumber))")
       or die(mysql_error());
      
      如果不是,您只需要一个主键-自动增量标志仅适用于INT类型

      mysql_query("CREATE TABLE PersonInfo(
          Email VARCHAR(45) NOT NULL, 
           PNumber VARCHAR(45),
          PRIMARY KEY(Email))")
           or die(mysql_error());
      
      或者您可能只需要唯一的约束,例如

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

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

      mysql_query("CREATE TABLE PersonInfo(
      Email VARCHAR(45) NOT NULL, 
       PNumber VARCHAR(45),
      PRIMARY KEY(Email,PNumber))")
       or die(mysql_error());
      
      如果不是,您只需要一个主键-自动增量标志仅适用于INT类型

      mysql_query("CREATE TABLE PersonInfo(
          Email VARCHAR(45) NOT NULL, 
           PNumber VARCHAR(45),
          PRIMARY KEY(Email))")
           or die(mysql_error());
      
      或者您可能只需要唯一的约束,例如

      mysql_query("CREATE TABLE PersonInfo(
              Email VARCHAR(45) NOT NULL, 
               PNumber VARCHAR(45),
              PRIMARY KEY(Email),
              UNIQUE(PNumber))")
               or die(mysql_error());
      
      • 去掉AUTO_增量,它是针对整数的,对于手动填充的字段没有意义
      • 不需要为NULL,因为主键使其隐式
      • 考虑把你的领域扩大。我有超过45个字符的电子邮件地址。(即,由于TMDA)

          • 去掉AUTO_增量,它是针对整数的,对于手动填充的字段没有意义
          • 不需要为NULL,因为主键使其隐式
          • 考虑把你的领域扩大。我有超过45个字符的电子邮件地址。(即,由于TMDA)


          谢谢,我不知道comp站点是什么,但我想现在除了INT之外,AUTO_INCREMENT在任何东西上都不起作用。好的,谢谢,它会起作用:)我需要9分钟才能接受你的回答。例如,复合主键允许a@b.com,071717171及a@b.com,07272,即唯一性跨两个字段。我想您可能想要最后一个选项,它将确保两个字段的唯一性,independently@nadal自动增量适用于数字类型。mysql将如何处理
          president@whitehouse.gov+1
          ?谢谢,我不知道comp站点是什么,但我想自动增量现在除了INT之外不起作用。好的,谢谢,它会起作用:)我需要9分钟才能接受你的回答。例如,复合主键允许a@b.com,071717171及a@b.com,07272,即唯一性跨两个字段。我想您可能想要最后一个选项,它将确保两个字段的唯一性,independently@nadal自动增量适用于数字类型。mysql将如何处理
          president@whitehouse.gov+1
          ?而且也