check the manual that corresponds to your MySQL server version for the right syntax to use near解决办法

问题背景

网上也有类似的报错,出现这种报错的原因有很多种,我就说说我遇到的,还没搜到的🏃‍♂️🏃‍♂️🏃‍♂️

我是在写数据库关于数据库完整性那一章的实验报告时遇到的:

参照课本第5章中的例10定义新的学生表S2,为S2中定义的约束进行命名,并用alter table语句去对表S2中已定义的某个约束进行删除操作。

当时书上的例子是这样的:

CREATE TABLE S2(
  Sno NUMERIC(6)
		CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999),
  Sname VARCHAR(20)
		CONSTRAINT C2 NOT NULL,
  Ssex NUMERIC(3)
		CONSTRAINT C3 CHECK(Sage<30),
  Sage CHAR(2)
		CONSTRAINT C4 CHECK(Ssex IN ('男','女')),
		CONSTRAINT Student_Key PRIMARY KEY (Sno)
);

但是我在Navicat上运行后就报错了:
在这里插入图片描述


问题提出

好奇,为什么我不能给完整性约束条件命名呢?😐😐😐
是因为我的MySQL版本太低了吗?(MySQL5.1)


问题解决

然后我就去MySQL的官网上查MySQL5.6的参考手册,发现关于约束这一块,在MySQL5.6的参考手册上就只有这一个外部关键约束:
在这里插入图片描述
通过观察,貌似CONSTRAINT只能定义外键约束,给外键约束赋别名
在这里插入图片描述
所以只能把CONSTRAINT去掉,只剩下CHECK短语:

CREATE TABLE S2(
  Sno NUMERIC(6)
		CHECK (Sno BETWEEN 90000 AND 99999),
  Sname VARCHAR(20)
		NOT NULL,
  Ssex NUMERIC(3)
		CHECK(Sage<30),
  Sage CHAR(2)
		CHECK(Ssex IN ('男','女')),
		PRIMARY KEY (Sno)
);

这样就可以运行成功了。

而又看了看MySQL8.0参考手册,有了新发现,发现专门有一个检查约束
在这里插入图片描述
终于让我找到了原因
在这里插入图片描述
我那卑微的5.1向8.0低头了🤦‍♂️🤦‍♂️🤦‍♂️
所以就没法对约束进行操作了。
不过可以删除外键约束,虽然这个表格里没有,不过可以说出方法,去Navicat里面,打开:
在这里插入图片描述
可以看出他这个外键约束名是电脑给他的。
语句:ALTER TABLE selectcourse DROP selectcourse_ibfk_1;


如有问题,请私聊。

posted @ 2020-05-13 23:01  坤舆小菜鸡  阅读(631)  评论(0编辑  收藏  举报