【问题标题】:"You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax“您的 SQL 语法有错误;请查看与您的 MariaDB 服务器版本相对应的手册以获取正确的语法
【发布时间】:2020-02-05 08:15:31
【问题描述】:

我尝试将表创建到我的数据库中,但每次尝试时都显示已成功连接。 无法创建表。

您的 SQL 语法有错误;检查手册 对应于您的 MariaDB 服务器版本,以便使用正确的语法 近 Order( Order_id int(8) AUTO_INCREMENT, Cus_id int(8), Order_date 在第 1 行

无法创建表。

您的 SQL 语法有错误;检查手册 对应于您的 MariaDB 服务器版本,以便使用正确的语法 在第 8 行的“Order(Order_id))”附近

我已经包含了下面的代码。

CREATE TABLE Order(
Order_id int(8) AUTO_INCREMENT,
Cus_id int(8),
Order_date TIMESTAMP,
Primary Key (Order_id),
Foreign Key (Cus_id) References Customer(Cus_id))

CREATE TABLE OrderLine(
Order_id int(8),
P_code int(8),
Quantity float,
Price float,
Constraint PK_Orderline Primary Key (P_code,Order_id),
Foreign Key (P_code) References Product(P_code),
Foreign Key (Order_id) References Order(Order_id))

【问题讨论】:

  • 为什么是INT(8) 而不仅仅是INT? 8 是垃圾,无论如何都会被忽略。还可以使用DECIMAL(x,y) 来表示价格,不要将FLOAT 用于anything 财务。它会以各种不幸的方式四舍五入和破坏您的数据。
  • Order( 语法之间添加空格。 MYSQL 假设 table nameOrder(
  • 谢谢大家,我刚刚将“订单”重命名为“订单”,它解决了问题

标签: mysql mariadb


【解决方案1】:

ORDER 是一个Reserved Keyword,所以如果你想使用这个名字,你需要用反引号转义来指定它:

CREATE TABLE `Order` (...);

通常最好避免与 MySQL 内部冲突的表名或列名,因此如果可以重命名,请考虑这样做。

【讨论】:

  • 建议将您的订单表重命名为订单(订单的复数),因为它包含多个订单。通常(并非总是)表名是复数。但这取决于你。
  • 我习惯用单数写表名,因为在写查询时,大多数时候你都在寻找一个特定的行,而我使用SELECT Name, Lastname, Age FROM User [...]而不是更容易和更清晰比SELECT Name, Lastname, Age FROM Users [...]
  • @user3153340 这是一个偏好问题,但实际上复数形式通常效果更好,因为它更频繁地避免与关键字冲突。将“用户”视为所有用户的集合,而将“用户”视为某些特定用户有助于构建它。
猜你喜欢
  • 2020-04-29
  • 2021-05-12
  • 2018-11-27
  • 2019-10-24
  • 2017-02-11
  • 2022-01-14
  • 2020-05-07
  • 2020-02-22
  • 2016-06-17
相关资源
最近更新 更多