LCL WARNING前端
这是我学习《PHP和MySQL Web 开发》的读书笔记,一些重要的知识点我会记录下来,固然只会写我以为重要的。mysql
若是有幸有人看到这个学习笔记了,你要结合着书看,不要光看这个笔记。sql
在笔记里我会记录一些我学习中遇到的问题和解决办法与注意事项。数据库
为了方便管理和查找,文章或者说笔记的目录我就按照书里的排了,方便对比着看。编程
不是教学!重要的是说一遍!我是PHP和MySQL 的初学者,我自己是个前端,为了面向工资编程,拓宽知识面才学的。后端
其实仍是有一些私心得,由于都说教学相长 和 小黄鸭调试法,我这个是小老虎学习法,对着小老虎讲知识点,保证本身学的扎实,能挣钱。服务器
欢迎探讨和指教,须知一山更比一山高,可是拒绝杠精!学习
李重楼编码
本章主要是介绍了:spa
你仔细看,每章前的描述,本章主要有介绍什么什么内容,那基本上都是你要掌握的,看完一章回来对对这个列表,都会了嘛。开始吧。
SQL的全称是Structured Query Language。它是访问关系数据库管理系统的标准语言。
Structured Query Language 结构化查询语言,structured 结构化的,读['strʌktʃəd] 。
用于定义数据库的数据定义语言(Data Definition Language,DDL)和用于查询数据库的数据操做语言(Data Manipulation Language,DML).SQL包含这两个基础部分。
insert 语句一般格式以下:
INSERT [INTO] table [(col1,col2,col3,...)] VALUES (value1,value2,value3,...);
书中给的例子:
insert into customers values (null,'Julie Smith','25 Oak Street','Airport West');
结合书都能看明白吧?
划重点:mysql中的字符串应该包含在一对单引号或双引号中。
使用 insert 语句指定插入的值会按照插入的顺序添加到表中的列。
如不按照列顺序添加,要指定添加列以下:(好比说只更新用户名)
insert into customers (name,city) values('Melissa Jones','Nar Nar Goon North');
或
insert into customers ->set name = '李重楼', ->address = '莲花池水沟子', ->city = '北京';
然好好好看看关于customerid列指定为null是为何?(一下子结合查询看一下查询出来的结果,customerid列的值是什么。)
插入多条数据时,参看程序清单10-1,每一个括号内是一条数据,括号间逗号分隔。
LOW_PRIORITY关键字
LOW_PRIORITY 低优先级,主动的下降了语句执行的优先级。(了解便可,我问了后端和爬虫的同事,说不怎么用...)
MySQL的默认的调度策略可用总结以下:
· 写入操做优先于读取操做。
· 对某张数据表的写入操做某一时刻只能发生一次,写入请求按照它们到达的次序来处理。
· 对某张数据表的多个读取操做能够同时地进行。
DELAYED关键字
DELAYED 延迟,延迟插入。这个也先了解,我看到后面重要的话,我回来再修改补充这里。
DELAYED调节符应用于INSERT和REPLACE语句。当DELAYED插入操做到达的时候, 服务器把数据行放入一个队列中,并当即给客户端返回一个状态信息,这样客户端就能够在数据表被真正地插入记录以前继续进行操做了。
前边的基本格式我就不写了,太长了关键是,实在是懒得敲了。
此处有个重点要说明一下:from 是从..的意思 是 F !! R!! O!!! M!!! form是表单!!!别写错了,出错误的时候检查一下这个命令关键字!再看看表名!列名有没有写错!少个S多个S啥的! 这都是血泪换来经验啊!要好好记住啊~乖!!!
上面那段红字,实际上是在我初次看书,实操代码时候记下来的,这里一样写了出来。但愿对你有帮助。
书上的代码必定要跟着敲,多敲才能手熟,才能发现问题,好比我用bookorama帐号登陆的数据库,查询结果就都变成了乱码,首先我敢确定,这是编码问题。而后我Google了怎么解决,可是呢,我不敢改,由于我用的是公司项目的开发版本数据库,虽然有正式版本做后盾,可是乱改配置我也得掂量一下,因此呢,这里我先放一下。(若是你解决了你告诉我怎么解决的,我这里的编码是utf8mb4的,也请告诉我,root不错乱,可是bookorama 为啥错乱,谢谢。)
select name ,city from customers;
经过在select关键字后给出列名称,能够指定(查询)任何数量的列。
其中一个有用的是通配符 “ * ”(星号),它能够匹配指定一个或多个表中的全部列。
如今呢,尝试一下经过通配符查询customers表,看一下在插入数据时,指定为null或为空的customerid列的值都是什么,这可以帮助你理解自增量。
查询结果以下:(我这个本身改了点数据,可能和你的不同,以理解为主吧)
+------------+-----------------+--------------------+--------------------+ | customerid | name | address | city | +------------+-----------------+--------------------+--------------------+ | 1 | 刘能 | 牡丹江大街 | 牡丹江 | | 2 | 李重楼 | 北京中 | 北京 | | 3 | 谢广坤 | 保定市徐水县 | 保定 | | 4 | Alan Wong | 1/47 Haines Avenue | 保定 | | 5 | Michelle Arthur | 357 North Road | Yarraville | | 6 | Melissa Jones | c3-1 | Nar Nar Goon North | +------------+-----------------+--------------------+--------------------+
另外一个是,若是不知道当前表,或者你须要操做的表都包含哪些列,列名,数据类型,主键是什么的话,下面这个命令没忘吧?
describe tablename;
查询结果以下:(customers表结果)
+------------+-----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+-----------+------+-----+---------+----------------+ | customerid | int(11) | NO | PRI | NULL | auto_increment | | name | char(70) | NO | | NULL | | | address | char(100) | NO | | NULL | | | city | char(30) | NO | | NULL | | +------------+-----------+------+-----+---------+----------------+
WHERE语句指定了用于选择特定行的条件。
首先翻回去一页,看一下 where 在select查询语句基本格式中的样式。
它是方括号内的,表示可选的。也就是你有须要能够加上。因此,你要学会看基本格式。
select * from orders where customerid= 3;
能够看出,命令是分行的,你也能够按回车分行敲,也能够一行敲,区别是,若是你分行敲,方便MySQL指出第几行由错误。(我都是一行敲的,方便按键盘方向键上下键切换语句)
我书里的命令是 where customerid= 3,可是书中写的是customerid为5的行将被选中。我以为是书写错了,查询出来的应该是按照条件查询出的结果,一切以实际操做结果为准。(个人书是原书第四版,若是不是编辑没校订这一块,那他妈就是盗版书的问题了)
表10-1中列出了经常使用的的比较操做符,本身看吧,能够都操做一下,看一下效果。
特别的列出 BETWEEN 的列子:(between 是这么用的)
select * from customers where customerid between 10 and 16;
而后尝试一下AND和OR组合,使用条件。
这一节的点睛之笔来了啊,其实数据库的点睛之笔也是这句话。(我的认为)
要经过数据回答一个问题。
开始吧。
这些数据分布在不一样的表中,由于他们与现实世界的对象相关。
书中说在第8章介绍过了。
当建立一个数据库时,咱们常常为现实世界的实体和关系创建模型,而且储存这些实体对象与关系的信息。
要在SQL中奖这些信息放到一块儿,必须执行一个名为关联的操做。简单地说,这意味着须要根据数据间的关系将两个或更多的表关联到一块儿。
select orders.orderid,orders.amount,orders.date from customers,orders where customers.name='Julie Smith' and customers.customerid = orders.customerid;
一个很重要的关联准则请记住:
由于是经过来自两个表的信息来完成这个查询,所以咱们必须将两个表都列在这里。(你的查询中,须要列出你要查询的列数据从哪一个数据表中来。)
表名之间的逗号等价于输入INNER JOIN 或 CROSS JOIN。
有时也称为彻底关联或表的笛卡尔乘积。
笛卡尔乘积...这个比较迷,我给数学很差的同窗们解释一下:(两两相乘?)
简单的说就是两个集合相乘的结果。
具体的定义去看看有关代数系的书的定义。
直观的说就是
集合A{a1,a2,a3} 集合B{b1,b2}
他们的 笛卡尔积 是 A*B ={(a1,b1),(a1,b2),(a2,b1),(a2,b2),(a3,b1),(a3,b2)}
任意两个元素结合在一块儿
而后书里说了,这个没意义。确实没有意义,你输入一下 select * from customers,orders; 你就会看到这两个数据表的笛卡尔乘积 。我就不贴,太长了。
因此,咱们须要经过 where子句使用关联条件,来筛选出有意义的数据。
书中例子已经给出了(customers.name='Julie Smith' and customers.customerid = orders.customerid;)筛选出Julie Smith的订单。
我的总结一下: