mysql必知必会读书笔记1

全书共有30章,在通读完之后。进行总结。

全书可以划分为1,2章节是对MYSQL数据库的介绍;3章节是连接数据库;4-18章主要是查询的各种操作,是重点;19章是插入数据;20章是更新和删除数据;21章是对表的操作;22章-25章是对视图,存储过程,游标,触发器的介绍,剩下的章节是关于安全性和性能的一些知识。对常用的命令进行提取和注意点的总结。

对于性能的知识得格外的注意,防止开发过程中出现慢查询,导致阻塞。总结中采用 红色+倾斜+加粗的字体引起重视。其中,对于聚集函数的使用,应该根据实际项目中开发所碰到的表的数据量来决定是否使用,对于多人操作的量大的表,还是不要直接对表查询的时候进行一些聚集函数的操作,可以将数据返回之后,进行处理。


1.MYSQL数据库的介绍

数据库:保存有组织的数据的容器(通常是一个文件或者是一组文件)。

表:        同一数据库,表具有唯一的名字。

模    式:关于数据库和表的布局及特性的信息。貌似没有用过,先暂时省略。。

主    键:并不强求一定有主键,但还是最好保证创建的表具有一个主键,便于数据的操纵和管理。

 有几个好的习惯:

    1.不更新主键列中的值

    2.不重用主键列中的值

    3.不在主键列中使用可能会更改的值。(例如,如果使用一个名字)

SQL:是一种专门用来与数据库通信的语言。

MYSQL工具:

       1.mysql命令行实用程序

brew install mysql

mysql.server start

mysql -h 10.10.0.27 -u XXX -p

       2.mysql Administrator

       3.mysql Query Browser


2.连接数据库

    命令行:

    1.选择一个数据库

    USE database;

 输出:Database changed

    2.显示信息——> HELP SHOW;

    SHOW DATABASES;

   输出:可用数据库的列表

    SHOW TABLES;

   输出:当前选择的数据库内可用表的列表

    SHOW COLUMNS FROM customers;  或者 DESCRIBE customers;

   输出:SHOW COLUMNS要求给出一个表名,它对每个字段返回一行,行中包括字段名(Field),数据类型(Type),是否允许NULL(Null),键信息(Key),默认值(Default)以及其他信息(Extra).

    SHOW STATUS;

   输出:用于显示广泛的服务器状态信息;

    SHOW GRANTS;

   输出:用来显示授予用户(所有用户或特定用户)的安全权限

    SHOW ERRORS和SHOW WARNINGS;

   输出:用来显示服务器错误或者警告的信息


3.对数据库的查询

注意点:

    1.多条SQL语句必须以分号(;)分隔,不需要在单条之后加,但是总是加上总不会错;mysql的命令行,则必须加上分号来结尾;

    2.SQL语句不区分不小写,但为了规范对SQL的关键字使用大写,对所有列名和表名使用小写;

    3.使用空格:在处理SQL语句时,其中所有空格都被忽略。可以在一行或者多行给出。建议分成多行更容易阅读。

查询语句汇集:

1.检索单个列

        SELECT prod_name FROM products;

注:这条语句将返回表中的所有行,不用的人使用可能返回的数据顺序不一样,这是一种正常的情况。返回的数据没有特殊的意义,顺序可能是数据被添加到表中的顺序,也可能不是。只要返回相同数目的行,就是正确的。

2.检索多个列

SELECT prod_name,prod_id,prod_price FROM products;

3.检索所有列

        SELECT * FROM products;

注:除非确定需要所有的列,一般不建议直接使用通配符,检索不需要的列会降低检索和应用程序的性能。

4.检索不同的行

SELECT DISTINCT vend_id FROM products;

注:不能部分使用DISTINCT,DISTINCT关键字应用与所有列而不仅仅是前置它的列。如果给出SELECT DISTINCT vend_id,prod_price FROM products,除非指定的所有列都不相同,否则所有行都将被检索出来。

5.限制结果

SELECT prod_name FROM products LIMIT 5;

注:LIMIT 5,5指示返回从行5开始的5行。第一个数字为开始位置,第二个数字为要检索的行数。在行数不够时,LIMIT中指定要检索的行数为检索的最大行数,如果没有足够的行(例如LIMIT10,5;但只有13行),将只返回它能返回的那么多行。  

6.使用完全限定的表名

SELECT products.prod_name FROM products;

7.排序顺序

SELECT prod_name FROM products ORDER BY prod_name;

 注:按字母顺序排列。

8.按多个列排序

SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price,prod_name;

注:在按多个列排序时,排序完全按所规定的顺序进行。也就是仅在多个行具有相同的prod_price值时才对产品按prod_name进行排序,如果prod_price列中的所有的值都是唯一的,则不会按prod_name排序。

9.指定排列方向

SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price DESC;

SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price DESC,prod_name;

注:DESC只应用到直接位于其前面的列。上面,只对prod_price排序,对prod_name不排序。如果想在多个列上进行降序排序,必须对每个列指定DESC关键字。

10.使用WHREE子句

SELECT prod_name,prod_price,FROM products WHERE prod_name = 2.50;

       注:WHRER子句操作符:=,<>,!=,<,<=,>,>=,BETWEEN…AND..

   11.空值检查

SELECT prod_id FROM products WHERE prod_name IS NULL;

注:NULL 与不匹配,在通过过滤选择出不具有特定值的行时,你可能希望返回具有NULL值的行。但是,不行。因为未知具有特殊的含义,数据库不知道他们是不是匹配,所以在匹配过滤或者不匹配过滤时不返回他们。因此,在过滤数据时,一定要验证返回数据中确实给出了被过滤行具有NULL的行。

   12.AND操作符

SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id = 1003 AND prod_price <= 10;

    13.OR操作符

SELECT prod_name,prod_price FROM products WHERE vend_id = 1002 OR vender_id =1003;

注:AND和OR的计算次序,由于AND的优先级高于OR,所以在碰到a OR b AND c会处理成a  OR (b AND c),所以解决问题的方法是使用圆括号明确的进行分组。

14.IN操作符

SELECT prod_name,prod_price FROM products WHERE vend_id IN (1002,1003) ORDER BY prod_name;

注:上面的IN可以使用OR也生效。但是为什么要使用IN?

1.在使用长的合法选项清单时,IN操作符的语句更清楚且更直观。

 2.在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。

3.IN操作符一般比OR操作符的执行更快。

4.IN的最大优点是可以包含其他SELECT语句,使得能够更动态的建立WHERE语句。

15.NOT操作符

SELECT prod_name,prod_price FROM products WHERE vend_id NOT IN (1002,1003) ORDER BY prod_name;

 注:mysql支持使用NOT对IN,BETWEEN和EXISTS子句取反。

16.LIKE操作符

%通配符:任何字符出现任意次数。

SELECT prod_id,prod_name FROM products WHERE prod_name LIKE ‘jet%’;

 注:1.尾空格可能会干扰通配符匹配。解决这个问题的办法一是在搜索模式的最后附加一个%,另一个办法是使用函数去掉首位空格。2.WHERE prod_name LIKE ‘%’不会匹配到NULL值。

 _通配符:单个字符出现任意次数。

SELECT prod_id,prod_name FROM products WHERE prod_name LIKE ‘_ ton anvil’;

注:与%能匹配0个字符不一样,_总能匹配一个字符,不能多也不能少。

注:通配符搜索的处理一般要花费时间更长。下面是一些技巧:

1.不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。

2.在确实需要使用通配符时,除非绝对有必要,否则不要把他们用到搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起步时最慢的。

3.仔细注意通配符的位置。如果放错位置,可能你不会返回想要的数据。

17.正则表达式

基本字符匹配 :包含XXX的行

SELECT prod_name FROM products WHERE prod_name REGEXP ‘1000’ ORDER BY prod_name;

====================

LIKE 和 REGEXP:在LIKE和REGEXP之间有一个重要的差别。请看一下两条语句:

        SELECT prod_name FROM products WHERE prod_name LIKE ‘1000’ ORDER BY prod_name;

        SELECT prod_name FROM products WHERE prod_name REGEXP ‘1000’ ORDER BY prod_name;

 如果执行上面两条语句,会发现第一条语句不返回数据,而第二条语句返回一行。为什么?

LIKE 匹配整个列,如果被匹配的文本在列值中出现,LIKE将不会找到它,相应的行也不被返回(除非使用通配符)。而REGEXP在列值内进行匹配,(指的是包含1000的行)如果被匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回。这是一个非常重要的区别。

  那么,REGEXP能不能用来匹配整个列值(从来起于LIKE相同的作用)?使用^和定位符即可。

OR匹配

SELECT prod_name FROM products WHERE prod_name REGEXP ‘1000|2000’ ORDER BY prod_name;

匹配几个字符之一

SELECT prod_name FROM products WHERE prod_name REGEXP ‘[123] Tom’ ORDER BY prod_name;

 注:[^123]匹配除这些字符外的任何东西。

 匹配范围

SELECT prod_name FROM products WHERE prod_name REGEXP ‘[1-5] Tom’ ORDER BY prod_name;

 匹配特殊字符

SELECT vender_name FROM venders WHERE vend_name REGEXP ‘\\.’ ORDER BY vender_name;

 注意:mysql的转义需要两个反斜杠,mysql解释一个,正则表达式解释一个。

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

推荐阅读更多精彩内容