Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试添加外键关系时mysql中的外键约束_Mysql_Sql_Foreign Keys_Foreign Key Relationship - Fatal编程技术网

尝试添加外键关系时mysql中的外键约束

尝试添加外键关系时mysql中的外键约束,mysql,sql,foreign-keys,foreign-key-relationship,Mysql,Sql,Foreign Keys,Foreign Key Relationship,我得到了两个名为activity和user的表。我需要与这两个表建立外键关系。username是我的user表的主键,它是一个varchar值。但是当我尝试建立关系时,我得到一个外键约束错误,错误代码为1215。下面是与我提到的两个表相关的DDL语句 谁能帮我解决这个问题 谢谢 CREATE TABLE `user` ( `username` varchar(50) NOT NULL, `user_id` int(11) DEFAULT NULL, `email` varchar(5

我得到了两个名为activity和user的表。我需要与这两个表建立外键关系。username是我的user表的主键,它是一个varchar值。但是当我尝试建立关系时,我得到一个外键约束错误,错误代码为1215。下面是与我提到的两个表相关的DDL语句

谁能帮我解决这个问题

谢谢

CREATE TABLE `user` (
  `username` varchar(50) NOT NULL,
  `user_id` int(11) DEFAULT NULL,
  `email` varchar(50) DEFAULT NULL,
  `password` varchar(500) DEFAULT NULL,
  `activated` tinyint(1) DEFAULT '0',
  `activationkey` varchar(50) DEFAULT NULL,
  `resetpasswordkey` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`username`),
  UNIQUE KEY `user_id_UNIQUE` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE activity (
  activity_id          INT UNSIGNED NOT NULL AUTO_INCREMENT,
  activity_type_id     INT UNSIGNED,
  activity_property_id  INT UNSIGNED,
  added_by             varchar(50),
  updated_by           varchar(50),
  activity_code        VARCHAR(50),
  activity_description VARCHAR(100),
  start_date           TIMESTAMP NULL,
  end_date             TIMESTAMP NULL,
  start_time           VARCHAR(10),
  end_time             VARCHAR(10),
  added_date           TIMESTAMP NULL,
  updated_date         TIMESTAMP NULL,
  is_available         TINYINT(1),
  PRIMARY KEY (activity_id),

  CONSTRAINT fk_ADDED_BY_FOR_ACTIVITY FOREIGN KEY (added_by) REFERENCES user (username),
  CONSTRAINT fk_UPDATED_BY_FOR_ACTIVITY FOREIGN KEY (updated_by) REFERENCES user (username)
)
  ENGINE = InnoDB;

只需添加默认字符集=1。尝试下面的查询

    CREATE TABLE activity (
  activity_id          INT UNSIGNED NOT NULL AUTO_INCREMENT,
  activity_type_id     INT UNSIGNED,
  activity_property_id  INT UNSIGNED,
  added_by             VARCHAR(50) DEFAULT NULL,
  updated_by           VARCHAR(50) DEFAULT NULL,
  activity_code        VARCHAR(50),
  activity_description VARCHAR(100),
  start_date           TIMESTAMP NULL,
  end_date             TIMESTAMP NULL,
  start_time           VARCHAR(10),
  end_time             VARCHAR(10),
  added_date           TIMESTAMP NULL,
  updated_date         TIMESTAMP NULL,
  is_available         TINYINT(1),
  PRIMARY KEY (activity_id),
  CONSTRAINT fk_ADDED_BY_FOR_ACTIVITY FOREIGN KEY (added_by) REFERENCES user (username),
  CONSTRAINT fk_UPDATED_BY_FOR_ACTIVITY FOREIGN KEY (updated_by) REFERENCES user (username)
)
  ENGINE = InnoDB DEFAULT CHARSET=latin1;

只需添加默认字符集=1。尝试下面的查询

    CREATE TABLE activity (
  activity_id          INT UNSIGNED NOT NULL AUTO_INCREMENT,
  activity_type_id     INT UNSIGNED,
  activity_property_id  INT UNSIGNED,
  added_by             VARCHAR(50) DEFAULT NULL,
  updated_by           VARCHAR(50) DEFAULT NULL,
  activity_code        VARCHAR(50),
  activity_description VARCHAR(100),
  start_date           TIMESTAMP NULL,
  end_date             TIMESTAMP NULL,
  start_time           VARCHAR(10),
  end_time             VARCHAR(10),
  added_date           TIMESTAMP NULL,
  updated_date         TIMESTAMP NULL,
  is_available         TINYINT(1),
  PRIMARY KEY (activity_id),
  CONSTRAINT fk_ADDED_BY_FOR_ACTIVITY FOREIGN KEY (added_by) REFERENCES user (username),
  CONSTRAINT fk_UPDATED_BY_FOR_ACTIVITY FOREIGN KEY (updated_by) REFERENCES user (username)
)
  ENGINE = InnoDB DEFAULT CHARSET=latin1;

您的错误是FK列类型与PK列类型不匹配。特别是,字符集不同。阅读有关外键的文档部分

外键和引用键中的相应列必须具有相似的数据类型。整数类型的大小和符号必须相同。字符串类型的长度不必相同。对于非二进制字符串列,字符集和排序规则必须相同。 所以活动需要

你还会发现

除了显示错误外,如果MySQL服务器中出现涉及InnoDB表的外键错误(通常为错误150),您可以通过检查SHOW ENGINE InnoDB STATUS的输出来获得最新InnoDB外键错误的详细说明


您的错误是FK列类型与PK列类型不匹配。特别是,字符集不同。阅读有关外键的文档部分

外键和引用键中的相应列必须具有相似的数据类型。整数类型的大小和符号必须相同。字符串类型的长度不必相同。对于非二进制字符串列,字符集和排序规则必须相同。 所以活动需要

你还会发现

除了显示错误外,如果MySQL服务器中出现涉及InnoDB表的外键错误(通常为错误150),您可以通过检查SHOW ENGINE InnoDB STATUS的输出来获得最新InnoDB外键错误的详细说明

请阅读并付诸行动。请阅读并付诸行动。