【问题标题】:Cannot add primary key constraint无法添加主键约束
【发布时间】:2019-11-11 03:45:50
【问题描述】:

我正在尝试创建一个表并使用alter table 添加一个约束,但它不起作用:

CREATE TABLE customer
(
cust_id NUMBER(3),
cust_name VARCHAR2(3),
phone_no NUMBER(10)
);

ALTER  TABLE  customer
ADD  CONSTRAINT  pk_customer
PRIMARY  KEY  (cust_id);

这是错误:

“CONSTRAINT”附近:语法错误

我做错了什么?

【问题讨论】:

  • 我认为您需要删除文本“CONSTRAINT pk_customer”。如果您是 MySQL 新手,您可能会发现 this 很有用。
  • 您需要向我们展示完整的错误信息。另外我认为您在标签中犯了错误。它应该是 mysql 而不是 mysqli
  • 这是 Oracle 数据库。你为什么用mysqli?
  • @TheImpaler 为什么说它是甲骨文?这是标签中的错误...请参阅上面的评论。

标签: mysql sql


【解决方案1】:

mysql 试试

ALTER TABLE customer
ADD PRIMARY KEY(cust_id);

或直接来自CREATE TABLE

注意! : mysql 中的兼容字段类型

CREATE TABLE customer
(
    cust_id NUMBER(3),
    cust_name VARCHAR2(3),
    phone_no NUMBER(10),
    PRIMARY KEY(cust_id)
);

【讨论】:

  • 您的答案还包含来自 Oracle DB 的 VARCHAR2。您可能需要考虑到这一点。
  • @Dharman,是的,只需按照设计复制他的字段即可。主要问题是关于 PK 的,并假设使用 CREATE TABLE 的第一个查询在问题 ALTER 之前有效。(假设只是一个错字)。如果不是,那就是另一个故事了......
  • @Dharman 甚至 NUMBER(10) 也不是 mysql 中的有效类型,但这是供他检查的。
【解决方案2】:

您的语句运行良好...在 Oracle 数据库(至少 12c1)中。

为了让您的查询在 MySQL 中工作,您需要更改数据类型。 (见SQL Fiddle)。例如:

CREATE TABLE customer
(
cust_id DECIMAL(3), -- changed here
cust_name VARCHAR(3), -- changed here
phone_no DECIMAL(10) -- changed here
);

ALTER  TABLE  customer
ADD  CONSTRAINT  pk_customer
PRIMARY  KEY  (cust_id);

【讨论】:

  • 抱歉回复晚了,我用jsfiddle.net/(mysql在线)上面的代码报错
  • 那是正确的,因为VARCHAR2NUMBER 在 MySQL 中是无效列类型。
  • 我正在通过全部替换进行测试,只需将 cust_id 保留为 INT,如下所示:CREATE TABLE customer ( cust_id INT ); ALTER TABLE customer ADD CONSTRAINT pk_customer PRIMARY KEY (cust_id); 但仍然出现相同的错误
  • 谢谢,它可以工作,但是在这个网站 (jdoodle.com/execute-sql-online),你的代码得到了错误,你能解释一下为什么,我不明白
  • 好的,该站点仅适用于 SQLite,不适用于 MySQL。完全不同的数据库引擎。
猜你喜欢
  • 2020-09-26
  • 2020-09-12
  • 2017-07-16
  • 2013-03-10
  • 2021-11-05
  • 2018-02-13
  • 2018-05-16
相关资源
最近更新 更多