MySQL错误:表定义不正确;只能有一个自动列,必须将其定义为键

时间:2017-02-14 15:34:03

标签: php html mysql sql

每当我尝试创建名为' createtables.php'的页面时,它就无法创建表格' Ausleihe'。

<?php
    include 'connect.php';
    $query = "CREATE TABLE Schueler(
        SchuelerVorname VARCHAR(30) NOT NULL,
        SchuelerName VARCHAR(30) NOT NULL,
        StrasseUndHausnummer VARCHAR(50) NOT NULL,
        PLZ INT(5) NOT NULL,
        Ort VARCHAR(50) NOT NULL,
        SchuelerNummer INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY
    )";
    $result = mysqli_query($conn, $query);
    if(!$result) die ("Fehler beim erstellen der Tabelle 'Schueler': " .mysqli_error($conn));

    $query1 = "CREATE TABLE Buch(
        AutorVorname VARCHAR(30) NOT NULL,
        AutorName VARCHAR(30) NOT NULL,
        BuchName VARCHAR(50) NOT NULL,
        ISBN VARCHAR(35) NOT NULL,
        BuchNummer INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY
    )";
    $result = mysqli_query($conn, $query1);
    if(!$result) die ("Fehler beim erstellen der Tabelle 'Buch': " .mysqli_error($conn));

    $query2 = "CREATE TABLE Ausleihe(
        AusleihDatum DATE NOT NULL,
        AusleihNummer INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
        BuchNummer INT(6) UNSIGNED AUTO_INCREMENT,
        SchuelerNummer INT(6) UNSIGNED AUTO_INCREMENT,
        FOREIGN KEY (BuchNummer) REFERENCES Buch(BuchNummer),
        FOREIGN KEY (SchuelerNummer) REFERENCES Schueler(SchuelerNummer)
    )";
    $result = mysqli_query($conn, $query2);
    if(!$result) die ("Fehler beim erstellen der Tabelle 'Ausleihe': " .mysqli_error($conn));
?>

我究竟做错了什么?是因为外键吗?

抱歉我的代码部分是德语,但不应该真的很重要。

3 个答案:

答案 0 :(得分:0)

错误消息确切地说明了问题所在 - 您不能拥有多个AUTO_INCREMENT列。您必须从其中一个列中删除AUTO_INCREMENT属性。可能是这样的:

$query2 = "CREATE TABLE Ausleihe(
        AusleihDatum DATE NOT NULL,
        AusleihNummer INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
        BuchNummer INT(6) UNSIGNED,
        SchuelerNummer INT(6) UNSIGNED,
        FOREIGN KEY (BuchNummer) REFERENCES Buch(BuchNummer),
        FOREIGN KEY (SchuelerNummer) REFERENCES Schueler(SchuelerNummer)
        )";

答案 1 :(得分:0)

应在Buch和Schueler表上进行自动增量。您应该使用来自Matt Spinks的查询答案。

答案 2 :(得分:0)

显然mysql错误本身就有答案。 &#39; Ausleihe&#39;表有三个自动递增列,导致错误。你必须从&#39; BuchNummer&#39;中删除AUTO_INCREMENT。和&#39; SchuelerNummer&#39;这样的专栏只有&#39; AusleihNummer&#39;将保留自动增量。