MySQL学习记录(第三周)20211108-20211114

181 阅读3分钟

2021年11月8日

  1. 周末11月6-7日,没有学习,罪过啊。
  2. 使用union将两个select * from语句连接起来,分行书写时select要缩进,一行书写时select语句可以用括号括起来。
  • 以下三种是相同效果,只是顺序不同:
  • eg1
    (select * from tb where epmid='A102')
union
    (select * from tb where epmid='A103')
union
    (select * from tb where epmid='A104')
union
    (select * from tb where epmid='A107');
  • eg2
select *
    from tb
where empid
    not in ('A101');
  • eg3
select * 
    from tb
where empid
    in('A102','A103','A104','A107');

2021年11月11日

  • 表中name为'西泽'
  • 删除name = ''西泽''
  • 转义符号'
  • union 具有去重的作用

2021年11月13日

这两天为了在电脑上用命令提示符安装MySQL也是折腾了好几天,希望自己能越来越熟悉MySQL的安装。最后安装成功也是唯一一件让我欣慰的事,我把安装过程再描述一遍,以后尽量使用命令提示符安装。

  1. 解压下载好的压缩包,尽量在英文路径下,并在文件夹中创建一个my.ini文件在文件中编辑如下,其中安装目录按照自己存放MySQL的位置确定。
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8 
[mysqld]
#设置3306端口
port = 3306 
# 设置mysql的安装目录
basedir=E:\mysql-8.0.26-winx64
# 设置mysql数据库的数据的存放目录
datadir=E:\mysql-8.0.26-winx64\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
  1. 在【此电脑】-【属性】-【高级系统设置】-【环境变量】-【系统变量】-【path】-【新建】-【E:\mysql-8.0.26-winx64\binE:\mysql-8.0.26-winx64\bin】此处按照实际的路径填写。
  2. 用管理员启动命令提示符输入
  • mysqld --initialize-insecure --user=mysql等待一段时间,在能输入文字后输入
  • mysqld -install出现Service successfully installed.表示配置成功
  • net start mysql启动网络服务
  • 输入mysql -uroot -p此时没有密码,直接回车即可
  1. 修改密码
  • alter user user() identified by "admin";使用英文标点符号。
  1. 关闭网络服务net stop mysql

2021年11月14日

  1. 两个表之间的连接键(也就是相同的列信息,如员工编号,放到工程中可以是单元编号),如果列名相同可以使用using预计是连接更容易读。如果是分开写,要分别于第一个from的表进行连接,下例子是两个表tb1和tb2要与tb连接。
from
    tb
join
    tb1
on tb.empid=tb1.empid
join
    tb3
on tb.empid=tb3.empid
  • from后的表是左表,如果需要显示左表的全部信息使用left join,或left outer join;
  • 要连接的表是右表,如果需要显示右表的全部信息使用right join,或right outer join。
  1. 今天又被global.sql_mode折腾了半天,试了好几次书上介绍的排序小技巧,就是将年龄的表自连接排序,*在右侧相同的5行记录范围内,大于等于右侧age的值在左侧age中的个数就是排名。*代码如下:
select a.name,a.age,count(*)
    from tb1 as a
join tb1 as b
    where a.age<=b.age
group by a.empid;

就是在上面代码中弹出了错误如下:

ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'db1.a.name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

  • [only_full_group_by :使用这个就是使用和oracle一样的group 规则, select的列都要在group中,或者本身是聚合列(SUM,AVG,MAX,MIN) 才行,其实这个配置目前个人感觉和distinct差不多的,所以去掉就好] 重新设置一下:
  • SET@@global.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

aggregated美  [ˈæɡrɪɡeɪtɪd] - adj. 聚合的;合计的

incompatible [ˌɪnkəmˈpætəbl]- adj. 不相容的;矛盾的;不能同时成立的