当我尝试使用外键创建表时,出现未知数据类型错误。我不确定我的语法是否错误?确切的错误消息是:第14行出现错误4161(HY000):未知数据类型:'t_name',表示P1_Player表是引发错误的位置。
DROP TABLE IF EXISTS P1_Player;
DROP TABLE IF EXISTS P1_Plays;
DROP TABLE IF EXISTS P1_Coach;
DROP TABLE IF EXISTS P1_Game;
DROP TABLE IF EXISTS P1_Team;
create table P1_Team
(t_name varchar(20),
primary key (t_name)
);
create table P1_Player
(fname varchar(20),
lname varchar(20),
DOB date,
jersey_# int,
t_name varchar(20),
primary key (fname, lname, DOB),
foreign key (t_name) references P1_Team (t_name)
on delete cascade
);
create table P1_Coach
(fname varchar(20),
lname varchar(20),
t_name varchar(20),
foreign key (t_name) references P1_Team (t_name)
on delete cascade
);
create table P1_Game
(t_name varchar(20),
game_date date,
game_time time,
primary key (t_name, game_date, game_time),
foreign key (t_name) references P1_Team (t_name)
on delete cascade
);
create table P1_Plays
(t_name varchar(20),
game_date date,
game_time time,
primary key (t_name, game_date, game_time),
foreign key (t_name, game_date, game_time) references P1_Game (t_name, game_date, game_time)
on delete cascade
);
2条答案
按热度按时间zzwlnbp81#
如果你想在mysql/mariadb的列名中使用特殊字符,你应该使用反引号(`):
w46czmvw2#
您看到的错误消息表明,您在P1_Player表中用于外键约束的数据类型可能存在问题。请再次检查您是否为外键列使用了有效的数据类型,如INT或VARCHAR。
此外,请确保Player表中引用列的数据类型与P1_Player表中外键列的数据类型匹配。例如,如果Player表中的PlayerID列定义为INT,则P1_Player表中的外键列也应定义为INT。
下面是一个如何使用外键约束创建两个表的示例:CREATE TABLE Player(PlayerID INT PRIMARY KEY,PlayerName VARCHAR(50));
CREATE TABLE P1_Player(MatchID INT,PlayerID INT,Score INT,FOREIGN KEY(PlayerID)REFERENCES Player(PlayerID));
在此示例中,Player表中的PlayerID列定义为INT,P1_Player表中的外键列也定义为INT。FOREIGN KEY约束引用Player表中的PlayerID列。