Databases Wikibook
Databases Wikibook
Contents
1
Database
1.1
1.2
Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3
1.4
History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4.1
1.4.2
1.4.3
Integrated approach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4.4
1.4.5
1.4.6
1980s, object-oriented . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4.7
1.5
Research . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.6
Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.7
1.7.1
Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.7.2
10
1.8
Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
1.9
11
1.9.1
Storage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
1.9.2
Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
1.9.3
13
1.9.4
Migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
1.9.5
13
1.9.6
14
1.9.7
Other . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
14
1.11 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
16
16
20
2.1
21
Market share . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
i
ii
CONTENTS
2.2
History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
2.3
21
2.4
See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
2.5
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
MySQL
23
3.1
Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
3.1.1
Graphical . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
3.1.2
Command line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
3.1.3
Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
3.2.1
Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
3.2.2
Deployment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
3.2.3
Backup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
3.2.4
High availability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
3.2.5
Cloud deployment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
Community . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
3.3.1
Related projects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
3.4.1
29
3.4.2
Milestones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
3.4.3
Versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
3.5
See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
3.6
Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
3.7
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
3.8
External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
3.2
3.3
3.4
SQLite
36
4.1
Design
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
4.2
History
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
4.3
Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
4.4
37
4.5
Adoption
37
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.1
Programming languages
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
4.5.2
Middleware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
4.5.3
Web browsers
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
4.5.4
39
4.5.5
Various . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
4.5.6
Operating systems
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
4.6
Ports
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
4.7
See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
4.8
Citations
40
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CONTENTS
4.9
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
41
PostgreSQL
42
5.1
Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
5.2
History
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
5.3
43
5.4
43
5.4.1
Replication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
5.4.2
Indexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
5.4.3
Schemas
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
5.4.4
Data types
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
5.4.5
User-dened objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
5.4.6
Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
5.4.7
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
5.5
iii
References
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
5.5.2
Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
5.5.3
Procedural languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
5.5.4
Triggers
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
5.5.5
Asynchronous notications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
5.5.6
Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
5.5.7
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
5.6
Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
5.7
Upcoming features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
5.8
Add-ons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
5.9
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
5.10 Platforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
52
53
53
53
5.16 References
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
57
57
SQL
58
6.1
History
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
6.2
Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
6.2.1
Language elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
6.2.2
Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
iv
CONTENTS
6.2.3
Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
6.2.4
Data manipulation
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
6.2.5
Transaction controls
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
6.2.6
Data denition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
6.2.7
Data types
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
6.2.8
Data control
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
6.3
Procedural extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
6.4
Criticism
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
6.5
Standardization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
6.6
Alternatives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
6.7
See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
6.8
Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
68
6.9
References
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
70
NoSQL
71
7.1
History
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
7.2
71
7.3
Performance
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
72
7.4
72
7.4.1
Multiple queries
72
7.4.2
Caching/replication/non-normalized data
7.4.3
Nesting data
. . . . . . . . . . . . . . . . . . . . . . . . . .
72
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
72
Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
72
7.5.1
Document store . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
72
7.5.2
Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
73
7.5.3
Key-value stores
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
73
7.5.4
Object database
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
75
7.5.5
Tabular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
75
7.5.6
Tuple store . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
75
7.5.7
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
76
7.5.8
Hosted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
76
7.5.9
Multivalue databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
76
76
76
76
7.6
See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
77
7.7
References
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
77
7.8
Further reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
7.9
External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
7.5
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
NewSQL
79
CONTENTS
8.1
History
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79
8.2
Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79
8.2.1
New architectures
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79
8.2.2
SQL Engines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
8.2.3
Transparent sharding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
8.3
See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
8.4
References
80
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XML database
81
9.1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81
9.2
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81
82
82
9.3.1
Language features
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
9.3.2
Supported APIs
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
9.2.1
9.3
9.4
References
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
9.5
External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
84
10.1 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
84
10.2 SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
84
84
85
85
85
85
86
86
10.5 References
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
86
86
87
88
11.2 References
88
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12 Query language
89
12.1 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
89
12.2 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
89
90
12.4 References
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
90
91
12.5.1 Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
91
12.5.2 Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
96
vi
CONTENTS
12.5.3 Content license . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
98
Chapter 1
Database
A database is an organized collection of data.[1] The data is typically organized to model aspects of reality in a way
that supports processes requiring information. For example, modelling the availability of rooms in hotels in a way
that supports nding a hotel with vacancies.
Database management systems (DBMS) are computer software applications that interact with the user, other
applications, and the database itself to capture and analyze data. A general-purpose DBMS is designed to allow
the denition, creation, querying, update, and administration of databases. Well-known DBMSs include MySQL,
PostgreSQL, Microsoft SQL Server, Oracle, Sybase and IBM DB2. A database is not generally portable across
dierent DBMSs, but dierent DBMS can interoperate by using standards such as SQL and ODBC or JDBC to allow
a single application to work with more than one DBMS. Database management systems are often classied according
to the database model that they support; the most popular database systems since the 1980s have all supported the
relational model as represented by the SQL language. Sometimes a DBMS is loosely referred to as a 'database'.
CHAPTER 1. DATABASE
Both a database and its DBMS conform to the principles of a particular database model.[6] Database system refers
collectively to the database model, database management system, and database.[7]
Physically, database servers are dedicated computers that hold the actual databases and run only the DBMS and related
software. Database servers are usually multiprocessor computers, with generous memory and RAID disk arrays used
for stable storage. RAID is used for recovery of data if any of the disks fail. Hardware database accelerators,
connected to one or more servers via a high-speed channel, are also used in large volume transaction processing
environments. DBMSs are found at the heart of most database applications. DBMSs may be built around a custom
multitasking kernel with built-in networking support, but modern DBMSs typically rely on a standard operating system
to provide these functions. Since DBMSs comprise a signicant economical market, computer and storage vendors
often take into account DBMS requirements in their own development plans.
Databases and DBMSs can be categorized according to the database model(s) that they support (such as relational or
XML), the type(s) of computer they run on (from a server cluster to a mobile phone), the query language(s) used to
access the database (such as SQL or XQuery), and their internal engineering, which aects performance, scalability,
resilience, and security
1.2 Applications
Databases are used to support internal operations of organizations and to underpin online interactions with customers
and suppliers (see Enterprise software).
Databases are used to hold administrative information and more specialized data, such as engineering data or economic models. Examples of database applications include computerized library systems, ight reservation systems
and computerized parts inventory systems.
Application areas of DBMS
1. Banking: For customer information, accounts, and loans, and banking transactions.
2. Airlines: For reservations and schedule information. Airlines were among the rst to use databases in a geographically distributed manner - terminals situated around the world accessed the central database system through phone
lines and other data networks.
3. Universities: For student information, course registrations, and grades.
4. Credit card transactions: For purchases on credit cards and generation of monthly statements.
5. Telecommunication: For keeping records of calls made, generating monthly bills, maintaining balances on prepaid
calling cards, and storing information about the communication networks.
6. Finance: For storing information about holdings, sales, and purchases of nancial instruments such as stocks and
bonds.
7. Sales: For customer, product, and purchase information.
8. Manufacturing: For management of supply chain and for tracking production of items in factories, inventories of
items in warehouses / stores, and orders for items.
9. Human resources: For information about employees, salaries, payroll taxes and benets, and for generation of
paychecks.
1.4. HISTORY
is required to handle email and don't provide the user with the all of the functionality that would be available using a
general-purpose DBMS.
Many other databases have application software that accesses the database on behalf of end-users, without exposing
the DBMS interface directly. Application programmers may use a wire protocol directly, or more likely through an
application programming interface. Database designers and database administrators interact with the DBMS through
dedicated interfaces to build and maintain the applications databases, and thus need some more knowledge and
understanding about how DBMSs operate and the DBMSs external interfaces and tuning parameters.
1.4 History
Following the technology progress in the areas of processors, computer memory, computer storage and computer
networks, the sizes, capabilities, and performance of databases and their respective DBMSs have grown in orders of
magnitude. The development of database technology can be divided into three eras based on data model or structure:
navigational,[9] SQL/relational, and post-relational.
The two main early navigational data models were the hierarchical model, epitomized by IBMs IMS system, and the
CODASYL model (network model), implemented in a number of products such as IDMS.
The relational model, rst proposed in 1970 by Edgar F. Codd, departed from this tradition by insisting that applications should search for data by content, rather than by following links. The relational model employs sets of
ledger-style tables, each used for a dierent type of entity. Only in the mid-1980s did computing hardware become
powerful enough to allow the wide deployment of relational systems (DBMSs plus applications). By the early 1990s,
however, relational systems dominated in all large-scale data processing applications, and as of 2015 they remain
dominant : Oracle, mySQL and SQL server are the top DBMS.[10] The dominant database language, standardised
SQL for the relational model, has inuenced database languages for other data models.
Object databases were developed in the 1980s to overcome the inconvenience of object-relational impedance mismatch, which led to the coining of the term post-relational and also the development of hybrid object-relational
databases.
The next generation of post-relational databases in the late 2000s became known as NoSQL databases, introducing
fast key-value stores and document-oriented databases. A competing next generation known as NewSQL databases
attempted new implementations that retained the relational/SQL model while aiming to match the high performance
of NoSQL compared to commercially available relational DBMSs.
1.4.1
CHAPTER 1. DATABASE
Later systems added B-Trees to provide alternate access paths. Many CODASYL databases also added a very straightforward query language. However, in the nal tally, CODASYL was very complex and required signicant training
and eort to produce useful applications.
IBM also had their own DBMS in 1968, known as Information Management System (IMS). IMS was a development
of software written for the Apollo program on the System/360. IMS was generally similar in concept to CODASYL,
but used a strict hierarchy for its model of data navigation instead of CODASYLs network model. Both concepts
later became known as navigational databases due to the way data was accessed, and Bachmans 1973 Turing Award
presentation was The Programmer as Navigator. IMS is classied as a hierarchical database. IDMS and Cincom
Systems' TOTAL database are classied as network databases. IMS remains in use as of 2014.[12]
1.4.2
Edgar Codd worked at IBM in San Jose, California, in one of their oshoot oces that was primarily involved in
the development of hard disk systems. He was unhappy with the navigational model of the CODASYL approach,
notably the lack of a search facility. In 1970, he wrote a number of papers that outlined a new approach to database
construction that eventually culminated in the groundbreaking A Relational Model of Data for Large Shared Data
Banks.[13]
In this paper, he described a new system for storing and working with large databases. Instead of records being stored
in some sort of linked list of free-form records as in CODASYL, Codds idea was to use a "table" of xed-length
records, with each table used for a dierent type of entity. A linked-list system would be very inecient when storing
sparse databases where some of the data for any one record could be left empty. The relational model solved this
by splitting the data into a series of normalized tables (or relations), with optional elements being moved out of the
main table to where they would take up room only if needed. Data may be freely inserted, deleted and edited in these
tables, with the DBMS doing whatever maintenance needed to present a table view to the application/user.
The relational model also allowed the content of the database to evolve without constant rewriting of links and pointers.
The relational part comes from entities referencing other entities in what is known as one-to-many relationship, like a
traditional hierarchical model, and many-to-many relationship, like a navigational (network) model. Thus, a relational
model can express both hierarchical and navigational models, as well as its native tabular model, allowing for pure or
combined modeling in terms of these three models, as the application requires.
For instance, a common use of a database system is to track information about users, their name, login information,
various addresses and phone numbers. In the navigational approach all of these data would be placed in a single
record, and unused items would simply not be placed in the database. In the relational approach, the data would be
normalized into a user table, an address table and a phone number table (for instance). Records would be created in
these optional tables only if the address or phone numbers were actually provided.
Linking the information back together is the key to this system. In the relational model, some bit of information
was used as a "key", uniquely dening a particular record. When information was being collected about a user,
information stored in the optional tables would be found by searching for this key. For instance, if the login name of
a user is unique, addresses and phone numbers for that user would be recorded with the login name as its key. This
simple re-linking of related data back into a single collection is something that traditional computer languages are
not designed for.
Just as the navigational approach would require programs to loop in order to collect records, the relational approach
would require loops to collect information about any one record. Codds solution to the necessary looping was a setoriented language, a suggestion that would later spawn the ubiquitous SQL. Using a branch of mathematics known
as tuple calculus, he demonstrated that such a system could support all the operations of normal databases (inserting,
updating etc.) as well as providing a simple system for nding and returning sets of data in a single operation.
Codds paper was picked up by two people at Berkeley, Eugene Wong and Michael Stonebraker. They started a
project known as INGRES using funding that had already been allocated for a geographical database project and
student programmers to produce code. Beginning in 1973, INGRES delivered its rst test products which were
generally ready for widespread use in 1979. INGRES was similar to System R in a number of ways, including the
use of a language for data access, known as QUEL. Over time, INGRES moved to the emerging SQL standard.
IBM itself did one test implementation of the relational model, PRTV, and a production one, Business System 12,
both now discontinued. Honeywell wrote MRDS for Multics, and now there are two new implementations: Alphora
Dataphor and Rel. Most other DBMS implementations usually called relational are actually SQL DBMSs.
In 1970, the University of Michigan began development of the MICRO Information Management System[14] based on
1.4. HISTORY
D.L. Childs Set-Theoretic Data model.[15][16][17] Micro was used to manage very large data sets by the US Department
of Labor, the U.S. Environmental Protection Agency, and researchers from the University of Alberta, the University of
Michigan, and Wayne State University. It ran on IBM mainframe computers using the Michigan Terminal System.[18]
The system remained in production until 1998.
1.4.3
Integrated approach
1.4.4
IBM started working on a prototype system loosely based on Codds concepts as System R in the early 1970s. The
rst version was ready in 1974/5, and work then started on multi-table systems in which the data could be split so that
all of the data for a record (some of which is optional) did not have to be stored in a single large chunk. Subsequent
multi-user versions were tested by customers in 1978 and 1979, by which time a standardized query language SQL
had been added. Codds ideas were establishing themselves as both workable and superior to CODASYL, pushing
IBM to develop a true production version of System R, known as SQL/DS, and, later, Database 2 (DB2).
Larry Ellison's Oracle started from a dierent chain, based on IBMs papers on System R, and beat IBM to market
when the rst version was released in 1978.
Stonebraker went on to apply the lessons from INGRES to develop a new database, Postgres, which is now known
as PostgreSQL. PostgreSQL is often used for global mission critical applications (the .org and .info domain name
registries use it as their primary data store, as do many large companies and nancial institutions).
In Sweden, Codds paper was also read and Mimer SQL was developed from the mid-1970s at Uppsala University. In
1984, this project was consolidated into an independent enterprise. In the early 1980s, Mimer introduced transaction
handling for high robustness in applications, an idea that was subsequently implemented on most other DBMSs.
Another data model, the entityrelationship model, emerged in 1976 and gained popularity for database design as
it emphasized a more familiar description than the earlier relational model. Later on, entityrelationship constructs
were retrotted as a data modeling construct for the relational model, and the dierence between the two have become
irrelevant.
1.4.5
The 1980s ushered in the age of desktop computing. The new computers empowered their users with spreadsheets
like Lotus 1-2-3 and database software like dBASE. The dBASE product was lightweight and easy for any computer
user to understand out of the box. C. Wayne Ratli the creator of dBASE stated: dBASE was dierent from
programs like BASIC, C, FORTRAN, and COBOL in that a lot of the dirty work had already been done. The data
manipulation is done by dBASE instead of by the user, so the user can concentrate on what he is doing, rather than
having to mess with the dirty details of opening, reading, and closing les, and managing space allocation.[19] dBASE
was one of the top selling software titles in the 1980s and early 1990s.
1.4.6
CHAPTER 1. DATABASE
1980s, object-oriented
The 1980s, along with a rise in object-oriented programming, saw a growth in how data in various databases were
handled. Programmers and designers began to treat the data in their databases as objects. That is to say that if a
persons data were in a database, that persons attributes, such as their address, phone number, and age, were now
considered to belong to that person instead of being extraneous data. This allows for relations between data to be relations to objects and their attributes and not to individual elds.[20] The term "object-relational impedance mismatch"
described the inconvenience of translating between programmed objects and database tables. Object databases and
object-relational databases attempt to solve this problem by providing an object-oriented language (sometimes as
extensions to SQL) that programmers can use as alternative to purely relational SQL. On the programming side,
libraries known as object-relational mappings (ORMs) attempt to solve the same problem.
1.4.7
1.5 Research
Database technology has been an active research topic since the 1960s, both in academia and in the research and
development groups of companies (for example IBM Research). Research activity includes theory and development
of prototypes. Notable research topics have included models, the atomic transaction concept and related concurrency
control techniques, query languages and query optimization methods, RAID, and more.
The database research area has several dedicated academic journals (for example, ACM Transactions on Database
Systems-TODS, Data and Knowledge Engineering-DKE) and annual conferences (e.g., ACM SIGMOD, ACM PODS,
VLDB, IEEE ICDE).
1.6 Examples
One way to classify databases involves the type of their contents, for example: bibliographic, document-text, statistical, or multimedia objects. Another way is by their application area, for example: accounting, music compositions,
1.6. EXAMPLES
movies, banking, manufacturing, or insurance. A third way is by some technical aspect, such as the database structure
or interface type. This section lists a few of the adjectives used to characterize dierent kinds of databases.
An in-memory database is a database that primarily resides in main memory, but is typically backed-up by nonvolatile computer data storage. Main memory databases are faster than disk databases, and so are often used
where response time is critical, such as in telecommunications network equipment.[26] SAP HANA platform is
a very hot topic for in-memory database. By May 2012, HANA was able to run on servers with 100TB main
memory powered by IBM. The co founder of the company claimed that the system was big enough to run the
8 largest SAP customers.
An active database includes an event-driven architecture which can respond to conditions both inside and
outside the database. Possible uses include security monitoring, alerting, statistics gathering and authorization.
Many databases provide active database features in the form of database triggers.
A cloud database relies on cloud technology. Both the database and most of its DBMS reside remotely, in
the cloud, while its applications are both developed by programmers and later maintained and utilized by
(applications) end-users through a web browser and Open APIs.
Data warehouses archive data from operational databases and often from external sources such as market research rms. The warehouse becomes the central source of data for use by managers and other end-users who
may not have access to operational data. For example, sales data might be aggregated to weekly totals and converted from internal product codes to use UPCs so that they can be compared with ACNielsen data. Some basic
and essential components of data warehousing include extracting, analyzing, and mining data, transforming,
loading and managing data so as to make them available for further use.
A deductive database combines logic programming with a relational database, for example by using the Datalog
language.
A distributed database is one in which both the data and the DBMS span multiple computers.
A document-oriented database is designed for storing, retrieving, and managing document-oriented, or semi
structured data, information. Document-oriented databases are one of the main categories of NoSQL databases.
An embedded database system is a DBMS which is tightly integrated with an application software that requires
access to stored data in such a way that the DBMS is hidden from the applications end-users and requires little
or no ongoing maintenance.[27]
End-user databases consist of data developed by individual end-users. Examples of these are collections of
documents, spreadsheets, presentations, multimedia, and other les. Several products exist to support such
databases. Some of them are much simpler than full-edged DBMSs, with more elementary DBMS functionality.
A federated database system comprises several distinct databases, each with its own DBMS. It is handled as a
single database by a federated database management system (FDBMS), which transparently integrates multiple
autonomous DBMSs, possibly of dierent types (in which case it would also be a heterogeneous database
system), and provides them with an integrated conceptual view.
Sometimes the term multi-database is used as a synonym to federated database, though it may refer to a less
integrated (e.g., without an FDBMS and a managed integrated schema) group of databases that cooperate in a
single application. In this case typically middleware is used for distribution, which typically includes an atomic
commit protocol (ACP), e.g., the two-phase commit protocol, to allow distributed (global) transactions across
the participating databases.
A graph database is a kind of NoSQL database that uses graph structures with nodes, edges, and properties to
represent and store information. General graph databases that can store any graph are distinct from specialized
graph databases such as triplestores and network databases.
CHAPTER 1. DATABASE
An array DBMS is a kind of NoSQL DBMS that allows to model, store, and retrieve (usually large) multidimensional arrays such as satellite images and climate simulation output.
In a hypertext or hypermedia database, any word or a piece of text representing an object, e.g., another piece
of text, an article, a picture, or a lm, can be hyperlinked to that object. Hypertext databases are particularly
useful for organizing large amounts of disparate information. For example, they are useful for organizing
online encyclopedias, where users can conveniently jump around the text. The World Wide Web is thus a large
distributed hypertext database.
A knowledge base (abbreviated KB, kb or [28][29] ) is a special kind of database for knowledge management,
providing the means for the computerized collection, organization, and retrieval of knowledge. Also a collection
of data representing problems with their solutions and related experiences.
A mobile database can be carried on or synchronized from a mobile computing device.
Operational databases store detailed data about the operations of an organization. They typically process relatively high volumes of updates using transactions. Examples include customer databases that record contact,
credit, and demographic information about a business customers, personnel databases that hold information
such as salary, benets, skills data about employees, enterprise resource planning systems that record details
about product components, parts inventory, and nancial databases that keep track of the organizations money,
accounting and nancial dealings.
A parallel database seeks to improve performance through parallelization for tasks such as loading data, building
indexes and evaluating queries.
The major parallel DBMS architectures which are induced by the underlying hardware architecture are:
Shared memory architecture, where multiple processors share the main memory space,
as well as other data storage.
Shared disk architecture, where each processing unit (typically consisting of multiple
processors) has its own main memory, but all units share the other storage.
Shared nothing architecture, where each processing unit has its own main memory
and other storage.
Probabilistic databases employ fuzzy logic to draw inferences from imprecise data.
Real-time databases process transactions fast enough for the result to come back and be acted on right away.
A spatial database can store the data with multidimensional features. The queries on such data include location
based queries, like Where is the closest hotel in my area?".
A temporal database has built-in time aspects, for example a temporal data model and a temporal version of
SQL. More specically the temporal aspects usually include valid-time and transaction-time.
A terminology-oriented database builds upon an object-oriented database, often customized for a specic eld.
An unstructured data database is intended to store in a manageable and protected way diverse objects that do
not t naturally and conveniently in common databases. It may include email messages, documents, journals,
multimedia objects, etc. The name may be misleading since some objects can be highly structured. However,
the entire possible object collection does not t into a predened structured framework. Most established
DBMSs now support unstructured data in various ways, and new dedicated DBMSs are emerging.
1.7.1
Models
10
CHAPTER 1. DATABASE
Document model
Entityattributevalue model
Star schema
1.7.2
1.8. LANGUAGES
11
and the conceptual levels (e.g., relational model). The internal level, which is hidden inside the DBMS and depends
on its implementation (see Implementation section below), requires a dierent level of detail and uses its own types
of data structure types.
Separating the external, conceptual and internal levels was a major feature of the relational database model implementations that dominate 21st century databases.[31]
1.8 Languages
Database languages are special-purpose languages, which do one or more of the following:
Data denition language denes data types and the relationships among them
Data manipulation language performs tasks such as inserting, updating, or deleting data occurrences
Query language allows searching for information and computing derived information
Database languages are specic to a particular data model. Notable examples include:
SQL combines the roles of data denition, data manipulation, and query in a single language. It was one of
the rst commercial languages for the relational model, although it departs in some respects from the relational
model as described by Codd (for example, the rows and columns of a table can be ordered). SQL became a
standard of the American National Standards Institute (ANSI) in 1986, and of the International Organization
for Standardization (ISO) in 1987. The standards have been regularly enhanced since and is supported (with
varying degrees of conformance) by all mainstream commercial relational DBMSs.[32][33]
OQL is an object model language standard (from the Object Data Management Group). It has inuenced the
design of some of the newer query languages like JDOQL and EJB QL.
XQuery is a standard XML query language implemented by XML database systems such as MarkLogic and
eXist, by relational databases with XML capability such as Oracle and DB2, and also by in-memory XML
processors such as Saxon.
SQL/XML combines XQuery with SQL.[34]
A database language may also incorporate features like:
DBMS-specic Conguration and storage engine management
Computations to modify query results, like counting, summing, averaging, sorting, grouping, and cross-referencing
Constraint enforcement (e.g. in an automotive database, only allowing one engine type per car)
Application programming interface version of the query language, for programmer convenience
12
1.9.1
CHAPTER 1. DATABASE
Storage
1.9.2
Security
13
1.9.3
1.9.4
Migration
See also section Database migration in article Data migration
A database built with one DBMS is not portable to another DBMS (i.e., the other DBMS cannot run it). However,
in some situations it is desirable to move, migrate a database from one DBMS to another. The reasons are primarily
economical (dierent DBMSs may have dierent total costs of ownership or TCOs), functional, and operational
(dierent DBMSs may have dierent capabilities). The migration involves the databases transformation from one
DBMS type to another. The transformation should maintain (if possible) the database related application (i.e., all
related application programs) intact. Thus, the databases conceptual and external architectural levels should be
maintained in the transformation. It may be desired that also some aspects of the architecture internal level are
maintained. A complex or large database migration may be a complicated and costly (one-time) project by itself,
which should be factored into the decision to migrate. This in spite of the fact that tools may exist to help migration
between specic DBMSs. Typically a DBMS vendor provides tools to help importing databases from other popular
DBMSs.
1.9.5
14
CHAPTER 1. DATABASE
data model. Other user interfaces are used to select needed DBMS parameters (like security related, storage allocation
parameters, etc.).
When the database is ready (all its data structures and other needed components are dened) it is typically populated with initial applications data (database initialization, which is typically a distinct project; in many cases using
specialized DBMS interfaces that support bulk insertion) before making it operational. In some cases the database
becomes operational while empty of application data, and data is accumulated during its operation.
After the database is created, initialised and populated it needs to be maintained. Various database parameters may
need changing and the database may need to be tuned (tuning) for better performance; applications data structures
may be changed or added, new related application programs may be written to add to the applications functionality,
etc.
1.9.6
1.9.7
Other
1.11. REFERENCES
15
Database testing
Database-centric architecture
Question-focused dataset
1.11 References
[1] http://www.merriam-webster.com/dictionary/database
[2] Jerey Ullman 1997: First course in database systems, PrenticeHall Inc., Simon & Schuster, Page 1, ISBN 0-13-861337-0.
[3] http://www.merriam-webster.com/dictionary/update
[4] http://www.merriam-webster.com/dictionary/retrieval
[5] http://www.merriam-webster.com/dictionary/administration
[6] Tsitchizris, D. C. and F. H. Lochovsky (1982). Data Models. Englewood-Clis, PrenticeHall.
[7] Beynon-Davies P. (2004). Database Systems 3rd Edition. Palgrave, Basingstoke, UK. ISBN 1-4039-1601-2
[8] Raul F. Chong, Michael Dang, Dwaine R. Snow, Xiaomei Wang (3 July 2008). Introduction to DB2. Retrieved 17
March 2013.. This article quotes a development time of 5 years involving 750 people for DB2 release 9 alone
[9] C. W. Bachmann (November 1973), The Programmer as Navigator (PDF), CACM (Turing Award Lecture 1973)
[10] Top DB index
[11] database, n. OED Online. Oxford University Press. June 2013. Retrieved July 12, 2013.
[12] IBM Corporation. IBM Information Management System (IMS) 13 Transaction and Database Servers delivers high performance and low total cost of ownership. Retrieved Feb 20, 2014.
[13] Codd, E.F. (1970).A Relational Model of Data for Large Shared Data Banks. In: Communications of the ACM 13 (6):
377387.
[14] William Hershey and Carol Easthope, A set theoretic data structure and retrieval language, Spring Joint Computer Conference, May 1972 in ACM SIGIR Forum, Volume 7, Issue 4 (December 1972), pp. 4555, DOI=10.1145/1095495.1095500
[15] Ken North, Sets, Data Models and Data Independence, Dr. Dobbs, 10 March 2010
[16] Description of a set-theoretic data structure, D. L. Childs, 1968, Technical Report 3 of the CONCOMP (Research in
Conversational Use of Computers) Project, University of Michigan, Ann Arbor, Michigan, USA
[17] Feasibility of a Set-Theoretic Data Structure : A General Structure Based on a Reconstituted Denition of Relation, D. L.
Childs, 1968, Technical Report 6 of the CONCOMP (Research in Conversational Use of Computers) Project, University
of Michigan, Ann Arbor, Michigan, USA
[18] MICRO Information Management System (Version 5.0) Reference Manual, M.A. Kahn, D.L. Rumelhart, and B.L. Bronson,
October 1977, Institute of Labor and Industrial Relations (ILIR), University of Michigan and Wayne State University
[19] Interview with Wayne Ratli. The FoxPro History. Retrieved on 2013-07-12.
[20] Development of an object-oriented DBMS; Portland, Oregon, United States; Pages: 472 482; 1986; ISBN 0-89791-204-7
[21] Oracle Berkeley DB XML (PDF). Retrieved 10 March 2015.
[22] ACID Transactions, MarkLogic. Retrieved 10 March 2015.
[23] Clusterpoint Database at a Glance. Retrieved 10 March 2015.
[24] DB-Engines Ranking. January 2013. Retrieved 22 January 2013.
[25] Proctor, Seth (2013). Exploring the Architecture of the NuoDB Database, Part 1. Retrieved 2013-07-12.
[26] TeleCommunication Systems Signs up as a Reseller of TimesTen; Mobile Operators and Carriers Gain Real-Time Platform for Location-Based Services. Business Wire. 2002-06-24.
16
CHAPTER 1. DATABASE
[27] Graves, Steve. COTS Databases For Embedded Systems, Embedded Computing Design magazine, January 2007. Retrieved on August 13, 2008.
[28] Argumentation in Articial Intelligence by Iyad Rahwan, Guillermo R. Simari
[29] OWL DL Semantics. Retrieved 10 December 2010.
[30] itl.nist.gov (1993) Integration Denition for Information Modeling (IDEFIX). 21 December 1993.
[31] Date 1990, pp. 3132
[32] Chapple, Mike. SQL Fundamentals. Databases. About.com. Retrieved 2009-01-28.
[33] Structured Query Language (SQL)". International Business Machines. October 27, 2006. Retrieved 2007-06-10.
[34] Wagner, Michael (2010), 1. Auage, SQL/XML:2006 Evaluierung der Standardkonformitt ausgewhlter Datenbanksysteme, Diplomica Verlag, ISBN 3-8366-9609-6
17
18
CHAPTER 1. DATABASE
"key"
last
login first
mark Samuel Clemens
Kimbro
Lion
lion
kitty
Amber Straub
login phone
mark 555.555.5555
"related table"
In the relational model, records are linked using virtual keys not stored in the database but dened as needed between the data
contained in the records.
19
External Schema
-User ViewTraditional view of data[30]
Internal Schema
-Computer View-
Chapter 2
A relational database management system (RDBMS) is a database management system (DBMS) that is based on
the relational model as invented by E. F. Codd, of IBMs San Jose Research Laboratory. Many popular databases
currently in use are based on the relational database model.
RDBMSs are a common choice for the storage of information in new databases used for nancial records, manufacturing and logistical information, personnel data, and other applications since the 1980s. Relational databases
have often replaced legacy hierarchical databases and network databases because they are easier to understand and
use. However, relational databases have been challenged by object databases, which were introduced in an attempt
to address the object-relational impedance mismatch in relational databases, and XML databases.
20
21
2.2 History
In 1974, IBM began developing System R, a research project to develop a prototype RDBMS.[4] Its rst commercial
product was SQL/DS, released in 1981.[5] However, the rst commercially available RDBMS was Oracle, released in
1979 by Relational Software, now Oracle Corporation.[6] Other examples of an RDBMS include DB2, SAP Sybase
ASE, and Informix.
22
A second school of thought argues that if a database does not implement all of Codds rules (or the current understanding on the relational model, as expressed by Christopher J Date, Hugh Darwen and others), it is not relational.
This view, shared by many theorists and other strict adherents to Codds principles, would disqualify most DBMSs as
not relational. For clarication, they often refer to some RDBMSs as truly-relational database management systems
(TRDBMS), naming others pseudo-relational database management systems (PRDBMS). It can also be said as the
raw database management system.
As of 2009, most commercial relational DBMSes employ SQL as their query language.
[9]
Alternative query languages have been proposed and implemented, notably the pre-1996 implementation of Berkeley
Ingres QUEL.
2.5 References
[1] Oracle the clear leader in $24 billion RDBMS market. 2012-04-12. Retrieved 2013-03-01.
[2] Market Share. Retrieved 2013-03-01.
[3] DB-Engines Ranking of Relational DBMS. Retrieved 2013-05-06.
[4] Funding a Revolution: Government Support for Computing Research. National Academies Press. 8 Jan 1999. ISBN
0309062780. System R did not convince IBM management to abandon its existing product
[5] S. Sumathi, S. Esakkirajan (13 Feb 2008). Fundamentals of Relational Database Management Systems. Springer. ISBN
3540483977. The product was called SQL/DS (Structured Query Language/Data Store) and ran under the DOS/VSE
operating system environment
[6] Oracle Timeline (PDF). Prot Magazine (Oracle) 12 (2): 26. May 2007. Retrieved 2013-05-16.
[7] A Relational Model of Data for Large Shared Data Banks
[8] SIGFIDET '74 Proceedings of the 1974 ACM SIGFIDET (now SIGMOD) workshop on Data description, access and
control
[9] Ramakrishnan, Raghu; Donjerkovic, Donko; Ranganathan, Arvind; Beyer, Kevin S.; Krishnaprasad, Muralidhar (1998).
SRQL: Sorted Relational Query Language (PDF). e Proceedings of SSDBM.
Chapter 3
MySQL
MySQL (/maskjul/ My S-Q-L,[6] ocially, but also called /masikwl/ My Sequel) is (as of July 2013) the
worlds second most[lower-alpha 1] widely used relational database management system (RDBMS)[9] and most widely
used open-source RDBMS.[10] It is named after co-founder Michael Widenius's daughter, My.[11] The SQL acronym
stands for Structured Query Language.
The MySQL development project has made its source code available under the terms of the GNU General Public
License, as well as under a variety of proprietary agreements. MySQL was owned and sponsored by a single for-prot
rm, the Swedish company MySQL AB, now owned by Oracle Corporation.[12]
MySQL is a popular choice of database for use in web applications, and is a central component of the widely used
LAMP open source web application software stack (and other 'AMP' stacks). LAMP is an acronym for "Linux,
Apache, MySQL, Perl/PHP/Python. Free-software-open source projects that require a full-featured database management system often use MySQL.
For proprietary use, several paid editions are available, and oer additional functionality. Applications which use
MySQL databases include: TYPO3, MODx, Joomla, WordPress, phpBB, MyBB, Drupal and other software. MySQL
is also used in many high-prole, large-scale websites, including Google[13][14] (though not for searches), Facebook,[15][16][17]
Twitter,[18] Flickr,[19] and YouTube.[20]
3.1 Interfaces
MySQL is a relational database management system (RDBMS), and ships with no GUI tools to administer MySQL
databases or manage data contained within the databases. Users may use the included command line tools,[21][22] or
use MySQL front-ends, desktop software and web applications that create and manage MySQL databases, build
database structures, back up data, inspect status, and work with data records.[23][24][25][26] The ocial set of MySQL
front-end tools, MySQL Workbench is actively developed by Oracle, and is freely available for use.[27]
3.1.1
Graphical
The ocial MySQL Workbench is a free integrated environment developed by MySQL AB, that enables users to
graphically administer MySQL databases and visually design database structures. MySQL Workbench replaces the
previous package of software, MySQL GUI Tools. Similar to other third-party packages, but still considered the authoritative MySQL front end, MySQL Workbench lets users manage database design & modeling, SQL development
(replacing MySQL Query Browser) and Database administration (replacing MySQL Administrator).
MySQL Workbench is available in two editions, the regular free and open source Community Edition which may be
downloaded from the MySQL website, and the proprietary Standard Edition which extends and improves the feature
set of the Community Edition.
Third-party proprietary and free graphical administration applications (or front ends) are available that integrate
with MySQL and enable users to work with database structure and data visually. Some well-known front ends, in
alphabetical order, are:
23
24
CHAPTER 3. MYSQL
Adminer a free MySQL front end written in one PHP script, capable of managing multiple databases, with
many CSS skins available
Chive a free, open source, web-based database management tool designed as an alternative to phpMyAdmin
Database Workbench a software application for development and administration of multiple relational databases
including MySQL, with interoperationality between dierent database systems
DBEdit a free front end for MySQL and other databases
HeidiSQL a full featured free front end that runs on Windows, and can connect to local or remote MySQL
servers to manage databases, tables, column structure, and individual data records. Also supports specialised
GUI features for date/time elds and enumerated multiple-value elds[28]
LibreOce Base LibreOce Base allows the creation and management of databases, preparation of forms
and reports that provide end users easy access to data. Like Microsoft Access, it can be used as a frontend for various database systems, including Access databases (JET), ODBC data sources, and MySQL or
PostgreSQL[29]
Navicat a series of proprietary graphical database management applications, developed for Windows, Macintosh and Linux
OpenOce.org freely available OpenOce.org Base can manage MySQL databases if the entire suite is
installed
phpMyAdmin a free Web-based front-end, widely installed[30] by web hosting services since it is developed
in PHP and included in the LAMP stack, and MAMP, XAMPP and WAMP software bundle installers
SQLBuddy a free Web-based front end, developed in PHP
SQLyog proprietary, but there is also a free 'community' edition available
3.2. FEATURES
25
Toad for MySQL a free development and administration front end for MySQL from Dell Software
Webmin a free Web-based management utility and a MySQL front end, developed in Perl with some parts
written in Java
Other available proprietary MySQL front ends include dbForge Studio for MySQL, DBStudio, Epictetus, Microsoft
Access, Oracle SQL Developer, SchemaBank, SQLPro SQL Client, Toad Data Modeler and DaDaBIK.
3.1.2
Command line
MySQL ships with many command line tools, from which the main interface is 'mysql' client.[21][22] Third parties
have also developed tools to manage MySQL servers.
MySQL Utilities a set of utilities designed to perform common maintenance and administrative tasks. Originally included as part of the MySQL Workbench, the utilities are now a stand-alone download available from
Oracle.
Percona Toolkit a cross-platform toolkit for MySQL, developed in Perl.[31] Percona Toolkit can be used
to prove replication is working correctly, x corrupted data, automate repetitive tasks, and speed up servers.
Percona Toolkit is included with several Linux distributions such as CentOS and Debian, and packages are
available for Fedora and Ubuntu as well. Percona Toolkit was originally developed as Maatkit, but as of late
2011, Maatkit is no longer developed.
3.1.3
Programming
MySQL works on many system platforms, including AIX, BSDi, FreeBSD, HP-UX, eComStation, i5/OS, IRIX,
Linux, OS X, Microsoft Windows, NetBSD, Novell NetWare, OpenBSD, OpenSolaris, OS/2 Warp, QNX, Oracle
Solaris, Symbian, SunOS, SCO OpenServer, SCO UnixWare, Sanos and Tru64. A port of MySQL to OpenVMS
also exists.[32]
MySQL is written in C and C++. Its SQL parser is written in yacc, but it uses a home-brewed lexical analyzer.[33]
Many programming languages with language-specic APIs include libraries for accessing MySQL databases. These
include MySQL Connector/Net for integration with Microsofts Visual Studio (languages such as C# and VB are most
commonly used) and the JDBC driver for Java. In addition, an ODBC interface called MyODBC allows additional
programming languages that support the ODBC interface to communicate with a MySQL database, such as ASP or
ColdFusion. The HTSQL URL-based query method also ships with a MySQL adapter, allowing direct interaction
between a MySQL database and any web client via structured URLs.
3.2 Features
MySQL is oered under two dierent editions: the open source MySQL Community Server and the proprietary
Enterprise Server.[34] MySQL Enterprise Server is dierentiated by a series of proprietary extensions which install
as server plugins, but otherwise shares the version numbering system and is built from the same code base.
Major features as available in MySQL 5.6:
A broad subset of ANSI SQL 99, as well as extensions
Cross-platform support
Stored procedures, using a procedural language that closely adheres to SQL/PSM[35]
Triggers
Cursors
Updatable views
26
CHAPTER 3. MYSQL
Online DDL when using the InnoDB Storage Engine.
Information schema
Performance Schema
A set of SQL Mode options to control runtime behavior, including a strict mode to better adhere to SQL
standards.
X/Open XA distributed transaction processing (DTP) support; two phase commit as part of this, using the
default InnoDB storage engine
Transactions with savepoints when using the default InnoDB Storage Engine. The NDB Cluster Storage Engine
also supports transactions.
ACID compliance when using InnoDB and NDB Cluster Storage Engines[36]
SSL support
Query caching
Sub-SELECTs (i.e. nested SELECTs)
Built-in Replication support (i.e. Master-Master Replication & Master-Slave Replication) with one master per
slave, many slaves per master.[37] Multi-master replication is provided in MySQL Cluster,[38] and multi-master
support can be added to unclustered congurations using Galera Cluster.[39]
Full-text indexing and searching[lower-alpha 2]
Embedded database library
Unicode support[lower-alpha 3]
Partitioned tables with pruning of partitions in optimizer
Shared-nothing clustering through MySQL Cluster
Multiple storage engines, allowing one to choose the one that is most eective for each table in the application.[lower-alpha 4]
Native storage engines InnoDB, MyISAM, Merge, Memory (heap), Federated, Archive, CSV, Blackhole, NDB
Cluster.
Commit grouping, gathering multiple transactions from multiple connections together to increase the number
of commits per second.
The developers release minor updates of the MySQL Server approximately every two months. The sources can be
obtained from MySQLs website or from MySQLs Bazaar repository, both under the GPL license.
3.2.1
Limitations
Like other SQL databases, MySQL does not currently comply with the full SQL standard for some of the implemented
functionality, including foreign key references when using some storage engines other than the default of InnoDB,[40]
and check constraints.[41]
Up until MySQL 5.7, triggers are limited to one per action / timing, meaning that at most one trigger can be dened
to be executed after an INSERT operation, and one before INSERT on the same table.[42] No triggers can be dened
on views.[42]
MySQL, like most other transactional relational databases, is strongly limited by hard disk performance. This is
especially true in terms of write latency.[43] Given the recent appearance as of 2012 of very aordable consumer
grade SATA interface solid-state drives that oer zero mechanical latency, a vefold speedup over even an eight drive
RAID array can be had for a smaller investment.[44][45]
MySQL databases inbuilt functions like UNIX_TIMESTAMP() will return 0 after 03:14:07 UTC on 19 January
2038.[46]
3.2. FEATURES
27
Web cache
Linux kernel
Squid
Polipo
Trac server
AppArmor
SELinux
Smack
TOMOYO
CPU
&
RAM
Process Scheduler
Web server
Apache
Cherokee
Lighttpd
Nginx
CGI scripting
Perl
PHP
Python
Environment: CCC
Hardware
Netlter
Crackers
Botnets for DDoS-attacks
cracking attempts
...
Attacks
stave o
Network scheduler
NIC
device
driver
Competitors
&
Requests
serve
Networking
hardware
kmod-fs-ext4
kmod-fs-btrfs
Lustre
...
Database
MariaDB
MySQL
Drizzle
Internet
Responses
Customers
low latency
Storage
SATA
SAS
RAID
iSCSI
NAS
want attendance
Botnets
DDoS-Attacks
3.2.2
Deployment
MySQL can be built and installed manually from source code, but this can be tedious so it is more commonly installed
from a binary package unless special customizations are required. On most Linux distributions the package management system can download and install MySQL with minimal eort, though further conguration is often required to
adjust security and optimization settings.
Though MySQL began as a low-end alternative to more powerful proprietary databases, it has gradually evolved to
support higher-scale needs as well. It is still most commonly used in small to medium scale single-server deployments,
either as a component in a LAMP-based web application or as a standalone database server. Much of MySQLs appeal
originates in its relative simplicity and ease of use, which is enabled by an ecosystem of open source tools such as
phpMyAdmin. In the medium range, MySQL can be scaled by deploying it on more powerful hardware, such as a
multi-processor server with gigabytes of memory.
There are however limits to how far performance can scale on a single server ('scaling up'), so on larger scales, multiserver MySQL ('scaling out') deployments are required to provide improved performance and reliability. A typical
high-end conguration can include a powerful master database which handles data write operations and is replicated
to multiple slaves that handle all read operations.[47] The master server synchronizes continually with its slaves so in
the event of failure a slave can be promoted to become the new master, minimizing downtime. Further improvements in performance can be achieved by caching the results from database queries in memory using memcached,
or breaking down a database into smaller chunks called shards which can be spread across a number of distributed
server clusters.[48]
3.2.3
Backup
Filesystem snapshot or volume manager snapshot backups are performed by using an external tool provided
by the operating system (such as LVM) or storage device, with additional support from MySQL for ensuring
consistency of such snapshots.
mysqldump a logical backup tool included with both community and enterprise editions of MySQL. Supports
backup from all storage engines.
MySQL Enterprise Backup a hot backup utility included as part of the MySQL Enterprise subscription from
Oracle. Oers native InnoDB hot backup, as well as backup for other storage engines.
XtraBackup open source MySQL hot backup software. Some notable features include hot, non-locking
28
CHAPTER 3. MYSQL
backups for InnoDB storage, incremental backups, streaming, parallel-compressed backups, throttling based
on the number of I/O operations per second, etc.[49]
3.2.4
High availability
Ensuring high availability requires a certain amount of redundancy in the system. For database systems, the redundancy traditionally takes the form of having a primary server acting as a master, and using replication to keep
secondaries available to take over in case the primary fails. This means that the server that the application connects
to is in reality a collection of servers, not a single server. In a similar manner, if the application is using a sharded
database, it is in reality working with a collection of servers, not a single server. In this case, a collection of servers
is usually referred to as a farm.[50]
One of the projects aiming to provide high availability for MySQL is MySQL Fabric, an integrated system for managing a collection of MySQL servers, and a framework on top of which high availability and database sharding is built.
MySQL Fabric is open-source and is intended to be extensible, easy to use, and to support procedure execution even
in the presence of failure, providing an execution model usually called resilient execution. MySQL client libraries are
extended so they are hiding the complexities of handling failover in the event of a server failure, as well as correctly
dispatching transactions to the shards. As of September 2013, there is currently support for Fabric-aware versions of
Connector/J, Connector/PHP, Connector/Python, as well as some rudimentary support for Hibernate and Doctrine.
As of May 2014, MySQL Fabric is in the general availability stage of development.[51]
3.2.5
Cloud deployment
3.3 Community
The MySQL server software itself and the client libraries use dual-licensing distribution. They are oered under GPL
version 2,[56] beginning from 28 June 2000[57] (which in 2009 has been extended with a FLOSS License Exception)[58]
or to use a proprietary license.[59]
Support can be obtained from the ocial manual.[60] Free support additionally is available in dierent IRC channels
and forums. Oracle oers paid support via its MySQL Enterprise products. They dier in the scope of services and
in price. Additionally, a number of third party organisations exist to provide support and services, including SkySQL
Ab and Percona.
MySQL has received positive reviews, and reviewers noticed it performs extremely well in the average case. and
that the developer interfaces are there, and the documentation (not to mention feedback in the real world via Web
sites and the like) is very, very good.[61] It has also been tested to be a fast, stable and true multi-user, multi-threaded
sql database server.[62]
3.4. HISTORY
3.3.1
29
Related projects
Drizzle a fork targeted at the web-infrastructure and cloud computing markets. The developers of the product
describe it as a smaller, slimmer and (hopefully) faster version of MySQL. As a result, many common
MySQL features will be stripped out, including stored procedures, query cache, prepared statements, views,
and triggers. This is a partial rewrite of the server that does not maintain compatibility with MySQL. However,
Drizzle made no new releases since May 2012.[63]
MariaDB a community-developed fork of the MySQL database source code.[64] The intent also being to
maintain high delity with MySQL, ensuring a drop-in replacement capability with library binary equivalency
and exact matching with MySQL APIs and commands. It includes the XtraDB storage engine as a replacement
for InnoDB.
Percona Server a fork of MySQL that includes the XtraDB storage engine. Its policy is to deviate as little
as possible from MySQL and remain fully compatible, while providing new features, better performance, and
additional instrumentation for analysis of performance and usage.[65][66]
WebScaleSQL A branch of MySQL 5.6 maintained by Facebook, LinkedIn, Google and Twitter.[67]
3.4 History
MySQL was created by a Swedish company, MySQL AB, founded by David Axmark, Allan Larsson and Michael
Monty Widenius. The rst version of MySQL appeared on 23 May 1995. It was initially created for personal
usage from mSQL based on the low-level language ISAM, which the creators considered too slow and inexible.
They created a new SQL interface, while keeping the same API as mSQL. By keeping the API consistent with the
mSQL system, many developers were able to use MySQL instead of the (proprietarily licensed) mSQL antecedent.
3.4.1
On 15 June 2001, NuSphere sued MySQL AB, TcX DataKonsult AB and its original authors Michael (Monty)
Widenius and David Axmark in U.S District Court in Boston for breach of contract, tortious interference with third
party contracts and relationships and unfair competition.[68][69]
In 2002, MySQL AB sued Progress NuSphere for copyright and trademark infringement in United States district
court. NuSphere had allegedly violated MySQLs copyright by linking MySQLs GPL'ed code with NuSphere Gemini
table without being in compliance with the license.[70] After a preliminary hearing before Judge Patti Saris on 27
February 2002, the parties entered settlement talks and eventually settled.[71] After the hearing, FSF commented that
Judge Saris made clear that she sees the GNU GPL to be an enforceable and binding license.[72]
In October 2005, Oracle Corporation acquired Innobase OY, the Finnish company that developed the third-party
InnoDB storage engine that allows MySQL to provide such functionality as transactions and foreign keys. After
the acquisition, an Oracle press release mentioned that the contracts that make the companys software available to
MySQL AB would be due for renewal (and presumably renegotiation) some time in 2006.[73] During the MySQL
Users Conference in April 2006, MySQL issued a press release that conrmed that MySQL and Innobase OY agreed
to a multi-year extension of their licensing agreement.[74]
In February 2006, Oracle Corporation acquired Sleepycat Software,[75] makers of the Berkeley DB, a database engine
providing the basis for another MySQL storage engine. This had little eect, as Berkeley DB was not widely used, and
was dropped (due to lack of use) in MySQL 5.1.12, a pre-GA release of MySQL 5.1 released in October 2006.[76]
In January 2008, Sun Microsystems bought MySQL for $1 billion.[77]
In April 2009, Oracle Corporation entered into an agreement to purchase Sun Microsystems,[78] then owners of
MySQL copyright and trademark. Suns board of directors unanimously approved the deal, it was also approved by
Suns shareholders, and by the U.S. government on 20 August 2009.[79] On 14 December 2009, Oracle pledged to
continue to enhance MySQL[80] as it had done for the previous four years.
A movement against Oracles acquisition of MySQL, to Save MySQL[81] from Oracle was started by one of the
MySQL founders, Monty Widenius. The petition of 50,000+ developers and users called upon the European Commission to block approval of the acquisition. At the same time, several Free Software opinion leaders (including
Eben Moglen, Pamela Jones of Groklaw, Jan Wildeboer and Carlo Piana, who also acted as co-counsel in the merger
30
CHAPTER 3. MYSQL
regulation procedure) advocated for the unconditional approval of the merger. As part of the negotiations with
the European Commission, Oracle committed that MySQL server will continue until at least 2015 to use the duallicensing strategy long used by MySQL AB, with proprietary and GPL versions available. The antitrust of the EU
had been pressuring it to divest MySQL as a condition for approval of the merger. But, as revealed by WikiLeaks,
the US Department of Justice and Antitrust, at the request of Oracle, pressured the EU to unconditionally approve
the merger.[82] The European Commission eventually unconditionally approved Oracles acquisition of MySQL on
21 January 2010.[83]
In January 2009, prior to Oracles acquisition of MySQL, Monty Widenius started a GPL-only fork, MariaDB.
MariaDB is based on the same code base as MySQL server 5.1 and strives to maintain compatibility with Oracleprovided versions.[84]
3.4.2
Milestones
31
MySQL Server 5.5 was generally available (as of December 2010). Enhancements and features include:
The default storage engine is InnoDB, which supports transactions and referential integrity constraints.
Improved InnoDB I/O subsystem[94]
Improved SMP support[95]
Semisynchronous replication.
SIGNAL and RESIGNAL statement in compliance with the SQL standard.
Support for supplementary Unicode character sets utf16, utf32, and utf8mb4.
New options for user-dened partitioning.
MySQL Server 6.0.11-alpha was announced[96] on 22 May 2009 as the last release of the 6.0 line. Future
MySQL Server development uses a New Release Model. Features developed for 6.0 are being incorporated
into future releases.
MySQL 5.6 general availability was announced in February 2013. New features included performance improvements to the query optimizer, higher transactional throughput in InnoDB, new NoSQL-style memcached
APIs, improvements to partitioning for querying and managing very large tables, TIMESTAMP column type
that correctly stores milliseconds, improvements to replication, and better performance monitoring by expanding the data available through the PERFORMANCE_SCHEMA.[97] The InnoDB storage engine also included
support for full text search and improved group commit performance.
MySQL 5.7 Development Milestone 3 was released December 2013.[98]
3.4.3
Versions
The following chart provides an overview of various MySQL versions and their current development statuses:[99][100][101][102][103][104][105][1
3.6 Notes
[1] Following SQLite, which is deployed with every Android and iPhone device along with the Chrome and Firefox browsers.[7]
In the second quarter of 2013 alone, 213 million smartphones shipped, of which 200 million were Android and iOS.[8]
[2] Initially, it was a MyISAM-only feature; supported by InnoDB since the release of MySQL 5.6.
[3] Prior to MySQL 5.5.3, UTF-8 and UCS-2 encoded strings are limited to the BMP; MySQL 5.5.3 and later use utf8mb4
for full unicode support.
[4] In MySQL 5.0, storage engines must be compiled in; since MySQL 5.1, storage engines can be dynamically loaded at run
time.
3.7 References
[1] Changes in MySQL 5.6.24. MySQL 5.6 Reference Manual. Oracle. 6 April 2015. Retrieved 6 April 2015.
[2] Changes in Release 5.7.5 (Development)". MySQL 5.7 Reference Manual. Oracle Corporation. 25 September 2014.
Retrieved 29 September 2014.
[3] MySQL: Project Summary. Ohloh. Black Duck Software. Retrieved 17 September 2012.
32
CHAPTER 3. MYSQL
3.7. REFERENCES
33
[33] MySQL Internals Manual. Dev.mysql.com. 4 March 2009. Retrieved 8 June 2009.
[34] Which Should I Use: MySQL Enterprise or MySQL Community Server?". MySQL AB. Retrieved 8 April 2009.
[35] Guy Harrison; Steven Feuerstein (2008). MySQL Stored Procedure Programming. O'Reilly Media. p. 49. ISBN 978-0596-10089-6.
[36] MySQL :: InnoDB 1.1 for MySQL 5.5 Users Guide :: C InnoDB Glossary :: ACID. Retrieved 5 January 2011.
[37] Replication. MySQL.
[38] MySQL Cluster Replication: Multi-Master and Circular Replication. MySQL.
[39] MySQL University: MySQL Galera Multi-Master Replication. Oracle Corporation. 2010-02-09.
[40] dev.mysql.com. dev.mysql.com. Retrieved 11 April 2015.
[41] bugs.mysql.com. bugs.mysql.com. 14 April 2004. Retrieved 11 April 2015.
[42] dev.mysql.com. dev.mysql.com. Retrieved 11 April 2015.
[43] MySQL Innodb ZFS Best Practices.. Blogs.oracle.com. 2009-05-26. Retrieved 2015-04-11.
[44] 11 September 2012 (2012-09-11). Intel SSD 910 vs HDD RAID in tpcc-mysql benchmark.. Mysqlperformanceblog.com. Retrieved 2015-04-11.
[45] Matsunobu, Yoshinori. (15 April 2010). SSD Deployment Strategies for MySQL.. Sun Microsystems. Retrieved 201504-11.
[46] aj_blk: Year 2038 Bug. Ajoeblk.blogspot.in. 2012-08-31. Retrieved 2015-04-11.
[47] The future of replication in MySQL. Facebook. Retrieved 9 December 2009.
[48] Database Sharding. Code Futures. Retrieved 9 December 2009.
[49] XtraBackup. Percona. Retrieved 19 January 2013.
[50] Mats Kindahl (2013-09-21). A Brief Introduction to MySQL Fabric. mysqlmusings.blogspot.com. Retrieved 2013-1212.
[51] Mats Kindahl (2014-05-27). MySQL Fabric: Musings on Release 1.4.3. mysqlmusings.blogspot.com. Retrieved 201406-18.
[52] Running MySQL on Amazon EC2 with EBS (Elastic Block Store)". Amazon Web Services. Retrieved 5 February 2013.
[53] Finley, Klint. 7 Cloud-Based Database Services. ReadWriteWeb. Retrieved 9 November 2011.
[54] MySQL Server Support at Rackspace. Rackspace.com. Retrieved 10 November 2011.
[55] Managed Hosting Terremark. Terremark.com.
[56] Oracle :: MySQL Open Source License. Mysql.com. Retrieved 8 June 2009.
[57] MySQL GOES GPL. Archived from the original on 12 August 2001.
[58] Oracle :: FLOSS License Exception. Mysql.com. Retrieved 8 June 2009.
[59] Oracle :: MySQL Commercial License. Mysql.com. Retrieved 8 June 2009.
[60] MySQL Support Manual, MySQL Developers
[61] Review of MySQL Server 5.0, Techworld.com, November 2005
[62] MySQL Server Review, LinuxMint.com
[63] Series 7.1 : Drizzle. Launchpad.net. Retrieved 2014-08-03.
[64] What is the goal of MariaDB? - MariaDB Knowledge Base. Mariadb.com. Retrieved 2014-08-03.
[65] Morgan Tocker (2009-08-13). XtraDB: The Top 10 enhancements. mysqlperformanceblog.com. Retrieved 2013-12-16.
[66] Vadim Tkachenko (2010-12-21). MySQL 5.5.8 and Percona Server on Fast Flash card (Virident tachIOn)". mysqlperformanceblog.com. Retrieved 2013-12-16.
34
CHAPTER 3. MYSQL
35
Chapter 4
SQLite
SQLite (/skjullat/[3] or /sikwl.lat/[4] ) is a relational database management system contained in a C programming library. In contrast to many other database management systems, SQLite is not a clientserver database engine.
Rather, it is embedded into the end program.
SQLite is ACID-compliant and implements most of the SQL standard, using a dynamically and weakly typed SQL
syntax that does not guarantee the domain integrity.[5]
SQLite is a popular choice as embedded database software for local/client storage in application software such as web
browsers. It is arguably the most widely deployed database engine, as it is used today by several widespread browsers,
operating systems, and embedded systems, among others.[6] SQLite has bindings to many programming languages.
The source code for SQLite is in the public domain.[2][7]
4.1 Design
Unlike clientserver database management systems, the SQLite engine has no standalone processes with which the
application program communicates. Instead, the SQLite library is linked in and thus becomes an integral part of the
application program. (In this, SQLite follows the precedent of Informix SE of c. 1984[8] ) The library can also be
called dynamically. The application program uses SQLites functionality through simple function calls, which reduce
latency in database access: function calls within a single process are more ecient than inter-process communication.
SQLite stores the entire database (denitions, tables, indices, and the data itself) as a single cross-platform le on
a host machine. It implements this simple design by locking the entire database le during writing. SQLite read
operations can be multitasked, though writes can only be performed sequentially.
SQLite uses PostgreSQL as a reference platform. What would PostgreSQL do is used to make sense of the SQL
standard.[9][10][11] One major deviation is that, with the exception of primary keys, SQLite does not enforce type
checking; the type of a value is dynamic and not strictly constrained by the schema (although the schema will trigger
a conversion when storing, if such a conversion is potentially reversible).
4.2 History
D. Richard Hipp designed SQLite in the spring of 2000 while working for General Dynamics on contract with the
United States Navy.[12] Hipp was designing software used aboard guided missile destroyers, which were originally
based on HP-UX with an IBM Informix database back-end. The design goals of SQLite were to allow the program to
be operated without installing a database management system or requiring a database administrator. Hipp based the
syntax and semantics on PostgreSQL 6.5 documentation. In August 2000, version 1.0 of SQLite was released, with
storage based on gdbm (GNU Database Manager). SQLite 2.0 replaced gdbm with a custom B-tree implementation,
adding transaction capability. SQLite 3.0, partially funded by America Online, added internationalization, manifest
typing, and other major improvements.
In 2011 Hipp announced his plans to add an UnQL interface to SQLite databases and to develop UnQLite, an embeddable document-oriented database.[13]
36
4.3. FEATURES
37
4.3 Features
SQLite implements most of the SQL-92 standard for SQL but it lacks some features. For example it partially provides
triggers, and it can't write to views (however it provides INSTEAD OF triggers that provide this functionality). While
it provides complex queries, it still has limited ALTER TABLE function, as it can't modify or delete columns.[14]
SQLite uses an unusual type system for an SQL-compatible DBMS; instead of assigning a type to a column as in most
SQL database systems, types are assigned to individual values; in language terms it is dynamically typed. Moreover,
it is weakly typed in some of the same ways that Perl is: one can insert a string into an integer column (although
SQLite will try to convert the string to an integer rst, if the columns preferred type is integer). This adds exibility
to columns, especially when bound to a dynamically typed scripting language. However, the technique is not portable
to other SQL products. A common criticism is that SQLites type system lacks the data integrity mechanism provided
by statically typed columns in other products. The SQLite web site describes a strict anity mode, but this feature
has not yet been added.[15] However, it can be implemented with constraints like CHECK(typeof(x)='integer').[12]
Several computer processes or threads may access the same database concurrently. Several read accesses can be
satised in parallel. A write access can only be satised if no other accesses are currently being serviced. Otherwise,
the write access fails with an error code (or can automatically be retried until a congurable timeout expires). This
concurrent access situation would change when dealing with temporary tables. This restriction is relaxed in version
3.7 when write-ahead logging (WAL) is turned on enabling concurrent reads and writes.[16]
As of version 3.8.2 it is possible to create tables without rowid.[17]
SQLite full Unicode function is optional.[18]
4.5 Adoption
4.5.1
Programming languages
38
CHAPTER 4. SQLITE
Delphi
Free Pascal
Go
Haskell
Haxe
Java (on JVM and DVM)
JavaScript[21]
Julia
Livecode
Lua
newLisp
Objective-C (on OS X and iOS)
OCaml
Perl[22]
PHP
Pike
PureBasic
Python[23]
R
REALbasic
REBOL
Ruby[24]
Scheme
Smalltalk
Swift (on OS X and iOS)
Tcl
Visual Basic
Xojo
AutoIt [25]
4.5.2
Middleware
ADO.NET adapter, initially developed by Robert Simpson, is maintained jointly with the SQLite developers
since April 2010.[26]
ODBC driver has been developed and is maintained separately by Christian Werner.[27] Werners ODBC driver
is the recommended connection method for accessing SQLite from OpenOce.org.[28]
COM (ActiveX) wrapper making SQLite accessible on Windows to scripted languages such as JScript and
VBScript. This adds database capabilities to HTML Applications (HTA).[29]
XULRunner uses SQLite
4.5. ADOPTION
4.5.3
39
Web browsers
The browsers Google Chrome, Opera, Safari and the Android Browser all allow for storing information in, and
retrieving it from, a SQLite database within the browser, using the Web SQL Database technology, although
this is rapidly becoming deprecated (namely superseded by IndexedDB).
Mozilla Firefox and Mozilla Thunderbird store a variety of conguration data (bookmarks, cookies, contacts
etc.) in internally managed SQLite databases, and even oer an add-on to manage SQLite databases.
4.5.4
Bugzilla, Mozillas bug database written in Perl can use SQLite to store data and settings.
Django, a Python web framework, works with SQLite3 by default.[30]
As of version 7, Drupal, a PHP-based content management system for making websites and blogs, has an
option to install using SQLite.[31]
Ruby on Rails' default database management system is also SQLite.
web2py, a Python web framework, default database management system is also SQLite.
4.5.5
Various
4.5.6
Operating systems
40
CHAPTER 4. SQLITE
Apple[35] adopted it as an option in OS X's Core Data API from the original implementation in Mac OS X
10.4 onwards, and also for administration of videos and songs, and in iOS for storage of text messages on the
iPhone.
Tizen
4.6 Ports
SQLite was ported to JavaScript, in an implementation named sql.js. It was done by passing the SQLite source code
through the Emscripten compiler.()
4.8 Citations
[1] Recent SQLite News. 2015-04-08. Retrieved 2015-04-09.
[2] SQLite Copyright. sqlite.org. Retrieved May 17, 2010.
[3] D. Richard Hipp (presenter) (May 31, 2006). An Introduction to SQLite (VIDEO). Google Inc. Event occurs at 00:01:14.
Retrieved March 23, 2010. [...] ess-kju-ellite [...]
[4] D. Richard Hipp (presenter) (May 31, 2006). An Introduction to SQLite. Google Inc. Event occurs at 00:48:15. Retrieved
March 23, 2010. [...] sequelite [...]
[5] Owens, Michael (2006). Chapter 4: SQL. In Gilmore, Jason; Thomas, Keir. The Denitive Guide to SQLite. D. Richard
Hipp (foreword), Preston Hagar (technical reviewer). Apress. p. 133. ISBN 978-1-59059-673-9. Retrieved 30 December
2014.
[6] Most Widely Deployed SQL Database Estimates. Sqlite.org. Retrieved May 11, 2011.
[7] The source code for SQLite is in the public domain. Sqlite.org. Retrieved May 11, 2011.
[8] http://www.iiug.org/faqs/informix-faq/ifaq01.htm.1#1.2
[9] https://lwn.net/Articles/601144/
[10] http://use-the-index-luke.com/blog/2014-05/what-i-learned-about-sqlite-at-a-postgresql-conference
[11] https://www.pgcon.org/2014/schedule/events/736.en.html
[12] Owens, Michael (2006). The Denitive Guide to SQLite. Apress. doi:10.1007/978-1-4302-0172-4_1. ISBN 978-1-59059673-9.
[13] Interview: Richard Hipp on UnQL, a New Query Language for Document Databases. InfoQ. August 4, 2011. Retrieved
October 5, 2011.
[14] SQL Features That SQLite Does Not Implement. SQLite. January 1, 2009. Retrieved October 14, 2009.
4.9. REFERENCES
41
[15] Frequently Asked Questions. SQLite. January 26, 2009. Retrieved February 7, 2009.
[16] Write Ahead Logging in SQLite 3.7. SQLite. Retrieved September 3, 2011. WAL provides more concurrency as readers
do not block writers and a writer does not block readers. Reading and writing can proceed concurrently
[17] ReleaseLog SQLite.org, visited 8th December 2013
[18] Case-insensitive matching of Unicode characters does not work. SQLite Frequently Asked Questions. Sqlite.org. Retrieved
May 11, 2011.
[19] Fossil: Fossil Performance. Fossil-scm.org. August 23, 2009. Retrieved September 12, 2009.
[20] How SQLite Is Tested. SQLite. Retrieved September 12, 2009.
[21] JSPDO JavaScript database access abstraction API
[22] DBD::SQLite: Perl DBI Interface to SQLite
[23] PySQLite: Python bindings for SQLite
[24] SQLite/Ruby: Ruby bindings for SQLite
[25] : SQLite user dened functions Reference
[26] http://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki
[27] http://www.ch-werner.de/sqliteodbc/
[28] http://documentation.openoffice.org/HOW_TO/data_source/SQLite.pdf
[29] sqlite Sqlite Wrappers. SQLite. February 7, 2009. Retrieved February 7, 2009.
[30] Databases. Django Documentation. Django Software Foundation. Retrieved 13 November 2012.
[31] Drupal 7.
[32] Skype client using SQLite?". Mail-archive.com. August 28, 2007. Retrieved June 14, 2010.
[33] Well-Known Users of SQLite. Sqlite.org. Retrieved June 14, 2010.
[34] Well-known Users of SQLite. Sqlite.org. Retrieved June 14, 2010.
[35] Show Download History List of All Files Ever Downloaded Within Mac OS X.
4.9 References
Allen, Grant; Owens, Mike (November 5, 2010). The Denitive Guide to SQLite (2nd ed.). Apress. p. 368.
ISBN 1-4302-3225-0.
Kreibich, Jay A. (August 17, 2010). Using SQLite (1st ed.). O'Reilly Media. p. 528. ISBN 0-596-52118-9.
van der Lans, Rick F. (September 7, 2009). The SQL Guide to SQLite (1st ed.). lulu.com. p. 542. ISBN
0-557-07676-5.
Newman, Chris (November 9, 2004). SQLite (Developers Library) (1st ed.). Sams. p. 336. ISBN 0-67232685-X.
Chapter 5
PostgreSQL
PostgreSQL, often simply Postgres, is an object-relational database management system (ORDBMS) with an
emphasis on extensibility and standards-compliance. As a database server, its primary function is to store data securely, supporting best practices, and to allow for retrieval at the request of other software applications. It can handle
workloads ranging from small single-machine applications to large Internet-facing applications with many concurrent
users. Recent versions also provide replication of the database itself for availability and scalability.
PostgreSQL implements the majority of the SQL:2011 standard,[8][9] is ACID-compliant and transactional (including
most DDL statements) avoiding locking issues using multiversion concurrency control (MVCC), provides immunity
to dirty reads and full serializability; handles complex SQL queries using many indexing methods that are not available
in other databases; has updateable views and materialized views, triggers, foreign keys; supports functions and stored
procedures, and other expandability,[10] and has a large number of extensions written by third parties. In addition
to the possibility of working with the major proprietary and open source databases, PostgreSQL supports migration
from them, by its extensive standard SQL support and available migration tools. And if proprietary extensions had
been used, by its extensibility that can emulate many through some built-in and third-party open source compatibility
extensions, such as for Oracle.
PostgreSQL is cross-platform and runs on many operating systems including Linux, FreeBSD, Solaris, and Microsoft
Windows. Mac OS X, starting with OS X 10.7 Lion, has the server as its standard default database in the server
edition,[11][12] and PostgreSQL client tools in the desktop edition. The vast majority of Linux distributions have it
available in supplied packages.
PostgreSQL is developed by the PostgreSQL Global Development Group, a diverse group of many companies and
individual contributors.[13] It is free and open source software, released under the terms of the PostgreSQL License,
a permissive free software license.
5.1 Name
PostgreSQLs developers pronounce it /postrskjul/.[14] It is abbreviated as Postgres, its original name. Because
of ubiquitous support for the SQL Standard among most relational databases, the community considered changing the
name back to Postgres. However, the PostgreSQL Core Team announced in 2007 that the product would continue to
use the name PostgreSQL.[15] The name refers to the projects origins as a post-Ingres" database, being a development
from University Ingres DBMS (Ingres being an acronym for INteractive Graphics Retrieval System).[16][17]
5.2 History
PostgreSQL evolved from the Ingres project at the University of California, Berkeley. In 1982 the leader of the Ingres team, Michael Stonebraker, left Berkeley to make a proprietary version of Ingres.[16] He returned to Berkeley in
1985 and started a post-Ingres project to address the problems with contemporary database systems that had become
increasingly clear during the early 1980s. The new project, POSTGRES, aimed to add the fewest features needed to
completely support types.[18] These features included the ability to dene types and to fully describe relationships
something used widely before but maintained entirely by the user. In Postgres, the database understood relation42
43
ships, and could retrieve information in related tables in a natural way using rules. Postgres used many of the ideas
of Ingres, but not its code.[19]
Starting in 1986, the POSTGRES team published a number of papers describing the basis of the system, and by
1987 had a prototype version shown at the 1988 ACM SIGMOD Conference. The team released version 1 to a
small number of users in June 1989, then version 2 with a re-written rules system in June 1990. Version 3, released
in 1991, again re-wrote the rules system, and added support for multiple storage managers and an improved query
engine. By 1993 the great number of users began to overwhelm the project with requests for support and features.
After releasing version 4.2 on June 30, 1994[20] primarily a cleanup the project ended. Berkeley had released
POSTGRES under an MIT-style license, which enabled other developers to use the code for any use. At the time,
POSTGRES used an Ingres-inuenced POSTQUEL query language interpreter, which could be interactively used
with a console application named monitor.
In 1994, Berkeley graduate students Andrew Yu and Jolly Chen replaced the POSTQUEL query language interpreter
with one for the SQL query language, creating Postgres95. The front-end program monitor was also replaced by psql.
Yu and Chen released the code on the web.
On July 8, 1996, Marc Fournier at Hub.org Networking Services provided the rst non-university development server
for the open-source development eort.[1] With the participation of Bruce Momjian and Vadim B. Mikheev, work
began to stabilize the code inherited from Berkeley. The rst open-source version was released on August 1, 1996.
In 1996 the project was renamed to PostgreSQL to reect its support for SQL. The online presence at the website
PostgreSQL.org began on October 22, 1996.[21] The rst PostgreSQL release formed version 6.0 on January 29, 1997.
Since then a group of developers and volunteers around the world have maintained the software as The PostgreSQL
Global Development Group.
The PostgreSQL project continues to make major releases (approximately annually) and minor bugx releases,
all available under its free and open-source software PostgreSQL License. Code comes from contributions from
proprietary vendors, support companies, and open-source programmers at large.
See also Release history below.
Replication
PostgreSQL, beginning with version 9.0, includes built-in binary replication, based on shipping the changes (writeahead logs) to slave systems asynchronously.
Version 9.0 also introduced the ability to run read-only queries against these replicated slaves, where earlier versions
would only allow that after promoting them to be a new master. This allows splitting read trac among multiple
nodes eciently. Earlier replication software that allowed similar read scaling normally relied on adding replication
triggers to the master, introducing additional load onto it.
Beginning from version 9.1, PostgreSQL also includes built-in synchronous replication[23] that ensures that, for each
write transaction, the master waits until at least one slave node has written the data to its transaction log. Unlike
other database systems, the durability of a transaction (whether it is asynchronous or synchronous) can be specied
per-database, per-user, per-session or even per-transaction. This can be useful for work loads that do not require
44
CHAPTER 5. POSTGRESQL
such guarantees, and may not be wanted for all data as it will have some negative eect on performance due to the
requirement of the conrmation of the transaction reaching the synchronous standby.
There can be a mixture of synchronous and asynchronous standby servers. A list of synchronous standby servers can
be specied in the conguration which determines which servers are candidates for synchronous replication. The rst
in the list which is currently connected and actively streaming is the one that will be used as the current synchronous
server. When this fails, it falls to the next in line.
Synchronous multi-master replication is currently not included in the PostgreSQL core. Postgres-XC which is based
on PostgreSQL provides scalable synchronous multi-master replication,[24] available in version 1.1 is licensed under
the same license as PostgreSQL. A similar project is called Postgres-XL and is available under the Mozilla Public
License.[25]
The community has also written some tools to make managing replication clusters easier, such as repmgr.
There are also several asynchronous trigger-based replication packages for PostgreSQL. These remain useful even
after introduction of the expanded core capabilities, for situations where binary replication of an entire database
cluster is not the appropriate approach:
Slony-I
Londiste, part of SkyTools (developed by Skype)
Bucardo multi-master replication (developed by Backcountry.com)[26]
SymmetricDS multi-master, multi-tier replication
5.4.2
Indexes
PostgreSQL includes built-in support for regular B-tree and hash indexes, and two types of inverted indexes: generalized search trees (GiST) and generalized inverted indexes (GIN). Hash indexes are implemented, but discouraged
because they cannot be recovered after a crash or power loss. In addition, user-dened index methods can be created,
although this is quite an involved process. Indexes in PostgreSQL also support the following features:
Expression indexes can be created with an index of the result of an expression or function, instead of simply
the value of a column.
Partial indexes, which only index part of a table, can be created by adding a WHERE clause to the end of the
CREATE INDEX statement. This allows a smaller index to be created.
The planner is capable of using multiple indexes together to satisfy complex queries, using temporary inmemory bitmap index operations.
As of PostgreSQL 9.1, k-nearest neighbors (k-NN) indexing (also referred to KNN-GiST) provides ecient
searching of closest values to that specied, useful to nding similar words, or close objects or locations with
geospatial data. This is achieved without exhaustive matching of values.
In PostgreSQL 9.2 and above, index-only scans often allow the system to fetch data from indexes without ever
having to access the main table.
5.4.3
Schemas
In PostgreSQL, all objects (with the exception of roles and tablespaces) are held within a schema. Schemas eectively
act like namespaces, allowing objects of the same name to co-exist in the same database. Schemas are analogous to
directories in a le system, except that they cannot be nested, nor is it possible to create a symbolic link pointing
to another schema or object.
By default, databases are created with the public schema, but any additional schemas can be added, and the public
schema isn't mandatory. A search_path determines the order in which schemas are checked on unqualied objects
(those without a prexed schema), which can be congured on a database or role level. The search path, by default,
contains the special schema name of "$user, which rst looks for a schema named after the connected database user
(e.g. if the user dave were connected, it would rst look for a schema also named dave when referring to any
45
objects). If such a schema is not found, it then proceeds to the next schema. New objects are created in whichever
valid schema (one that presently exists) is listed rst in the search path.
5.4.4
Data types
46
CHAPTER 5. POSTGRESQL
5.4.5
User-dened objects
New types of almost all objects inside the database can be created, including:
Casts
Conversions
Data types
Domains
Functions, including aggregate functions and window functions
Indexes including custom indexes for custom types
Operators (existing ones can be overloaded)
Procedural languages
5.4.6
Inheritance
Tables can be set to inherit their characteristics from a parent table. Data in child tables will appear to exist in the
parent tables, unless data is selected from the parent table using the ONLY keyword, i.e. SELECT * FROM ONLY
parent_table. Adding a column in the parent table will cause that column to appear in the child table.
Inheritance can be used to implement table partitioning, using either triggers or rules to direct inserts to the parent
table into the proper child tables.
As of 2010 this feature is not fully supported yetin particular, table constraints are not currently inheritable. All
check constraints and not-null constraints on a parent table are automatically inherited by its children. Other types of
constraints (unique, primary key, and foreign key constraints) are not inherited.
Inheritance provides a way to map the features of generalization hierarchies depicted in Entity Relationship Diagrams
(ERD) directly into the PostgreSQL database.
5.4.7
Referential integrity constraints including foreign key constraints, column constraints, and row checks
Binary and textual large-object storage
Tablespaces
Per-column collation (from 9.1)
Online backup
Point-in-time recovery, implemented using write-ahead logging
In-place upgrades with pg_upgrade for less downtime (supports upgrades from 8.3.x and later)
As of version 9.1, PostgreSQL can link to other systems to retrieve data via foreign data wrappers (FDWs). These
can take the form of any data source, such as a le system, another RDBMS, or a web service. This means regular
database queries can use these data sources like regular tables, and even join multiple data sources together.
5.5.2
47
Interfaces
PostgreSQL has several interfaces available and is also widely supported among programming language libraries.
Built-in interfaces include libpq (PostgreSQLs ocial C application interface) and ECPG (an embedded C system).
External interfaces include:
libpqxx: C++ interface
PostgresDAC: PostgresDAC (for Embarcadero RadStudio/Delphi/CBuilder XE-XE3)
DBD::Pg: Perl DBI driver
JDBC: JDBC interface
Lua: Lua interface
Npgsql: .NET data provider
ST-Links SpatialKit: Link Tool to ArcGIS
node-postgres: Node.js interface
pgoledb: OLEDB interface
psqlODBC: ODBC interface
psycopg2:[28] Python interface (also used by HTSQL)
pgtclng: Tcl interface
pyODBC: Python library
php5-pgsql: PHP driver based on libpq
postmodern: A Common Lisp interface
5.5.3
Procedural languages
Procedural languages allow developers to extend the database with custom subroutines (functions), often called stored
procedures. These functions can be used to build triggers (functions invoked upon modication of certain data) and
custom aggregate functions. Procedural languages can also be invoked without dening a function, using the DO
command at SQL level.
Languages are divided into two groups: Safe languages are sandboxed and can be safely used by any user. Procedures written in unsafe languages can only be created by superusers, because they allow bypassing the databases
security restrictions, but can also access sources external to the database. Some languages like Perl provide both safe
and unsafe versions.
PostgreSQL has built-in support for three procedural languages:
Plain SQL (safe). Simpler SQL functions can get expanded inline into the calling (SQL) query, which saves
function call overhead and allows the query optimizer to see inside the function.
PL/pgSQL (safe), which resembles Oracles PL/SQL procedural language and SQL/PSM.
C (unsafe), which allows loading custom shared libraries into the database. Functions written in C oer the
best performance, but bugs in code can crash and potentially corrupt the database. Most built-in functions are
written in C.
In addition, PostgreSQL allows procedural languages to be loaded into the database through extensions. Three language extensions are included with PostgreSQL to support Perl, Python and Tcl. There are external projects to add
support for many other languages, including Java, JavaScript (PL/V8), R.
48
CHAPTER 5. POSTGRESQL
5.5.4
Triggers
Triggers are events triggered by the action of SQL DML statements. For example, an INSERT statement might
activate a trigger that checks if the values of the statement are valid. Most triggers are only activated by either
INSERT or UPDATE statements.
Triggers are fully supported and can be attached to tables. In PostgreSQL 9.0 and above, triggers can be per-column
and conditional, in that UPDATE triggers can target specic columns of a table, and triggers can be told to execute
under a set of conditions as specied in the triggers WHERE clause. As of PostgreSQL 9.1, triggers can be attached
to views by utilising the INSTEAD OF condition. Views in versions prior to 9.1 can have rules, though. Multiple
triggers are red in alphabetical order. In addition to calling functions written in the native PL/pgSQL, triggers can
also invoke functions written in other languages like PL/Python or PL/Perl.
5.5.5
Asynchronous notications
PostgreSQL provides an asynchronous messaging system that is accessed through the NOTIFY, LISTEN and UNLISTEN commands. A session can issue a NOTIFY command, along with the user-specied channel and an optional
payload, to mark a particular event occurring. Other sessions are able to detect these events by issuing a LISTEN
command, which can listen to a particular channel. This functionality can be used for a wide variety of purposes,
such as letting other sessions know when a table has updated or for separate applications to detect when a particular
action has been performed. Such a system prevents the need for continuous polling by applications to see if anything
has yet changed, and reducing unnecessary overhead. Notications are fully transactional, in that messages are not
sent until the transaction they were sent from is committed. This eliminates the problem of messages being sent for
an action being performed which is then rolled back.
Many of the connectors for PostgreSQL provide support for this notication system (including libpq, JDBC, Npgsql,
psycopg and node.js) so it can be used by external applications.
5.5.6
Rules
Rules allow the query tree of an incoming query to be rewritten. Rules, or more properly, Query Re-Write Rules,
are attached to a table/class and Re-Write the incoming DML (select, insert, update, and/or delete) into one or
more queries that either replace the original DML statement or execute in addition to it. Query Re-Write occurs after
DML statement parsing, but before query planning.
5.5.7
Transactions
Full text search
Views
Materialized views[29]
Updateable views[30]
Recursive views[31]
Inner, outer (full, left and right), and cross joins
Sub-selects
Correlated sub-queries[32]
Regular expressions[33]
Common table expressions and writable common table expressions
Encrypted connections via TLS (current versions do no use vulnerable SSL, even with that conguration
option)[34]
5.6. SECURITY
49
Domains
Savepoints
Two-phase commit
TOAST (The Oversized-Attribute Storage Technique) is used to transparently store large table attributes (such
as big MIME attachments or XML messages) in a separate area, with automatic compression.
Embedded SQL is implemented using preprocessor. SQL code is rst written embedded into C code. Then
code is run through ECPG preprocessor, which replaces SQL with calls to code library. Then code can be
compiled using a C compiler. Embedding works also with C++ but it does not recognize all C++ constructs.
5.6 Security
Security within the database is managed on a per-role-basis. A role is generally regarded to be a user (a role that can
log in), or a group (a role of which other roles are members). Permissions can be granted or revoked on any object
down to the column level, and can also allow/prevent the creation of new objects at the database, schema or table
levels.
The sepgsql extension (provided with PostgreSQL as of version 9.1) provides an additional layer of security by integrating with SELinux. This utilises PostgreSQLs SECURITY LABEL feature.
PostgreSQL natively supports a broad number of external authentication mechanisms including:
password (either MD5 or plain-text)
GSSAPI
SSPI
Kerberos
ident (maps O/S user name as provided by an ident server to database user name)
peer (maps local user name to database user name)
LDAP
Active Directory
RADIUS
certicate
PAM
The GSSAPI, SSPI, Kerberos, peer, ident and certicate methods can also use a specied map le that lists which
users matched by that authentication system are allowed to connect as a specic database user.
These methods are specied in the clusters host-based authentication conguration le (pg_hba.conf), which determines what connections are allowed. This allows control over which user can connect to which database, where they
can connect from (IP address/IP address range/domain socket), which authentication system will be enforced, and
whether the connection must use TLS.
50
CHAPTER 5. POSTGRESQL
ALTER TABLE ... SET LOGGED / UNLOGGED for switching tables between logged and unlogged states[36]
Row-Level Security Policies for controlling which rows are visible or can be added to a table[37]
SKIP LOCKED for row-level locks[38]
BRIN (Block Range Indexes) to speed up queries on very large tables[39]
Parallel VACUUMing with vacuumdb tool[40]
Foreign tables can inherit and be inherited from[41]
pg_rewind tool to eciently resynchronise failed primary to new primary[42]
Index-only scans in GiST indexes[43]
CREATE TRANSFORM for mapping data type structures to procedural language data types[44]
5.8 Add-ons
MADlib: an open source analytics library for PostgreSQL providing mathematical, statistical and machinelearning methods for structured and unstructured data
MySQL migration wizard: included with EnterpriseDBs PostgreSQL installer (source code also available)[45]
Performance Wizard: included with EnterpriseDBs PostgreSQL installer (source code also available)[45]
pgRouting: extended PostGIS to provide geospatial routing functionality[46] (GNU GPL)
PostGIS: a popular add-on which provides support for geographic objects (GNU GPL)
Postgres Enterprise Manager: a non-free tool consisting of a service, multiple agents, and a GUI which provides
remote monitoring, management, reporting, capacity planning and tuning[47]
ST-Links SpatialKit: Extension for directly connecting to spatial databases[48]
5.10. PLATFORMS
51
5.10 Platforms
PostgreSQL is available for the following operating systems: Linux (all recent distributions), Windows (Windows
2000 SP4 and later) (compilable by e.g. Visual Studio, now with up to most recent 2013 version), DragonFly
BSD, FreeBSD, OpenBSD, NetBSD, Mac OS X, AIX, BSD/OS, HP-UX, IRIX, OpenIndiana,[56] OpenSolaris, SCO
OpenServer, SCO UnixWare, Solaris and Tru64 Unix. As of 2012, support for the following obsolete systems was
removed:[57] DG/UX, NeXTSTEP, SunOS 4, SVR4, Ultrix 4, and Univel. Most other Unix-like systems should also
work.
PostgreSQL works on any of the following instruction set architectures: x86 and x86-64 on Windows and other
operatings systems; other than Windows: IA-64 Itanium, PowerPC, PowerPC 64, S/390, S/390x, SPARC, SPARC
64, Alpha, ARMv8-A (64-bit)[58] and older ARM (32-bit), MIPS, MIPSel, M68k, and PA-RISC. It is also known to
work on M32R, NS32k, and VAX. In addition to these, it is possible to build PostgreSQL for an unsupported CPU
by disabling spinlocks.[59]
52
CHAPTER 5. POSTGRESQL
53
54
CHAPTER 5. POSTGRESQL
5.16 References
[1] Happy Birthday, PostgreSQL!". PostgreSQL Global Development Group. July 8, 2008.
[2] PostgreSQL 9.4.1, 9.3.6, 9.2.10, 9.1.15 & 9.0.19 Released. PostgreSQL. The PostgreSQL Global Development Group.
2015-02-05. Retrieved 2015-02-05.
[3] PostgreSQL licence approved by OSI. Crynwr. 2010-02-18. Retrieved 2010-02-18.
[4] OSI PostgreSQL Licence. Open Source Initiative. 2010-02-20. Retrieved 2010-02-20.
[5] License. PostgreSQL Global Development Group. Retrieved 2010-09-20.
[6] https://packages.debian.org/sid/postgresql
[7] http://directory.fsf.org/wiki/PostgreSQL
[8] SQL Conformance. postgresql.org. 2013-04-04. Retrieved 2013-08-28.
[9] Appendix D. SQL Conformance. PostgreSQL 9 Documentation. PostgreSQL Global Development Group. 2009 [1996].
Retrieved 2013-04-01.
[10] What is PostgreSQL?". PostgreSQL 9.3.0 Documentation. PostgreSQL Global Development Group. Retrieved 2013-0920.
[11] Lion Server: MySQL not included. 2011-08-04. Retrieved 2011-11-12.
[12] OS X Lion Server Technical Specications. 2011-08-04. Retrieved 2011-11-12.
[13] Contributor Proles. PostgreSQL. Retrieved December 17, 2011.
[14] Audio sample, 5.6k MP3
[15] Project name statement from the core team. archives.postgresql.org. 2007-11-16. Retrieved 2007-11-16.
[16] Stonebraker, M; Rowe, LA (May 1986). The design of POSTGRES (PDF). Proc. 1986 ACM SIGMOD Conference on
Management of Data. Washington, DC. Retrieved 2011-12-17.
[17] http://www.postgresql.org/about/history/
[18] Stonebraker, M; Rowe, LA. The POSTGRES data model (PDF). Proceedings of the 13th International Conference on Very
Large Data Bases. Brighton, England: Morgan Kaufmann Publishers. pp. 8396. ISBN 0-934613-46-X.
[19] Pavel Stehule (9 June 2012). Historie projektu PostgreSQL (in Czech).
[20] University POSTGRES, Version 4.2. 1999-07-26.
[21] Page, Dave (2015-04-07). Re: 20th anniversary of PostgreSQL ?". pgsql-advocacy (Mailing list). Retrieved 9 April
2015.
[22] Dan R. K. Ports, Kevin Grittner (2012). Serializable Snapshot Isolation in PostgreSQL (PDF). Proceedings of the VLDB
Endowment 5 (12): 18501861.
[23] PostgreSQL 9.1 with synchronous replication (news), H Online
[24] Postgres-XC project page (website), Postgres-XC
[25] Postgres-XL product page (website), TransLattice
[26] Marit Fischer (2007-11-10). Backcountry.com nally gives something back to the open source community (Press release). Backcountry.com.
[27] Geoghegan, Peter (March 23, 2014). What I think of jsonb.
[28] psycopg2
[29] Add a materialized view relations.. 2013-03-04. Retrieved 2013-03-04.
[30] Support automatically-updatable views.. 2012-12-08. Retrieved 2012-12-08.
[31] Add CREATE RECURSIVE VIEW syntax. 2013-02-01. Retrieved 2013-02-28.
5.16. REFERENCES
55
[32] Momjian, Bruce (2001). Subqueries. PostgreSQL: Introduction and Concepts. Addison-Wesley. ISBN 0-201-70331-9.
Retrieved 2010-09-25.
[33] Bernier, Robert (2 February 2006). Using Regular Expressions in PostgreSQL. O'Reilly Media. Retrieved 2010-09-25.
[34] http://blog.hagander.net/archives/222-A-few-short-notes-about-PostgreSQL-and-POODLE.html
[35] Implement IMPORT FOREIGN SCHEMA.. 2014-07-10. Retrieved 2014-09-11.
[36] Implement ALTER TABLE .. SET LOGGED / UNLOGGED. 2014-08-22. Retrieved 2014-08-27.
[37] Row-Level Security Policies (RLS)". 2014-09-19. Retrieved 2014-09-19.
[38] Implement SKIP LOCKED for row-level locks. 2014-10-07. Retrieved 2014-10-07.
[39] BRIN: Block Range Indexes. 2014-11-07. Retrieved 2014-11-09.
[40] vacuumdb: enable parallel mode. 2015-01-23. Retrieved 2015-01-28.
[41] Allow foreign tables to participate in inheritance.. 2015-03-22. Retrieved 2015-03-26.
[42] Add pg_rewind, for re-synchronizing a master server after failback.. 2015-03-23. Retrieved 2015-03-26.
[43] Add support for index-only scans in GiST.. 2015-03-26. Retrieved 2015-03-26.
[44] Add transforms feature. 2015-04-26. Retrieved 2015-04-27.
[45] Postgres Plus Downloads. Company website. EnterpriseDB. Retrieved November 12, 2011.
[46] pgRouting, PostLBS
[47] Postgres Enterprise Manager. Company website. EnterpriseDB. Retrieved November 12, 2011.
[48] ST Links
[49] Josh Berkus (2007-07-06). PostgreSQL publishes rst real benchmark. Retrieved 2007-07-10.
[50] Gyrgy Vilmos (2009-09-29). PostgreSQL history. Retrieved 2010-08-28.
[51] SPECjAppServer2004 Result. SPEC. 2007-07-06. Retrieved 2007-07-10.
[52] SPECjAppServer2004 Result. SPEC. 2007-07-04. Retrieved 2007-09-01.
[53] Managing Kernel Resources. PostgreSQL Manual. PostgreSQL.org. Retrieved November 12, 2011.
[54] Greg Smith, Robert Treat, and Christopher Browne. Tuning your PostgreSQL server. Wiki. PostgreSQL.org. Retrieved
November 12, 2011.
[55] Robert Haas (2012-04-03). Did I Say 32 Cores? How about 64?". Retrieved 2012-04-08.
[56] oi_151a Release Notes. OpenIndiana. Retrieved 2012-04-07.
[57] Git postgresql.git/commitdiff". Git.postgresql.org. Retrieved 2012-07-08.
[58] http://lists.debian.org/debian-devel/2012/07/msg00536.html
[59] Supported Platforms. PostgreSQL Global Development Group. Retrieved 2012-04-06.
[60] pgAdmin: PostgreSQL administration and management tools. website. Retrieved November 12, 2011.
[61] phpPgAdmin Project (2008-04-25). About phpPgAdmin. Retrieved 2008-04-25.
[62] PostgreSQL Studio (2013-10-09). About PostgreSQL Studio. Retrieved 2013-10-09.
[63] TeamPostgreSQL website. 2013-10-03. Retrieved 2013-10-03.
[64] oooforum.org (2010-01-10). Back Ends for OpenOce. Retrieved 2011-01-05.
[65] libreoce.org (2012-10-14). Base features. Retrieved 2012-10-14.
[66] Greg Smith (15 October 2010). PostgreSQL 9.0 High Performance. Packt Publishing. ISBN 978-1-84951-030-1.
[67] Eric Lai (2008-05-22). Size matters: Yahoo claims 2-petabyte database is worlds biggest, busiest. Computerworld.
56
CHAPTER 5. POSTGRESQL
[68] Thomas Claburn (2008-05-21). Yahoo Claims Record With Petabyte Database. InformationWeek.
[69] Emmanuel Cecchet (May 21, 2009). Building PetaByte Warehouses with Unmodied PostgreSQL (PDF). PGCon 2009.
Retrieved November 12, 2011.
[70] MySpace.com scales analytics for all their friends (PDF). case study. Aster Data. June 15, 2010. Archived (PDF) from
the original on November 14, 2010. Retrieved November 12, 2011.
[71] Last Weekends Outage. Blog. Geni. 2011-08-01.
[72] Database. Wiki. OpenStreetMap.
[73] PostgreSQL aliates .ORG domain, AU: Computer World
[74] Sony Online opts for open-source database over Oracle, Computer World
[75] A Web Commerce Group Case Study on PostgreSQL (PDF) (1.2 ed.), PostgreSQL
[76] Reddit software wiki - Architecture Overview. Reddit. 27 March 2014. Retrieved 2014-11-25.
[77] PostgreSQL at Skype. Skype Developer Zone. 2006. Retrieved 2007-10-23.
[78] How Much Are You Paying For Your Database?". Sun Microsystems blog. 2007. Retrieved 2007-12-14.
[79] Database MusicBrainz. MusicBrainz Wiki. Retrieved 5 February 2011.
[80] Duncavage, Daniel P (2010-07-13). NASA needs Postgres-Nagios help.
[81] Roy, Gavin M (2010). PostgreSQL at myYearbook.com (talk). USA East: PostgreSQL Conference.
[82] Keeping Instagram up with over a million new users in twelve hours. Instagram-engineering.tumblr.com. 2011-05-17.
Retrieved 2012-07-07.
[83] Postgres at Disqus. Retrieved May 24, 2013.
[84] Alex Williams (1 April 2013). Heroku Forces Customer Upgrade To Fix Critical PostgreSQL Security Hole. TechCrunch.
[85] Barb Darrow (11 November 2013). Heroku gussies up Postgres with database roll-back and proactive alerts. GigaOM.
[86] Craig Kerstiens (26 September 2013). WAL-E and Continuous Protection with Heroku Postgres. Heroku blog.
[87] EnterpriseDB Oers Up Postgres Plus Cloud Database. Techweekeurope.co.uk. 2012-01-27. Retrieved 2012-07-07.
[88] Al Sargent (15 May 2012). Introducing VMware vFabric Suite 5.1: Automated Deployment, New Components, and
Open Source Support. VMware blogs.
[89] Je (14 November 2013). Amazon RDS for PostgreSQL Now Available. Amazon Web Services Blog.
[90] Alex Williams (14 November 2013). PostgreSQL Now Available On Amazons Relational Database Service. TechCrunch.
[91] Maya Tamiya (2001-01-10). Interview: Bruce Momjian. LWN.net. Retrieved 2007-09-07.
[92] Great Bridge ceases operations (Press release). Great Bridge. 2001-09-06. Retrieved 2007-09-07.
[93] Nikolai Bezroukov (1 July 2004). The Sunset of Linux Hype. Portraits of Open Source Pioneers. NORFOLK, Va.,
September 6, 2001 -- Great Bridge LLC, the company that pioneered commercial distribution and support of the PostgreSQL open source database, announced today that it has ceased business operations
[94] John Farr (2006-07-25). Open letter to the PostgreSQL Community. Pervasive Software. Archived from the original on
2007-02-25. Retrieved 2007-02-13.
[95] Rodney Gedda (2005-10-05). Suns software chief eyes databases, groupware. Computerworld. Retrieved 2007-02-13.
[96] Sun Announces Support for Postgres Database on Solaris 10 (Press release). Sun Microsystems. 2005-11-17. Retrieved
2007-02-13.
[97] EnterpriseDB Announces First-Ever Professional-Grade PostgreSQL Distribution for Linux (Press release). EnterpriseDB.
2007-08-07. Retrieved 2007-08-07.
[98] Postgres Plus Solution Pack. EnterpriseDB. Retrieved 2012-07-07.
[99] Postgres Plus Advanced Server. EnterpriseDB. Retrieved 2012-07-07.
[100] Postgres Plus Cloud Database. EnterpriseDB. Retrieved 2012-07-07.
[101] Versioning policy. PostgreSQL Global Development Group. Retrieved 2012-01-30.
57
Chapter 6
SQL
This article is about the database language. For the IATA code, see San Carlos Airport (California).
SQL ( i /skjul/,[4] or i /sikwl/;[5] Structured Query Language[6][7][8][9] ) is a special-purpose programming
language designed for managing data held in a relational database management system (RDBMS), or for stream
processing in a relational data stream management system (RDSMS).
Originally based upon relational algebra and tuple relational calculus, SQL consists of a data denition language and
a data manipulation language. The scope of SQL includes data insert, query, update and delete, schema creation and
modication, and data access control. Although SQL is often described as, and to a great extent is, a declarative
language (4GL), it also includes procedural elements.
SQL was one of the rst commercial languages for Edgar F. Codd's relational model, as described in his inuential
1970 paper, A Relational Model of Data for Large Shared Data Banks.[10] Despite not entirely adhering to the
relational model as described by Codd, it became the most widely used database language.[11][12]
SQL became a standard of the American National Standards Institute (ANSI) in 1986, and of the International
Organization for Standardization (ISO) in 1987.[13] Since then, the standard has been revised to include a larger
set of features. Despite the existence of such standards, though, most SQL code is not completely portable among
dierent database systems without adjustments.
6.1 History
SQL was initially developed at IBM by Donald D. Chamberlin and Raymond F. Boyce in the early 1970s.[14] This
version, initially called SEQUEL (Structured English QUEry Language), was designed to manipulate and retrieve data
stored in IBMs original quasi-relational database management system, System R, which a group at IBM San Jose
Research Laboratory had developed during the 1970s.[14] The acronym SEQUEL was later changed to SQL because
SEQUEL was a trademark of the UK-based Hawker Siddeley aircraft company.[15]
In the late 1970s, Relational Software, Inc. (now Oracle Corporation) saw the potential of the concepts described
by Codd, Chamberlin, and Boyce, and developed their own SQL-based RDBMS with aspirations of selling it to the
U.S. Navy, Central Intelligence Agency, and other U.S. government agencies. In June 1979, Relational Software,
Inc. introduced the rst commercially available implementation of SQL, Oracle V2 (Version2) for VAX computers.
After testing SQL at customer test sites to determine the usefulness and practicality of the system, IBM began developing commercial products based on their System R prototype including System/38, SQL/DS, and DB2, which
were commercially available in 1979, 1981, and 1983, respectively.[16]
6.2 Syntax
6.2.1
Language elements
6.2. SYNTAX
59
A chart showing several of the SQL language elements that compose a single statement
Clauses, which are constituent components of statements and queries. (In some cases, these are optional.)[17]
Expressions, which can produce either scalar values, or tables consisting of columns and rows of data
Predicates, which specify conditions that can be evaluated to SQL three-valued logic (3VL) (true/false/unknown)
or Boolean truth values and are used to limit the eects of statements and queries, or to change program ow.
Queries, which retrieve the data based on specic criteria. This is an important element of SQL.
Statements, which may have a persistent eect on schemata and data, or may control transactions, program
ow, connections, sessions, or diagnostics.
SQL statements also include the semicolon (";") statement terminator. Though not required on every
platform, it is dened as a standard part of the SQL grammar.
Insignicant whitespace is generally ignored in SQL statements and queries, making it easier to format SQL
code for readability.
6.2.2
Operators
6.2.3
Queries
The most common operation in SQL is the query, which is performed with the declarative SELECT statement.
SELECT retrieves data from one or more tables, or expressions. Standard SELECT statements have no persistent
60
CHAPTER 6. SQL
eects on the database. Some non-standard implementations of SELECT can have persistent eects, such as the
SELECT INTO syntax that exists in some databases.[19]
Queries allow the user to describe desired data, leaving the database management system (DBMS) responsible for
planning, optimizing, and performing the physical operations necessary to produce that result as it chooses.
A query includes a list of columns to include in the nal result, immediately following the SELECT keyword. An
asterisk ("*") can also be used to specify that the query should return all columns of the queried tables. SELECT is
the most complex statement in SQL, with optional keywords and clauses that include:
The FROM clause, which indicates the table(s) to retrieve data from. The FROM clause can include optional
JOIN subclauses to specify the rules for joining tables.
The WHERE clause includes a comparison predicate, which restricts the rows returned by the query. The
WHERE clause eliminates all rows from the result set where the comparison predicate does not evaluate to
True.
The GROUP BY clause is used to project rows having common values into a smaller set of rows. GROUP BY
is often used in conjunction with SQL aggregation functions or to eliminate duplicate rows from a result set.
The WHERE clause is applied before the GROUP BY clause.
The HAVING clause includes a predicate used to lter rows resulting from the GROUP BY clause. Because
it acts on the results of the GROUP BY clause, aggregation functions can be used in the HAVING clause
predicate.
The ORDER BY clause identies which columns to use to sort the resulting data, and in which direction to
sort them (ascending or descending). Without an ORDER BY clause, the order of rows returned by an SQL
query is undened.
The following is an example of a SELECT query that returns a list of expensive books. The query retrieves all rows
from the Book table in which the price column contains a value greater than 100.00. The result is sorted in ascending
order by title. The asterisk (*) in the select list indicates that all columns of the Book table should be included in the
result set.
SELECT * FROM Book WHERE price > 100.00 ORDER BY title;
The example below demonstrates a query of multiple tables, grouping, and aggregation, by returning a list of books
and the number of authors associated with each book.
SELECT Book.title AS Title, COUNT(*) AS Authors FROM Book JOIN Book_author ON Book.isbn = Book_author.isbn
GROUP BY Book.title;
Example output might resemble the following:
Title Authors ---------------------- ------- SQL Examples and Guide 4 The Joy of SQL 1 An Introduction to SQL 2
Pitfalls of SQL 1
Under the precondition that isbn is the only common column name of the two tables and that a column named title
only exists in the Books table, the above query could be rewritten in the following form:
SELECT title, COUNT(*) AS Authors FROM Book NATURAL JOIN Book_author GROUP BY title;
However, many vendors either do not support this approach, or require certain column naming conventions for natural
joins to work eectively.
SQL includes operators and functions for calculating values on stored values. SQL allows the use of expressions in
the select list to project data, as in the following example, which returns a list of books that cost more than 100.00
with an additional sales_tax column containing a sales tax gure calculated at 6% of the price.
SELECT isbn, title, price, price * 0.06 AS sales_tax FROM Book WHERE price > 100.00 ORDER BY title;
6.2. SYNTAX
61
Subqueries
Queries can be nested so that the results of one query can be used in another query via a relational operator or
aggregation function. A nested query is also known as a subquery. While joins and other table operations provide
computationally superior (i.e. faster) alternatives in many cases, the use of subqueries introduces a hierarchy in
execution that can be useful or necessary. In the following example, the aggregation function AVG receives as input
the result of a subquery:
SELECT isbn, title, price FROM Book WHERE price < (SELECT AVG(price) FROM Book) ORDER BY title;
A subquery can use values from the outer query, in which case it is known as a correlated subquery.
Since 1999 the SQL standard allows named subqueries called common table expression (named and designed after the
IBM DB2 version 2 implementation; Oracle calls these subquery factoring). CTEs can also be recursive by referring
to themselves; the resulting mechanism allows tree or graph traversals (when represented as relations), and more
generally xpoint computations.
6.2.4
Data manipulation
The Data Manipulation Language (DML) is the subset of SQL used to add, update and delete data:
62
CHAPTER 6. SQL
INSERT adds rows (formally tuples) to an existing table, e.g.:
INSERT INTO example (eld1, eld2, eld3) VALUES ('test', 'N', NULL);
UPDATE modies a set of existing table rows, e.g.:
UPDATE example SET eld1 = 'updated value' WHERE eld2 = 'N';
DELETE removes existing rows from a table, e.g.:
DELETE FROM example WHERE eld2 = 'N';
MERGE is used to combine the data of multiple tables. It combines the INSERT and UPDATE elements. It
is dened in the SQL:2003 standard; prior to that, some databases provided similar functionality via dierent
syntax, sometimes called "upsert".
MERGE INTO TABLE_NAME USING table_reference ON (condition) WHEN MATCHED THEN UPDATE
SET column1 = value1 [, column2 = value2 ...] WHEN NOT MATCHED THEN INSERT (column1 [, column2
...]) VALUES (value1 [, value2 ...])
6.2.5
Transaction controls
6.2.6
Data denition
The Data Denition Language (DDL) manages table and index structure. The most basic items of DDL are the
CREATE, ALTER, RENAME, DROP and TRUNCATE statements:
6.2. SYNTAX
63
6.2.7
Data types
Each column in an SQL table declares the type(s) that column may contain. ANSI SQL includes the following data
types.[26]
Character strings
CHARACTER(n) or CHAR(n): xed-width n-character string, padded with spaces as needed
CHARACTER VARYING(n) or VARCHAR(n): variable-width string with a maximum size of n characters
NATIONAL CHARACTER(n) or NCHAR(n): xed width string supporting an international character set
NATIONAL CHARACTER VARYING(n) or NVARCHAR(n): variable-width NCHAR string
Bit strings
BIT(n): an array of n bits
BIT VARYING(n): an array of up to n bits
Numbers
INTEGER, SMALLINT and BIGINT
FLOAT, REAL and DOUBLE PRECISION
NUMERIC(precision, scale) or DECIMAL(precision, scale)
For example, the number 123.45 has a precision of 5 and a scale of 2. The precision is a positive integer that
determines the number of signicant digits in a particular radix (binary or decimal). The scale is a non-negative
integer. A scale of 0 indicates that the number is an integer. For a decimal number with scale S, the exact numeric
value is the integer value of the signicant digits divided by 10S .
SQL provides a function to round numerics or dates, called TRUNC (in Informix, DB2, PostgreSQL, Oracle and
MySQL) or ROUND (in Informix, SQLite, Sybase, Oracle, PostgreSQL and Microsoft SQL Server)[27]
64
CHAPTER 6. SQL
6.2.8
Data control
The Data Control Language (DCL) authorizes users to access and manipulate data. Its two main statements are:
GRANT authorizes one or more users to perform an operation or a set of operations on an object.
REVOKE eliminates a grant, which may be the default grant.
Example:
GRANT SELECT, UPDATE ON example TO some_user, another_user; REVOKE SELECT, UPDATE ON example FROM some_user, another_user;
6.4 Criticism
SQL deviates in several ways from its theoretical foundation, the relational model and its tuple calculus. In that model,
a table is a set of tuples, while in SQL, tables and query results are lists of rows: the same row may occur multiple
times, and the order of rows can be employed in queries (e.g. in the LIMIT clause). Whether this is a common
practical concern, it is also a subject of debate. Furthermore, additional features (such as NULL and views) were
introduced without founding them directly on the relational model, which makes them more dicult to interpret.
Critics argue that SQL should be replaced with a language that strictly returns to the original foundation: for example, see The Third Manifesto. Other critics suggest that Datalog has two advantages over SQL: it has cleaner
6.5. STANDARDIZATION
65
semantics, which facilitates program understanding and maintenance, and it is more expressive, in particular for
recursive queries.[30]
Another criticism is that SQL implementations are incompatible between vendors and do not necessarily completely
follow standards. In particular date and time syntax, string concatenation, NULLs, and comparison case sensitivity
vary from vendor to vendor. A particular exception is PostgreSQL, which strives for standards compliance.[31]
Popular implementations of SQL commonly omit support for basic features of Standard SQL, such as the DATE or
TIME data types. The most obvious such examples, and incidentally the most popular commercial and proprietary
SQL DBMSs, are Oracle (whose DATE behaves as DATETIME,[32][33] and lacks a TIME type)[34] and MS SQL
Server (before the 2008 version). As a result, SQL code can rarely be ported between database systems without
modications.
There are several reasons for this lack of portability between database systems:
The complexity and size of the SQL standard means that most implementors do not support the entire standard.
The standard does not specify database behavior in several important areas (e.g. indexes, le storage...), leaving
implementations to decide how to behave.
The SQL standard precisely species the syntax that a conforming database system must implement. However,
the standards specication of the semantics of language constructs is less well-dened, leading to ambiguity.
Many database vendors have large existing customer bases; where the newer version of the SQL standard
conicts with the prior behavior of the vendors database, the vendor may be unwilling to break backward
compatibility.
There is little commercial incentive for vendors to make it easier for users to change database suppliers (see
vendor lock-in).
Users evaluating database software tend to place other factors such as performance higher in their priorities
than standards conformance.
6.5 Standardization
SQL was adopted as a standard by the American National Standards Institute (ANSI) in 1986 as SQL-86[35] and
the International Organization for Standardization (ISO) in 1987. Nowadays the standard is subject to continuous
improvement by the Joint Technical Committee ISO/IEC JTC 1, Information technology, Subcommittee SC 32, Data
management and interchange, which aliate to ISO as well as IEC. It is commonly denoted by the pattern: ISO/IEC
9075-n:yyyy Part n: title, or, as a shortcut, ISO/IEC 9075.
ISO/IEC 9075 is complemented by ISO/IEC 13249: SQL Multimedia and Application Packages (SQL/MM), which
denes SQL based interfaces and packages to widely spread applications like video, audio and spatial data.
Until 1996, the National Institute of Standards and Technology (NIST) data management standards program certied
SQL DBMS compliance with the SQL standard. Vendors now self-certify the compliance of their products.[36]
The original standard declared that the ocial pronunciation for SQL was an initialism: /skjul/ (es queue
el).[11] Regardless, many English-speaking database professionals (including Donald Chamberlin himself[37] ) use
the acronym-like pronunciation of /sikwl/ (sequel),[38] mirroring the languages pre-release development name
of SEQUEL.[14][15]
The SQL standard has gone through a number of revisions:
Interested parties may purchase SQL standards documents from ISO,[41] IEC or ANSI. A draft of SQL:2008 is freely
available as a zip archive.[42]
The SQL standard is divided into nine parts.
ISO/IEC 9075-1:2011 Part 1: Framework (SQL/Framework). It provides logical concepts.
ISO/IEC 9075-2:2011 Part 2: Foundation (SQL/Foundation). It contains the most central elements of the
language and consists of both mandatory and optional features.
66
CHAPTER 6. SQL
ISO/IEC 9075-3:2008 Part 3: Call-Level Interface (SQL/CLI). It denes interfacing components (structures,
procedures, variable bindings) that can be used to execute SQL statements from applications written in Ada,
C respectively C++, COBOL, Fortran, MUMPS, Pascal or PL/I. (For Java see part 10.) SQL/CLI is dened
in such a way that SQL statements and SQL/CLI procedure calls are treated as separate from the calling
applications source code. Open Database Connectivity is a well-known superset of SQL/CLI. This part of the
standard consists solely of mandatory features.
ISO/IEC 9075-4:2011 Part 4: Persistent Stored Modules (SQL/PSM) It standardizes procedural extensions
for SQL, including ow of control, condition handling, statement condition signals and resignals, cursors and
local variables, and assignment of expressions to variables and parameters. In addition, SQL/PSM formalizes
declaration and maintenance of persistent database language routines (e.g., stored procedures). This part of
the standard consists solely of optional features.
ISO/IEC 9075-9:2008 Part 9: Management of External Data (SQL/MED). It provides extensions to SQL that
dene foreign-data wrappers and datalink types to allow SQL to manage external data. External data is data
that is accessible to, but not managed by, an SQL-based DBMS. This part of the standard consists solely of
optional features.
ISO/IEC 9075-10:2008 Part 10: Object Language Bindings (SQL/OLB). It denes the syntax and semantics
of SQLJ, which is SQL embedded in Java (see also part 3). The standard also describes mechanisms to ensure
binary portability of SQLJ applications, and species various Java packages and their contained classes. This
part of the standard consists solely of optional features, as opposed to SQL/OLB JDBC, which is not part of
the SQL standard, which denes an API.
ISO/IEC 9075-11:2011 Part 11: Information and Denition Schemas (SQL/Schemata). It denes the Information Schema and Denition Schema, providing a common set of tools to make SQL databases and objects
self-describing. These tools include the SQL object identier, structure and integrity constraints, security
and authorization specications, features and packages of ISO/IEC 9075, support of features provided by
SQL-based DBMS implementations, SQL-based DBMS implementation information and sizing items, and
the values supported by the DBMS implementations.[43] This part of the standard contains both mandatory
and optional features.
ISO/IEC 9075-13:2008 Part 13: SQL Routines and Types Using the Java Programming Language (SQL/JRT).
It species the ability to invoke static Java methods as routines from within SQL applications ('Java-in-thedatabase'). It also calls for the ability to use Java classes as SQL structured user-dened types. This part of the
standard consists solely of optional features.
ISO/IEC 9075-14:2011 Part 14: XML-Related Specications (SQL/XML). It species SQL-based extensions
for using XML in conjunction with SQL. The XML data type is introduced, as well as several routines, functions,
and XML-to-SQL data type mappings to support manipulation and storage of XML in an SQL database.[39]
This part of the standard consists solely of optional features.
ISO/IEC 9075 is complemented by ISO/IEC 13249 SQL Multimedia and Application Packages. This closely related
but separate standard is developed by the same committee. It denes interfaces and packages based on SQL. The
aim is a unied access to typical database applications like text, pictures, data mining or spatial data.
ISO/IEC 13249-1:2007 Part 1: Framework
ISO/IEC 13249-2:2003 Part 2: Full-Text
ISO/IEC 13249-3:2011 Part 3: Spatial
ISO/IEC 13249-5:2003 Part 5: Still image
ISO/IEC 13249-6:2006 Part 6: Data mining
ISO/IEC 13249-8:xxxx Part 8: Metadata registries (MDR) (work in progress)
6.6. ALTERNATIVES
67
6.6 Alternatives
A distinction should be made between alternatives to SQL as a language, and alternatives to the relational model
itself. Below are proposed relational alternatives to the SQL language. See navigational database and NoSQL for
alternatives to the relational model.
.QL: object-oriented Datalog
4D Query Language (4D QL)
Datalog
HTSQL: URL based query method
IBM Business System 12 (IBM BS12): one of the rst fully relational database management systems, introduced in 1982
ISBL
jOOQ: SQL implemented in Java as an internal internal domain-specic language
Java Persistence Query Language (JPQL): The query language used by the Java Persistence API and Hibernate
persistence library
LINQ: Runs SQL statements written like language constructs to query collections directly from inside .Net
code.
Object Query Language
OttoQL
QBE (Query By Example) created by Mosh Zloof, IBM 1977
Quel introduced in 1974 by the U.C. Berkeley Ingres project.
Tutorial D
XQuery
68
CHAPTER 6. SQL
Data warehouse
Data stream processing with SQL
Star schema
Snowake schema
6.8 Notes
[1] Media Type registration for application/sql. Internet Assigned Numbers Authority. 10 April 2013. Retrieved 10 April
2013.
[2] The application/sql Media Type, RFC 6922. Internet Engineering Task Force. April 2013. p. 3. Retrieved 10 April
2013.
[3] Paul, Ryan. A guided tour of the Microsoft Command Shell. Ars Technica. Retrieved 10 April 2011.
[4] Beaulieu, Alan (April 2009). Mary E Treseler, ed. Learning SQL (2nd ed.). Sebastapol, CA, USA: O'Reilly. ISBN
978-0-596-52083-0.
[5] SQL, n.. Oxford English Dictionary. Oxford University Press. Retrieved 2014-11-27.
[6] Encyclopedia Britannica. SQL. Retrieved 2013-04-02.
[7] From Oxford Dictionaries: Denition of SQL - abbreviation, Structured Query Language, an international standard for
database manipulation. Oxford Dictionaries. SQL.
[8] IBM. SQL Guide.
[9] From Microsoft: Structured Query Language, invented at IBM in the 1970s. It is more commonly known by its acronym,
SQL .. Microsoft. Structured Query Language (SQL)".
[10] Codd, Edgar F (June 1970). A Relational Model of Data for Large Shared Data Banks. Communications of the ACM
(Association for Computing Machinery) 13 (6): 37787. doi:10.1145/362384.362685. Retrieved 2007-06-09.
[11] Chapple, Mike. SQL Fundamentals. Databases. About.com. Retrieved 2009-01-28.
[12] Structured Query Language (SQL)". International Business Machines. October 27, 2006. Retrieved 2007-06-10.
[13] ISO/IEC 9075-1:2008: Information technology Database languages SQL Part 1: Framework (SQL/Framework)".
[14] Chamberlin, Donald D; Boyce, Raymond F (1974). SEQUEL: A Structured English Query Language (PDF). Proceedings
of the 1974 ACM SIGFIDET Workshop on Data Description, Access and Control (Association for Computing Machinery):
24964. Retrieved 2007-06-09.
[15] Oppel, Andy (February 27, 2004). Databases Demystied. San Francisco, CA: McGraw-Hill Osborne Media. pp. 901.
ISBN 0-07-146960-5.
[16] History of IBM, 1978. IBM Archives. IBM. Retrieved 2007-06-09.
[17] ANSI/ISO/IEC International Standard (IS). Database Language SQLPart 2: Foundation (SQL/Foundation). 1999.
[18] DECODE. Docs.oracle.com. Retrieved 2013-06-14.
[19] Transact-SQL Reference. SQL Server Language Reference. SQL Server 2005 Books Online. Microsoft. 2007-09-15.
Retrieved 2007-06-17.
[20] Hans-Joachim, K. (2003). Null Values in Relational Databases and Sure Information Answers. Semantics in Databases.
Second International Workshop Dagstuhl Castle, Germany, January 712, 2001. Revised Papers. Lecture Notes in Computer Science 2582. pp. 119138. doi:10.1007/3-540-36596-6_7. ISBN 978-3-540-00957-3.
[21] Ron van der Meyden, "Logical approaches to incomplete information: a survey" in Chomicki, Jan; Saake, Gunter (Eds.)
Logics for Databases and Information Systems, Kluwer Academic Publishers ISBN 978-0-7923-8129-7, p. 344; PS preprint
(note: page numbering diers in preprint from the published version)
[22] ISO/IEC. ISO/IEC 9075-2:2003, SQL/Foundation. ISO/IEC.
[23] M. Negri, G. Pelagatti, L. Sbattella (1989) Semantics and problems of universal quantication in SQL.
6.9. REFERENCES
69
[24] Fratarcangeli, Claudio (1991). Technique for universal quantication in SQL. Retrieved from ACM.org.
[25] Kawash, Jalal (2004) Complex quantication in Structured Query Language (SQL): a tutorial using relational calculus Journal of Computers in Mathematics and Science Teaching ISSN 0731-9258 Volume 23, Issue 2, 2004 AACE Norfolk,
Virginia. Retrieved from Thefreelibrary.com.
[26] Information Technology: Database Language SQL. CMU. (proposed revised text of DIS 9075).
[27] Arie Jones, Ryan K. Stephens, Ronald R. Plew, Alex Kriegel, Robert F. Garrett (2005), SQL Functions Programmers
Reference. Wiley, 127 pages.
[28] http://publib.boulder.ibm.com/infocenter/idshelp/v111/index.jsp?topic=/com.ibm.sqlr.doc/sqlr150.htm
[29] PostgreSQL contributors (2011). PostgreSQL server programming. PostgreSQL 9.1 ocial documentation. postgresql.org. Retrieved 2012-03-09.
[30] http://lbd.udc.es/jornadas2011/actas/PROLE/PROLE/S5/13_article.pdf
[31] PostgreSQL contributors (2012). About PostgreSQL. PostgreSQL 9.1 ocial website. PostgreSQL Global Development
Group. Retrieved March 9, 2012. PostgreSQL prides itself in standards compliance. Its SQL implementation strongly
conforms to the ANSI-SQL:2008 standard
[32] Lorentz, Diana; Roeser, Mary Beth; Abraham, Sundeep; Amor, Angela; Arora, Geeta; Arora, Vikas; Ashdown, Lance;
Baer, Hermann; Bellamkonda, Shrikanth (October 2010) [1996]. Basic Elements of Oracle SQL: Data Types. Oracle
Database SQL Language Reference 11g Release 2 (11.2). Oracle Database Documentation Library. Redwood City, CA:
Oracle USA, Inc. Retrieved December 29, 2010. For each DATE value, Oracle stores the following information: century,
year, month, date, hour, minute, and second
[33] Lorentz, Diana; Roeser, Mary Beth; Abraham, Sundeep; Amor, Angela; Arora, Geeta; Arora, Vikas; Ashdown, Lance;
Baer, Hermann; Bellamkonda, Shrikanth (October 2010) [1996]. Basic Elements of Oracle SQL: Data Types. Oracle
Database SQL Language Reference 11g Release 2 (11.2). Oracle Database Documentation Library. Redwood City, CA:
Oracle USA, Inc. Retrieved December 29, 2010. The datetime data types are DATE...
[34] Lorentz, Diana; Roeser, Mary Beth; Abraham, Sundeep; Amor, Angela; Arora, Geeta; Arora, Vikas; Ashdown, Lance;
Baer, Hermann; Bellamkonda, Shrikanth (October 2010) [1996]. Basic Elements of Oracle SQL: Data Types. Oracle
Database SQL Language Reference 11g Release 2 (11.2). Oracle Database Documentation Library. Redwood City, CA:
Oracle USA, Inc. Retrieved December 29, 2010. Do not dene columns with the following SQL/DS and DB2 data types,
because they have no corresponding Oracle data type:... TIME
[35] Finding Aid. X3H2 Records, 197895. American National Standards Institute.
[36] Doll, Shelley (June 19, 2002). Is SQL a Standard Anymore?". TechRepublics Builder.com. TechRepublic. Archived
from the original on 2013-01-02. Retrieved 2010-01-07.
[37] Gillespie, Patrick. Pronouncing SQL: S-Q-L or Sequel?". Pronouncing SQL: S-Q-L or Sequel?. Retrieved 12 February
2012.
[38] Melton, Jim; Alan R Simon (1993). 1.2. What is SQL?". Understanding the New SQL: A Complete Guide. Morgan
Kaufmann. p. 536. ISBN 1-55860-245-3. SQL (correctly pronounced ess cue ell, instead of the somewhat common
sequel)...
[39] Wagner, Michael (2010). SQL/XML:2006 - Evaluierung der Standardkonformitt ausgewhlter Datenbanksysteme. Diplomica Verlag. p. 100. ISBN 3-8366-9609-6.
[40] "SQL:2008 now an approved ISO international standard. Sybase. July 2008.
[41] ISO/IEC 9075-2:2011: Information technology -- Database languages -- SQL -- Part 2: Foundation (SQL/Foundation)".
[42] "SQL:2008 draft (ZIP). Whitemarsh Information Systems Corporation.
[43] ISO/IEC 9075-11:2008: Information and Denition Schemas (SQL/Schemata)". 2008. p. 1.
6.9 References
Codd, Edgar F (June 1970). A Relational Model of Data for Large Shared Data Banks. Communications of
the ACM 13 (6): 37787. doi:10.1145/362384.362685.
Discussion on alleged SQL aws (C2 wiki)
C. J. Date with Hugh Darwen: A Guide to the SQL standard : a users guide to the standard database language
SQL, 4th ed., Addison Wesley, USA 1997, ISBN 978-0-201-96426-4
70
CHAPTER 6. SQL
Chapter 7
NoSQL
Structured storage redirects here. For the Microsoft technology also known as structured storage, see COM Structured Storage.
A NoSQL (often interpreted as Not only SQL[1][2] ) database provides a mechanism for storage and retrieval of data
that is modeled in means other than the tabular relations used in relational databases. Motivations for this approach
include simplicity of design, horizontal scaling, and ner control over availability. The data structures used by NoSQL
databases (e.g. key-value, graph, or document) dier from those used in relational databases, making some operations
faster in NoSQL and others faster in relational databases. The particular suitability of a given NoSQL database
depends on the problem it must solve.
NoSQL databases are increasingly used in big data and real-time web applications.[3] NoSQL systems are also called
Not only SQL to emphasize that they may also support SQL-like query languages. Many NoSQL stores compromise
consistency (in the sense of the CAP theorem) in favor of availability and partition tolerance. Barriers to the greater
adoption of NoSQL stores include the use of low-level query languages, the lack of standardized interfaces, and huge
investments in existing SQL.[4] Most NoSQL stores lack true ACID transactions, although a few recent systems, such
as FairCom c-treeACE, Google Spanner (though technically a NewSQL database), FoundationDB and OrientDB
have made them central to their designs. (See table Join and ACID Support.)
7.1 History
Carlo Strozzi used the term NoSQL in 1998 to name his lightweight, open-source relational database that did not expose the standard SQL interface.[5] Strozzi suggests that, as the current NoSQL movement departs from the relational
model altogether; it should therefore have been called more appropriately 'NoREL'",[6] referring to 'No Relational'.
Eric Evans reintroduced the term NoSQL in early 2009 when Johan Oskarsson of Last.fm organized an event to discuss
open-source distributed databases.[7] The name attempted to label the emergence of an increasing number of nonrelational, distributed data stores. Most of the early NoSQL systems did not attempt to provide atomicity, consistency,
isolation and durability guarantees, contrary to the prevailing practice among relational database systems.[8]
72
CHAPTER 7. NOSQL
Key-value: CouchDB, Dynamo, FoundationDB, MemcacheDB, Redis, Riak, FairCom c-treeACE, Aerospike,
OrientDB, MUMPS
Graph: Allegro, Neo4J, InniteGraph, OrientDB, Virtuoso, Stardog
Multi-model: OrientDB, FoundationDB, ArangoDB, Alchemy Database, CortexDB
A more detailed classication is the following, based on one from Stephen Yen:[9]
7.3 Performance
Ben Scoeld rated dierent categories of NoSQL databases as follows:
[10]
Performance and scalability comparisons are sometimes done with the YCSB benchmark.
See also: Comparison of structured storage software
7.4.1
Multiple queries
Instead of retrieving all the data with one query, its common to do several queries to get the desired data. NoSQL
queries are often faster than traditional SQL queries so the cost of having to do additional queries may be acceptable.
If an excessive number of queries would be necessary, one of the other two approaches is more appropriate.
7.4.2
Caching/replication/non-normalized data
Instead of only storing foreign keys, its common to store actual foreign values along with the models data. For
example, each blog comment might include the username in addition to a user id, thus providing easy access to the
username without requiring another lookup. When a username changes however, this will now need to be changed
in many places in the database. Thus this approach works better when reads are much more common than writes.[11]
7.4.3
Nesting data
With document databases like MongoDB its common to put more data in a smaller number of collections. For
example in a blogging application, one might choose to store comments within the blog post document so that with
a single retrieval one gets all the comments. Thus in this approach a single document contains all the data you need
for a specic task.
7.5 Examples
7.5.1
Document store
7.5. EXAMPLES
73
encode data (or information) in some standard formats or encodings. Encodings in use include XML, YAML, and
JSON as well as binary forms like BSON.
Dierent implementations oer dierent ways of organizing and/or grouping documents:
Collections
Tags
Non-visible Metadata
Directory hierarchies
Compared to relational databases, for example, collections could be considered analogous to tables and documents
analogous to records. But they are dierent: every record in a table has the same sequence of elds, while documents
in a collection may have elds that are completely dierent.
Documents are addressed in the database via a unique key that represents that document. One of the other dening
characteristics of a document-oriented database is that, beyond using the simple key-document (or key-value) lookup
to retrieve a document, the database oers an API or query language that retrieves documents based on their contents.
Document store databases and their query language
7.5.2
Graph
7.5.3
Key-value stores
Key-value (KV) stores use the associative array (also known as a map or dictionary) as their fundamental data model.
In this model, data is represented as a collection of key-value pairs, such that each possible key appears at most once
in the collection.[12][13]
The key-value model is one of the simplest non-trivial data models, and richer data models are often implemented on
top of it. The key-value model can be extended to an ordered model that maintains keys in lexicographic order. This
extension is powerful, in that it can eciently process key ranges.[14]
Key-value stores can use consistency models ranging from eventual consistency to serializability. Some support ordering of keys. Some maintain data in memory (RAM), while others employ solid-state drives or rotating disks. Here
is a list of key-value stores:
KV - eventually consistent
Dynamo
Riak[15]
KV - ordered
Berkeley DB
FairCom c-treeACE/c-treeRTG
74
CHAPTER 7. NOSQL
FoundationDB
IBM Informix C-ISAM
InnityDB
LMDB
MemcacheDB
NDBM
KV - RAM
Aerospike
Coherence
FairCom c-treeACE
Hazelcast
memcached
OpenLink Virtuoso
redis
XAP
KV - solid-state drive or rotating disk
Aerospike
BigTable
CDB
Clusterpoint Database Server
Couchbase Server
FairCom c-treeACE
GT.M[16]
Hibari
Keyspace
LevelDB
LMDB
MemcacheDB (using Berkeley DB)
MongoDB
NoSQLz
Coherence
Oracle NoSQL Database
OpenLink Virtuoso
Tarantool
Tokyo Cabinet
Tuple space
7.5. EXAMPLES
7.5.4
Object database
db4o
GemStone/S
InterSystems Cach
JADE
JOQULAR
NeoDatis ODB
ObjectDatabase++
ObjectDB
Objectivity/DB
ObjectStore
ODABA
Perst
OpenLink Virtuoso
Versant Object Database
ZODB
7.5.5
Tabular
Apache Accumulo
BigTable
Apache Hbase
Hypertable
Mnesia
OpenLink Virtuoso
7.5.6
Tuple store
Apache River
GigaSpaces
Tarantool
TIBCO ActiveSpaces
OpenLink Virtuoso
75
76
CHAPTER 7. NOSQL
7.5.7
Apache JENA
MarkLogic
Ontotext-OWLIM
Oracle NoSQL database
SparkleDB
Virtuoso Universal Server
Stardog
7.5.8
Hosted
Amazon DynamoDB
Datastore on Google Appengine
Clusterpoint database
Cloudant Data Layer (CouchDB)
Freebase
OpenLink Virtuoso
7.5.9
Multivalue databases
D3 Pick database
Extensible Storage Engine (ESE/NT)
InnityDB
InterSystems Cach
Northgate Information Solutions Reality, the original Pick/MV Database
OpenQM
Revelation Softwares OpenInsight
Rocket U2
7.5.10
Multimodel database
OrientDB
FoundationDB
7.5.11
Correlation database
7.5.12
Cell database
77
7.7 References
[1] NoSQL (Not Only SQL)". NoSQL database, also called Not Only SQL
[2] Martin Fowler. NosqlDenition. many advocates of NoSQL say that it does not mean a no to SQL, rather it means
Not Only SQL
[3] RDBMS dominate the database market, but NoSQL systems are catching up. DB-Engines.com. 21 Nov 2013. Retrieved
24 Nov 2013.
[4] K. Grolinger, W.A. Higashino, A. Tiwari, M.A.M. Capretz (2013). Data management in cloud environments: NoSQL
and NewSQL data stores (PDF). JoCCASA, Springer. Retrieved 8 Jan 2014.
[5] Lith, Adam; Jakob Mattson (2010). Investigating storage solutions for large data: A comparison of well performing
and scalable data storage solutions for real time extraction and batch insertion of data (PDF). Gteborg: Department of
Computer Science and Engineering, Chalmers University of Technology. p. 70. Retrieved 12 May 2011. Carlo Strozzi
rst used the term NoSQL in 1998 as a name for his open source relational database that did not oer a SQL interface[...]
[6] NoSQL Relational Database Management System: Home Page. Strozzi.it. 2 October 2007. Retrieved 29 March 2010.
[7] NoSQL 2009. Blog.sym-link.com. 12 May 2009. Retrieved 29 March 2010.
[8] Mike Chapple. The ACID Model.
[9] Yen, Stephen. NoSQL is a Horseless Carriage (PDF). NorthScale. Retrieved 2014-06-26..
[10] Scoeld, Ben (2010-01-14). NoSQL - Death to Relational Databases(?)". Retrieved 2014-06-26.
[11] Making the Shift from Relational to NoSQL (PDF). Couchbase.com. Retrieved December 5, 2014.
[12] Sandy (14 January 2011). Key Value stores and the NoSQL movement. http://dba.stackexchange.com/questions/607/
what-is-a-key-value-store-database: Stackexchange. Retrieved 1 January 2012. Key-value stores allow the application
developer to store schema-less data. This data usually consists of a string that represents the key, and the actual data that is
considered the value in the key-value relationship. The data itself is usually some kind of primitive of the programming
language (a string, an integer, or an array) or an object that is being marshaled by the programming languages bindings to
the key-value store. This structure replaces the need for a xed data model and allows proper formatting.
[13] Marc Seeger (21 September 2009). Key-Value Stores: a practical overview (PDF). http://blog.marc-seeger.de/2009/
09/21/key-value-stores-a-practical-overview/: Marc Seeger. Retrieved 1 January 2012. Key-value stores provide a highperformance alternative to relational database systems with respect to storing and accessing data. This paper provides a
short overview of some of the currently available key-value stores and their interface to the Ruby programming language.
[14] Ilya Katsov (1 March 2012). NoSQL Data Modeling Techniques. Ilya Katsov. Retrieved 8 May 2014.
[15] Riak: An Open Source Scalable Data Store. 28 November 2010. Retrieved 28 November 2010 * OpenLink Virtuoso
Project Voldemort. Check date values in: |accessdate= (help)
78
CHAPTER 7. NOSQL
[16] Tweed, Rob; George James (2010). A Universal NoSQL Engine, Using a Tried and Tested Technology (PDF). p. 25.
Without exception, the most successful and well-known of the NoSQL databases have been developed from scratch, all
within just the last few years. Strangely, it seems that nobody looked around to see whether there were any existing, successfully implemented database technologies that could have provided a sound foundation for meeting Web-scale demands.
Had they done so, they might have discovered two products, GT.M and Cach.....*
Chapter 8
NewSQL
NewSQL is a class of modern relational database management systems that seek to provide the same scalable performance of NoSQL systems for online transaction processing (OLTP) read-write workloads while still maintaining
the ACID guarantees of a traditional database system.[1][2][3]
8.1 History
The term was rst used by 451 Group analyst Matthew Aslett in a 2011 research paper discussing the rise of new
database systems as challengers to established vendors.[4] Many enterprise systems that handle high-prole data (e.g.,
nancial and order processing systems) also need to be able to scale but are unable to use NoSQL solutions because
they cannot give up strong transactional and consistency requirements.[4][5] The only options previously available for
these organizations were to either purchase a more powerful single-node machine or develop custom middleware that
distributes queries over traditional DBMS nodes. Both approaches are prohibitively expensive and thus are not an
option for many. Thus, in this paper, Aslett discusses how NewSQL upstarts are poised to challenge the supremacy
of commercial vendors, in particular Oracle.
8.2 Systems
Although NewSQL systems vary greatly in their internal architectures, the two distinguishing features common
amongst them is that they all support the relational data model and use SQL as their primary interface.[6] The applications targeted by these NewSQL systems are characterized as having a large number of transactions that (1) are
short-lived (i.e., no user stalls), (2) touch a small subset of data using index lookups (i.e., no full table scans or large
distributed joins), and (3) are repetitive (i.e. executing the same queries with dierent inputs).[7] These NewSQL
systems achieve high performance and scalability by eschewing much of the legacy architecture of the original IBM
System R design, such as heavyweight recovery or concurrency control algorithms.[8] One of the rst known NewSQL
systems is the H-Store parallel database system.[9][10]
NewSQL systems can be loosely grouped into three categories:
8.2.1
[11][12]
New architectures
The rst type of NewSQL systems are completely new database platforms. These are designed to operate in a distributed cluster of shared-nothing nodes, in which each node owns a subset of the data. These databases are often
written from scratch with a distributed architecture in mind, and include components such as distributed concurrency control, ow control, and distributed query processing. Example systems in this category are Google Spanner, Clustrix, VoltDB, MemSQL, Pivotal's SQLFire and GemFire XD, SAP HANA,[13] FoundationDB, NuoDB,
Innitum, [14] [15][16] TransLattice, ActorDB,[17] and Trafodion.[18]
79
80
CHAPTER 8. NEWSQL
8.2.2
SQL Engines
The second category are highly optimized storage engines for SQL. These systems provide the same programming
interface as SQL, but scale better than built-in engines, such as InnoDB. Examples of these new storage engines
include Infobright, TokuDB and the now defunct InniDB.
8.2.3
Transparent sharding
These systems provide a sharding middleware layer to automatically split databases across multiple nodes. Examples
of this type of system includes dbShards, Scalearc, and ScaleBase.
8.4 References
[1] Aslett, Matthew (2011). How Will The Database Incumbents Respond To NoSQL And NewSQL?" (PDF). 451 Group
(published 2011-04-04). Retrieved 2012-07-06.
[2] Stonebraker, Michael (2011-06-16). NewSQL: An Alternative to NoSQL and Old SQL for New OLTP Apps. Communications of the ACM Blog. Retrieved 2012-07-06.
[3] Ho, Todd (2012-09-24). Google Spanners Most Surprising Revelation: NoSQL is Out and NewSQL is In. Retrieved
2012-10-07.
[4] Aslett, Matthew (2010). What we talk about when we talk about NewSQL. 451 Group (published 2011-04-06). Retrieved 2012-10-07.
[5] Lloyd, Alex (2012). Building Spanner. Berlin Buzzwords (published 2012-06-05). Retrieved 2012-10-07.
[6] Cattell, R. (2011). Scalable SQL and NoSQL data stores (PDF). ACM SIGMOD Record 39 (4): 12. doi:10.1145/1978915.1978919.
[7] Stonebraker, Mike et al. (2007). The end of an architectural era: (its time for a complete rewrite (PDF). VLDB '07:
Proceedings of the 33rd international conference on Very large data bases. Vienna, Austria.
[8] Stonebraker, M.; Cattell, R. (2011). 10 rules for scalable performance in 'simple operation' datastores. Communications
of the ACM 54 (6): 72. doi:10.1145/1953122.1953144.
[9] Aslett, Matthew (2008). Is H-Store the future of database management systems?" (published 2008-03-04). Retrieved
2012-07-05.
[10] Dignan, Larry (2008). H-Store: Complete destruction of the old DBMS order?". Retrieved 2012-07-05.
[11] Venkatesh, Prasanna (2012). NewSQL - The New Way to Handle Big Data (published 2012-01-30). Retrieved 201210-07.
[12] Levari, Doron (2011). The NewSQL Market Breakdown. Retrieved 2012-04-08.
[13] SAP HANA. SAP. Retrieved 17 July 2014.
[14] Innitum: High Performance Distributed Computing Database. 2012.
[15] Proctor, Seth (2013). Exploring the Architecture of the NuoDB Database, Part 1. Retrieved 2013-07-12.
[16] Proctor, Seth (2013). Exploring the Architecture of the NuoDB Database, Part 2. Retrieved 2013-07-17.
[17] ActorDB a distributed SQL database. 2014.
[18] Trafodion: Transactional SQL-on-HBase. 2014.
Chapter 9
XML database
An XML database is a data persistence software system that allows data to be specied, and sometimes stored,
in XML format. These data can then be queried, transformed, exported and returned to a calling system. XML
databases are a avor of document-oriented databases which are in turn a category of NoSQL database (meaning
Not (only) SQL).
O'Connell gives one reason for the use of XML in databases: the increasingly common use of XML for data transport,
which has meant that data is extracted from databases and put into XML documents and vice-versa.[3] It may prove
more ecient (in terms of conversion costs) and easier to store the data in XML format. In content-based applications,
the ability of the native XML database also minimizes the need for extraction or entry of metadata to support searching
and navigation.
82
9.2.1
SELECT id, vol, xmlquery('$j/name', passing journal AS j) AS name FROM journals WHERE xmlexists('$j[licence="CreativeComm
passing journal AS j)
9.4. REFERENCES
9.3.1
Language features
9.3.2
Supported APIs
83
9.4 References
[1] Nicola, Matthias (28 September 2010). 5 Reasons for Storing XML in a Database. Native XML Database. Retrieved 17
March 2015.
[2] Feldman, Damon (11 April 2013). Moving from Relational Modeling to XML and MarkLogic Data Models. MarkLogic
World. Retrieved 17 March 2015.
[3] O'Connell, S. (2005). Section 9.2. Advanced Databases Course Notes (Syllabus) (Southampton, England: University of
Southampton).
[4] XML Schema Storage and Query: Basic. Oracle XML DB Developers Guide, 10g Release 2. Oracle Corporation. August
2005. Retrieved 17 March 2015.. Section Creating XMLType Tables and Columns Based on XML Schema
[5] ISO/IEC 9075-14:2011: Information technology -- Database languages -- SQL -- Part 14: XML-Related Specications
(SQL/XML)". International Organization for Standardization. 2011. Retrieved 17 March 2015.
[6] pureXML overview -- DB2 as an XML database. IBM Knowledge Center. IBM. Retrieved 17 March 2015.
[7] Using XML in SQL Server. Microsoft Developer Network. Microsoft Corporation. Retrieved 17 March 2015.
[8] XMLType Operations. Oracle XML DB Developers Guide, 10g Release 2. Oracle Corporation. August 2005. Retrieved
17 March 2015.
[9] 8.13. XML Type. PostgreSQL 9.0.19 Documentation. Retrieved 17 March 2015.
[10] PostgreSQL - Data Types - XML Type
[11] Siegel, Erik; Retter, Adam (December 2014). 4. Architecture. eXist. O'Reilly & Associates. ISBN 978-1-4493-3710-0.
Retrieved 18 March 2015.
[12] Kellogg, Dave (11 April 2010). Yes, Virginia, MarkLogic is a NoSQL System. Kellblog. Retrieved 18 March 2015.
[13] XQuery Update Extension. Retrieved 18 March 2015.
Chapter 10
10.1 History
The data denition language concept and name was rst introduced in relation to the Codasyl database model, where
the schema of the database was written in a language syntax describing the records, elds, and sets of the user
data model.[1] Later it was used to refer to a subset of Structured Query Language (SQL) for creating tables and
constraints. SQL-92 introduced a schema manipulation language and schema information tables to query schemas.
These information tables were specied as SQL/Schemata in SQL:2003. The term DDL is also used in a generic
sense to refer to any formal language for describing data or information structures.
10.2 SQL
Many data description languages use a declarative syntax to dene elds and data types. SQL, however, uses a
collection of imperative verbs whose eect is to modify the schema of the database by adding, changing, or deleting
denitions of tables or other objects. These statements can be freely mixed with other SQL statements, so the DDL
is not truly a separate language.
10.2.1
CREATE statements
10.2. SQL
85
10.2.2
DROP statements
10.2.3
ALTER statements
10.2.4
rename statement
10.2.5
Finally, another kind of DDL sentence in SQL is one used to dene referential integrity relationships, usually implemented as primary key and foreign key tags in some columns of the tables.
These two statements can be included inside a CREATE TABLE or an ALTER TABLE sentence.
86
10.5 References
[1] Olle, T. William (1978). The Codasyl Approach to Data Base Management. Wiley. ISBN 0-471-99579-7.
[2] Allen, Grant (2010). The Denitive Guide to SQLite. Apresspod. Mike Owens (2 ed.). Apress. p. 368. ISBN 9781430232254.
Retrieved 2012-10-02. The create table statement has a special syntax for creating tables from select statements. [...]: [...]
create table foods2 as select * from foods; [...] Many other databases refer to this approach as CTAS, which stands for
Create Table As Select, and that phrase is not uncommon among SQLite users.
Chapter 11
87
88
11.2 References
The SQL92 standard.
[1] SQL92
[2] SQL92 4.22.2, SQL statements classied by function
[3] Data Manipulation Language Statements. Oracle. Data manipulation language (DML) statements query or manipulate
data in existing schema objects.
Chapter 12
Query language
Database language redirects here. For other types of database languages, see Database Languages.
Query languages are computer languages used to make queries in databases and information systems.
12.1 Types
Broadly, query languages can be classied according to whether they are database query languages or information
retrieval query languages. The dierence is that a database query language attempts to give factual answers to factual
questions, while an information retrieval query language attempts to nd documents containing information that is
relevant to an area of inquiry.
12.2 Examples
Examples include:
.QL is a proprietary object-oriented query language for querying relational databases; successor of Datalog;
Contextual Query Language (CQL) a formal language for representing queries to information retrieval systems
such as web indexes or bibliographic catalogues.
CQLF (CODASYL Query Language, Flat) is a query language for CODASYL-type databases;
Concept-Oriented Query Language (COQL) is used in the concept-oriented model (COM). It is based on a
novel data modeling construct, concept, and uses such operations as projection and de-projection for multidimensional analysis, analytical operations and inference;
DMX is a query language for Data Mining models;
Datalog is a query language for deductive databases;
F-logic is a declarative object-oriented language for deductive databases and knowledge representation.
FQL enables you to use a SQL-style interface to query the data exposed by the Graph API. It provides advanced
features not available in the Graph API.[1]
Gellish English is a language that can be used for queries in Gellish English Databases, for dialogues (requests
and responses) as well as for information modeling and knowledge modeling;[2]
HTSQL is a query language that translates HTTP queries to SQL;
ISBL is a query language for PRTV, one of the earliest relational database management systems;
LINQ query-expressions is a way to query various data sources from .NET languages
89
90
12.4 References
[1] FQL Overview. Facebook Developers.
[2] http://gellish.wiki.sourceforge.net/Querying+a+Gellish+English+database
91
Text
92
sunday, JephapE, Xhelllox, Vishnava, CanadianLinuxUser, Fluernutter, Cevalsi, Cambalachero, CarsracBot, DFS454, Glane23, FiriBot,
SDSWIKI, Roux, Favonian, Doniago, Exor674, AtheWeatherman, Jasper Deng, Hotsta, Evildeathmath, Tide rolls, Nicoosuna, Kivar2,
Matj Grabovsk, Dart88, Gail, David0811, Duyanfang, Jarble, Arbitrarily0, LuK3, Informatwr, Ben Ben, Luckas-bot, Yobot, Sudarevic,
2D, OrgasGirl, Bunnyhop11, Fraggle81, Gishac, MarcoAurelio, Pvjohnson, Nallimbot, SwisterTwister, Srdju001, Peter Flass, Bbb23,
N1RK4UDSK714, AnomieBOT, AmritasyaPutra, Rubinbot, Sonia, Jim1138, JackieBot, Piano non troppo, Kingpin13, Ulric1313, Imfargo, Flewis, Bluerasberry, Materialscientist, Kimsey0, Citation bot, OllieFury, BlurTento, Clark89, Darthvader023, Xqbot, Anders
Torlind, Kimberly ayoma, Sythy2, Llyntegid, Addihockey10, Capricorn42, Bcontins, 4twenty42o, Craftyminion, Grim23, Yossman007,
Preet91119, Tonydent, GrouchoBot, Call me Bubba, Kekekecakes, Bjcubsfan, Earlypsychosis, Prunesqualer, Crashdoom, Amaury, Doulos Christos, Sophus Bie, The Wiki Octopus, IElonex!, Shadowjams, , Oho1, Dougofborg, Al Wiseman, Chtuw, Captain-n00dle,
Gonfus, Prari, FrescoBot, Sock, Riverraisin, Fortdj33, Blackguard SF, Dogposter, Mark Renier, StaticVision, HJ Mitchell, Sae1962,
Wione, Weetoddid, ZenerV, Kwiki, Javert, ZooPro, Winterst, Shadowseas, I dream of horses, HRoestBot, Grsmca, LittleWink, 10metreh, Supreme Deliciousness, Hamtechperson, Sissis bd, 28nebraska, Jschnur, Xfact, RedBot, Btilm, MastiBot, Rotanagol, Bharath357,
, 05winsjp, Psaajid, Meaghan, Abhikumar1995, Jandalhandler, Refactored, FoxBot, TobeBot, Mercy11, , KotetsuKat,
ItsZippy, Lotje, Callanecc, Writeread82, Vrenator, Reidh21234, Reaper Eternal, Luizfsc, TheGrimReaper NS, Xin0427, Suusion of
Yellow, SnoFox, BluCreator, Colindolly, TheMesquito, Minimac, Thinktdub, Heysim0n, RazorXX8, DARTH SIDIOUS 2, Lingliu07,
KILLERKEA23, Leonnicholls07, Mean as custard, Helloher, ArwinJ, Kvasilev, Regancy42, FetchcommsAWB, Timbits82, Aj.robin,
Salvio giuliano, Skamecrazy123, Rollins83, EmausBot, John of Reading, FFGeyer, Armen1304, Heymid, ScottyBerg, Lores92201,
Beta M, Dewritech, GoingBatty, RA0808, RenamedUser01302013, Itafran2010, Knbanker, Winner 42, Carbo1200, Wikipelli, K6ka,
Sheeana, Ceyjan, Serketan, AsceticRose, Anirudh Emani, Tudorol, Komal.Ar, Pete1248, Savh, Ravinjit, Joshwa1234567890, F, NicatronTg, M.badnjki, Alpha Quadrant (alt), Tuhl, Makecat, Ocaasi, OnePt618, Tolly4bolly, W163, TyA, L Kensington, Mayur, Donner60,
Mentibot, MainFrame, Nz101, Matthewrbowker, Peter Karlsen, GregWPhoto, GrayFullbuster, Rishu arora11, DASHBotAV, Kellyk99,
28bot, Rocketrod1960, Diamondland, ClueBot NG, SpikeTorontoRCP, Mechanical digger, Jack Greenmaven, MelbourneStar, Satellizer,
Dancayta, Chester Markel, Bwhynot14, Millermk, Theimmaculatechemist, Lsschwar, Bowlderizer, Zhoravdb, Widr, Danim, Ugebgroup8,
CasualVisitor, Vibhijain, Franky21, Jk2q3jrklse, Cammo33, Oddbodz, Lbausalop, Cambapp, Strike Eagle, Calabe1992, Doorknob747,
Lowercase sigmabot, BG19bot, Freebiekr, MilerWhite, Machdohvah, Tomatronster, Northamerica1000, Wiki13, MusikAnimal, Frze,
Dan653, AwamerT, Allecher, Mark Arsten, Somchai1029, Vincent Liu, Compfreak7, 110808028 amol, Altar, Foxfax555, Rj Haseeb,
Alzpp, Bfugett, Jbrune, Thomasryno, Afree10, Glacialfox, Admrepanther, Era7bd, Soumark, Maxmarengo, Manikandan 2030, Branzman, Melucky2getu, Fylbecatulous, Plavozont, Carliitaeliza, IkamusumeFan, Several Pending, Pratyya Ghosh, Zhaofeng Li, Mrt3366,
VNeumann, ChrisGualtieri, Christophe.billiottet, Lovefamosos, Maty18, Mediran, Khazar2, Deathlasersonline, Saturdayswiki,
,
Mukherjeeassociates, Cerabot~enwiki, Malvikiran, Cheolsoo, R3miixasim, Pebau.grandauer, TwoTwoHello, Lugia2453, Frosty, SFK2,
Graphium, Rafaelschp, 069952497a, Reatlas, Epicgenius, P2Peter, Acetotyce, Rockonomics, Eyesnore, Moazzam chand, JamesMoose,
Jabby11, EvergreenFir, Menublogger, Backendgaming, PappaAvMin, Mike99999, Gburd, Babitaarora, MJunkCat, Boli1107, JJdaboss,
Ray Lightyear, BentlijDB, Hshoemark, Melody Lavender, Ginsuloft, D Eaketts, Eddiecarter1, Eddiejcarter, Mwaci11, Gajurahman,
Manul, IrfanSha, AddWittyNameHere, Dkwebsub, JunWan, WPGA2345, Verajohne, Phinicle, Title302, JaconaFrere, ElijahLloyd97,
7Sidz, Monkbot, JewishMonser69, Rajat Kant Singh, Davidcoppereld123, Sunrocket89, Nomonomnom, Samster0708, Krushna124,
Cabral88, MisteArndon, KizzyCode, Uoy ylgu dratsab, Hillysilly, FSahar, Thedinesh4u, Boybudz321, Jesseminisis, ChamithN, Crystallizedcarbon, Eurodyne, JensLechtenboerger, Papapasan, Is8ac, Torvolt, Rgeurts, MaurolepisDreki, Top The Ball, Jack0898, Rob12467,
Gfsfg, Uthinkurspecial, Asdafsd, SaltySloth, Jrgreene2, Timoutiwin and Anonymous: 2033
Relational database management system Source: http://en.wikipedia.org/wiki/Relational%20database%20management%20system?
oldid=657235466 Contributors: Jan Hidders, Aldie, BL~enwiki, Cwitty, Leandrod, Karada, Kaihsu, Mxn, Uriber, Reddi, Craig Stuntz,
MikeSchinkel, Altenmann, Lowellian, Chris Roy, Davedx, Acrider, Oberiko, Mintleaf~enwiki, Mckaysalisbury, Joseph Dwayne, Neilc,
Beland, Robert Brockway, Maximaximax, Szajd, Troels Arvin, JFM, Grunt, Kate, R, KeyStroke, Rhobite, Smyth, Lulu of the LotusEaters, Elwikipedista~enwiki, Sasquatch, Minghong, Obradovic Goran, Tablizer, Stevegiacomelli, BodyTag, Flata, Crosbiesmith, Xphile2868,
Mindmatrix, Ohyoko, Cnb, Apokrif, Palica, Turnstep, JHMM13, Vegaswikian, Jameshsher, Gurch, BMF81, Nylex, Borgx, Daverocks,
Rsrikanth05, Cryptic, Shepazu, Larsinio, Mikeblas, SmackBot, Mangoe, Reedy, AutumnSnow, Brick Thrower, Anastrophe, Gilliam,
Ohnoitsjamie, Skizzik, Anwar saadat, LinguistAtLarge, George Rodney Maruri Game, Jdthood, Anvish, RedHillian, TenPoundHammer,
Kuru, Heimstern, 16@r, UnDeRTaKeR, Optakeover, Igoldste, Pi, Shabbirbhimani, FatalError, SqlPac, CmdrObot, Bressan, Tomcat66
g500, Klausness, Afabbro, PhiLiP, AntiVandalBot, Lfstevens, Dockurt2k, JamesBWatson, MartinBot, Xcasejet, J.delanoy, Bob hoskins,
Athaenara, Nicks100, Bonadea, Useight, Jnlin, DigitalEnthusiast, Ikhzter, Jtgerman, Wykypydya, Chaitrabhat7, Cactus26, Ballin Insane10, Quest for Truth, JCLately, Denisarona, Vanished user qkqknjitkcse45u3, ClueBot, TallMagic, NuclearWarfare, Sparkiegeek,
XLinkBot, Pichpich, Rror, Joseph chennai, Mr4top, Addbot, Setppo, Lightbot, II MusLiM HyBRiD II, Darx9url, AnomieBOT, Jim1138,
Brassrat70s, Kotika98, , Kernel.package, Amaury, January2009, Josemanimala, VTPG, Weyesr1, Mark Renier, I dream of
horses, DixonDBot, Ale And Quail, DB 103245, EoganOD, Payal2820, Igor Yalovecky, J36miles, Dewritech, Vanished user zq46pw21,
Sam Tomato, Kelti, Tolly4bolly, Donner60, 28bot, AMD, ClueBot NG, Mechanical digger, MelbourneStar, Alonemayank, MerlIwBot, Brilliantwiki, WIKIWIZWORKER, Frze, Vincent Liu, Joao.matos, Googol30, Pratyya Ghosh, Kingston Dominik, Bgibbs2, Frosty,
Paulcolmer, HEAdrian, Fatehyab ahmed, Faizan, Tentinator, JaconaFrere, Monkbot, Christopheryoder and Anonymous: 273
MySQL Source: http://en.wikipedia.org/wiki/MySQL?oldid=657299979 Contributors: AxelBoldt, Peter Winnberg, Derek Ross, Brion
VIBBER, Bryan Derksen, Stephen Gilbert, Taw, Manning Bartlett, VincentV, Andre Engels, LA2, 0, MarkAtwood, JeLuF, Aldie,
Fubar Obfusco, William Avery, Mjb, Formulax~enwiki, Stevertigo, Edward, Patrick, PhilipMW, Tim Starling, Pnm, Ixfd64, Shoaler,
Minesweeper, Greenman, Haakon, Ronz, Nanshu, Snoyes, Den fjttrade ankan~enwiki, LittleDan, Glenn, Bogdangiusca, Cherkash,
Mxn, Conti, Byte, Guaka, Timwi, Nohat, Magnus.de, Fuzheado, Doradus, Aaboelela, Hao2lian, Pedant17, Qu1j0t3, Furrykef, Saltine,
Mattworld, Ed g2s, Bevo, Spikey, Topbanana, Nickshanks, Fvw, Secretlondon, Jamesday, Garo, JorgeGG, Robbot, Midom, Chealer,
Astronautics~enwiki, Kristof vt, Vespristiano, RedWolf, Moondyne, Altenmann, Dittaeva, Nurg, Sverdrup, Texture, Joelwest, JeremyCole, Jon787, Wlievens, Rochkind, Wikibot, Wereon, Mushroom, Diberri, Mattaschen, Centrx, Cokoli, Dinomite, Oberiko, ShaunMacPherson, Nickdc, var Arnfjr Bjarmason, Quadra23, Jonabbey, Thetorpedodog, Chris Wood, XtinaS, Kainaw, AlistairMcMillan,
Brockert, Mckaysalisbury, Bobblewik, Neilc, Stevietheman, Johansosa, James Crippen, Gadum, Pgan002, Jasper Chua, Rajasekaran
Deepak, Beland, ClockworkLunch, ShakataGaNai, Rdsmith4, Oneiros, Burgundavia, Karl-Henner, Rdnk, Troels Arvin, Engleman,
GreenReaper, Zondor, Safety Cap, Grath, Imroy, Madduck, Twinxor, ElTyrant, Rich Farmbrough, Ebelular, Shudog, Satertek, Andrewferrier, Wk muriithi, Smyth, Thomas Willerich, ChadMiller, Gronky, Bg~enwiki, Bender235, Rubicon, Jaberwocky6669, Odalcet, Elwikipedista~enwiki, Nabla, Kwamikagami, Neilrieck, Bobo192, Janna Isabot, BW, Kfogel, TommyG, John Vandenberg, Timl,
Goa103~enwiki, Shlomital, Unknown W. Brackets, Tadman, Minghong, Jonsafari, NeilSantos, 4v4l0n42, HasharBot~enwiki, ClementSeveillac, NickCatal, Patsw, Gary, Vipuser, Fchoong, Mmmready, Yamla, Zippanova, Sligocki, Mac Davis, Ayeroxor, Rabarberski,
Gbeeker, Shareme~enwiki, Cburnett, Suruena, 2mcm, HarrisonFisk, Pauli133, Thebritt, Dan100, Forderud, April Arcus, NicM, Oleg
93
Alexandrov, Dejvid, Reinoutr, Mindmatrix, Ohyoko, Havermayer, Uncle G, Peter Hitchmough, ^demon, Cbdorsett, Bluemoose, Flamingspinach, GregorB, Frungi, Eyreland, Male1979, Vivek.pandey, Xiong, Turnstep, LimoWreck, Kesla, Graham87, Qwertyus, Deadcorpse, Kbdank71, GrundyCamellia, Sj, Rjwilmsi, Philipolson, Hulagutten, Raztus, Vegaswikian, Boatman, Miha Ulanov, Ghepeu,
Toby Douglass, Gavinatkinson, Zero0w, FlaBot, New Thought, AndriuZ, Intgr, ThePlaz, David H Braun (1964), JM.Beaubourg, Antilived, ChandraSukiman, DVdm, Bgwhite, Peterl, YurikBot, Borgx, Charles Gaudette, StuOfInterest, RussBot, Carl T, Groogle, Hydrargyrum, Barefootguru, Coyote376, CambridgeBayWeather, Stassats, ML, Irrevenant, Finbarr Saunders, GSK, Tkbwik, Semi, Cleared
as led, Gorie, Larsinio, Mikeblas, Jawnsy, Voidxor, MySchizoBuddy, Xompanthy, Action potential, Vlad, Jeremy Visser, Cosmotron,
BraneJ, Sebleblanc, CLW, Satanuke, Jkelly, BMT, Zzuuzz, Mhillyer, Closedmouth, KGasso, H@r@ld, Petri Krohn, CWenger, Realkyhick, JLaTondre, David Biddulph, Hossein.ir, ViperSnake151, Darkfate, RichF, Aforencich, Dfreeman@akebulan.com, Pillefj, Veinor,
A bit iy, SmackBot, Faisal.akeel, Moeron, Colinstu, Reedy, Chiclops~enwiki, Hydrogen Iodide, McGeddon, Miszobi, Brick Thrower,
Matthuxtable, Bobzchemist, Preeeemo, Gilliam, Brianski, Amux, Fokat, Smileyborg, Chris the speller, LinguistAtLarge, Carpetsmoker,
DStoykov, MK8, Thumperward, Morte, Oli Filth, Jeysaba, Jerome Charles Potts, Gutworth, YellowLeftHand, DHN-bot~enwiki, CDV,
Saiswa, Can't sleep, clown will eat me, Frap, Juancnuno, Nixeagle, Stevenjgarner, Addshore, UU, Aaron Ray, Opticyclic, Cybercobra, Downtown dan seattle, Lrusso99, Mr Minchin, Youcantryreachingme, Pgillman, Joelrwilliams, Acdx, Where, Daniel.Cardenas,
Morgo, Scarfy, JzG, Returnkey, Kuru, Rafert, Ksn, IronGargoyle, Camilo Sanchez, 16@r, JHunterJ, Beetstra, Sandb, Vanished user
ih3rjk324jdei2, MTSbot~enwiki, Noleander, Dl2000, Super3boy~enwiki, Hu12, Norm mit, DouglasCalvert, Iridescent, Theone00, Xumxum,
Sander Sde, Montybarker, Beno1000, Kalkadoon, Az1568, Ahsanmani, Linkspamremover, Oshadmon, Altonbr, Awef, SkyWalker,
HDCase, Paulvallee, Raysonho, Dgw, NisseSthlm, Vbgamer45, Dmillman, Isotopp~enwiki, SuperMidget, Nmacu, Cydebot, Karimarie,
Jmmorris, Bryan, Djg2006, ViktorHaag, Gogo Dodo, Travelbird, Mjhoogev, Bazzargh, Rgrof, Nattee, Medovina, Tkynerd, Blocked!,
Asenine, DigitalSorceress, JayW, Briantw, Neustradamus, Marqmike2, Dustinhess, Thijs!bot, IvanStepaniuk, Brainsnorkel, Bruggeri,
Davidelit, N5iln, Dalahst, Zaiken, Davidhorman, Wolfc01, Hcobb, Pcbene, CharlotteWebb, Sherbrooke, I already forgot, Nemolan,
Jayron32, LenzGr, Jj137, JAnDbot, Deective, NapoliRoma, Fhussain, Jonkaz, BCube, MarkPilgrim, SteveSims, Mchl, Magioladitis,
Pedro, PeterMoulding.com, VoABot II, Britton ohl, Macutty, Coredumperror, Tedickey, Sarcasting the hallucination, Mountaingoat, Cander0000, Wdake, Calltech, Gwern, Russelljtdyer, MartinBot, Ariel., Radnam, Ninestrokes, Lmxspice, Zeus, Keith D, Silversh70, R'n'B,
Zacchiro, Whale plane, Mausy5043, Tgeairn, Erp Erpington, Darkride, Adamryanlee, Arite, Mhopeng, Freyk, McSly, Copito42, OAC,
SteveChervitzTrutane, Bofoc Tagar, Omegamormegil, Designdroide, Kvdveer, Neocodesoftware, StefanHinz, Wikieditor06, VolkovBot,
Shortride, Allencheung, Blindmatrix, Grymwulf, LokiClock, Aaron44126, Philip Trueman, TXiKiBoT, Ldonna, GroveGuy, Technopat,
Ann Stouter, Noerrorsfound, Devileo~enwiki, DaBest1, Ydriuf, DocteurCosmos, Cheyer, Seb26, JhsBot, Bobsawyer20, Db the dba,
Maxim, Wykypydya, Hannes Rst, Rgiltrap, Ultra 11, Billinghurst, Xieqi200, Prius 2, CoolKid1993, BrianAker, HiDrNick, Julekmen,
S.rvarr.S, OsamaK, S-n-ushakov, Coee, TJRC, Andrarias, Artagnon, ToePeu.bot, Kgoarany, Purbo T, Bentogoa, Exert, Suwatest,
Editore99, Jojalozzo, Reinderien, Guycalledryan, Thommym, Aruton, Faganp, Chris Mitchell, Squash Racket, Pmalkowski, Martarius,
ClueBot, SummerWithMorons, Kl4m, Beetstra public, CaptTofu, Rodhullandemu, SloppyG, Gtg264f, Emwave, Sisutclie, Sebquantic,
Kl4m-AWB, Crazyman6721, SuperHamster, CounterVandalismBot, Attlas, Callmeonnet, Rockfang, Pointillist, LeslieBD, VOGELLA,
M4gnum0n, Spock of Vulcan, RedYeti, Norandav, TobiasPersson, GFHandel, Sajmure, Dank, Manorhill, SoxBot III, SF007, DumZiBoT, Bravissimo594, JohnMGarrison, TimTay, XLinkBot, Bkarwin, Simplytaty, Alexius08, Subversive.sound, Dfoxvog, Wolkykim,
Dsimic, HexaChord, Bookbrad, Addbot, Ramu50, Axecution, Craigm71, Oegly~enwiki, Grantmx, Cst17, MrOllie, Download, Kalakatha,
Jasper Deng, Staticmain, Danyaddita, Nicoglop, Thowland, Jarble, Hoover789, Karan.102, BaldPark, Yobot, Bunnyhop11, Chiragpinjar,
Naudefjbot~enwiki, N3hima, Wonder, KillerLegend, AnomieBOT, Mpopp75, 1exec1, Coolboy1234, Jim1138, Piano non troppo, Utility Knife, Marianolu, Giants27, Materialscientist, Aneah, ArthurBot, Parthian Scribe, Mike2ykme, Capricorn42, Jewang, Axan.bulut,
Locos epraix, J JMesserly, Someslowly, Rbuj, 16x9, Designer1993, RibotBOT, Applejack1234, Msjaiswal, E0steven, Bwisey, Ericnadler, Eomund, FrescoBot, Kwiki, Slezak, UnixMan45, Atlantia, Mwindrim, Winterst, Simple Bob, Pegasos2, Lichtgestalt~enwiki,
HRoestBot, Tra, Skyerise, RedBot, Amgc56, Troy.frericks, Lyf2002, Jandalhandler, Tcnuk, Danielluyo, Sandeep74, Weylinp, Orenburg1, FoxBot, Josephers, TobeBot, Chris Caven, Orzelf, Thesmug, Lotje, Blue Em, Sibyllaviki, Mz2000, MoreNet, Diannaa, Kipitis, Colindolly, Aviv007, RjwilmsiBot, Dreemteem, James Plummer, Grog.Wilson, Skamecrazy123, WikitanvirBot, Dontdeletecontent, GoingBatty, Gimmetoo, Tisane, Xmm0, Wikipelli, Zafar142003, Thecheesykid, Sobchakw, AvicBot, Kkm010, Ullika~enwiki,
Josve05a, ILYA INDIGO, Kiwi128, Holsen32, Sonez1113, Blacktrance, Dennis714, Gregoroq, Gilad.maayan, Qpniteyqp, Palosirkka,
Erget2005, Julyscripter, Damirgrati, Ochado, Jakub85, Tripathisoft, Senator2029, Dinnerface, ClueBot NG, AlbertBickford, Morgankevinj huggle, Dexp, Sdht, Strcat, HectorAE, Buryshane, Pammer, Patrias, Theopolisme, Helpful Pixie Bot, Mr. Credible, Electriccatsh2, DBigXray, BG19bot, Tigerbomb8, Juiceentertainment, Compfreak7, Matthew-New, Teds247, Cliashford, Yourbane, ZigArt, Red banana3, Tesssla, 13375up4h4x0r, Thesquaregroot, Minsbot, Anbu121, Maheshpatil.blr, FootholdTechnology, Marina Nastenko, Tonusamuel, Khazar2, JYBot, Toeepot, Codename Lisa, Mogism, Winashwin24, Ellenallhatatlan, Thesocialdude, Dmitry Cherniachenko, Akopts, Palmbeachguy, Feder raz, Altered Walter, Serj.by, Captain Conundrum, X2qnet, Comp.arch, UKAmerican, ArmitageAmy, Jepa, ZekeTheThird, TheWanderer1357, Dvorapa, NordLeuchte, Amsfaithsoftware, ScotXW, Erilong, Davidcoppereld123,
Brokennib, QueenFan, Unician, BanzaiTokyo, GOKU6677, Macnaughtonboy, JamesS858 and Anonymous: 920
SQLite Source: http://en.wikipedia.org/wiki/SQLite?oldid=660733566 Contributors: Damian Yerrick, AxelBoldt, Bryan Derksen, Fnielsen,
Fubar Obfusco, Nate Silva, Boleslav Bobcik, Pnm, Wwwwolf, Graue, Haakon, Glenn, Nikai, Wael Ellithy, Tobias Conradi, Timwi,
Aquatopia~enwiki, Sanxiyn, Qu1j0t3, Furrykef, Theta682, Topbanana, Hankwang, Chealer, Peak, Rursus, Rrjanbiah, Delpino, Hif,
Ruakh, Mattaschen, David Gerard, Wjgilmore, Risk one, Sdsher, AlistairMcMillan, Eequor, Brockert, Dave2, Magicmike, Neilc, Tgwena, Dnas, Two Bananas, Abdull, Moxfyre, RandalSchwartz, Kate, SimonEast, R, RossPatterson, Rich Farmbrough, Pmsyyz, Drano,
Mecanismo, Smyth, Scullder, TOR, *drew, Mattisgoo, Kwamikagami, Egrabczewski, Slicky, Giraedata, DG~enwiki, Sleske, Minghong,
Tablizer, Ronark, Stephan Leeds, Gpvos, KTC, Mindmatrix, ChrisNoe, Shello, DanBishop, Bkkbrad, Scjessey, Apokrif, Choas~enwiki,
GregorB, Waldir, Cbyneorne, Havarhen, Turnstep, Rgbea, Yoghurt, Magister Mathematicae, Qwertyus, RadioActive~enwiki, Philipolson,
Gudeldar, Gilesmorant, Beeveer, Fred Bradstadt, Zero0w, FlaBot, Jstaniek, Lmatt, Alvin-cs, Visor, Bgwhite, YurikBot, Argav, Barefootguru, Kimchi.sg, Toehead2001, Mipadi, Mschumacher69, Irishguy, Sekelsenmat, Bota47, Paul Magnussen, H@r@ld, Mainstreetmark, CWenger, JLaTondre, Wikimercenary, Luk, Lethalmonk, SmackBot, Reedy, Optikos, DStoykov, Thumperward, Mdwh, DHNbot~enwiki, Ned Scott, TripleF, Huji, PotatoEater, Compctech, Frap, Arulprasad, JonathanWakely, Mwtoews, Where, Ohconfucius,
ThurnerRupert, Korval, Javier Odom, Rorx, Soumyasch, Heelmijnlevenlang, Jrouquie, A. Parrot, Makyen, Mchirico, Hu12, Theone00,
Saltlakejohn, FatalError, J Milburn, SqlPac, Paolosupernova, AndrewHowse, Cydebot, Roberta F., Mrinal.kant~enwiki, Ebraminio, Jayapalchandran, Thijs!bot, DivideByZero14, Qwyrxian, DmitTrix, Srperez, SpacePacket, Jaxelrod, Gioto, MBParker, Isilanes, Temblast,
Dougher, Lfstevens, VictorAnyakin, Drhipp, Deective, Od1n, Inverse.chi, Greensburger, Alex LE, Zhongchen, Who.am.i, Aulis2003,
Otterfan, Beethoven05, Sappy, Cander0000, Gwern, Arcturis, Eugenwpg, RobertCailliau, AVRS, MartinBot, Devin Asay, Yaron K., Wikitiki89, Sarathbs, Arite, Grshiplett, Cooldude7273, Daxx wp, Jaguar83, Kriplozoik~enwiki, Volkris, SexyBern, MBlakley, TXiKiBoT,
FFMG, Wykypydya, Pascal sa, DavidHalko, Darkzen.bps, Hareesh.t, Cmbeelby, Svick, Scartboy, Nnemo, Kl4m-AWB, Stachelsch,
94
Bigown, Niceguyedc, Fenke, Melizg, Bbb2007, Djbriddock, Streambag, Steph1978~enwiki, Amanda hoic, Johnuniq, SF007, DumZiBoT, XLinkBot, Zbig Lebowsky, C. A. Russell, Jmkim dot com, Addbot, Nuno Brito, AkhtaBot, 0x54097DAA, MrOllie, LaaknorBot,
Ginosbot, Staticmain, Bro4, Jorel314, Yobot, Legobot II, Specious, Wonder, AnomieBOT, Gtz, Therealgeeves, CeciliaPang, Materialscientist, Anybody, Neurolysis, ArthurBot, Xtremejames183, LilHelpa, Xqbot, PabloCastellano, Baest, LordArtemis, GrouchoBot, RibotBOT, U1024, Canadianacademic, Molyneux.peter, FrescoBot, Gerardo cabero~enwiki, Wikiwikiwu, Glider87, Sae1962, Gabrielepx,
Kwiki, Winterst, Simple Bob, Alex degarate, Tim baroon, Jeanfarias, Hoo man, Jandalhandler, Salvidrim!, Latios, Zo8shong, Chris
Caven, Ungzd, Dchestnykh, Lotje, Rapha222, Ybungalobill, Rro4785, Leonelhs, Saint1997, Kirbylover4000, TankMiche, Zaxn1234, Najeeb1010, MVelliste, Philippe.petrinko, Madooo12, Palosirkka, Noncoercive, Quadunit404, Vlops, Dexp, Many delicious meats, Dsimpson dcsi, Marco1713, Danim, Helpful Pixie Bot, Gurghet, Mark Arsten, Patuck, ZeaForUs, OzOle, Xephyrous, Marco1317, Vdvluc,
JamesHaigh, Samyulg, Captain Conundrum, Syntaxerrorz, Marvinella, ScotXW, Claw of Slime, Permafrost46, Donosauro, EHerbst,
Fabricio Correa~enwiki and Anonymous: 365
PostgreSQL Source: http://en.wikipedia.org/wiki/PostgreSQL?oldid=661020005 Contributors: 0, Carey Evans, Wesley, The Anome,
Christopher Mahan, Aldie, Fubar Obfusco, Nate Silva, M~enwiki, Roadrunner, Maury Markowitz, TomCerul, Heron, Cwitty, Frecklefoot, Edward, Fuzzie, Gregben~enwiki, Nixdorf, Liftarn, Wwwwolf, (, CesarB, Ahoerstemeier, KAMiKAZOW, Stevenj, Nanshu,
Angela, Glenn, Sugarsh, Nikai, Ehn, Jay, Tejano, Doradus, Pedant17, Tpbradbury, Polyglot, Cleduc, Jnc, Wernher, Bevo, Joy, Fvw,
Jamesday, Robbot, Chealer, Lowellian, Ianb, Stewartadcock, LX, Lasix, Weialawaga~enwiki, Oberiko, Nickdc, Levin, Fleminra, Ceejayoz, Prell, Lvr, Neilc, Chowbok, Utcursch, Pgan002, Alexf, Cbraga, Billposer, Gene s, Burgundavia, Karl-Henner, Cynical, Troels
Arvin, GreenReaper, Deleteme42, RandalSchwartz, Imroy, Rich Farmbrough, Sesse, Oska, Ardonik, Lulu of the Lotus-Eaters, Slipstream, Gronky, Bender235, PaulMEdwards, Kwamikagami, Kanzure, TommyG, Mereman, Giraedata, Timsheridan, Minghong, Jonsafari, QuantumEleven, Stephen Bain, HasharBot~enwiki, Poli, Gary, Fchoong, Jeltz, Andrewpmk, Ringerc~enwiki, Pauli133, SteinbDJ,
Gmaxwell, Mindmatrix, MianZKhurrum, Dandv, Deeahbz, Jacobolus, Distalzou, Cosmicsoftceo, Bowman, GregorB, AnmaFinotera,
Wisq, Turnstep, Marudubshinki, Graham87, EdDavies, Gilesmorant, KublaChaos, Silvestre Zabala, Zero0w, Mikecron, FlaBot, SchuminWeb, Gurch, Ghen, Intgr, Chobot, Reetep, Peterl, YurikBot, Manop, Gaius Cornelius, Bovineone, Varnav, Geertivp, Mipadi, Tkbwik,
Randolf Richardson, Larsinio, E rulez, Snarius, BraneJ, Gsherry, Analoguedragon, Johndburger, Closedmouth, Johnsu01, MaNeMeBasat,
BanzaiSi, JLaTondre, Benhoyt, Mlibby, A bit iy, SmackBot, Nicolas Barbier, Direvus, Slamb, Faisal.akeel, Reedy, Georgeryp, Dkusnetzky, Anastrophe, Richmeister, Chris the speller, Bluebot, Wolph~enwiki, Advorak, DStoykov, Crashmatrix, Ben.c.roberts, Thumperward, Droll, Jerome Charles Potts, DHN-bot~enwiki, Decibel, Frap, Lantrix, Matchups, MattOates, Stevemidgley, Cybercobra, Emmanuel JARRI, Mwtoews, Where, Towsonu2003~enwiki, SashatoBot, Vincenzo.romano, Brian Gunderson, Av, Misery~enwiki, Abolen,
AdultSwim, MTSbot~enwiki, Peyre, DagErlingSmrgrav, Angryxpeh, Dark ixion, Hu12, FatalError, Raysonho, WeggeBot, Musashi1600,
Andrew.george.hammond, Revolus, Cydebot, Krauss, Ttiotsw, Rchoate, Synergy, Ebraminio, Thijs!bot, MinorEdits, Andyjsmith, Dalahst,
Jcarle, Xzilla, AntiVandalBot, Bearheart, Marokwitz, LenzGr, Room813, Deective, Cjkporter, Martinkunev, Dskoll, GregorySmith,
Apostrophyx, NoDepositNoReturn, JamesBWatson, Bernd vdB~enwiki, Gabriel Kielland, EagleFan, Cander0000, Nevit, Gwern, Scottmacpherson, Ronbtni, Lmxspice, Zeus, R'n'B, Whale plane, Sven Klemm~enwiki, Keesiewonder, Usp, Eleven81, VolkovBot, Allencheung,
Blindmatrix, Bramschoenmakers, Luke Lonergan, Kmacd, HLHJ, RonaldDuncan, Dfetter, Eljope, Jibun, PieterDeBruijn, Agentq314,
Anas2048, Kindofoctarine, Majeru, ChrisMiddleton, Bfcase, X-Fi6, Jojalozzo, Gorgot, Ctkeene, Ctxppc, Jonlandrum, Trevorbrooks,
Martarius, ClueBot, Kl4m, Tintinobelisk, The Thing That Should Not Be, Kl4m-AWB, Nikolas Stephan, Niceguyedc, M4gnum0n,
WikiNickEN, Freerangelibrarian, Pmronchi, Eeekster, TobiasPersson, Chrisarnesen, SF007, DumZiBoT, TimTay, XLinkBot, Jabberwoch, Andy318, Addbot, Mortense, Nate Wessel, Ginzel~enwiki, Fale, Luckas-bot, Yobot, Specious, AnomieBOT, Coolboy1234, Piano
non troppo, Kukushk, ArthurBot, Wikante, Gilo1969, Zenaan, FChurca, Mark Renier, W Nowicki, Alex.ryazantsev, Kwiki, Louperibot, William.temperley, Simple Bob, B3t, Tim baroon, Skyerise, Jandalhandler, Full-date unlinking bot, Bmomjian, Jons2006, Filiprem,
Ravenmewtwo, RjwilmsiBot, Streapadair, EmausBot, Grldedwrdbutler, Marzalpac, Klenot, Dewritech, Peaceray, Solarra, Your Lord
and Master, AvicBot, H3llBot, Demonkoryu, Gz33, . , Sbmeirow, Palosirkka, Eggyknap, Tijfo098, ChuispastonBot,
Rugh, DisneyG, ClueBot NG, Birkbot, Mangal ratna, Redneb33, Web20boom, Kasirbot, Patrias, Denys.Kravchenko, Kwetal1, Kweetal
nl, Winston Chuen-Shih Yang, Codename Lisa, Laurenz albe, Palmbeachguy, Digoal, Praemonitus, RaphaelQS, Comp.arch, ScotXW,
Lavagnino, Craigkerstiens, Erilong, Unician, Simonriggs, X3mole, Helldalgo and Anonymous: 393
SQL Source: http://en.wikipedia.org/wiki/SQL?oldid=660931872 Contributors: Damian Yerrick, Magnus Manske, Jimbo Wales, Eloquence, Wesley, Bryan Derksen, Zundark, The Anome, Jzcool, Sjc, Jan Hidders, Ed Poor, Andre Engels, Greg Lindahl, Hari, PierreAbbat,
William Avery, Roadrunner, Ben-Zin~enwiki, Merphant, Caltrop, Heron, Arvi~enwiki, BL~enwiki, Hirzel, Branko, Leandrod, Frecklefoot, Edward, JohnOwens, Michael Hardy, Modster, DopeshJustin, Lousyd, Rp, Kku, Delirium, Ahoerstemeier, Docu, Angela, Julesd,
Randomned, Jonik, Mxn, Scanos, Nikola Smolenski, Emperorbma, Charles Matthews, Timwi, Dcoetzee, Nohat, Dmsar, Dysprosia,
Jay, Traal, ThomasStrohmann~enwiki, Qu1j0t3, Jerey Smith, Furrykef, Mdchachi, Wernher, Bevo, Nricardo, Shizhao, Toreau, Jamesday, Francs2000, Jeq, Denelson83, Robbot, Hankwang, Chealer, Craig Stuntz, Kizor, Jacek79, RedWolf, Goethean, Dittaeva, Nurg,
Andr3w, Lowellian, Ashley Y, Rfc1394, Rursus, Wikibot, Ruakh, Tobias Bergemann, Weialawaga~enwiki, 0x0077BE, BenFrantzDale,
var Arnfjr Bjarmason, Zigger, Peruvianllama, Alterego, Mark T, Thetorpedodog, Alon~enwiki, Duncharris, Jorge Stol, AlistairMcMillan, Joelm, Neilc, Stevietheman, Decoy, Chowbok, Gadum, Slavering.dog, Mendel, SarekOfVulcan, Gzuckier, Beland, Wmaheriv,
Rdsmith4, Mzajac, Maximaximax, Bumm13, Karl-Henner, Troels Arvin, Yakovsh, Aidan W, Olivier Debre, AnandKumria, Adashiel,
Asqueella, Canterbury Tail, RevRagnarok, D6, Ta bu shi da yu, R, CALR, Coeehood, Aou, Alexrexpvt, KeyStroke, Rhobite, Schuetzm,
Jpk, Paul.mcjones, Traxer~enwiki, MeltBanana, Goplat, Plugwash, Elwikipedista~enwiki, Danakil, DanP, Kop, Lankiveil, Kwamikagami,
Tgeller, Egrabczewski, Ronstone, Blonkm, John Vandenberg, Cwolfsheep, Safay, LuoShengli, Unknown W. Brackets, Franl, Minghong,
Sam Korn, Mdd, Andrisi, Iolar~enwiki, HasharBot~enwiki, Jumbuck, Steve Alvesteer, Goki, Orzetto, Alansohn, Liao, Tablizer, Nsd,
Jezmck, Andrewpmk, M7, Pouya, Osmodiar, Velella, Tiha, RainbowOfLight, VoluntarySlave, Alai, Kitch, S gueiredo, Einst3, Mahanga, Crosbiesmith, Siafu, Ondrejk, Simetrical, Mindmatrix, Lost.goblin, TigerShark, Camw, Arcann, Mathmo, Uncle G, DanBishop,
Admrboltz, Paul Mackay~enwiki, Ruud Koot, KymFarnik, Burgher, Bkwillwm, Wikiklrsc, KingsleyIdehen, MacTed, GregorB, Plrk,
Prashanthns, Wisq, Vivek.pandey, Turnstep, Pmcjones, Mandarax, Wulla, Graham87, Spezied, Quantum00, Cuchullain, BD2412, DePiep, Dpr, Sjakkalle, Rjwilmsi, Tizio, Koavf, XP1, Trlovejoy, Salix alba, Ajcumming, Ltruett, Cww, Chtirrell, Dianelos, Fred Bradstadt,
Platypus222, Miskin, Sgkay, Wragge, FlaBot, Bobstay, RobertG, Ground Zero, Ysangkok, GnuDoyng, ApprenticeFan, Sstrader, Intgr,
Alvin-cs, MoRsE, Chobot, Visor, DVdm, Bobdc, Peterl, Yzchang, Elfguy, YurikBot, MathiasRav, Todd Vierling, Hairy Dude, RussBot,
Severa, Piet Delport, Hydrargyrum, Powerlord, Stephenb, Barefootguru, CambridgeBayWeather, Bovineone, RadioKirk, NawlinWiki,
DragonHawk, Razorx, Gosub, Grafen, Reikon, Neum, Dugosz, Aaron Brenneman, Hakkinen, Xdenizen, Larsinio, Mikeblas, Ezeu,
Scs, Iancarter, Dlyons493, Elkman, Alpha 4615, Saric, Vonfragino, Lt-wiki-bot, Chase me ladies, I'm the Cavalry, Closedmouth,
Jwissick, Cedar101, CyberShadow, GraemeL, Anclation~enwiki, JLaTondre, Solarusdude, Kubra, Allens, Ben D., Mhkay, Rwwww,
GrinBot~enwiki, Dan Atkinson, Jonearles, XSTRIKEx6864, IanGB, AndrewWTaylor, Trevorloin, DrJolo, Jsnx, SmackBot, Tcutcher,
Haza-w, ElectricRay, Incnis Mrsi, Reedy, Frando~enwiki, Basil.bourque, Od Mishehu, Power piglet, Dennis forbes, Brick Thrower,
95
Stie, Inonit, Jpvinall, ActiveSelective, Commander Keane bot, Unforgettableid, Gilliam, NickGarvey, KD5TVI, Michele.alessandrini,
Schaef, Theone256, Davep.org, Thumperward, Oli Filth, Jerome Charles Potts, Dlohcierekims sock, Octahedron80, Nbarth, DHNbot~enwiki, Thekaleb, Hongooi, SuezanneC Baskerville, Ville Oikarinen, Mahamoty, Jimhark, Countersubject, NYKevin, Can't sleep,
clown will eat me, Rdeleonp, Frap, Jsmethers, Racklever, Kaimiddleton, Mackseem~enwiki, Opticyclic, Cybercobra, Jdlambert, Xibe,
Dreadstar, A.R., Markhobley, Jon Awbrey, FelisLeo, Mersperto, Lambiam, Gennaro Prota, Plcsys, Rklawton, Dbtfz, Kuru, Wingnut909,
Vincenzo.romano, Asix, Av, Stratadrake, Loadmaster, Tasc, Beetstra, Ehheh, Optakeover, Johnmc, Aresgunther, Ric, Hu12, Norm
mit, BranStark, Dreftymac, Sander Sde, GregCovey, Paul Foxworthy, Beno1000, Adrian.walker, Gil Gamesh, Az1568, Cherry Cotton, Booles, Tawkerbot2, The Letter J, Ioannes Pragensis, FatalError, SkyWalker, Comps, Paulmlieberman, SqlPac, CRGreathouse,
Ivan Pozdeev, TunaSushi, Pukkie, JohnCD, Baiji, Harperska, GHe, TheExtruder, Avillia, MaxEnt, Gregbard, JamesNK, Badseed,
Mblumber, Drgrussell, Poloolop, Dancter, Tawkerbot4, Christian75, Dsan, FrancoGG, Epbr123, Skreyola, Ucanlookitup, Davidhorman, Klausness, Escarbot, Mentisto, KrakatoaKatie, AntiVandalBot, Gioto, Luna Santin, Guy Macon, Seaphoto, EarthPerson, Quintote, DennisWithem, Lfstevens, Hardeeps, Bodmerb, Deective, BlindEagle, SiobhanHansa, Acroterion, Kreca, Thirtyfootscrew, Magioladitis, Jaysweet, Bongwarrior, VoABot II, Sinisterstuf, Simuloid, Master2841, Twsx, Cic, Aka042, Bernd vdB~enwiki, Ahecht,
Capnchicken, Gabrielsroka, 28421u2232nfenfcenc, Wwmbes, Allstarecho, Cpl Syx, Just James, Matt.smart, Falcor84, Ftiercel, Gwern, Spectrum266, MartinBot, GrandPoohBah, Grauenwolf, R'n'B, RockMFR, Qweruiop321, J.delanoy, Mojodaddy, Huzarus~enwiki,
Herbythyme, Smartweb, Macaldo, Joeyjojo Junior, Cpiral, Bill Human, Alalia 17, Jackacon, Cometstyles, DH85868993, Channard,
Kvdveer, Ajfweb, MartinRinehart, Bonadea, Sbvb, DigitalEnthusiast, Love1710, Delikedi, 28bytes, Jimmytharpe, VolkovBot, Harlock
jds, Gsapient, Je G., Pparazorback, WOSlinker, Philip Trueman, TXiKiBoT, AllanManangan, Vitund, Crowne, Anonymous Dissident,
Combatentropy, Somme111, Subux, Thunderbritches, Swanyboy2, JhsBot, Kovianyo, MichaelSpeer, PDFbot, David Condrey, Wykypydya, Zhenqinli, Butterscotch, Andy Dingley, SallyBoseman, Synthebot, Enviroboy, AgentCDE, Ulf Abrahamsson~enwiki, AlleborgoBot,
Anoko moonlight, S.rvarr.S, Jeenware, Entoaggie09, Metroking, SieBot, Gopher292, VVVBot, Winchelsea, Caltas, X-Fi6, Starius,
Flyer22, Ehajiyev, MinorContributor, JCLately, SouthLake, Harry~enwiki, RW Marloe, Viridity~enwiki, Legacypath, Svick, AlanUS,
Peter.vanroose, Apienczy, Aarthib123, Ravi555, Escape Orbit, Coremayo, Startswithj, Vanished user qkqknjitkcse45u3, Mikevoxcap,
De728631, ClueBot, SummerWithMorons, The Thing That Should Not Be, Unbuttered Parsnip, Mild Bill Hiccup, DragonBot, Eboyjr,
CF84, Jusdafax, Three-quarter-ten, Ferdna, Decon1985, Vivio Testarossa, Behringerdj, Aseld, Fleurydj, Joieko, Kruusamgi, B15nes7,
SF007, TimTay, XLinkBot, Fastily, Libcub, Mitch Ames, WikHead, Smu95rp, Alexius08, Osarius, Addbot, Ghettoblaster, DOI bot, Tcncv, MrOllie, Download, Favonian, Tomtheeditor, Lucian Sunday, LinkFA-Bot, Jasper Deng, West.andrew.g, Justinkaz, Evildeathmath,
Lightbot, Sergioledesma, Zorrobot, CountryBot, Luckas-bot, Yobot, Saramar10, JackPotte, Bunnyhop11, Ptbotgourou, Washburnmav,
Infojunkie23, KamikazeBot, Wadamja, AnomieBOT, Sql pol, Coolboy1234, Galoubet, Royote, Piano non troppo, Cuckoosnest, Jzel6201,
Materialscientist, Brassrat70s, Lavarock86, Citation bot, La comadreja, Littlebluenick, GB fan, ArthurBot, Quebec99, Xqbot, Meh222,
Greco-German, Yeneesha, Doctorx0079, Nasa-verve, GrouchoBot, Jonas AGX, Frosted14, SciberDoc, Amaury, Xjhx001, Hymek,
Loveenatayal, Joaquin008, David Nemati, PM800, Cekli829, FrescoBot, Logiphile, Netfriend, Wiretse, Mark Renier, Jc3s5h, Wei.cs,
Sippsin, Finalius, Gawat123, Citation bot 1, NiceGuyEduardo, Jschnur, Philippe Perrault, Tjmoel, Alec.korba, RBarryYoung, Starbeard,
Weylinp, TobeBot, Trappist the monk, Lotje, Mt.toth, Vrenator, JnRouvignac, Crysb, DavidWikiuser, Yeng-Wang-Yeh, Oljtn, Bricaniwi,
Difu Wu, Ribaw1, Salvio giuliano, Smeyerinnewton, B6nb3k, Tagtool, EmausBot, John of Reading, WikitanvirBot, Carbo1200, K6ka,
Kelti, Savh, Kpelt, ZroBot, Ida Shaw, Njbooher, F, Shuipzv3, SporkBot, Jay-Sebastos, Kesava84, Donner60, Pun, Bomazi, Tijfo098,
Leave Mr Mitchell alone!, ChuispastonBot, Moontube, Wakebrdkid, Rdmil, ClueBot NG, Ethg242, Peter James, Lukaseder, Bstan72,
O.Koslowski, Edwinludo, Masssly, Widr, Antiqueight, Danim, Helpful Pixie Bot, Hippo75, DefaultLocale, BG19bot, Purple Data, Smithhogg, Grigrim, Mark Arsten, Compfreak7, Amolbot, Syzy, Pogonomyrmex, Gefstar1, Boshomi, Chmarkine, Abuyakl, Dhies88, Davidfreesefan23, Sbose7890, ItsMeowAnywhere, Naveen0665, BattyBot, MatthewIreland, ChrisGualtieri, Thom2729, APerson, Fabius.83,
Mogism, Mradkins96, Detjo, Sailee5, Brsaweda, Frosty, Feder raz, Faizan, Epicgenius, Mark10011, DangerouslyPersuasiveWriter, I
am One of Many, Deepaksogani, Suranjan91, Banannamal, Jacobnibu, Njol, Ilaydakinalan, Mgt88drcr, Monkbot, Poepkop, Alrich44,
NickoCA, Prog algo, Lolsall, Mdhaseenkhan733 and Anonymous: 1094
NoSQL Source: http://en.wikipedia.org/wiki/NoSQL?oldid=661050885 Contributors: AxelBoldt, Maury Markowitz, Jose Icaza, Pnm,
Kku, Komap, Phoe6, Ronz, Ntoll, Ehn, Timwi, Furrykef, Bearcat, Peak, Dilbert, (:Julien:), Tagishsimon, Gadum, Coldacid, Alexf, Beland, Euphoria, Clemwang, R, MMSequeira, Smyth, Leigh Honeywell, Russss, Stephen Bain, Thringer, Walter Grlitz, Markito~enwiki,
Bhaskar, PatrickFisher, YPavan, Eno~enwiki, Crosbiesmith, Marasmusine, Woohookitty, Linas, Tshanky, Barrylb, Dm~enwiki, Tabletop,
MacTed, Nileshbansal, BD2412, Qwertyus, Koavf, Ceefour, Strait, Amire80, Seraphimblade, ErikHaugen, Professionalsql, Vegaswikian,
Jubalkessler, ElKevbo, Dmccreary, AlisonW, RobertG, Sstrader, Intgr, Tedder, Benbovee, Wavelength, Hairy Dude, Bovineone, Morphh,
SamJohnston, Mbonaci, Rjlabs, Leotohill, Poohneat, GraemeL, Volt42, HereToHelp, Jonasfagundes, JLaTondre, Shepard, Matt Heard,
Benhoyt, A bit iy, SmackBot, Fulldecent, Anastrophe, Mauls, Drttm, Gorman, Somewherepurple, KiloByte, Thumperward, Jstplace,
Jerome Charles Potts, , Frap, DavidSol, Cybercobra, Plustgarten, Looris, ThomasMueller, Trbdavies, NickPenguin,
Eedeebee, ThurnerRupert, Petr Kopa, Zaxius, Lguzenda, Heelmijnlevenlang, Omidnoorani, Mauro Bieg, Benatkin, Mjresin, Hu12,
Charbelgereige, Dancrumb, Gpierre, Arto B, Raysonho, Sanspeur, Ostrolphant, ProfessorBaltasar, Netmesh, OmerMor, Neustradamus,
ColdShine, Mydoghasworms, Viper007Bond, Headbomb, CharlesHoman, Peter Gulutzan, Davidhorman, Philu, Bramante~enwiki,
Nick Number, Sorenriise, Polymorph self, Widefox, QuiteUnusual, Lfstevens, Gstein, Syaskin, Dericolho, Joolean, Orenfalkowitz,
Kgeischmann, Philg88, Mitpradeep, Adtadt, GimliDotNet, Lmxspice, Stimpy77, Mikek999, DatabACE, JohnPritchard, Ansh.prat, McSly, Atropos235, Lamp90, Jottinger, Anoop K Nayak, Bbulkow, Tonyrogerson, Robert1947, Billinghurst, Quiark, Kbrose, ManikSurtani,
TJRC, Dawn Bard, Whimsley, DavidBourguignon, Flyer22, Ctxppc, Mesut.ayata, Legacypath, AndrewBass, Edlich, Drq123, CaptTofu,
Stevedekorte, Rossturk, Niceguyedc, Cnorvell, Pointillist, Excirial, Zapher67, PixelBot, Dredwol, Robhughadams, Arjayay, Razorame, StanContributor, Irmatov, Shijucv, The-verver, Tgrall, Miami33139, XLinkBot, Phoenix720, Duncan, Fiskbil, Whooym, Techsaint, Addbot, Fmorstatter, Mortense, Mabdul, MrOllie, LaaknorBot, Chrismcnab, Alexrakia, Getmoreatp, Luckas-bot, Yobot, Amirobot,
Pcap, Ebalter, Ma7dy, AnomieBOT, Angry bee, Fraktalek, White gecko, Materialscientist, Xtremejames183, Cyril Wack, Jabawack81,
Gkorland, Tomdo08, ChristianGruen, FontOfSomeKnowledge, Rtweed1955, Omnipaedista, Sduplooy, Shadowjams, Ciges, Cekli829,
Sdrkyj, FrescoBot, Nawroth, Ashtango, Sae1962, Thegreeneman5, David Paniz, Ertugka, Chenopodiaceous, Winterst, I dream of horses,
Leegee23, Hoo man, Natishalom, Michael Minh, Seancribbs, Jandalhandler, Craigbeveridge, Cnwilliams, Colemala, Argv0, Justinsheehy, AdityaKishore, Javalangstring, Voodootikigod, JnRouvignac, Svesterli, Violaaa, Hoelzro, Magnuschr, Extrovrt101, Wyverald,
Jedexter77, Uhbif19, Zond, Asafdapper, Ptab, Tobiasivarsson, Alexandre.Morgaut, Steve03Mills, Phunehehe, R39132, EmausBot,
Bionderplus, WikitanvirBot, FalseAxiom, Bdijkstra, Dewritech, GoingBatty, RA0808, Ledhed2222, MrWerewolf, EricBloch, Hloeung, ZroBot, Weimanm, Al3xpopescu, Theandrewdavis, Mhegi, Sagarjhobalia, Mtrencseni, Phillips-Martin, Dmitri.grigoriev, H3llBot,
Jnaranjo86, DamarisC, Dstainer, Bulwersator, Eco schranzer, Thomas.uhl, Lyoshenka, Inmortalnet, Really Enthusiastic, Germanviscuso, Stephen E Browne, ClueBot NG, Rabihnassar, Ki2010, Luisramos22, Fxsjy, Korrawit, Tylerskf, Castncoot, ScottConroy, Jrudisin, Mshefer, Ashtango5, Helpful Pixie Bot, Pereb, William greenly, Rpk512, GlobalsDB, DBigXray, Tuvrotya, BG19bot, Nawk, Go-
96
nim, Freshnfruity, Vychtrle, Gaborcselle, Kkbhumana, Frze, AvocatoBot, Mark Arsten, Compfreak7, Anne.naimoli, Matspca, Boshomi,
Dshelby, Brocsima, BigButtery, Winston Chuen-Shih Yang, Griswolf, Socialuser, Ugurbost, Khiladi 2010, Noah Slater, Farvartish,
Knudmoeller, Electricmun11, Mbarrenecheajr, Corrector623, Sandy.toast, F331491, Luebbert42, Anujsahni, Tsvljuchsh, Makecat-bot,
Fitzchak, Toopathnd, Msalvadores, Cloud-dev, Sasindar, CJGarner, Crosstantine, Stevenguttman, Razibot, DallasClarke, Altered Walter, Rediosoft, Tsm32, Franois Robere, Harpreet dandeon, LeeAMitchell, Mbroberg, Virendervermamca, Anilkumar1129, Mhgrove,
FranzKraun, Jasonhpang, Nanolat, Nosql.analyst, Rzicari, Ginsuloft, Sugamsha, K0zka, Tshuva, Dabron, Mongochang, Natan.puzis, Webtrill, CafeNoName, Yasinaktimur, Monkbot, Itamar.haber, User db, Textractor, Maykurutu, Kamaci, Mongodbheavy, RedOctober13,
Nathan194, Jjrenzel, Azanebrain, Annmkelly1, Sunnyeyre, Danny996, Thomas4019, Dr. Testicate, M.D., Johnbweeks, Magic-carpetpilot, IdlePlayground, Datadatadatadata, Kevin at aerospike, Anywhichway and Anonymous: 522
NewSQL Source: http://en.wikipedia.org/wiki/NewSQL?oldid=659686187 Contributors: Maury Markowitz, Beland, Julian Mehnle~enwiki,
Stuartyeates, MacTed, Quuxplusone, Intgr, Datamgmt, Amux, Apavlo, Ibains, Duncan.Hull, MPH007, Phoenix720, Dsimic, MrOllie, Yobot, AnomieBOT, Noq, W Nowicki, Diego diaz espinoza, Cnwilliams, Bulwersator, UMD-Database, BG19bot, Akim.demaille,
Plothridge, Sanketsarang, Brianna.galloway, Mwaci99, Andygrove73, Monkbot, Sergejjurecko, Qid4475 and Anonymous: 18
XML database Source: http://en.wikipedia.org/wiki/XML%20database?oldid=657057272 Contributors: Stevertigo, Nichtich~enwiki,
Pedant17, Chowbok, Coldacid, Beland, Klingon, Xmlizer, Rich Farmbrough, John Vandenberg, Enric Naval, Pearle, Mdd, Arnabdotorg, Tbradford, Snodnipper, Bohumir Zamecnik, Qwertyus, Rjwilmsi, Hgkamath, Dmccreary, AJackl, Kmorozov, Bgwhite, Michael
Slone, Mehran, Gregburd, Nikkimaria, DoriSmith, Rayngwf, SmackBot, Barefootliam, Dizzzz, Brick Thrower, OlliX, TRosenbaum,
Abukaspar, Chris the speller, Thumperward, Colonies Chris, Happygirae, Mitchumch, Eedeebee, Kokotero, Slakr, Mauro Bieg, Glen
Pepicelli, Courcelles, Lamdk, Rastgoo, Edward C. Zimmermann, Xxanthippe, GVogeler, Juansempere, Doclabyrinth, Epbr123, Touko
vk, Gpallis, Cdicarlo, MiddleEarth, Radim Baca, Dilane, Metaperl, Kgeischmann, R'n'B, Xshezang, Belovedfreak, Andionita, Lamp90,
Signalhead, Philip Trueman, Q Chris, Linelor, Xmlchamp, Jzhang2007, Hobartimus, ClueBot, Adrianwn, Xpriori, PixelBot, Johndbritton, Libcub, Avoided, Ccouvrette, Addbot, Mabdul, Joerg84, Tide rolls, Lightbot, Themfromspace, Bunnyhop11, Terrictrid, Carleas,
Sykamoore, AnomieBOT, Materialscientist, CorcaighAbu, 16x9, ChristianGruen, Rtweed1955, Bernd vdB old, FrescoBot, Mark Renier, DickieRose, EmausBot, Playmobilonhishorse, EricBloch, Bxj, Amirfr, AManWithNoPlan, Americanpiggy, Donner60, Tags123,
Xafran~enwiki, Adamretter, Danim, BG19bot, Gonim, F331491, AlbertJB, Lugia2453, Vojtechtoman, Datadatadatadata and Anonymous: 207
Data denition language Source: http://en.wikipedia.org/wiki/Data%20definition%20language?oldid=653492219 Contributors: Nate
Silva, BL~enwiki, Modster, Wwwwolf, Zanimum, WeiNix, Andrewman327, Babbage, Academic Challenger, Jason Quinn, Decoy,
Eliazar, Abdull, KeyStroke, Goplat, Alansohn, Lectonar, Emvee~enwiki, Mindmatrix, RHaworth, WadeSimMiser, GregorB, Chupon,
Rjwilmsi, FlaBot, Tumble, Isotope23, Riki, Fresheneesz, UkPaolo, Roboto de Ajvol, YurikBot, RobotE, Zwobot, JLaTondre, Katieh5584,
Mhkay, Tom Morris, SmackBot, Elonka, Unyoyega, Gilliam, NickGarvey, MrRadioGuy, Heimstern, Aleenf1, 16@r, JoeB~enwiki, MrDolomite, Hu12, Iridescent, Gcdinsmore, SkyWalker, SqlPac, Dgw, Bposert, Juansempere, Tobias382, Thijs!bot, Marek69, Luna Santin,
CodeNaked, Eags, VoABot II, Skew-t, Rstinejr, Ftiercel, Cecilkorik, MartinBot, Tgeairn, Snay2, LordAnubisBOT, Entropy, Cometstyles, BioStu, Squids and Chips, WOSlinker, TXiKiBoT, Aymatth2, Anna Lincoln, Martin451, Kbrose, Bentogoa, Svick, ClueBot,
Cybersprocket~enwiki, C628, Aitias, DumZiBoT, WikHead, Vy0123, Addbot, Trevorbjork, AkhtaBot, SpBot, Ginosbot, JakobVoss,
TestEditBot, AnomieBOT, Sjgilbertz, Materialscientist, Xqbot, Thehelpfulbot, Mark Renier, Winterst, Vrenator, NerdyScienceDude,
Whywhenwhohow, Santoshijd, Elektrik Shoos, Caspertheghost, QEDK, Mayur, ClueBot NG, Muon, Widr, Danim, Roberticus, Boshomi,
Tomsimtim, Lugia2453, SFK2, Graphium, Epicgenius, Johnathan29, Navjagat, A Grammar-Robot, Byiringirobill, Gvcsm2230, Akshay
S. Jadhav and Anonymous: 136
Data manipulation language Source: http://en.wikipedia.org/wiki/Data%20manipulation%20language?oldid=642232138 Contributors: Booyabazooka, Jay, Frazzydee, Tobias Bergemann, KeyStroke, Discospinster, CanisRufus, Shanes, Minghong, Jcfried, RHaworth,
Chupon, OMouse, FlaBot, Isotope23, Vmenkov, YurikBot, Sikon, Zwobot, KnightRider~enwiki, SmackBot, Eskimbot, Gilliam, Markhobley, Tony Fox, Danlev, SqlPac, Chrisahn, Aneeshpu, Thijs!bot, AntiVandalBot, Nevcao, CodeNaked, Wikieditor06, TXiKiBoT, Andy
Dingley, Kbrose, SieBot, OKBot, ClueBot, Tavahom~enwiki, Angoca, DragonBot, PixelBot, Addbot, Mr. Wheely Guy, LaaknorBot,
Jasper Deng, Yobot, Rubinbot, Xqbot, DSisyphBot, LucienBOT, Viveksharma474, RedBot, Super48paul, Rcsprinter123, ClueBot NG,
Vacation9, Danim, Plavozont, Xbalca02 and Anonymous: 50
Query language Source: http://en.wikipedia.org/wiki/Query%20language?oldid=659802246 Contributors: MarXidad, Edward, Ahoerstemeier, Nikola Smolenski, Frieda, Robbot, Ojigiri~enwiki, Jonathan.mark.lingard, Bkonrad, SarekOfVulcan, Troels Arvin, Trevor
MacInnis, R, KeyStroke, Slipstream, Elwikipedista~enwiki, Danakil, TommyG, John Vandenberg, Grutness, RJFJR, Throbblefoot,
Mindmatrix, Davidfstr, Toussaint, Joerg Kurt Wegner, Chtirrell, Ahunt, Vmenkov, YurikBot, RobotE, Larsinio, ZygmuntKrynicki,
DEng, Mhkay, Mgreenbe, BenAveling, AndrewWarden, Markhobley, Wikiolap, Soumyasch, Manifestation, IvanLanin, Devourer09,
Msnicki, Thijs!bot, Peter Gulutzan, BCable, JAnDbot, Inverse.chi, Deepugn, Usien6, Steven Walling, VolkovBot, MichaelSpeer, ASHPvanRenssen, Synthebot, Pjoef, Honys, OsamaK, SieBot, Ehajiyev, Svick, Retireduser1111, Jay42, Vanished user qkqknjitkcse45u3, ClueBot, ERfan111, Mild Bill Hiccup, Ihenriksen, Techno.modus, MystBot, Addbot, Tassedethe, Srandrews, Jarble, Luckas-bot, Beaton1131,
HanielBarbosa, Groovenstein, CxQL, Amin Hashem, Valafar, Logiphile, Mark Renier, Kwiki, Albert688, RedBot, AmirMehri, Adarw,
Xodlop, EmausBot, John of Reading, GermanJoe, Diamondland, ClueBot NG, Danim, BG19bot, Bacchus123, Mark Arsten, SupernovaExplosion, Shekhardtu, Alex Ashdealer and Anonymous: 42
12.5.2
Images
97
98
12.5.3
Content license