我创建了两个表,如下所示:
$sql = "CREATE TABLE users (
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user_id VARCHAR(25) UNIQUE NOT NULL,
password VARCHAR(256) NOT NULL,
first_name varchar(25) NOT NULL,
last_name varchar(25) NOT NULL,
email varchar(50) UNIQUE NOT NULL
date_created VARCHAR(25) NOT NULL,
date_modified VARCHAR(25) NOT NULL
)";
已成功创建此表。
我尝试创建如下第二个表:
$sql = "CREATE TABLE users_performance (
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user_id INT(11) REFERENCES users(id) UNIQUE NOT NULL,
performance text NOT NULL
)";
此操作失败,出现以下错误:
创建表时出错:SQL语法出错;检查与您的MariaDB服务器版本相对应的手册在第3行"NOT NULL,性能文本NOT NULL("附近使用的语法
现在错误行是:
user_id INT(11(REFERENCES users(id(UNIQUE NOT NULL
我浏览了Maria DB手册,但无法快速找到解决方案。我知道这个语法在postgresql上很好用。为什么它在mysqli上不起作用我更喜欢创建两个单独的表以备将来更改等。感谢
首先,检查您是否正在使用MariaDB 10.5或更高版本。内联外键未在旧版本的MariaDB中实现。
然后,将UNIQUE NOT NULL
移动到外键选项之前。列选项的顺序很重要。
此外,请确保外键列的数据类型与其引用的列相同。在这种情况下,您需要将其设置为INT UNSIGNED
。";长度";选项(11)
无关紧要,您可以省略它。
user_id INT UNSIGNED UNIQUE NOT NULL REFERENCES users(id),
演示:https://dbfiddle.uk/?rdbms=mariadb_10.5&fiddle=54964388cd0d880169c0332934c13b3d