SQL:错误:靠近“(”:语法错误 | 主键问题

问题描述 投票:0回答:2

这是我第一次学习数据库。教授要求我们创建两个表并更改它们。

我正在尝试创建一个表

student

create table student
(
    name varchar(25) not null,
    std_num int(12),
    std_num(primary)
);

当我单击“运行 SQL”时,它显示以下消息:

错误:“(”附近:语法错误

没有额外的细节。

知道导致错误的原因以及如何修复它吗?

注意:我使用的是 Programiz 在线 SQL 编辑器。

我尝试删除以下代码:

std_num int(12),
std_num(primary)

然后,它创建了表。我是否以错误的方式在表中写入主键?

我的问题是:

  1. 错误含义:
    Error: near "(": syntax error
  2. 如何修复错误?
  3. 如何在表中正确包含主键? (如果我的方法错了)
sql database syntax-error primary-key database-table
2个回答
0
投票

我非常确定您使用的是 MySQL 或 MariaDB,它们通常不会指示错误的性质,这与其他提供详细信息的 RDBMS 不同。 因此,您犯了 3 个语法错误:

  • 表达式必须是 PRIMARY KEY
  • 表达式必须出现在表对象(列或约束)定义的开头
  • 并且不出现在括号中...

这是很多错误,我建议你在开始编写查询之前先学习 SQL 语言......

正确的代码是:

create table student
(
    name varchar(25) not null,
    std_num int(12),
    PRIMARY KEY std_num
);

0
投票

由于您没有提供您正在使用的数据库,所以我只是快速猜测它应该是其中之一:

MySQL
PostgreSQL
SQL Server
Oracle
SQLite

对于上述所有数据库类型,定义主键的语法

std_num(primary)
(如代码中所示)不是标准 SQL 语法。

定义主键有两种方法:

  1. 与列定义内联:PRIMARY KEY 关键字直接放置在列定义中。当表具有单列主键时,这种情况很常见。
CREATE TABLE student (
    std_num INT PRIMARY KEY,
    name VARCHAR(25) NOT NULL
);
  1. 单独的约束定义:PRIMARY KEY 关键字用在所有列定义之后,对于复合键(由多个列组成的主键)特别有用。
CREATE TABLE student (
    std_num INT,
    name VARCHAR(25) NOT NULL,
    PRIMARY KEY (std_num)
);

此外,MySQL 中的

int(12)
语法并不意味着整数有 12 位。相反,它指定了显示宽度,这通常是一个令人困惑的地方。对于主键,通常只需
int
就足够了,除非您对显示宽度有特定要求。

© www.soinside.com 2019 - 2024. All rights reserved.