MySQL精进之路(更新中)

学习背景

对于MySQL的学习也是刚刚开始,从有做数据分析的想法开始,最先学的就是python爬虫及数据处理,因为做分析自己要有数据可用,还要知道数据是怎么来的啊。而数据库基本就是企业的数据的仓库,如果做分析的话,所用的数据大都数需要从这数据库里面来,所以学习数据库就比较必要了。网上了解了一番之后,选择了MySQL作为学习对象,一方面用python操作MySQL的资料比较做,而且在企业应用也比较多(本来打算学之前存储爬虫数据的Mongodb的,但感觉用的企业不如MySQL多,就放弃了,作为第一门数数据库技能,先把MySQL学好,后面根据需要学其他的也应该是不太难)

学习目标

掌握数据库的基本操作,创建,删除,查询,更新,运算,异常值处理,数据导入导出

关于上面这些内容的学习,在MySQL中有两种操作方式,一种是通过shell指令控制,另外一种就是用MySQL Workbench这种图形化界面的操作。这两种操作方式都要过,但因为在图形化界面的操作相对简单,在这里记录的多是用shell指令的操作。

掌握这些基本操作之后,在工作中遇到就能快速上手,遇到问题再针对性学习。

对于学习的资料,我借了一本清华的书《MySQL5入门与提高》内容丰富,实操比较多,适合动手学习,就选它了.另外在网上也找了一个系列的教程,作为辅助学习。

计划时间每天3-4个小时,一周时间把基础过完,并做好学习记录,一方面加深学习映像,另外便于后面使用时直接查询。

数据库安装与初步使用

1.安装过程中踩了很多坑,找了很多资料,老是安装错误,鼓捣了几遍终于成功了,一把辛酸泪啊,还好平时被折腾地习惯了(微笑脸)

2.打开MySQL的shell控制台,输入密码就算是正式开始mysql正式之旅了!

3.查看当前数据库中所有的子数据库:show databases;选择进入某一个数据库:use world;【数据库名】出现database changed 就表示已经切换到当前数据库中了。

3.访问world数据库中的country数据表:select * from country;在数据库的table标签中就会出现country 数据表,可对该数据表进行查看和导出。同样可以用:show tables;查看当前数据库中有哪些数据表。

4.数据库的创建:用Wb(MySQL Workbench的简称)创建时比较方便,用指令创建则是:CREATE DATABASE IF NOT EXISTS bookmanages;检查 bookmanages 是否存在并进行创建。

创建成功

5.查看某个数据库的详细信息:show create database bookmanages;由于这个数据库刚刚被创建,它还是空的内容,稍后我们加入内容。

6.删除数据库: drop database test_mysql;

数据表的操作

1.数据表的创建,Wb 创建数据表相对来说比控制台方便的多,这里就用Wb演示吧。在控制台中指令也差不多。在刚刚创建的数据库的tables右键单击create table

在最上面的部分中,table的名字为必填项,中间是表中包含的列。然后apply,出现下图,图中就是表的创建代码,确认无误后直接点击apply,则数据表创建完成。

2.查看数据表的结构,这里用查看刚刚创建的数据表:use bookmanages;desc book;

这就可以看见我们刚刚在wb中创建的book表,其中Field为字段名称,type为字段类型,NULL表示该字段是否可以存储NULL值(是否允许空值),Key表示该列是否已经编制索引,default表示是否有默认值,有的话为多少,extra 表示获取相关附加信息。

3.查看表的详细结构:use bookmanages; show create table book;这些在wb中就是点击鼠标的事,就不叙述了。

4.添加表数据,这里先用wb演示:

而想要用程序输入呢,用insert into指令,例如插入一行数据:use bookmanages; insert into book(sid,cat_book,num_book) values(6,"经济学",45);查看表数据:use bookmanages; select *from book;

5.修改表的名字:use bookmanages;alter table book rename books;

6.数据的更新,当我们的数据完成插入或在查询的过程中发现有错误数据时,就需要对错误数据进行更新。这里我们用update进行操作:update 表名 set 字段1=值1,字段2=值2 where 条件表达式。

update

数据表的查询

对于运用数据这样的一项工作来说,查询数据无疑是最为主要的,我们需要从企业的数据库中查询提取自己需要的数据,因此这一部分相对来说是最为重要的。(当然对于查询数据来说,最为方便的就是利用语句来进行查询,这里主要介绍在控制台下应用查询功能)

1.查询表中所有的字段:SELECT 字段1,字段2,......FROM table_nameh;或者我们在之前使用过的SELECT * FROM language;

2.查询指定字段:SELECT 字段1,字段2,......FROM table_nameh;(在这里指出需要查询的字段即可,与1中类似)

3.根据条件查询数据:SELECT 查询字段 FROM table_name WHERE 条件表达式;这里面的条件表达式可以是比较表达式,指定范围表达式,是否为空,匹配字符或其他多个查询条件等,下面简单演示一下;

3.1,通过比较查询

查询id为5的用户数据
id大于2

3.2通过BETWEEN ADN 对某个字段指定 某个范围进行查询;如果字段的值在指定的范围内,则满足查询条件,数据将会被查询出来;

id在2-20之间的数据

3.3,通过and和or进行查询这两个连接词就相当于“与”“或”的意思,其中and表示必须满足连接的两端的条件,而or则是表示满足两端条件之一即可。

and
or

3.4,通过IN进行查询:IN可以判断某个字段的值是否在集合中:[NOT] IN (元素1,元素2......)

3.5,通过LIKE进行查询,like判断是否与指定的字符串相匹配,如果字段的值与指定的字符串相匹配,则满足查询条件,数据将会被查询出来。[NOT] LIKE '字符串',在这里的字符串可以是完全匹配,也可以是条件匹配,如a%b就表示满足以a开头b结尾的任意长度的字符串,而a_b则表示以a开头b结尾的三个字符

3.6空值查询:查询某个字段中是空值的数据:IS NULL;

4.分组查询:group by,单独使用时,分组后,只显示一个分组的一条记录。

按地域分组

在下面则是针对多个字段进行分组,首次根据Continent进行分组,当遇到Continent相同时,再根据Region进行排序。

利用group_concat将分组后的数据的归类到某一组中:

5.HAVING查询:满足HAVING指定的条件表达式时,结果被显示出来,否则排除不予显示。它和WHERE不同的是,where作用于表或视图,而HAVING作用与分组后的记录,用于选择满足条件的分组。

6.排序查询:ORDER BY 字段名  [ASC | DESC]这里面默认是从小到大排序,加上DESC之后就是从大到小排序。

排序查询

7.LIMIT限制查询数量,不加条件时则是从第一条数据开始计算,也可从指定的位置开始计数

从第三条后开始计数,显示两条数据

8.避免重复查询,当数据表中的字段没有添加唯一性或主键约束时,重复值就可能出现,这个时候我们就可以用distinct来消除重复数据。

9.查询集合函数:这里的集合查询函数主要有:计数COUNT(),均值AVG(),求和SUM(),最大值MAX(),最小值MIN()。

计数
平均值
最大值,最小值


.10.子查询,有时候我们所需要的数据没有在一张表中,我们就需要子查询,子查询是讲一个查询语句嵌套在另一个查询语句中,内层的查询结果可以作为外层查询的条件:如SELECT title,description FROM film_text WHERE title=(SELECT title FROM film  WHERE rental_rate=4.9);这样的一个查询语句就是在表film中筛选rental_rate=4.9的数据的title字段,然后将其传递给title作为在表film_text选择数据的标准。类似的还有IN查询。

exist查询,用exit查询时,内层的函数不返回查询的记录,而是返回一个真假值,当内层函数为真(True)时,外层查询语句进行查询,反之,外层语句则不进行查询。

ALL和ANY关键字查询,ALL表示满足所有的条件,ANY表示满足其中任意一个条件即可,这两个关键字通常与比较字符一起使用。

除了这些查询匹配方式之外,还有另外一种就是用正则表达式匹配数据,也是非常的强大,这个只需要记住它的关键字为REGEXP,配合匹配字符即可。

MySQL中的内部函数

对于数据库的应用来说,我们往往需要对数据进行统一化清洗,这个时候利用一些SQL的内部函数就显得非常方便了。

1.获取字符的长度,LENGTH(str)返回的长度单位是字节,CHAR_LENGT(str)返回的长度单位是字符。当字段为英文时,两者的返回结果都是一样的,当有中文出现的时候,两者的返回结果就不同了。一个汉字占三个字节,而一个字母或者数字只占一个字节。

2.合并多个字符串,这里有两种合并连接字符串的方式,一种是CONCAT(.....),一种是CONCAT_WS(x,str1,str2......),第二种可以一次性指定连接的方式,第一种可以给出个性化的连接方式:

3.截取指定位置的字符串:这里用SUBSTRING(str,pos,len)函数和MID(str,pos,len)函数,他们都是从指定的字符串str第pos个位置开始获取长度为len的字符串。

4.字母的大小写转换,为了得到标准化的数据,我们往往需要做字母的大小写进行转换,这里我们使用UPPER(str)转换为大写,用LOWER(str)转换成小写。

5.删除空格和指定字符,这一点在数据清洗的过程中用的还是非常多的。其中,LTRIM(str)是删除开始处的空格(左边),RTRIM(str)是用来删除结尾处的空格(右边),而要对左右的空格都进行删除的时候就用TROM()函数完成删除左右两边的空格(TRIM ( BOTH FROM  'str'))

6.替换字符串:INSERT(str,pos,len,newstr)它表示将字符串str中pos位置开始,长度为len的字符串用newstr进行替换,这里主要用于替换指定长度的字符串,而如果只想要替换字符串中的内容,则可以用REPLACE(str,from_str,to_str)进行,它表示在原始字符串str中,用to_str字符串替换str中的from_str字符串。

insert
replace

6.常见的时间,日期函数:日期curdate(),时间curtime(),当下时间NOW(),星期(英文)dayname(NOW()),(数字)dayofweek(NOW()),月份MONTH(NOW())

7.时间的计算,求相隔天数DATEDIFF(D1,D2),天数的加减,adddate(D,N),subdate(D,N),其中D为日期,N为天数。以及addtime(T,N),subtime(T,N),这里面N为秒数。

8.格式化时间和日期:DATE_FORMAT(D,F)其中D表示日期,F表示指定的显示格式,

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容

  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,005评论 0 19
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,296评论 18 399
  • 遇见真正的自己,你就知道如何对待生命中的不允许。 我们的生命本来就是精彩绝伦的,在这样的体验中,我们如何去拓宽我们...
    简宁宝儿阅读 157评论 0 0
  • 看了和仙女去天津时的照片,想起来了那时间的事情,在海河边散步,在意大利区拍照,在公园里吃烤鸭,才过去这么几天竟感觉...
    繁意阅读 480评论 1 1
  • 出差这么多次,还是会强迫症的每次用笔写下需要带什么,这次还是形成文章,可以不断修改,听听大家的意见。 求走过路过提...
    Amaris的大堡礁阅读 60,469评论 11 19