2017-09-23 55 views
0

MySQL的CHAR外键的结果我有以下表设置:1215年错误

CREATE TABLE USER (
    id     CHAR(36)  NOT NULL, 
    user_id    VARCHAR(200) NOT NULL, 
    password   VARCHAR(200) NOT NULL, 
    email    VARCHAR(500) NOT NULL, 
    enabled_ind   INTEGER(1) NOT NULL, 
    other_user_oid INTEGER(19), 
    other_user_pod VARCHAR(10), 
    last_changed_date TIMESTAMP NOT NULL, 
    last_changed_by  VARCHAR(255) NOT NULL, 
    created_date  TIMESTAMP NOT NULL, 
    created_by   VARCHAR(255) NOT NULL, 
    PRIMARY KEY (id), 
    UNIQUE KEY ix_user_id (user_id), 
    UNIQUE KEY ix_user_email (email), 
    UNIQUE KEY ix_user_pod (other_user_oid, other_user_pod) 
) 
    ENGINE = InnoDB 
    CHARACTER SET = utf8 
    COLLATE = utf8_bin; 

CREATE TABLE ROLE (
    id    CHAR(36)  NOT NULL, 
    name    VARCHAR(50) NOT NULL, 
    last_changed_date TIMESTAMP NOT NULL, 
    last_changed_by VARCHAR(255) NOT NULL, 
    created_date  TIMESTAMP NOT NULL, 
    created_by  VARCHAR(255) NOT NULL, 
    PRIMARY KEY (id), 
    UNIQUE KEY ix_role_name(name) 
) 
    ENGINE = InnoDB 
    CHARACTER SET = utf8 
    COLLATE = utf8_bin; 

CREATE TABLE USER_ROLES (
    user_id   CHAR(36)  NOT NULL, 
    role_id   CHAR(36)  NOT NULL, 
    last_changed_date TIMESTAMP NOT NULL, 
    last_changed_by VARCHAR(255) NOT NULL, 
    created_date  TIMESTAMP NOT NULL, 
    created_by  VARCHAR(255) NOT NULL, 
    INDEX (user_id), 
    INDEX (role_id), 

    FOREIGN KEY (user_id) 
    REFERENCES user (id) 
    ON UPDATE CASCADE, 

    FOREIGN KEY (role_id) 
    REFERENCES role (id) 
    ON UPDATE CASCADE 
) 
    ENGINE = InnoDB 
    CHARACTER SET = utf8 
    COLLATE = utf8_bin; 

当我去创建USER_ROLES表,我得到一个“无法添加外键约束”的错误。我在stackoverflow上发现的大多数类似问题似乎都与字符集和整理有关,但从我所知道的情况来看,我正确地做到了这一点,所以我不太确定问题所在。在这儿。一段时间以来,我一直在尝试一堆不同的东西,但似乎没有任何工作。

任何帮助将不胜感激!

回答

0

它适用于SQL Fiddle

我确实需要将用户中的电子邮件改为200个字符而不是500个。这应该足够了。索引的长度太长,所以表格没有被创建。

此外,您将密码存储为字符串。您应该确保您只使用加密密码。

+0

奇怪......我想知道为什么它不适合我。也许这是一个版本问题。我使用BCrypt散列所有密码。 – cloudwalker

相关问题