php抓取网页数据插入数据库(PHP和MySQL的初学者学习法(一)学习笔记)
优采云 发布时间: 2022-01-30 12:01php抓取网页数据插入数据库(PHP和MySQL的初学者学习法(一)学习笔记)
封面人物
刘成玉
前言
这是我学习“PHP and MySQL Web Development”的阅读笔记。我会记录一些重要的知识点,当然只写我认为重要的。
如果有人有幸看到这个学习笔记,你应该结合本书阅读它,而不仅仅是这个笔记。在笔记中,我会记录我在学习中遇到的一些问题以及解决方法和注意事项。为了方便管理和查找,文章或者我在书中整理的笔记目录,方便对比。不教!重要的事情再说一遍!我是 PHP 和 MySQL 的初学者。我自己就是前端。我学会了拓宽面向薪水编程的知识。其实我还是有一些个人意见的,因为都说教法和小黄鸭调试法,这就是小老虎的学习法,我把知识点教给小老虎,保证我学的扎实并且可以赚钱。欢迎讨论和建议,
本章主要介绍:
仔细看,每一章前的说明,本章的主要内容,基本都是你需要掌握的。读完一章后,回来查看这份清单。开始吧。
10.1 什么是 SQL?SQL的全称是结构化查询语言。它是访问关系数据库管理系统的标准语言。
结构化查询语言结构化查询语言,结构化,阅读 ['strʌktʃəd]。
用于定义数据库的数据定义语言(Data Definition Language,DDL)和用于查询数据库的数据操作语言(Data Manipulation Language,DML)。SQL 收录这两个基本部分。10.2 在数据库中插入数据
插入语句通常具有以下格式:
插入 [INTO] 表 [(col1,col2,col3,...)] 值 (value1,value2,value3,...);
书中给出的例子:
插入客户值(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 修饰符适用于 INSERT 和 REPLACE 语句。当 DELAYED 插入操作到达时,服务器将数据行放入队列,并立即向客户端返回状态消息,以便客户端可以继续操作,直到表实际插入记录。10.3 从数据库中获取数据
前面的基本格式我就不写了。它太长了。关键是,我懒得打字了。
这里有一个重要的解释:from是from..意思是F!!啊!!哦!!!米!!!形式是形式!!!别搞错了,当出现问题时检查这个命令关键字!再看表名!列名中有错字吗?少S,多S什么的!这都是用血和泪换来的经验!好好记住~好!!!
上面那个红字其实是我第一次看书练代码的时候写的,这里也写了。希望它可以帮助你。
书上的代码后面一定要打字。有必要熟悉它并找出问题所在。比如我用bookorama账号登录数据库的时候,查询结果就变成了乱码。首先,我确定这是一个编码问题。然后google了怎么解决,但是不敢改,因为我用的是公司项目的开发版数据库。虽然有正式版作为后盾,但我不得不权衡随机的配置变化。所以,在这里我先放手。(如果你解决了,告诉我怎么解决。我这里的编码是utf8mb4。还请告诉我root没有乱,但是bookorama为什么乱了,谢谢。)
select name ,city from customers;
通过在 select 关键字后面给出列名,可以指定(查询)任意数量的列。
一种有用的方法是通配符“*”(星号),它匹配指定表中的所有列。
现在,尝试使用通配符查询客户表,看看在插入数据时指定为 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;
查询结果如下:(客户表结果)
+------------+-----------+------+-----+---------+----------------+
| 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语句指定选择特定行的条件。
先翻一页,看一下select查询语句基本格式中where的样式。
它用方括号括起来表示可选。也就是说,您可以根据需要添加它。所以,你必须学会阅读基本格式。
select *
from orders
where customerid= 3;
可以看到命令在一个分支中,也可以回车输入一个分支,也可以输入一行。不同的是,如果键入一个分支,MySQL 可以方便地指出哪一行是错误的。(我都是在一行里打出来的,方便按键盘上的方向键切换语句)
我书中的命令是customerid = 3,但书中说将选择customerid 5的行。我觉得写错了。查询应该是根据条件查询的结果,一切以实际操作结果为准。(我的书是原书的第四版,如果不是编辑不改,那他妈就是盗版问题。)
表10-1列出了常用的比较运算符,你自己看看,你可以全部操作看看效果。
特别列出 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 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 的订单。
摘要:确定需要哪些数据列。如果当前数据表不收录数据列,则需要导入收录该数据列的数据表。这两个数据表一下子就完全相关了!(此时你想要的数据格式已经出现了,但是有N种,你不知道是哪一种!)通过where子句提供过滤条件,得到过滤结果。