2019/2/18更新
学习顺序:
入门:慕课网——与MySQL的零距离接触
工具:入门时期用cmd,其次进阶时期使用MySQL—front
工具书:MySQL必知必会
进阶:动力节点 mysql 郭鑫 34道经典的面试题
百度云盘:MySQL
网易云课堂:MySQL从入门到精通
MySQL实战45讲
进度安排:2019/2/24 进阶视频学习完
2019/3/3 动力节点面试题重做完
2019/3/10 猴子专栏案例学习
1.学习基本的MySQL使用和语句:安装、登录、创建数据库、创建表、添加数据、删除数据、更新数据、更改数据等
2.着重学习select语句,学习方式为:书籍+视频+实际操练。主要使用动力节点的面试题。
3.回头继续学习MySQL的其他基础知识,包括事务、存储引擎等。
4.找案例学习实战。网易MySQL数据分析实战、知乎猴子聊数据分析。
5.其他猎奇知识:慕课网MySQL开发技巧等,了解MySQL还有更广阔的知识等待发掘。
基础知识
1.除了SQL外,最重要的是学些一些细节,比如在SQL编辑环境下,“;”是每句话的结尾。在单条SQL上,不需要加;但要养成习惯。多个字段用的是“,”做分隔。
2.linux系统下命令含义
cd change directory 切换目录
ls list列表 即列出目录下的每一个文件
su switch user 切换用户
3.为什么要配置环境变量?
在使用命令行时,如果我们配置了环境变量,那么就可以直接使用相应的配置。例如在mysql中,在命令行中可以直接使用mysql -u等等,不需要考虑到底是在哪个盘中,如果不设置,输入就无法执行。
4.windows清屏命令行是cls
5.mysql忽略空格,所以不需要纠结空格会不会影响运行,如果便于阅读就应该加空格。
6.当年的误区:创建表之前要先把数据库打开。不是说创建了数据库,就顺带打开了。
create database mysql_shiyan
use mysql_shiyan
7.MySQL数据库的启动和数据库的登录不是同一件
net start mysql启动数据库
mysql -uroot -p是数据库的登录
8.数据库编码
set names gbk 只更改现在屏幕上cmd中显示的,写入到数据库中的还是系统设定的编码。
MySQL登录
1.mysql -u[名称] -p[密码]
疑问:为什么在教学时使用的是root,没有自己的mysql用户名称吗?如何设置呢?
2.提示符
最大的意义:终于明白了每条语句前一串名称是什么了。
最常见的是组合是;用户名·主机名称·当前数据库名称。例如:root@localhometest
提示符可以跟什么参数:\D(数据库) \d(时间) \h(主机) \u(用户名)
3.查看数据库内容 可以通过help来查看show的用法
查看所有数据库:show databases
查看所有数据表:首先要进入指定的数据库,查看该数据库内的所有数据表 show tables。也可以查看其他数据库的表 SHOW TABLES FROM mysql。
查看某个表格的字段:SHOW COLUMNS FROM 表名
查看警告信息:show warnings
查看数据库建立信息:show create database 库名
查看当前数据库:SELECT DATABASE() 是个函数?
查看编码:show variable “%char%”
MySQL操作
数据库
1.create database 数据库名
在创建数据库的时候,需要指定编码,使用:create database 数据库名 character set 编码。查看数据库编码语句:show create database 数据库名,显示创建数据的信息,编码。如果要修改数据库编码,使用:alter database 数据库名 character set = 编码。
2.drop database 数据库名 经常误认为是delete,这两个词有什么区别?
早期困惑:我原本以为删除什么就要先进入到什么的环境中,就想开始的时候要进入到对应的目录中去。但是删除表格或者数据库好像是用关键字来区分的,比如table 和database。因为创建数据表的时候是需要进去到对应的数据库中。
数据表
1.创建数据表
可以创建的内容非常多(表名 数据类型(大小) 是否允许空 默认值 是否自增长 主键)
CREATE TABLE 表名(字段名 数据类型(大小) 是否空 默认值 是否自增 主键) ENGINE=引擎
误区:创建表格和创建数据库不太一样的地方就是:不能只说 我创建一个表格。因为表格必须要包含内容(指字段)。当时学习的时候,看创建数据库是CREATE DATABASE 数据库名,就觉得创建数据表为CREATE TABLE,然后再写表结构。
2.删除数据表
DROP TABLE 表名。
删除数据库对象(结构上的东西)是用DROP,比如删除表,删除列。而删除数据库数据(其内容)应该是用DELETE。
3.更改数据表结构
alter table add column 字段名 数据类型
alter table drop column 字段名
4.插入数据
单个数据插入:insert into 表名(字段1,字段2)value(数据1,数据2)
插入select搜索的数据:insert into 表名(字段1,字段2)select(字段1,字段2)from 表名 where条件。
插入的字段数量要和被插入的表格保持一致。
5.更改符合条件的数据
updata 数据表 set 要更新的=新内容 where条件
6.删除数据 DELETE FROM 表名 where条件
确定表名,确定条件。delete的语句更其他都不太一样。
存储过程
储存过程是我新接触的知识,和函数,流程体三者构成一个复杂的SQL知识。
应用的场景:一个提数的业务场景,需要很多步才能完成这个提数,同时经常需要重复做,但每次都差不多,只是提数的条件不太一样,比如他需要女性的数据,他需要男性的数据。这个时候,可以使用存储过程(可以输入参数的:男性,女性),一方面解决多个SQL的书写问题,另一方面解决重复做的问题。
学习资料:百度云MySQL
我在学习陌生概念的时候,不知道为啥总会有一个预想,类比。然后依次为标准学习,如果我的预想是正确的,还好。如果不正确,后续的学习很多就不明白。
在学数学概念的时候,这种思维模式特别明显。一方面,数学概念比较抽象,另一方面,很多陌生概念。
错误的预想会导致对概念的本质理解错误,导致后续概念全都错误。
存储过程呢?
我以为是一个单独的代码,可以存在电脑里,需要的时候,找到路径调用就行了。
但实际上,代码需要存在MySQL中,创建的时候也需要再指定的数据库中创建。
另一个理解错误。修改分隔符,我以为是在后续运行中,可以让存储过程完整,不会因为;跳出过程。但是错了,修改分隔符是为了防止在创建的时候,用;结尾的时候跳出创建过程,导致后续的select语句,end等无法写出来。所以需要在创建存储过程前修改,然后完成后改回来。但在调用的时候不需要delimiter。
超过两个以上的语句,应该是用begin end
可以带有小括号,或者不带有
储存过程能使用大部分的select语句,但不能用于创建表,创建数据库。
1.创建存储过程
创建的时候要进去指定的数据库中
DELIMITER //
CREATE PROCEDURE 名字(参数)
BEGIN
SELECT语句
END//
DELIMIT ;
其中,SELECT语句要完整,既有“;”结束号。
2.调用存储过程
CALL 名字() 重要的是要有括号,不论有没有参数。
3.删除存储过程
错误:我刚开始用的是delete。还是我写的是DROP PROCEDURE 名字。但事实上,不需要指定PROCEDURE。不知道为什么。惯性思维。
查询
对于复杂查询一般都分步完成,有两种方法:
利用子查询:将上一步的查询结果做为条件,放在where中
利用关联查询:将上一步的查询结果做为一个临时表,join
当返回的结果为多列时,就不适合用子查询了。有时候需要结合逻辑符号,语句。
(待补充)
案例学习总结
1.《用SQL分析北京二手车市场现状》
数据分析前的准备工作:数据清洗。数据清洗几个常见步骤:
*选择子集
*删除重复值
*缺失值处理
*一致化处理