2021年10月26日
- select 字段 from 列表
- 一次不显示全部避免一次显示太多造成效率降低,使用limit语句:
- select * from chapter8 limit 3;
- 在mysql的bin下启动net start mysql
- 查看版本:select version();
- 创建:CREATE DATABASE liyang;
- 查看当前的数据库:SELECT DATABASE();
- 在进入数据库后直接输入prompt \h \u \d>>>就可以查看当前的使用的数据库了。
- 进入数据库:use db1;
2021年10月27日
- 创建表:CREATE TABLE 表名 (列名1 数据类型1,列名2 数据类型2……);要注意列名和数据类型之间有空格,一般整形是int,字符型是varchar。使用varchar要写明长度varchar(10)
- 例如:创建表格:create table tb1(empid varchar(10),name varchar(10),age int);尽量使用英文。
- 查看当前表格的结构:desc tb1;
- 向表格中插入值:insert into tb1 values('A101','佐藤',40)
- 向表中一次性输入记录:insert into tb1 (a,b,c) values(a1,b1,c1),(a2,b2,c2),(a2,b2,c2),(a3,b3,c3);
- 复制表:create table tb1a select * from tb1;
- 增加列表的列:alter table tb1a add birth datetime after empid;
- 主键的意思是不能重复,不能为空;primary key
- between 大于等于xx,小于等于xx
- between:20<=x>=50
- not between 小于xx或大于xx
- not between:x<20 x>50
- %任意字符串;例如A101、A201、A301都可以表示为'%1'
- %川--前方一致检索
- 川%--后方一致检索
- %川%--部分一致检索
-
_任意一个字符
-
当and和or混合使用时,会优先处理and,所以当需要优先执行or的时候,可以使用()。
-
distinct去除重复
- select distinct(empid) from chapter8;
2021年10月28日
- 使用concat合并字符串的时候,可以在字段名中间加逗号隔开,这时','也作为字符处理:
- 例如:concat('a',',','b',',','c');
- select concat('empid',',','sales',',','month') from chapter8;输出全是empid,sales,month,需要按数据输出的话,concat(empid,',',sales,',',month)
- concat字符为null的合并后的字符也变为null,类似0乘以任何数等于0;
2021年10月29日
- 升序asc,ascend
- select * from chapter8 order by sales asc;
- 降序desc,descend
- select * from chapter8 order by sales desc;
- offset'开始显示记录的移位数',是指'移动多少位后开始显示记录'的数字和limit配合;
- select * from chapter8 order by sales desc limit 2 offset 3;
- 在使用goup by分组显示的时候出现如下的错误:
- ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'db1.chapter8.sales' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
解决办法:
- 查询mysql 相关mode
- select @@global.sql_mode;显示如下:
- @@global.sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
- 可以看到模式中包含了ONLY_FULL_GROUP_BY,只要没有这个配置即可。我的Mysql版本是5.7.24,默认是带了ONLY_FULL_GROUP_BY模式。
- 重设模式值
- 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;
-
重启Mysql即可
-
HAVING设置的条件适用于分组的结果值。
- “先分组后提取”与“先提取后分组”显示结果有区别:
- 在求平均值的过程中应使用“先分组再提取”,如果使用“先提取再分组”可能过滤调一部分数值;
select empid,avg(sales) from chapter8 group by empid;select empid,avg(sales) from chapter8 where sales>=50 group by empid;- 过滤调了sales>=50的一部分数值。
2021年10月30日
- 提取记录后分组,使用where设置提取提交,然后通过group by进行分组。
- 分组后提取记录,使用group by进行分组,然后使用having提取记录。
- 最后使用order by对分组进行排序
- 顺序一定要注意:1.where条件➡2.group by…➡3.order by…(desc)
2021年10月31日
- 为了防止意外执行update和delete,在启动msql监视器的时候加上 --safe-updates选项,还有一点就是新创建一列,alter table chapter8 add remark varchar(100)再执行update。
- 修改mysql在我的电脑里的path,右击【我的电脑】-选择【属性】-【关于】右侧-【高级系统设置】-【高级】-【环境变量】-【系统变量】-【path】-我用的是MAMP所以使用C:\MAMP\bin\mysql\bin