sql for循环最后一条数据_数据分析工具篇——for循环运算优化(一)

上一篇文章我们介绍了数据的读和写,算是作为这一系列《数据分析工具篇》的开篇,也是数据分析流程中开始和结束的动作,数据导入之后,紧接着需要做的就是对数据的处理,我们会花费几篇的时间,来和大家聊一下常用的处理逻辑和常见的几个包,在数据处理过程中,常用的处理逻辑主要有:for循环优化广播应用方案以及整体(集合)运算方法,特别是for循环,可以说百分之九十九的函数会出现for循环;常见的包主要有:pandas、pyspark、numpy,这三个包可谓是人尽皆知,特别是前两个,一个是小数据使用的包,一个是大数据使用的包,随着python的不断丰富,这两个包越来越完善,今天我们先了解一下for循环的优化方法:

for循环

5c262211e21efd87ac73c6b11cfd0eb4.gif 31e153fec4a5f8901a94d62b42c81494.png

衡量一个程序员python水平的一个比较重要的方面就是看他写的循环嵌套了多少层,怎么解决嵌套的问题,写算法都会知道一个概念,叫:复杂度,分为时间复杂度和空间复杂度。随着服务器等硬件设备价钱的降低,空间复杂度不再是难点,关注更多的反而成了时间复杂度。

而这其中最需要解决的就是for循环的问题。

我们先看一个普通的for循环案例,如下:

import timestart_time = time.time()datas = 0for t in range(0, 1000):    for i in range(0, 1000):        for j in range(0, 1000):            datas = datas + i + j + tend_time = time.time()print(datas)print(end_time-start_time)

刚开始学python的小伙伴写的循环是不是这样的呢?

小有成就感的同时我们计算了一下运行时间:187s。

在代码运行过程中出现这样的时间简直会疯,因为这段代码不仅会消耗很长时间,而且会吃掉你的内存,让你无法做其他的事情。

写过一段时间python的小伙伴有时会痴迷于它独有的写法,于是有了如下代码:

import timeimport numpy as npstart_time1 = time.time()ds = np.sum([i+j+t for i in range(0, 1000) for j in range(0, 1000) for t in range(0, 1000)])end_time1 = time.time()print(ds)print(end_time1-start_time1)

你猜运行结果会怎样?

Traceback (most recent call last):  File "C:/Users/livan/PycharmProjects/Test/test.py", line 17, in <module>  ds = np.sum([i+j+t for i in range(0, 1000) for j in range(0, 1000) for t in range(0, 1000)])  File "C:/Users/livan/PycharmProjects/Test/test.py", line 17, in   ds = np.sum([i+j+t for i in range(0, 1000) for j in range(0, 1000) for t in range(0, 1000)])MemoryError

有没有很吃惊?有没有很意外?

我们暂且忽略最新函数在上面这段代码中的应用以及报错,单纯看循环的结构,你感觉这段代码怎么样呢?

1)上面的两种运算模式会在整个运算过程占据大量内存,一个不小心就会内存爆炸,而且影响其他应用(上面的两段代码中第二个更消耗内存)。

2)一个for循环就是一次嵌套,几个for循环就是几层笛卡尔积,复杂度为O(Mn),n即为for循环的层数,M为每个for循环的循环次数,数据指数型爆炸。

看到这里是否找到了程序低效的一个原因:嵌套太多,循环次数太多

如何解决呢?

最直观优化方法

5c262211e21efd87ac73c6b11cfd0eb4.gif 31e153fec4a5f8901a94d62b42c81494.png

For循环的修改可以有比较多的方法,一个常用的思路是:空间换时间。

对于上面的循环,我们如何进行修改呢?

我们直接上代码:

import timedata = 0start_times = time.time()for j in range(0, 1000):    data = data + jdata1 = 0for i in range(0, 1000):    data1 = (1000 * i + data) + data1data2 = 0for t in range(0, 1000):    data2 = (1000000 * t + data1) + data2end_times = time.time()print(data2)print(end_times - start_times)

你猜这段代码运行多久?

0.0

你没有看错,就是0.0,由于运行时间太快,时间忽略不计了。

我们仔细分析上面的代码就会发现其中的奥秘:

1)代码将for循环做了拆解,三层铺成了一层,在复杂度计算上降低了三个量级,原来是O(n3)=10003,而修改后成为了O(n)=1000,时间上也减少了至少三个量级。

2)运算过程中多出了两个变量:data1,data2,这两个变量的目的就是暂时缓存阶段性的运算结果,便于拆解循环,空间上增加了两个变量。

“空间换时间”由此而得名。

“扁平结构比嵌套结构更好” – 《Python之禅》

但是,细心的小伙伴发现了一个问题:数据的处理逻辑变了~

没错的~

这样的拆解自然是提高效率的,但是难度却非常大,需要对数据流程非常熟悉,这对程序员小伙伴的要求也变的很高,变相增加了优化门槛。

那这一问题如何解决呢?

世间总有大佬,如果没有,就再等等~

Python中提供了一些较为高级的函数和nb的数据结构,这些函数和数据结构已经被各个大佬调优并封装,例如:numpy向量结构、pandas中的groupby、apply、sort_values函数等操作,这一块的内容我们会在接下来的文章中逐一梳理,本文做个引子,有兴趣的大佬可以一起思考提高for循环效率的方法。

需要提醒大家的是:for循环的优化需要转变固有的思想,引入新的数据结构和思路。

我们用一个简单的比喻来结束这篇文章:

简单的for循环就像是毛坯房,基本拥有了住的能力,但想生活质量高一点,就需要好的装修,for循环的优化过程就是房子的装修过程,需要因人而异的精细化设计。

好了,欢迎大家沟通~

   欢迎大家关注公众号: db192e1b9a5f2a34fffa02b0bfaa76d7.png来都来了,点个关注再走呗~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CHAPTER 1 Introduction to MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 Database, Database Server, and Database Language. . . . . . . . . 4 1.3 The Relational Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.4 What Is SQL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.5 The History of SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.6 From Monolithic via Client/Server to the Internet . . . . . . . . . . 18 1.7 Standardization of SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1.8 What Is Open Source Software?. . . . . . . . . . . . . . . . . . . . . . . . 25 1.9 The History of MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1.10 The Structure of This Book . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 CHAPTER 2 The Tennis Club Sample Database . . . . . . . . . . . . . . . . 29 2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.2 Description of the Tennis Club . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.3 The Contents of the Tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.4 Integrity Constraints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 CHAPTER 3 Installing the Software . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.2 Downloading MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.3 Installation of MySQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.4 Installing a Query Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.5 Downloading SQL Statements from the Web Site . . . . . . . . . . 38 3.6 Ready? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 CHAPTER 4 SQL in a Nutshell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.2 Logging On to the MySQL Database Server . . . . . . . . . . . . . . . 41 4.3 Creating New SQL Users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.4 Creating Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.5 Selecting the Current Database . . . . . . . . . . . . . . . . . . . . . . . . 45 4.6 Creating Tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.7 Populating Tables with Data . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.8 Querying Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.9 Updating and Deleting Rows . . . . . . . . . . . . . . . . . . . . . . . . . . 52 4.10 Optimizing Query Processing with Indexes. . . . . . . . . . . . . . . 54 4.11 Views. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 4.12 Users and Data Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 4.13 Deleting Database Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 4.14 System Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 4.15 Grouping of SQL Statements . . . . . . . . . . . . . . . . . . . . . . . . . 59 4.16 The Catalog Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 4.17 Retrieving Errors and Warnings . . . . . . . . . . . . . . . . . . . . . . . 68 4.18 Definitions of SQL Statements . . . . . . . . . . . . . . . . . . . . . . . . 69 PART II Querying and Updating Data . . . . . . . . . . . . . . . . 71 CHAPTER 5 SELECT Statement: Common Elements . . . . . . . . . . . . 73 5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 5.2 Literals and Their Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . 74 5.3 Expressions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 5.4 Assigning Names to Result Columns . . . . . . . . . . . . . . . . . . . . 92 5.5 The Column Specification. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 5.6 The User Variable and the SET Statement . . . . . . . . . . . . . . . . 95 5.7 The System Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 5.8 The Case Expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 5.9 The Scalar Expression Between Brackets . . . . . . . . . . . . . . . . 106 viii Contents 5.10 The Scalar Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 5.11 Casting of Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 5.12 The Null Value as an Expression . . . . . . . . . . . . . . . . . . . . . . 114 5.13 The Compound Scalar Expression . . . . . . . . . . . . . . . . . . . . 115 5.14 The Aggregation Function and the Scalar Subquery. . . . . . . 136 5.15 The Row Expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 5.16 The Table Expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 5.17 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 CHAPTER 6 SELECT Statements, Table Expressions, and Subqueries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 6.2 The Definition of the SELECT Statement . . . . . . . . . . . . . . . . 145 6.3 Processing the Clauses in a Select Block. . . . . . . . . . . . . . . . . 150 6.4 Possible Forms of a Table Expression . . . . . . . . . . . . . . . . . . . 156 6.5 What Is a SELECT Statement? . . . . . . . . . . . . . . . . . . . . . . . . 159 6.6 What Is a Subquery?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 6.7 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 CHAPTER 7 SELECT Statement:The FROM Clause. . . . . . . . . . . . . 171 7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 7.2 Table Specifications in the FROM Clause . . . . . . . . . . . . . . . . 171 7.3 Again, the Column Specification. . . . . . . . . . . . . . . . . . . . . . . 173 7.4 Multiple Table Specifications in the FROM Clause . . . . . . . . . 174 7.5 Pseudonyms for Table Names. . . . . . . . . . . . . . . . . . . . . . . . . 178 7.6 Various Examples of Joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 7.7 Mandatory Use of Pseudonyms . . . . . . . . . . . . . . . . . . . . . . . 183 7.8 Tables of Different Databases . . . . . . . . . . . . . . . . . . . . . . . . 185 7.9 Explicit Joins in the FROM Clause. . . . . . . . . . . . . . . . . . . . . . 185 7.10 Outer Joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 7.11 The Natural Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 7.12 Additional Conditions in the Join Condition. . . . . . . . . . . . . 196 7.13 The Cross Join. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 7.14 Replacing Join Conditions with USING. . . . . . . . . . . . . . . . . 199 7.15 The FROM Clause with Table Expressions . . . . . . . . . . . . . . 200 7.16 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Contents ix CHAPTER 8 SELECT Statement: The WHERE Clause . . . . . . . . . . . 213 8.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 8.2 Conditions Using Comparison Operators . . . . . . . . . . . . . . . 215 8.3 Comparison Operators with Subqueries . . . . . . . . . . . . . . . . 222 8.4 Comparison Operators with Correlated Subqueries. . . . . . . . 227 8.5 Conditions Without a Comparison Operator. . . . . . . . . . . . . 229 8.6 Conditions Coupled with AND, OR, XOR, and NOT . . . . . . . 231 8.7 The IN Operator with Expression List. . . . . . . . . . . . . . . . . . . 235 8.8 The IN Operator with Subquery . . . . . . . . . . . . . . . . . . . . . . . 241 8.9 The BETWEEN Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 8.10 The LIKE Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 8.11 The REGEXP Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 8.12 The MATCH Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 8.13 The IS NULL Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 8.14 The EXISTS Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 8.15 The ALL and ANY Operators . . . . . . . . . . . . . . . . . . . . . . . . 281 8.16 Scope of Columns in Subqueries . . . . . . . . . . . . . . . . . . . . . 289 8.17 More Examples with Correlated Subqueries . . . . . . . . . . . . . 294 8.18 Conditions with Negation. . . . . . . . . . . . . . . . . . . . . . . . . . . 299 8.19 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 CHAPTER 9 SELECT Statement: SELECT Clause and Aggregation Functions . . . . . . . . . . . . . . . . . . . . . . . . 315 9.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 9.2 Selecting All Columns (*) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 9.3 Expressions in the SELECT Clause . . . . . . . . . . . . . . . . . . . . . 317 9.4 Removing Duplicate Rows with DISTINCT. . . . . . . . . . . . . . . 318 9.5 When Are Two Rows Equal?. . . . . . . . . . . . . . . . . . . . . . . . . . 321 9.6 More Select Options. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 9.7 An Introduction to Aggregation Functions. . . . . . . . . . . . . . . 324 9.8 COUNT Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 9.9 MAX and MIN Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 9.10 The SUM and AVG Function. . . . . . . . . . . . . . . . . . . . . . . . . 336 9.11 The VARIANCE and STDDEV Functions. . . . . . . . . . . . . . . . 341 9.12 The VAR_SAMP and STDDEV_SAMP Functions . . . . . . . . . 343 9.13 The BIT_AND, BIT_OR, and BIT_XOR Functions . . . . . . . . 343 9.14 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 x Contents CHAPTER 10 SELECT Statement: The GROUP BY Clause . . . . . . . . 349 10.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 10.2 Grouping on One Column . . . . . . . . . . . . . . . . . . . . . . . . . . 350 10.3 Grouping on Two or More Columns . . . . . . . . . . . . . . . . . . 353 10.4 Grouping on Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 10.5 Grouping of Null Values . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 10.6 Grouping with Sorting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 10.7 General Rules for the GROUP BY Clause . . . . . . . . . . . . . . . 359 10.8 The GROUP_CONCAT Function . . . . . . . . . . . . . . . . . . . . . 362 10.9 Complex Examples with GROUP BY. . . . . . . . . . . . . . . . . . . 363 10.10 Grouping with WITH ROLLUP . . . . . . . . . . . . . . . . . . . . . . 369 10.11 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 CHAPTER 11 SELECT Statement: The HAVING Clause . . . . . . . . . . 375 11.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 11.2 Examples of the HAVING Clause . . . . . . . . . . . . . . . . . . . . . 376 11.3 A HAVING Clause but not a GROUP BY Clause . . . . . . . . . 378 11.4 General Rule for the HAVING Clause . . . . . . . . . . . . . . . . . . 379 11.5 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 CHAPTER 12 SELECT Statement: The ORDER BY Clause . . . . . . . . 383 12.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 12.2 Sorting on Column Names . . . . . . . . . . . . . . . . . . . . . . . . . . 383 12.3 Sorting on Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 12.4 Sorting with Sequence Numbers . . . . . . . . . . . . . . . . . . . . . 387 12.5 Sorting in Ascending and Descending Order . . . . . . . . . . . . 389 12.6 Sorting Null Values. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 12.7 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 CHAPTER 13 SELECT Statement: The LIMIT Clause. . . . . . . . . . . . . 395 13.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 13.2 Get the Top… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 13.3 Subqueries with a LIMIT Clause . . . . . . . . . . . . . . . . . . . . . . 402 13.4 Limit with an Offset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404 13.5 The Select Option SQL_CALC_FOUND_ROWS . . . . . . . . . 405 13.6 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 Contents xi CHAPTER 14 Combining Table Expressions . . . . . . . . . . . . . . . . . . . 409 14.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 14.2 Combining with UNION. . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 14.3 Rules for Using UNION . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413 14.4 Keeping Duplicate Rows. . . . . . . . . . . . . . . . . . . . . . . . . . . . 416 14.5 Set Operators and the Null Value. . . . . . . . . . . . . . . . . . . . . 417 14.6 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 CHAPTER 15 The User Variable and the SET Statement . . . . . . . . . . 421 15.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 15.2 Defining Variables with the SET Statement . . . . . . . . . . . . . 421 15.3 Defining Variables with the SELECT Statement . . . . . . . . . . 423 15.4 Application Areas for User Variables . . . . . . . . . . . . . . . . . . 425 15.5 Life Span of User Variables . . . . . . . . . . . . . . . . . . . . . . . . . . 426 15.6 The DO Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 15.7 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 CHAPTER 16 The HANDLER Statement. . . . . . . . . . . . . . . . . . . . . . 429 16.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 16.2 A Simple Example of the HANDLER Statement . . . . . . . . . . 429 16.3 Opening a Handler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430 16.4 Browsing the Rows of a Handler . . . . . . . . . . . . . . . . . . . . . 431 16.5 Closing a Handler. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 16.6 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 CHAPTER 17 Updating Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 17.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 17.2 Inserting New Rows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 17.3 Populating a Table with Rows from Another Table . . . . . . . 442 17.4 Updating Values in Rows . . . . . . . . . . . . . . . . . . . . . . . . . . . 444 17.5 Updating Values in Multiple Tables . . . . . . . . . . . . . . . . . . . 450 17.6 Substituting Existing Rows . . . . . . . . . . . . . . . . . . . . . . . . . . 452 17.7 Deleting Rows from a Table . . . . . . . . . . . . . . . . . . . . . . . . . 454 17.8 Deleting Rows from Multiple Tables. . . . . . . . . . . . . . . . . . . 456 17.9 The TRUNCATE Statement . . . . . . . . . . . . . . . . . . . . . . . . . 458 17.10 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458 xii Contents CHAPTER 18 Loading and Unloading Data . . . . . . . . . . . . . . . . . . . 461 18.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 18.2 Unloading Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 18.3 Loading Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 CHAPTER 19 Working with XML Documents . . . . . . . . . . . . . . . . . . 471 19.1 XML in a Nutshell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 19.2 Storing XML Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 19.3 Querying XML Documents . . . . . . . . . . . . . . . . . . . . . . . . . . 476 19.4 Querying Using Positions . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 19.5 The Extended Notation of XPath . . . . . . . . . . . . . . . . . . . . . 486 19.6 XPath Expressions with Conditions . . . . . . . . . . . . . . . . . . . 488 19.7 Changing XML Documents. . . . . . . . . . . . . . . . . . . . . . . . . . 489 PART III Creating Database Objects. . . . . . . . . . . . . . . . . 491 CHAPTER 20 Creating Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493 20.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493 20.2 Creating New Tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493 20.3 Data Types of Columns . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 20.4 Adding Data Type Options. . . . . . . . . . . . . . . . . . . . . . . . . . 508 20.5 Creating Temporary Tables . . . . . . . . . . . . . . . . . . . . . . . . . 514 20.6 What If the Table Already Exists? . . . . . . . . . . . . . . . . . . . . . 515 20.7 Copying Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516 20.8 Naming Tables and Columns . . . . . . . . . . . . . . . . . . . . . . . . 521 20.9 Column Options: Default and Comment . . . . . . . . . . . . . . . 522 20.10 Table Options. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524 20.11 The CSV Storage Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . 532 20.12 Tables and the Catalog. . . . . . . . . . . . . . . . . . . . . . . . . . . . 534 20.13 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537 CHAPTER 21 Specifying Integrity Constraints. . . . . . . . . . . . . . . . . . 539 21.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539 21.2 Primary Keys. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541 21.3 Alternate Keys. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544 21.4 Foreign Keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546 21.5 The Referencing Action. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550 21.6 Check Integrity Constraints . . . . . . . . . . . . . . . . . . . . . . . . . 553 Contents xiii 21.7 Naming Integrity Constraints . . . . . . . . . . . . . . . . . . . . . . . 556 21.8 Deleting Integrity Constraints. . . . . . . . . . . . . . . . . . . . . . . . 557 21.9 Integrity Constraints and the Catalog . . . . . . . . . . . . . . . . . 557 21.10 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558 CHAPTER 22 Character Sets and Collations . . . . . . . . . . . . . . . . . . . 561 22.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561 22.2 Available Character Sets and Collations. . . . . . . . . . . . . . . . 563 22.3 Assigning Character Sets to Columns. . . . . . . . . . . . . . . . . . 564 22.4 Assigning Collations to Columns . . . . . . . . . . . . . . . . . . . . . 566 22.5 Expressions with Character Sets and Collations. . . . . . . . . . 568 22.6 Sorting and Grouping with Collations . . . . . . . . . . . . . . . . . 571 22.7 The Coercibility of Expressions. . . . . . . . . . . . . . . . . . . . . . . 573 22.8 Related System Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . 574 22.9 Character Sets and the Catalog . . . . . . . . . . . . . . . . . . . . . . 576 22.10 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576 CHAPTER 23 The ENUM and SET Types . . . . . . . . . . . . . . . . . . . . . 577 23.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577 23.2 The ENUM Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578 23.3 The SET Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582 23.4 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589 CHAPTER 24 Changing and Dropping Tables . . . . . . . . . . . . . . . . . . 591 24.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591 24.2 Deleting Entire Tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591 24.3 Renaming Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593 24.4 Changing the Table Structure . . . . . . . . . . . . . . . . . . . . . . . . 593 24.5 Changing Columns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595 24.6 Changing Integrity Constraints. . . . . . . . . . . . . . . . . . . . . . . 599 24.7 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602 CHAPTER 25 Using Indexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603 25.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603 25.2 Rows, Tables, and Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604 25.3 How Does an Index Work?. . . . . . . . . . . . . . . . . . . . . . . . . . 605 25.4 Processing a SELECT Statement: The Steps . . . . . . . . . . . . . 610 25.5 Creating Indexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614 xiv Contents 25.6 Defining Indexes Together with the Tables . . . . . . . . . . . . . . 617 25.7 Dropping Indexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618 25.8 Indexes and Primary Keys . . . . . . . . . . . . . . . . . . . . . . . . . . . 619 25.9 The Big PLAYERS_XXL Table . . . . . . . . . . . . . . . . . . . . . . . . 620 25.10 Choosing Columns for Indexes. . . . . . . . . . . . . . . . . . . . . . 622 25.11 Indexes and the Catalog . . . . . . . . . . . . . . . . . . . . . . . . . . . 627 25.12 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630 CHAPTER 26 Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631 26.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631 26.2 Creating Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631 26.3 The Column Names of Views . . . . . . . . . . . . . . . . . . . . . . . . 635 26.4 Updating Views: WITH CHECK OPTION. . . . . . . . . . . . . . . 636 26.5 Options of Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638 26.6 Deleting Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639 26.7 Views and the Catalog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640 26.8 Restrictions on Updating Views . . . . . . . . . . . . . . . . . . . . . . 641 26.9 Processing View Statements . . . . . . . . . . . . . . . . . . . . . . . . . 642 26.10 Application Areas for Views . . . . . . . . . . . . . . . . . . . . . . . . 645 26.11 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650 CHAPTER 27 Creating Databases. . . . . . . . . . . . . . . . . . . . . . . . . . . 653 27.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653 27.2 Databases and the Catalog. . . . . . . . . . . . . . . . . . . . . . . . . . 653 27.3 Creating Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654 27.4 Changing Databases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655 27.5 Dropping Databases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656 CHAPTER 28 Users and Data Security . . . . . . . . . . . . . . . . . . . . . . . 659 28.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659 28.2 Adding and Removing Users . . . . . . . . . . . . . . . . . . . . . . . . 660 28.3 Changing the Names of Users . . . . . . . . . . . . . . . . . . . . . . . 662 28.4 Changing Passwords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663 28.5 Granting Table and Column Privileges . . . . . . . . . . . . . . . . . 664 28.6 Granting Database Privileges . . . . . . . . . . . . . . . . . . . . . . . . 667 28.7 Granting User Privileges . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670 28.8 Passing on Privileges: WITH GRANT OPTION . . . . . . . . . . 673 28.9 Restricting Privileges. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674 Contents xv 28.10 Recording Privileges in the Catalog . . . . . . . . . . . . . . . . . . 675 28.11 Revoking Privileges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677 28.12 Security of and Through Views . . . . . . . . . . . . . . . . . . . . . . 680 28.13 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682 CHAPTER 29 Statements for Table Maintenance . . . . . . . . . . . . . . . 683 29.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683 29.2 The ANALYZE TABLE Statement . . . . . . . . . . . . . . . . . . . . . 684 29.3 The CHECKSUM TABLE Statement . . . . . . . . . . . . . . . . . . . 685 29.4 The OPTIMIZE TABLE Statement. . . . . . . . . . . . . . . . . . . . . 686 29.5 The CHECK TABLE Statement . . . . . . . . . . . . . . . . . . . . . . . 687 29.6 The REPAIR TABLE Statement . . . . . . . . . . . . . . . . . . . . . . . 689 29.7 The BACKUP TABLE Statement . . . . . . . . . . . . . . . . . . . . . . 690 29.8 The RESTORE TABLE Statement . . . . . . . . . . . . . . . . . . . . . 691 CHAPTER 30 The SHOW, DESCRIBE, and HELP Statements. . . . . . 693 30.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693 30.2 Overview of SHOW Statements . . . . . . . . . . . . . . . . . . . . . . 693 30.3 Additional SHOW Statements . . . . . . . . . . . . . . . . . . . . . . . 698 30.4 The DESCRIBE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . 699 30.5 The HELP Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699 PART IV Procedural Database Objects. . . . . . . . . . . . . . . 701 CHAPTER 31 Stored Procedures. . . . . . . . . . . . . . . . . . . . . . . . . . . . 703 31.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703 31.2 An Example of a Stored Procedure . . . . . . . . . . . . . . . . . . . . 704 31.3 The Parameters of a Stored Procedure . . . . . . . . . . . . . . . . . 706 31.4 The Body of a Stored Procedure. . . . . . . . . . . . . . . . . . . . . . 707 31.5 Local Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 709 31.6 The SET Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712 31.7 Flow-Control Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . 712 31.8 Calling Stored Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . 719 31.9 Querying Data with SELECT INTO. . . . . . . . . . . . . . . . . . . . 722 31.10 Error Messages, Handlers, and Conditions . . . . . . . . . . . . 726 31.11 Retrieving Data with a Cursor. . . . . . . . . . . . . . . . . . . . . . . 731 31.12 Including SELECT Statements Without Cursors . . . . . . . . . 736 31.13 Stored Procedures and User Variables . . . . . . . . . . . . . . . . 737 31.14 Characteristics of Stored Procedures . . . . . . . . . . . . . . . . . 737 xvi Contents 31.15 Stored Procedures and the Catalog . . . . . . . . . . . . . . . . . . 740 31.16 Removing Stored Procedures . . . . . . . . . . . . . . . . . . . . . . . 741 31.17 Security with Stored Procedures . . . . . . . . . . . . . . . . . . . . . 742 31.18 Advantages of Stored Procedures. . . . . . . . . . . . . . . . . . . . 743 CHAPTER 32 Stored Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745 32.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745 32.2 Examples of Stored Functions . . . . . . . . . . . . . . . . . . . . . . . 746 32.3 More on Stored Functions . . . . . . . . . . . . . . . . . . . . . . . . . . 752 32.4 Removing Stored Functions . . . . . . . . . . . . . . . . . . . . . . . . . 753 CHAPTER 33 Triggers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755 33.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755 33.2 An Example of a Trigger . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756 33.3 More Complex Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 759 33.4 Triggers as Integrity Constraints. . . . . . . . . . . . . . . . . . . . . . 763 33.5 Removing Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765 33.6 Triggers and the Catalog . . . . . . . . . . . . . . . . . . . . . . . . . . . 765 33.7 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765 CHAPTER 34 Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767 34.1 What Is an Event?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767 34.2 Creating Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768 34.3 Properties of Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777 34.4 Changing Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778 34.5 Removing Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779 34.6 Events and Privileges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779 34.7 Events and the Catalog. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 780 PART V Programming with SQL . . . . . . . . . . . . . . . . . . . 783 CHAPTER 35 MySQL and PHP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785 35.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785 35.2 Logging On to MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786 35.3 Selecting a Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787 35.4 Creating an Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 788 35.5 Retrieving Error Messages . . . . . . . . . . . . . . . . . . . . . . . . . . 790 35.6 Multiple Connections Within One Session . . . . . . . . . . . . . . 791 35.7 SQL Statements with Parameters . . . . . . . . . . . . . . . . . . . . . 793 35.8 SELECT Statement with One Row . . . . . . . . . . . . . . . . . . . . 794 Contents xvii 35.9 SELECT Statement with Multiple Rows . . . . . . . . . . . . . . . . 796 35.10 SELECT Statement with Null Values . . . . . . . . . . . . . . . . . . 800 35.11 Querying Data About Expressions . . . . . . . . . . . . . . . . . . . 801 35.12 Querying the Catalog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803 35.13 Remaining MYSQL Functions . . . . . . . . . . . . . . . . . . . . . . . 805 CHAPTER 36 Dynamic SQL with Prepared Statement. . . . . . . . . . . . 807 36.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807 36.2 Working with Prepared SQL Statements . . . . . . . . . . . . . . . 807 36.3 Prepared Statements with User Variables. . . . . . . . . . . . . . . 810 36.4 Prepared Statements with Parameters . . . . . . . . . . . . . . . . . 810 36.5 Prepared Statements in Stored Procedures . . . . . . . . . . . . . 811 CHAPTER 37 Transactions and Multiuser Usage. . . . . . . . . . . . . . . . 815 37.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815 37.2 What Is a Transaction? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815 37.3 Starting Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821 37.4 Savepoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 822 37.5 Stored Procedures and Transactions . . . . . . . . . . . . . . . . . . 824 37.6 Problems with Multiuser Usage . . . . . . . . . . . . . . . . . . . . . . 825 37.7 Locking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829 37.8 Deadlocks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830 37.9 The LOCK TABLE and UNLOCK TABLE Statements . . . . . . 830 37.10 The Isolation Level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 832 37.11 Waiting for a Lock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834 37.12 Moment of Processing Statements . . . . . . . . . . . . . . . . . . . 834 37.13 Working with Application Locks . . . . . . . . . . . . . . . . . . . . . 835 37.14 Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837 APPENDIX A Syntax of SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839 A.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839 A.2 The BNF Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839 A.3 Reserved Words in SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843 A.4 Syntax Definitions of SQL Statements . . . . . . . . . . . . . . . . . . 845 APPENDIX B Scalar Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903 APPENDIX C System Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953 APPENDIX D Bibliography . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 963 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 967

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值