【问题标题】:MariaDB create database relational tablesMariaDB 创建数据库关系表
【发布时间】:2022-01-02 17:08:32
【问题描述】:

我创建了 2 个表,如下所示:

$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, performance text NOT NULL )' 附近使用的语法

现在错误行是:

user_id INT(11) REFERENCES users(id) UNIQUE NOT NULL

我浏览过 Maria DB 手册,但无法快速找到解决方案。 我知道这种语法在 postgresql 上运行良好。为什么它不能在 mysqli 上运行 我更喜欢为将来的更改等创建 2 个单独的表。 谢谢

【问题讨论】:

  • Not null 属于引用之前
  • 第一个表中email 行的末尾缺少逗号。

标签: php mariadb


【解决方案1】:

首先,检查您使用的是 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

【讨论】:

  • 10.5之前,简单分隔外键引用:dbfiddle.uk/…
  • @ysth,是的,没错。但数据类型仍然必须匹配。
  • @BillKarwin 响应非常适合并且工作正常。关键收益是列选项的 STRICT 顺序流
  • 太好了,我很乐意提供帮助。请记得投票和/或接受对您有帮助的答案(请参阅stackoverflow.com/help/someone-answers)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-10
  • 1970-01-01
  • 2011-04-02
  • 2011-01-14
相关资源
最近更新 更多