学习mysql中遇到的问题以及解决(一)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 学习mysql中遇到的问题以及解决(一)

学习mysql中遇到的问题以及解决(一)

问题1:字段加上单引号' ' 就报错啦,去掉单引号' '就正常了

问题2:default 加了括号就报错--同样,找到一个解释是:因为mysql自身版本问题(那咱就去()吧)。

问题3:mysql有时候报错是因为你重新修改了操作完没有注意语句的执行顺序啦

问题4:使用MySQL执行update或者delete的时候报错:~(报错提示要选主键或消除安全模式)

问题5:报错:where 不能直接使用内置函数噢!解决:通过嵌套查询—子查询的方式,使得内置函数不直接接触where啦!

问题6:select 时 聚合函数旁边有其他普通属性时,要使用group by,且group by 要包含除了聚合函数里的属性外的其他所有普通属性,因为mysql默认的模式 sql_mode是:

所选择的列都要参与分组,所以不小心写错,报错提示:所选的列既不在聚合函数也不是主键。

问题7:select+ select的查询时,被当做临时表的select要起个别名。因为派生表(临时表),需要起别名区分开来,才能当成一张普通表查询里边自己想要的属性。

问题8:关键字报错问题:保留关键字/非保留关键字:其中保留关键字需要加引号`` (``符号在键盘1旁边哈!)

问题9:两张表的共同属性关系是:1对多,(1对多 的外键引用关系不适合用内连接!)

----解决:需要起别名,“副表”,另外一张表的作用来区分开。

问题10:一个表不能有2个主键,因为主键代表数据的物理组织形式,所以不能存在2个。但是允许用多个字段联合组成主键。

解决例子:使用(主键组合)alter table SC add primary key(`Sno`,`Cno`);

 

 

 

 

1,字段加上单引号' ' 就报错啦,去掉单引号' '就正常了---找到一个解释的原因是说,mysql版本的自身原因,应该是新版的变量属性设计的时候,都系统为你加好了 单引号' '我的猜测),因为对于新版的变量属性,一旦加单引号必报错,

所以mysql8,一旦是变量,就不要再加单引号了。哈哈哈,宝宝,这里的符号搞错了噢,是那个长得跟单引号很像的符号反引号噢。修改符号为反引号,就不再报错了。


0.png

1.png


同样,


2.png3.png


补充:正确的反引号``


4.png


2,default 加了括号就报错--同样,找到一个解释是:因为mysql自身版本问题。


5.png6.png


3,mysql有时候报错是因为你重新修改了操作完没有注意语句的执行顺序啦,例如,上次执行添加进表(表的id是以主键添加进去),

第二次,你删除掉表id 的主键属性,然后重新修改表以加约束主键id,然后只执行最后这一句语句会报错的,提示Multiple primary key

 

 

4,使用MySQL执行update或者delete的时候报错:

例如执行:①delete from  Address; (Address 是一张表) 或者 执行:②delete from  Address where StuName='赵丽颖';      执行 都会报错!:

You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column  To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.

查看mysql安全模式状态:  show variables like 'sql_safe_updates';

因为版本较新的MySQL是在safe-updates模式下进行sql操作的,这个模式会导致在非主键条件下无法执行update或者delete
解决:设置一下取消安全模式即可:
 set sql_safe_updates=0; /*取消安全模式*/


当然设置回安全模式set sql_safe_updates=1; /*设置安全模式*/

 

 

5,报错:where 不能直接使用内置函数噢!

举例:


6.png


解决:通过嵌套查询—子查询的方式,使得内置函数不直接接触where啦!


7.png


6,group by 分组查询时,select 后边出现的列一定要参与分组【聚合函数的列就可以省略啦】


8.png


 

(1)select * from stu group by (stuId);     #stuId 是主键噢,正常执行

          select * from stu group by(telNum);       #telNum 非主键,报错

 

错误:SELECT list is not in GROUP BY clause and contains nonaggregated column 'studb.stu.StuId' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

翻译错误:所选的列既不在聚合函数也不是主键,错误原因是因为sql_mode 模式是所选择的列都要参与分组

 

(2)select 时 聚合函数旁边有其他普通属性时,要使用group by,且group by 要包含除了聚合函数里的属性外的其他所有普通属性:


9.png


10.png


(3)select ScoreId,SubjectId from score group by (ScoreId,SubjectId);

报错:操作数应包含1列:Operand should contain 1 column(s)。

把括号去掉,不再把两个列合在一起,单独成一列:select ScoreId,SubjectId from score group by ScoreId,SubjectId;

 

 

7,左连接后:报错:Every derived table must have its own alias

把(查到的学生信息对应考试信息,出现null,当做一个临时表)---派生表,需要起别名,才能当成一张普通表查询里边自己想要的属性。

例如:#查询缺考学生信息

把(查到的学生信息对应考试信息,出现null,当做一个临时表)


#查询缺考学生信息
select StuId,StuName from(
#学生表与成绩表的左连接,可以得到学生信息对应考试表,出现考试信息为null
select stu.StuId,StuName,Score from stu 
left join score on stu.StuId=score.StuId) where score is null;


报错:

报错:Every derived table must have its own alias

翻译报错:每个派生表必须有自己的别名。

解决: 给临时表(派生表)起个别名


#查询缺考学生信息
select StuId,StuName from(
#学生表与成绩表的左连接,可以得到学生信息对应考试表,出现考试信息为null
select stu.StuId,StuName,Score from stu 
left join score on stu.StuId=score.StuId) as 考试信息 where score is null;

8,关键字报错问题:

保留关键字/非保留关键字:其中保留关键字需要加引号`` (``符号在1旁边哈!) (宝宝,要睁大眼睛看噢,符号是引号``,    而不是 单引号’’),非保留关键字: 可以直接使用噢!



ps:一般mysql的图像界面工具会提示,当创建表格或者字段时提示错误,可能是使用了保留关键字!

举例:

11.png


解决:添加反引号``



12.png


9,两张表的共同属性关系是:1对多,(1对多 的外键引用关系不适合用内连接!)

----解决:需要起别名,“副表”,另外一张表的作用来区分开。

内连接需要一张表与另一张表的共同属性是1对1而不是1对多;(1:多只能选择子查询)

举例子:表结构如下:


13.png

14.png


题意:查询显示出结果如下:


15.png


分析:

内连接查询:

赛程表(只有队伍编号(分成:主队队伍编号、客队队伍编号))参赛队表(队伍编号对应队伍名称)

所以两个表需要通过队伍编号关联起来-----外键参赛表的队伍编号是赛程表的主队队伍编号、客队队伍编号的引用外键。

因为参赛队表(队伍编号对应队伍名称)中的 队伍编号 同时被赛程表(只有队伍编号(分成:主队队伍编号、客队队伍编号))中的 主队编号客队编号 引用作为外键,所以通过队伍编号的把两张表连接到一起,无法统一队伍编号是要与主队编号结合成一组还是和客队编号结合成一组。(1对多 的外键引用关系不适合用内连接!)

-----------不过通过,给表起别名区分开(实现了一对一),也是可以使用内连接的。

 

1、子查询:

#子连接
select (select TeamName from Team where Team.TeamId=`Match`.HostTeamId) as '主队',
MatchResult as '比分',
(select TeamName from Team where Team.TeamId=`Match`.GustTeamId) as '客队',
from `Match`;


2、2-1 起别名实现1对1的内连接:

#内连接

select Team.TeamName as '主队',MatchResult as '比分',t.TeamName as '客队',MatchTime as '比赛时间'
from Team, `Match`, Team as t where Team.TeamId=`Match`.HostTeamId and t.TeamId=`Match`.GustTeamId;        # t 是Team 这张表起的一个别名,有“副表”另外一张表的作用的意思

2-2 内连接写法2:

#内连接写法2
select Team.TeamName as '主队',MatchResult as '比分',t.TeamName as '客队',MatchTime as '比赛时间' from `Match`
inner join Team on (Team.TeamId=`Match`.HostTeamId)
inner join Team as t  on (t.TeamId=`Match`.GustTeamId);

3、内连接跟子查询结合起来使用

3-1.写法一:

select Team.TeamName as '主队',MatchResult as '比分',
(select TeamName from Team where `Match`.GustTeamId=Team.TeamId) as '客队',MatchTime as '比赛时间'
from Team, `Match` where Team.TeamId=`Match`.HostTeamId;

3-2.写法二:

#内连接inner join结合子查询
select TeamName as '主队',MatchResult as '比分',(select TeamName from Team where Team.TeamId=`Match`.GustTeamId),MatchTime as '比赛时间' from `Match`
inner join Team on Team.TeamId=`Match`.HostTeamId;


10,一个表不能有2个主键,因为主键代表数据的物理组织形式,所以不能存在2个。但是允许用多个字段联合组成主键


16.png


Error Code: 1068. Multiple primary key defined  (翻译:重复定义了主键)

解决:使用(主键组合):

#解决:使用(主键组合)
alter table SC add primary key(`Sno`,`Cno`);



相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
存储 关系型数据库 MySQL
|
1月前
|
SQL 存储 关系型数据库
【MySQL 数据库】11、学习 MySQL 中的【锁】
【MySQL 数据库】11、学习 MySQL 中的【锁】
76 0
|
存储 关系型数据库 MySQL
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】4、MySQL 事务学习
【MySQL 数据库】4、MySQL 事务学习
44 0
|
11天前
|
SQL 存储 关系型数据库
6本值得推荐的MySQL学习书籍
本文是关于MySQL学习书籍的推荐,作者在DotNetGuide技术社区和微信公众号收到读者请求后,精选了6本值得阅读的MySQL书籍,包括《SQL学习指南(第3版)》、《MySQL是怎样使用的:快速入门MySQL》、《MySQL是怎样运行的:从根儿上理解MySQL》、《深入浅出MySQL:数据库开发、优化与管理维护(第3版)》以及《高性能MySQL(第4版)》和《MySQL技术内幕InnoDB存储引擎(第2版)》。此外,还有12本免费书籍的赠送活动,涵盖《SQL学习指南》、《MySQL是怎样使用的》等,赠书活动有效期至2024年4月9日。
|
16天前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
|
存储 SQL 关系型数据库
|
1月前
|
存储 SQL 关系型数据库
【MySQL 数据库】6、一篇文章学习【索引知识】,提高大数据量的查询效率【文末送书】
【MySQL 数据库】6、一篇文章学习【索引知识】,提高大数据量的查询效率【文末送书】
56 0
|
2月前
|
SQL 关系型数据库 MySQL
MySQL数据库学习(小白一文掌握Mysql)
MySQL数据库学习(小白一文掌握Mysql)
42 0
|
2月前
|
SQL 存储 关系型数据库
学习mysql
学习mysql
39 5