博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《PHP和MySQL Web 开发》 第10章 使用Web数据库
阅读量:6984 次
发布时间:2019-06-27

本文共 5263 字,大约阅读时间需要 17 分钟。

hot3.png

LCL WARNING

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

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

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

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

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

  6. 其实还是有一些私心得,因为都说教学相长 和 ,我这个是小老虎学习法,对着小老虎讲知识点,保证自己学的扎实,能挣钱。

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

 

李重楼

 

本章主要是介绍了:

  • 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,orderswhere 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子句提供筛选条件,得到筛选结果。

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/swmhxhs/blog/1919699

你可能感兴趣的文章
六大技巧提升员工信息安全意识
查看>>
保利协鑫多晶硅产量再创历史记录
查看>>
爱屋及乌 年轻投资者因喜爱Snapchat亏钱也买Snap股票
查看>>
物联网产品背后潜藏着危机
查看>>
阿里云将增设马来西亚数据中心 中国技术获赞
查看>>
与Netflix合作 美电视运营商推出4K频道
查看>>
Struts2中的Action
查看>>
Balluff推出刀具识别系统
查看>>
美国支付巨头Verifone遭遇网络攻击
查看>>
开平推进智慧城市等领域信息化建设及公共数据资源共享
查看>>
宜兴电信成功跨界合作开拓农村物联网市场
查看>>
Oracle业务适合用PostgreSQL去O的一些评判标准
查看>>
多个常见代码设计缺陷
查看>>
今年光伏市场规模可达30GW 分布式有望占据三分江山
查看>>
因新漏洞问题 Firefox 49发布时间将延期一周
查看>>
WLAN产品形态之分层架构
查看>>
Chrome 隐藏 SSL 证书信息 禁止禁用 DRM
查看>>
AngularJS 的自定义指令
查看>>
《CCNA ICND2(200-101)认证考试指南(第4版)》——第1章定义生成树协议
查看>>
什么样的 RPC 才是好用的 RPC
查看>>