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;


2020.7.26更新
我们班的带佬看到我的博客后发现些问题

1.课本上的约束之所以不能定义,是因为 MySQL 的语法中约束命名时要加逗号,见下图
在这里插入图片描述
并且,这个 check 约束是个很鸡肋的约束,没有个锤子用,写上不报错,并不能对实际数据进行约束,见下图在这里插入图片描述
2.not null 的约束不能命名,所以课本上会报错


如有问题,请私聊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值