《PHP和MySQL Web 开发》 第10章 使用Web数据库

LCL WARNING前端

  1. 这是我学习《PHP和MySQL Web 开发》的读书笔记,一些重要的知识点我会记录下来,固然只会写我以为重要的。mysql

  2. 若是有幸有人看到这个学习笔记了,你要结合着书看,不要光看这个笔记。sql

  3. 在笔记里我会记录一些我学习中遇到的问题和解决办法与注意事项。数据库

  4. 为了方便管理和查找,文章或者说笔记的目录我就按照书里的排了,方便对比着看。编程

  5. 不是教学!重要的是说一遍!我是PHP和MySQL 的初学者,我自己是个前端,为了面向工资编程,拓宽知识面才学的。后端

  6. 其实仍是有一些私心得,由于都说教学相长 和 小黄鸭调试法,我这个是小老虎学习法,对着小老虎讲知识点,保证本身学的扎实,能挣钱。服务器

  7. 欢迎探讨和指教,须知一山更比一山高,可是拒绝杠精!学习

 

李重楼编码

 

本章主要是介绍了:spa

  • SQL是什么
  • 在数据库中插入数据
  • 从数据库中取回数据
  • 表的连接
  • 使用子查询
  • 更新数据库中的记录
  • 删除数据库中的记录
  • 删除表

你仔细看,每章前的描述,本章主要有介绍什么什么内容,那基本上都是你要掌握的,看完一章回来对对这个列表,都会了嘛。开始吧。

 

10.1 SQL是什么

SQL的全称是Structured Query Language。它是访问关系数据库管理系统的标准语言。

 Structured Query Language 结构化查询语言,structured 结构化的,读['strʌktʃəd] 。

用于定义数据库的数据定义语言(Data Definition Language,DDL)和用于查询数据库的数据操做语言(Data Manipulation Language,DML).SQL包含这两个基础部分。

10.2 在数据库中插入数据

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插入操做到达的时候, 服务器把数据行放入一个队列中,并当即给客户端返回一个状态信息,这样客户端就能够在数据表被真正地插入记录以前继续进行操做了。

 

10.3从数据库中获取数据

前边的基本格式我就不写了,太长了关键是,实在是懒得敲了。

此处有个重点要说明一下: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    |                |
+------------+-----------+------+-----+---------+----------------+

 

10.3.1获取知足条件的数据

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组合,使用条件。

 

10.3.2从多个表中获取数据

这一节的点睛之笔来了啊,其实数据库的点睛之笔也是这句话。(我的认为)

要经过数据回答一个问题。

开始吧。

这些数据分布在不一样的表中,由于他们与现实世界的对象相关。

书中说在第8章介绍过了。

当建立一个数据库时,咱们常常为现实世界的实体和关系创建模型,而且储存这些实体对象与关系的信息。

 

要在SQL中奖这些信息放到一块儿,必须执行一个名为关联的操做。简单地说,这意味着须要根据数据间的关系将两个或更多的表关联到一块儿。

1.简单的关联

select orders.orderid,orders.amount,orders.date 
from customers,orders
where customers.name='Julie Smith' 
and 
customers.customerid = orders.customerid;

一个很重要的关联准则请记住:

由于是经过来自两个表的信息来完成这个查询,所以咱们必须将两个表都列在这里。(你的查询中,须要列出你要查询的列数据从哪一个数据表中来。

表名之间的逗号等价于输入INNER JOINCROSS 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的订单。

我的总结一下:

  1. 确认须要哪些数据列。
  2. 若是当前数据表中不包含某数据列,须要把包含此数据列的数据表引入进来。
  3. 两个数数据表彻底关联一会儿!(此时脑补你要的数据格式已经出现,只不过有N条,你不知道是哪条!)
  4. 经过where子句提供筛选条件,获得筛选结果。
相关文章
相关标签/搜索