mariadb - MariaDB 在创建外键时抛出语法错误
问题描述
CREATE DATABASE mylaboratory;
USE mylaboratory;
DROP TABLE IF EXISTS `Account`;
CREATE TABLE `Account` (
`Email` varchar(255) NOT NULL COMMENT '계정 이메일 (ID)',
`HashedPassword` longtext NOT NULL COMMENT '계정 암호화 된 비밀번호',
`FullName` varchar(255) NOT NULL COMMENT '계정 성명',
`AvatarImagePath` varchar(255) NOT NULL DEFAULT '/upload/Management/Profile/default-avatar.jpg' COMMENT '계정 아바타 이미지 경로',
`Role` varchar(255) NOT NULL DEFAULT 'User' COMMENT '계정 역할 (Admin 또는 User)',
`Locked` tinyint(1) NOT NULL COMMENT '계정 잠금',
`LoginAttempt` int(11) NOT NULL COMMENT '로그인 시도 횟수',
`EmailConfirmed` tinyint(1) NOT NULL COMMENT '이메일 확인 여부',
`AgreedServiceTerms` tinyint(1) NOT NULL COMMENT '약관 동의 여부',
`RegistrationToken` longtext DEFAULT NULL COMMENT '회원가입 인증 토큰',
`ResetPasswordToken` longtext DEFAULT NULL COMMENT '비밀번호 찾기 인증 토큰',
`Created` datetime(6) NOT NULL DEFAULT '1900-01-01 00:00:00.000000' COMMENT '계정 생성일',
`Updated` datetime(6) NOT NULL DEFAULT '1900-01-01 00:00:00.000000' COMMENT '계정 업데이트일',
`Message` longtext DEFAULT NULL COMMENT '계정 상태 메시지',
`Deleted` tinyint(1) NOT NULL COMMENT '계정 삭제 여부',
PRIMARY KEY (`Email`),
CONSTRAINT `Accounts_check` CHECK (`Role` = 'Admin' or `Role` = 'User')
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT 'MyLaboratory.Site 계정';
CREATE TABLE mylaboratory.Asset (
Email varchar(255) NOT NULL COMMENT '계정 이메일 (ID)',
ProductName varchar(255) NOT NULL COMMENT '상품명 (은행 계좌명, 증권 계좌명, 현금 등)',
item varchar(255) NOT NULL COMMENT '항목 (자유입출금 자산, 신탁 자산, 현금 자산, 저축성 자산, 투자성 자산, 부동산, 동산, 기타 실물 자산, 보험 자산)',
Amount BIGINT(255) NOT NULL COMMENT '금액',
MonetaryUnit varchar(255) NOT NULL COMMENT '화폐 단위 (KRW, USD, ETC)',
Created DATETIME(6) NOT NULL COMMENT '생성일',
Updated DATETIME(6) NOT NULL COMMENT '업데이트일',
Note varchar(255) NULL COMMENT '비고',
Reserved0 varchar(100) NULL,
Reserved1 varchar(100) NULL,
Reserved2 varchar(100) NULL,
Reserved3 varchar(100) NULL,
Reserved4 varchar(100) NULL,
PRIMARY KEY (Email, ProductName),
KEY Asset_FK (Email),
CONSTRAINT Asset_FK FOREIGN KEY (Email) REFERENCES mylaboratory.Account(Email)
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8
COLLATE=utf8_general_ci
COMMENT='계정 자산';
错误:
SQL查询执行期间发生错误
SQL 错误 [1005] [HY000]: (conn=61) Can't create table
mylaboratory
。asset
(errno: 150 "外键约束格式不正确")
我无法弄清楚外键语法有什么问题。
MariaDB 10.2.38 版本。
解决方案
您不能将两个不同的字符集与外键一起使用,它们必须相同或至少兼容
CREATE TABLE Asset (
Email varchar(255) NOT NULL COMMENT '계정 이메일 (ID)',
ProductName varchar(255) NOT NULL COMMENT '상품명 (은행 계좌명, 증권 계좌명, 현금 등)',
item varchar(255) NOT NULL COMMENT '항목 (자유입출금 자산, 신탁 자산, 현금 자산, 저축성 자산, 투자성 자산, 부동산, 동산, 기타 실물 자산, 보험 자산)',
Amount BIGINT(255) NOT NULL COMMENT '금액',
MonetaryUnit varchar(255) NOT NULL COMMENT '화폐 단위 (KRW, USD, ETC)',
Created DATETIME(6) NOT NULL COMMENT '생성일',
Updated DATETIME(6) NOT NULL COMMENT '업데이트일',
Note varchar(255) NULL COMMENT '비고',
Reserved0 varchar(100) NULL,
Reserved1 varchar(100) NULL,
Reserved2 varchar(100) NULL,
Reserved3 varchar(100) NULL,
Reserved4 varchar(100) NULL,
PRIMARY KEY (Email, ProductName),
KEY Asset_FK (Email),
CONSTRAINT Asset_FK FOREIGN KEY (Email) REFERENCES Account(Email)
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
推荐阅读
- c++ - c++ delete[] 2d array 导致堆损坏
- ios - 用于应用程序扩展的 IB 故事板:iPad 图标不存在、尺寸不变、方向不工作
- ios - iPhone 8 / iPhone X 上的超长 wifi 请求旅行时间
- wpf - scichart如何删除左右MajorGridLines
- java - 如何在java中将隐含的小数点转换为真正的小数点?
- kubernetes - Hashicorp Vault:是否可以对预先存在的服务器配置文件进行编辑?
- apache - 如何从我的本地主机地址中删除此 Apache 页面?
- sockets - 连接的 Unix SOCK_DGRAM 套接字
- bash - 删除文本文件选定部分中的空格
- php - 复制我的项目文件夹后。文件上传不起作用。但老一辈有