1

我有以下 MySQL 脚本:

CREATE TABLE user_roles (
  id INT AUTO_INCREMENT,
  PRIMARY KEY(id),
  name TEXT NOT NULL,
  access INT NOT NULL DEFAULT '0'
)
CREATE TABLE users (
    id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (id),
    name TEXT NOT NULL,
    email TEXT NOT NULL,
    password TEXT NOT NULL,
    date_created DATETIME,
    roles VARCHAR(50) NOT NULL,
    active INT DEFAULT '1',
    FOREIGN KEY(roles) REFERENCES user_roles(id)
)

它一直给我错误 150。也许数据库没有精心计划?任何帮助将不胜感激。

4

2 回答 2

2

users.roles您和列的数据类型user_roles.id必须相同才能使FOREIGN KEY约束正常工作。而是尝试制作users.rolesINT

CREATE TABLE users (
    id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (id),
    name TEXT NOT NULL,
    email TEXT NOT NULL,
    password TEXT NOT NULL,
    date_created DATETIME,
    -- Change this...
    roles INT NOT NULL,
    active INT DEFAULT '1',
    FOREIGN KEY(roles) REFERENCES user_roles(id)
)

更新根据评论,users.roles应该是“管理员、版主等”之类的文字。为了正确的数据规范化,user_roles.id应该JOIN在查询中键入并获取角色的文本名称。

于 2011-09-14T21:04:46.733 回答
1

您需要用分号分隔语句并使用 INTS 而不是字符串:

CREATE TABLE user_roles (
  id INT AUTO_INCREMENT,
  PRIMARY KEY(id),
  name TEXT NOT NULL,
  access INT NOT NULL DEFAULT 0
);
CREATE TABLE users (
    id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (id),
    name TEXT NOT NULL,
    email TEXT NOT NULL,
    password TEXT NOT NULL,
    date_created DATETIME,
    roles VARCHAR(50) NOT NULL,
    active INT DEFAULT 1,
    FOREIGN KEY(roles) REFERENCES user_roles(id)
);
于 2011-09-14T21:08:41.603 回答