MySQL-error 150解决方法

标签 mysql database create-table

我有以下 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。也许数据库没有规划好?任何帮助将不胜感激。

最佳答案

users.rolesuser_roles.id 列的数据类型必须相同,FOREIGN KEY 约束才能正常工作。而是尝试将 users.roles 设为 INT:

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 应该是像“admin, moderator, etc.”这样的文本。为了正确的数据规范化,user_roles.id 应该被键入并获取角色的文本名称,JOIN 它们在查询中。

关于MySQL-error 150解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7422930/

相关文章:

php - 文章的 CSV 表格上传

mysql - 无法创建表 #1113 - 表必须至少有 1 列

mysql - 使用jquery ajax将输入文本框绑定(bind)到mysql数据

mysql - 将 MySQL 中的数组展平为单个对象的正确方法

c# - 从列表框和数据库中删除

android - 我可以使用 Google 云端硬盘代替服务器吗

MySQL 查询 : Aggregation at two different level

java - MySQL 结果字符串中的空格

php - 用户权限自定义cms

php - MySQL "CREATE TABLE"查询错误