2011-10-20 23 views
0

首先,通过使用主键我正确应用UNIQUE约束?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 TABLE PersonInfo(
Email VARCHAR(45) NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(Email), 
PNumber VARCHAR(45))") 
or die(mysql_error()); 

echo "Table Created!"; 

?> 

我想使它所以电子邮件和PNumber不能有重复的行inserted..But我得到的错误是“列‘电子邮件’不正确的列说明”显然,这是由于AUTO_INCREMENT一个错误只工作INT类型....任何想法如何做这些2列没有重复?对不起,我不使用MySQL经历了太多太多,因为我做了很长一段时间以前,从那时起新的bug已经开发..

+0

(因为即,TMDA)http://stackoverflow.com/questions/3456249/how-to-use-unique-index-correctly并且还HTTP://www.tutorialspoint。 com/mysql/mysql-indexes.htm –

回答

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()); 
+0

谢谢,我不知道comp网站是什么,但我猜AUTO_INCREMENT现在不适用于除INT之外的任何东西。好吧,谢谢它会工作:)需要9分钟让我接受你的回答 – Bulvak

+0

复合主键将允许例如[email protected],07171717171和[email protected],07272727272,即独特性跨越两个领域。我想你可能需要最后一个选项,这将确保两个字段的唯一性,独立 –

+0

@nadal auto_increment适用于NUMERIC类型。 mysql将使用'[email protected] + 1'做什么? –

1
  • 是,使用主键,你不会有重复的电子邮件(你不加入PNumber字段也是如此)
  • 您正在使用AUTO_INCREMENT不是整数的字段(或像smallint这样的子类型)。
1
  • 取出AUTO_INCREMENT,它是整数,并就你会出现在手动填充字段没有意义。
  • 由于主键使其隐含,所以不需要非NULL。
  • 想想让你的领域更加宽广。我有超过45个字符的电子邮件地址。

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