mysql - 为什么我无法引用主键?

标签 mysql

前两个表成功通过,但是当mysql检查器到达第三个表时,它通知我引用键有问题。 这是我的代码:

CREATE TABLE USER(
    Username VARCHAR(20) NOT NULL,
    Email VARCHAR(50) NOT NULL,
    Picture VARCHAR(30),
    Points INT(5) DEFAULT 1 NOT NULL,
    Password VARCHAR(50) NOT NULL,
    Firstname VARCHAR(25) NOT NULL,
    Lastname VARCHAR(25) NOT NULL,
    PRIMARY KEY(Username)
);

CREATE TABLE THREAD (
    ThreadID INT(9) NOT NULL AUTO_INCREMENT,
    Title VARCHAR(255) NOT NULL,
    PostID int(9) NOT NULL,
    PRIMARY KEY (ThreadID)  
);

CREATE TABLE POST(
    ThreadID INT(9) NOT NULL,
    PostID INT(9) NOT NULL AUTO_INCREMENT,
    Content TEXT NOT NULL,
    NumberOfLines INT(5) NOT NULL,
    PRIMARY KEY(ThreadID, PostID),
    FOREIGN KEY ThreadID(ThreadID) REFERENCES THREAD(ThreadID)
);

我收到的错误如下:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '
    PRIMARY KEY(ThreadID, PostID),
    FOREIGN KEY fk_ThreadID(ThreadID) REFE' at line 6 

我尝试将PRIMARY KEY(ThreadID, PostID)创建为单独的实体,但这似乎不起作用。 谢谢。

最佳答案

添加到@Schwern,由于主键使用错误而给出错误。下面创建表就可以了。

create table a ( 
  id bigint(20) NOT NULL AUTO_INCREMENT, 
  col2 varchar(10), primary key (id, col2)
) engine=innodb;

所以自增列必须是主键中的第一个列。

我们广泛使用这种主键在 col2 上对表进行分区 - 要在列上进行范围分区,该列需要成为主键的一部分。

还要提一下,您可以以额外索引为代价获得额外的唯一键

关于mysql - 为什么我无法引用主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36533046/

相关文章:

mysql - 为什么 MySQL 不将这些列相加?

php - mySQL:知道何时更新和何时插入?

c# - 创建 app.config 文件

php - 使用 mysql/php 进行严格搜索

mysql - 如果在 SQL 中结果为空,如何返回列值?

mysql - 在mysql中为一组行创建 View

php - 如何防止 PHP 中的 SQL 注入(inject)?

mysql - 如何使用 MIN (MySQL) 从三个表中获取信息

mysql - php mysql匹配及返回值

javascript - jQuery/PHP - 将数据从 JS 传递到 PHP 以对数据库执行删除