Wrox.beginning.mysql.mar.2005 - 01. Introduction

Embed Size (px)

Citation preview

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    1/42

    1Introducing the MySQL

    Relational DatabaseManagement System

    In the world of online auction houses, instant mortgages, worldwide reservations, globalcommunication, and overnight deliveries, its not surprising that even the least technically savvyindividuals in our culture are, to some degree, familiar with the concept of a database. As anyonewho works with data knows, databases form the backbone for this age of information, and accessto those databases can determine ones ability to perform critical tasks effectively and efficiently.To meet the ever-increasing demands for information, programmers are continuously buildingbigger and better applications that can access and modify data stored in various database systems.Yet in order to create these applications, programmers must have some knowledge of the systemsthat contain the needed data.

    Over the years, as the demands for information have grown, so too have the database systemsthat have attempted to meet these demands. However, along with this evolution, we have seen anincrease in the costs associated with storing data as well as an increase in the demand for productsthat can run on multiple platforms and can be optimized based on the needs of specific types oforganizations. In response to this changing climate, MySQL has emerged as the most popularopen-source database management system (DBMS) in the world. Consequently, organizationseverywhere are jumping on the MySQL bandwagon, increasing the demand for those who knowhow to use MySQL to manage data and those who know how to create applications that can accessdata in MySQL databases.

    In learning to use MySQL, whether to work directly in the MySQL environment or create data-drivenapplications, an individual should have a thorough understanding of how MySQL, as a relationaldatabase management system (RDBMS), allows you to manage data and support applications thatrely on access to MySQL data. To this end, this chapter introduces you to MySQL and providesyou with an overview of databases, RDBMSs, SQL, and data-driven applications. By the end ofthe chapter, you will understand the following concepts:

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    2/42

    What a relational database is, how it differs from other types of databases, and how it relates toa database management system.

    The programming language SQL, how to interpret SQL syntax, how to create SQL statements,and how SQL is implemented in MySQL.

    How applications can use a host programming language, a MySQL application programming

    interface (API), and SQL statements to access information in a MySQL database.

    Databases and Database Management

    SystemsDatabases and database management systems have become the backbone of most Web-related applicationsas well as an assortment of other types of applications and systems that rely on data stores to supportdynamic information needs. Without the availability of flexible, scalable data sources, many organizationswould come to a standstill, their ability to provide services, sell goods, rent movies, process orders, issue

    forms, lend books, plan events, admit patients, and book reservations undermined by the inability toaccess the data essential to conducting business. As a result, few lives are unaffected by the use of databasesin one form or another, and their ubiquitous application in your everyday existence can only be expectedto grow.

    What Is a Database?

    Over the years, the term database has been used to describe an assortment of products and systems thathave included anything from a collection of files to a complex structure made up of user interfaces, datastorage and access mechanisms, and client/server technologies. For example, a small company mightstore payroll records in individual files, while a regional electric company uses an integrated system tomaintain records on all its customers; generate electric bills to those customers; and create reports that

    define power usage patterns, profit and loss statements, or changes in customer demographics. In bothcases, the organizations might refer to each of their systems as databases.

    Despite how a database is used, the amount of data that it stores, or the complexity of the data, a num-ber of common elements define what a database is. At its simplest, a database is a collection of data thatis usually related in some fashion. For instance, a database that a bookstore uses might contain informa-tion about authors, book titles, and publishers. Yet a database is more than simply a collection of relateddata. The data must be organized and classified in a structured format that is described by metadata,which is data that describes the data being stored. In other words, the metadata defines how the data isstored within the database. Together, the data and the metadata provide an environment that logicallyorganizes the data in a way that can be efficiently maintained and accessed.

    One way to better understand what constitutes a database is to use the analogy of a telephone book. Aphone book contains the names, addresses, and phone numbers of most of the telephone customers ina particular town or region. If you think of that phone book as a database, you find a set of related data(the names, addresses, and phone numbers of the telephone customers) and you find a structuredformat (the metadata) that is defined by the way that the pages are bound and by how the informationis organized. The phone book provides a system that allows you easy and efficient access to the datacontained in its pages. Without the structure of the phone book, it would be next to impossible to locatespecific customer data.

    2

    Chapter 1

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    3/42

    In the same way that a phone book provides structure to the customer information, the metadata ofa database defines a structure that organizes data logically within that structure. However, not alldatabase structures are the same, and through the years, a number of different data models haveemerged. Of these various models, the three most commonly implemented are the hierarchical,network, and relational models.

    The Hierarchical ModelIn the early days of database design, one of the first data models to emerge was the hierarchical modThis model provides a simple structure in which individual records are organized in a parent-chilrelationship to form an inverted tree. The tree creates a hierarchical structure in which data is decompointo logical categories and subcategories that use records to represent the logical units of data.

    Take a look at an example to help illustrate how to structure a hierarchical database. Suppose youreworking with a database that stores parts information for a company that manufactures wind generaEach model of wind generator is associated with a parent record. The parts that make up that modethen divided into categories that become child records of the models parent record, as shown in FigurIn this case, the parent record Wind Generator Number 101 is linked to three child records: Towassemblies, Power assemblies, and Rotor assemblies. The child records are then divided into subcategothat are assigned their own child records. As a result, the original child records now act as parent recas well. For example, the Tower assemblies record is a parent of the Towers record but a child of theWind Generator Number 101 record.

    As you can see in the figure, a parent record can be associated with multiple child records, but a chilrecord can be associated with only one parent record. This structure is similar to what you might seedirectory structure viewed through a graphical user interface (GUI) file management application, sucWindows Explorer. At the top of the directory structure would be Wind Generator Number 101. Benthis, would be Tower assemblies, Power assemblies, and Rotor assemblies, each with their own set osubdirectories.

    After its introduction, the hierarchical data model achieved a great deal of success. One of the most

    popular implementations of this model is found in IBMs Information Management System (IMS),which was introduced in the 1960s and is still widely used on IBM mainframe computers.

    However, despite the popularity of the hierarchical model, it is unsuitable for many of todays applicaInherent in the simplicity of the parent-child organization is a rigid structure that results in a cumbersnavigation process that requires application developers to programmatically navigate through theconnected records to find the necessary information. Records must be accessed one at a time by movup and down through the hierarchical levels, which often made modifications to the database andapplication a complicated, time-consuming process. In addition, the hierarchical structure cannot supcomplex relationships between records. For example, if you return to the wind generator database examyou discover that Figure 1-1 doesnt show a record for the belts used to connect the generators to theshafts. If you were to create a child record for belts, should it be added under the Generators record

    the Shaft assemblies record? The hierarchical design makes it difficult to fully represent the relationthat exists between the belts and the generators and shafts. Indeed, a child record can be associated only one parent record.

    Introducing the MySQL Relational Database Management Syst

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    4/42

    Even with the limitations of the hierarchical model, a large amount of data is still being stored in hierarchicaldatabases, and many management systems have found ways to work around some of these limitations.In addition, this is the type of system used primarily for file management systems associated with operatingsystems because it allows users to go directly where they need to go to find a file, rather than having toiterate through a lot of nodes. As a result, the hierarchical database probably isnt going anywhereanytime soon.

    Figure 1-1

    Wind GeneratorNumber 101

    Towerassemblies

    Guy wireassemblies

    Towers Ground mount

    assemblies

    Anchors Wires

    Rotorassemblies

    Bladeassemblies

    Brakingsystems

    Hubs Blades Governors

    Bearings

    Shaftassemblies

    Furlingtails

    Cases Shafts

    Bearings

    Rotation Yaw

    Cables Connectors

    RegulatorsMagnetsBrushes

    Coils

    Wiring

    Commutators

    Heaters

    Powerassemblies

    AnemometersBatterypacks

    WiringGenerators Dump load

    systems

    Shutdownsystems

    4

    Chapter 1

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    5/42

    The Network Model

    To work around the limitations of hierarchical databases, a new model of database design, built upothe hierarchical model, emerged in the 1970s. The networkmodel enhanced the hierarchical model ballowing records to participate in multiple parent-child relationships. For example, suppose the wingenerator database must also store data about employees, customers, and orders. A hierarchical datmight contain four parent records: Orders, Employees, Customers, and Wind generators. Each of threcords would then contain the necessary child records to support this structure, as shown in Figure

    Figure 1-2

    Orders

    Order 1002

    Order 1003Customers

    DEFCompany

    ABCCompany

    Order 1001

    Windgenerators

    Windgenerators

    Number 103

    Windgenerators

    Number 102

    Windgenerators

    Number 101

    Employees

    Max N.

    Sarah W.

    Introducing the MySQL Relational Database Management Syst

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    6/42

    If each of these categories operated without interaction with each other, then the need for the networkmodel would be minimal. However, if you consider the fact that each order is related to the employeewho took the order, the customer who bought the order, and the wind generator model that was purchased,you can see that the hierarchical model is inadequate to support the complex relationships that existbetween records. For example, Sarah W. took Order 1001 for the DEF Company. The company boughttwo wind generators: models 101 and 102. As a result, the Order 1001 record is related to the Sarah W.

    record, the DEF Company record, the Wind Generator Number 101 record, and the Wind GeneratorNumber 102 record.

    The network model still has many of the disadvantages of the hierarchical model, but it provides farmore flexibility in allowing programmers to navigate through records. Despite the flexibility, developersmust still program record navigation within the application. In addition, any changes to the databaseor application can result in complicated updates. A database must be well planned in advance, takinginto account record navigation at the application level.

    The Relational Model

    Because of the limitations of the hierarchical and network models, a new model began gainingmomentum in the late 1970s, and by the end of the 1980s, emerged as the standard for the next generationof databases. The relational data model represents a radical departure from the rigid structures of thehierarchical and network models. Applications accessing a hierarchical database rely on a definedimplementation of that database, and the database structure must be hard-coded into the applicationsprogramming language. If the database changes, the application must change.

    However, a relational database is independent of the application. Its possible to modify the databasedesign without affecting the application because the relational model replaces the parent-child frameworkwith a structure based on rows and columns that form tables of related data. As a result, you can definecomplex relationships between the tables, without the restrictions of earlier models.

    For example, suppose you want to change the original wind generator database that you saw in Figure 1-1to a relational database. The database might include a table for the individual parts and a table of the

    individual categories of parts, as shown in Figure 1-3. As you can see from the illustration, the Parts tableincludes a list of parts from different areas of the wind generator. The table could contain every part forthe entire wind generator, with each row in the table representing a specific part, just as a record in thehierarchical database represents a specific part. For example, the guy wire assembly (in the first row ofthe Parts table) is a component of the tower assembly, and the generator (in the fifth row) is a componentof the power assembly.

    Each row in the Parts table represents one part. The part is assigned a unique part ID, a name, and areference to the category to which it belongs. The Categories table lists each category. Note that the lastcolumn in the Parts table references the first column in the Categories table. A relationship exists betweenthese two tables. For instance, the brushes product has been assigned a PartID value of 1004. If you lookin the CatID column for this product, you see that it contains a value of 504. If you now look at the

    Categories table, you find that 504 refers to the Generator category, which is itself a part. Because of thisstructure, programmers are less restricted when moving through data, resulting in applications that canbe more flexible when retrieving information and databases that can better accommodate change afterthe applications have been written.

    Dont be concerned if you do not fully grasp the concepts of tables, rows, and columns or the relation-ships between the tables. Chapter 4 discusses the relational model in greater detail.

    6

    Chapter 1

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    7/42

    Figure 1-3

    As the popularity of the relational model has grown, so too has the number of database products th

    use this model to store and manage data. Included in the family of relational products are DB2, OraSQL Server, and of course, MySQL. However, a relational database alone is not enough to provide thtype of data management, storage, connectivity, security, analysis, and manipulation that is requireddynamic information store. For this, you need a complete management system that works in conjunwith the relational database to provide the full spectrum of database services.

    Database Management SystemsMost databases rely on a database management system to manage the data stored within the systemdatabases and to make the data available to users who need access to specific types of information. DBMS is made up of a comprehensive set of server and client tools that support various administrat

    and data-related tasks. For example, most DBMSs provide some type of client tool that allows you tinteract directly with the data stored in a database.

    At the very least, a DBMS must store data and allow data to be retrieved and modified in a way thaprotects the data against operations that could corrupt or insert inconsistencies into the data. Howevmost systems provide many more capabilities. In general, nearly any comprehensive DBMS supporfollowing types of functionality:

    Managing storage

    Maintaining security

    Maintaining metadata

    Managing transactions

    Supporting connectivity

    Optimizing performance

    Providing back-up and recovery mechanisms

    Processing requests for data retrieval and modification

    PartID PartName CatID

    1001 Guy wire assembly 503

    1002 Magnet 504

    1003 Regulator 505

    1004 Brushes 504

    1005 Generator 506

    1006 Dump load system 506

    1007 Power assembly 501

    1008 Tower assembly 501

    1009 Rotor assembly 501

    Parts

    CatID CatName Parent

    501 Wind Generator 101 NULL

    502 Rotor assembly 501

    503 Tower assembly 501

    504 Generator 506

    505 Dump load system 506

    506 Power assembly 501

    Categories

    Introducing the MySQL Relational Database Management Syst

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    8/42

    The extent to which a DBMS supports a particular functionality and the exact nature in which thatfunctionality is implemented is specific to the DBMS. For any one system, you must refer to theproduct documentation to determine what and how specific functionality is implemented.

    The MySQL RDBMS

    As database models evolved, so too did the DBMS products that supported the various types ofdatabases. Its not surprising, then, that if there are DBMSs, there are RDBMSs. MySQL is such as system,as are Oracle, DB2, SQL Server, and PostgreSQL. These products, like any DBMS, allow you to accessand manipulate data within their databases, protect the data from corruption and inconsistencies, andmaintain the metadata necessary to define the data being stored. The primary difference, then, betweena DBMS and a RDBMS is that the latter is specific to relational databases. It supports not only the storageof data in table-like structures, but also the relationships between those tables.

    Emerging as a major player in the RDBMS market is MySQL. As with other RDBMS products, MySQLprovides you with a rich set of features that support a secure environment for storing, maintaining, andaccessing data. MySQL is a fast, reliable, scalable alternative to many of the commercial RDBMSs availabletoday. The following list provides an overview of the important features found in MySQL:

    Scalability: MySQL can handle large databases, which has been demonstrated by its implemen-tation in organizations such as Yahoo!, Cox Communications, Google, Cisco, Texas Instruments,UPS, Sabre Holdings, HP, and the Associated Press. Even NASA and the US Census Bureauhave implemented MySQL solutions. According to the MySQL product documentation, some ofthe databases used by MySQLAB, the company that created MySQL, contain 50 million records,and some MySQL users report that their databases contain 60,000 tables and 5 billion rows.

    Portability: MySQL runs on an assortment of operating systems, including Unix, Linux,Windows, QS/2, Solaris, and MacOS. MySQL can also run on different architectures, rangingfrom low-end PCs to high-end mainframes.

    Connectivity: MySQL is fully networked and supports TCP/IP sockets, Unix sockets, andnamed pipes. In addition, MySQL can be accessed from anywhere on the Internet, and multipleusers can access a MySQL database simultaneously. MySQL also provides an assortment ofapplication programming interfaces (APIs) to support connectivity from applications written insuch languages as C, C++, Perl, PHP, Java, and Python.

    Security: MySQL includes a powerful system to control access to data. The system uses a host- anduser-based structure that controls who can access specific information and the level of access tothat information. MySQL also supports the Secure Sockets Layer (SSL) protocol in order toallow encrypted connections.

    Speed: MySQL was developed with speed in mind. The amount of time it takes a MySQLdatabase to respond to a request for data is as fast as or faster than many commercial RDBMSs.The MySQL Web site (www.mysql.com) provides the results of numerous benchmark tests thatdemonstrate the fast results you receive with a MySQL implementation.

    Ease of use: MySQL is simple to install and implement. A user can have a MySQL installationup and running within minutes after downloading the files. Even at an administrative level,MySQL is relatively easy to optimize, especially compared to other RDBMS products.

    Open-source code: MySQL AB makes the MySQL source code available to everyone todownload and use. The open-source philosophy allows a global audience to participate in thereview, testing, and development of code. (See the Open-Source Movement section below forinformation about open-source technology.)

    8

    Chapter 1

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    9/42

    As you can see, MySQL can provide you with a fast, reliable solution to your database needs. Not oit easy to use and implement, it offers the advantages and flexibility of an open-source technology. Ycan download the MySQL distribution files directly from the MySQL Web site, and start using theproduct immediately.

    The Open-Source Movement

    One of the most distinctive features of MySQL compared to RDBMSs such as Oracle and DB2 is thaMySQL is an open-source application. As a result, the MySQL source code is available for anyone toand modify, within the constraints of the GNU General Public License (GPL), an open-source licensistructure that supports the distribution of free software. (GNU, pronounced Guh-New, is an acronymGNUs Not Unix. GNU is an operating system based on the Linux kernel.)

    For specific information about the most current MySQL licensing structure, visit the MySQL site atwww.mysql.com. For information about the GNU GPL, visit the GNU licensing site atwww.gnu.org/licenses.

    The open-source nature of MySQL is part of a worldwide movement that promotes the free access oapplication source code. As a result, users are allowed to download and use open-source applicationfree. One of the most well known examples of this technology is the Linux operating system, whichbeen instrumental in unifying the open-source community and promoting a wider base of users anddevelopers who test and contribute to the operating systems development. The same is true of MySwhich is reported to be the most popular open-source RDBMS in the world. As an open-source applicadevelopers everywhere contribute to the development process, and millions of users test new versioof the application as it is being developed.

    As applications such as MySQL and Linux continue to see a steady growth in their global user base,too does the acceptance of the open-source philosophy, evidenced by the increasing number of othetypes of applications and technologies that now participate in the open-source movement, providinricher user experience, a more robust developer environment, and a wider spectrum of options foreveryone.

    The SQL FrameworkSoon after the relational data model appeared on the database scene, research began on the developof relational databases. From this research came the realization that traditional programming languasuch as COBOL or Fortran, were not suited to implementing these types of databases and that a spelanguage was needed. Out of these beginnings came SQL, a database-specific language that has becthe definitive language of relational databases and that, as a result, has seen widespread implementand usage, regardless of products, platforms, or operating system environments.

    There is some debate about what SQL stands for and how to pronounce it. In some sources, you see SQLdefined as an acronym that means Structured Query Language, yet other sources treat SQL as simplythe three letters that stand for the language. The American National Standards Institute (ANSI), whichpublished the SQL:2003 standard, makes no mention of structured query language and treats SQLsimply as the three letters. As a result, no definite resource says that SQL stands for Structured QueryLanguage, despite the fact that many publications define it this way.

    Introducing the MySQL Relational Database Management Syst

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    10/42

    Another area of debate that surrounds SQL is whether to pronounce it one letter at a time, as in S-Q-L,or to pronounce it as a word, as in sequel. This is why some publications, when preceding SQL withan article, use the word an (an SQL database) and some use the word a (a SQL database). Withregard to this particular issue, the SQL:2003 standard prefers S-Q-L, so that is the convention usedin this book.

    What is SQL?SQL is, above all else, a computer language used to manage and interact with data in a relationaldatabase. SQL is the most universally implemented database language in use, and it has become thestandard language for database management. SQL works in conjunction with a RDBMS to definethe structure of the database, store data in that database, manipulate the data, retrieve the data, controlaccess to the data, and ensure the integrity of the data. Although other languages have been developedto implement the relational model, SQL has emerged as the clear winner.

    Nearly all RDBMSs implement some form of SQL in order to manage their relational database. This istrue not only for MySQL, but also for SQL Server, DB2, Oracle, PostgreSQL, and all the major players inthe world of RDBMSs. However, do not confuse SQL with the programming languages used to develop

    the RDBMS. For example, MySQL is built with C and C++. The functions that such an application performsin order to support connectivity, provide APIs, enable network access, or interact with client tools arecarried out at the C and C++ programming level. The primary purpose of SQL is to allow the RDBMS tointeract with the data. The C and C++ environment provides the structure that houses the SQL environ-ment, which itself allows you to define and interact with the data. In other words, the RDBMS facilitatesthe ability of SQL to manage data.

    Figure 1-4 illustrates how SQL interacts with the MySQL RDBMS. In this figure, MySQL is running as aserver on a specific platform such as Linux or Unix. The database, stored either internally or externally,depending on your storage configuration, hosts the actual database files. Although the RDBMS facili-tates (through the C/C++ applications) the creation and maintenance of the database and the datawithin the database, SQL actually creates and maintains the database and data.

    Figure 1-4

    MySQL

    RDBMS

    C/C++

    SQL

    database

    SQL statements

    10

    Chapter 1

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    11/42

    SQL, then, is a standardized language, not a stand-alone product, such as MySQL. SQL relies on theinteraction with a RDBMS in order to manage data. You cannot develop an SQL-based application,although you can build an application that connects to a database managed by a RDBMS and thensends SQL statements to the database in order to request and modify data. (You learn more about hoSQL fits into application development later in the chapter, in the section Data-Driven Applications.)However, despite the inability of SQL to stand on its own, it remains the foundation of most relation

    databases; therefore, anyone who creates applications that interact with an SQL database should havbasic understanding of SQL.

    A Brief History of SQL

    After the relational model was introduced to the database development community in the early 197IBM began researching ways to implement that model. IBMs research, referred to as the System/R ject, resulted in a prototype of the first RDBMS. As part of the System/R project, IBM produced the incarnation of a relational database language, which was known Structured English Query Languag(SEQUEL). Over the next few years, IBM updated the prototype and released SEQUEL/2, which walater renamed to SQL.

    In the late 1970s, IBM released System R to a number of its customers for evaluation. The developmand release of System R brought with it increased attention to relational databases, RDBMSs, andSQL, and reconfirmed to the public IBMs commitment to the relational model. Soon a group of enginformed Relational Software, Inc., a company whose primary goal was to develop a RDBMS systebased on SQL. Before long, the company released its own product Oracle the first commerRDBMS to hit the market. It wasnt until 1981 that IBM released their first commercial RDBMS SQL

    The ANSI Standard

    By the mid-1980s, relational databases and SQL had become an industry standard. During this timeperformance of RDBMSs had improved dramatically, and other companies were investing into the rtional technologies, either releasing or preparing to release their own SQL-based RDBMSs. HoweveSQL became more widely implemented, so too did the need to standardize the language across vari

    products. In an attempt to achieve this goal, ANSI released the first published SQL standard (SQL-81986, giving SQL official status in the software development industry.

    ANSI updated the standard in 1989 (SQL-89) and again in 1992 (SQL-92). SQL-92 represented a majrevision to the language and included expanded and improved features, some of which exceeded thcapabilities of existing RDBMSs. In fact, SQL-92 was substantially longer than SQL-89 in an attemptaddress many of the weaknesses of the earlier standard.

    Because of the significant expansion of the standard, SQL-92 defined three levels of conformance:

    Entry: This level represented the most basic stage of conformance, and was based primarilythe SQL-89 standard, with only a few improvements.

    Intermediate: Although this level represented significant advancements to the product, it wbelieved that most products could achieve compliance.

    Full: A RDBMS had to be in complete compliance with the standard.

    Introducing the MySQL Relational Database Management Syst

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    12/42

    To be in conformance to the SQL-92 standard, a RDBMS had to comply with at least the Entry level,which has been achieved by most RDBMSs on the market. However, no known product achieved anIntermediate level of conformance, let alone Full. Part of the problem is that some of the featuresspecified in the Intermediate level met with little interest from users. As a result, RDBMS vendors sawlittle reason to implement these features.

    In 1999, ANSI, along with the International Organization for Standardization (ISO) published SQL:1999,the first complete update to the SQL standard since 1992. However, during those seven years, interimstandards were published to incorporate features that RDBMS vendors were already being implementing.These interim publications were then incorporated in the SQL:1999 standard, which represented anothersignificant expansion of the standard.

    Because most products reached only an Entry level of conformance to SQL-92, the SQL:1999 standardtook a different approach to conformance levels. To be in conformance to the new standard, a RDBMShad to be in compliance with Core SQL. Core SQL contained all the features of Entry level SQL-92, manyof the features of Intermediate level, and some of the features of Full level, plus some features new toSQL:1999. In addition to claiming Core SQL conformance, a RDBMS could claim conformance to one ofthe supported packages. Apackage is a set of features that a vendor could implement in a RDBMS. The

    SQL:1999 standard supported the following packages:

    PKG001: Enhanced date/time facilities

    PKG002: Enhanced integrity management

    PKG003: OLAP (online analytical processing) facilities

    PKG004: PSM (persistent stored module)

    PKG005: CLI (call-level interface)

    PKG006: Basic object support

    PKG007: Enhanced object support

    PKG008: Active database

    PKG009: SQL/MM (multimedia) support

    Most RDBMSs, including MySQL, conform to the Entry level of SQL-92 and achiev some confor-mance to Core SQL in SQL:1999. However, ANSI and ISO have released yet another version of thestandard SQL:2003. In many ways, the new standard merely reorganizes and makes correctionsto SQL:1999. However, the latest standard does include additional features that were not part ofSQL:1999, particularly in the area of Extensible Markup Language (XML). As a result, compliancewith SQL:1999 does not necessarily imply compliance to SQL:2003.

    With the advent of SQL:2003, future releases of RDBMS products will inevitably change, and some

    vendors are already working on achieving compliance with the new standard. However, as of today,no product claims compliance to SQL:2003.

    You can purchase the ANSI/ISO SQL:2003 standard online at the ANSI eStandards Store(http://webstore.ansi.org ). The standard is divided into 14 parts, which you must purchaseindividually.

    12

    Chapter 1

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    13/42

    Object-Relational Model

    As explained earlier, SQL was developed as a way to implement the relational model. To this end, thlanguage has been quite successful, attested to by its widespread implementation and the commitmof companies such as Microsoft, IBM, Oracle, and MySQL AB to relational databases and SQL. Howmost RDBMS vendors have extended the SQL-based capabilities of their products to include featurethat go beyond the pure relational nature of SQL. Many of these new features are similar to some of

    characteristics found in object-oriented programming, a type of programming based on self-containecollections of routines and data structures that each perform a specific task. As SQL, as well as varioRDBMS products, has become more advanced, it has taken a turn toward object-oriented programm(although, strictly speaking, SQL is far from being an object-oriented language).

    Java and C# are both examples of object-oriented programming languages. In these languages, objectsinteract with one another in a way that addresses complex programming issues that cannot be easilyaddressed with traditional procedural languages.

    A good example of the object-oriented nature of some of the extended features in RDBMSs is the stoprocedure. A stored procedure is a collection of SQL statements that are grouped together to perform specific operation. The SQL statements are saved as a single object stored in the database and that u

    can evoke as needed.

    By the mid-1990s, most RDBMS products had implemented some form of the stored procedure. Toaddress this trend, ANSI released in 1996 an interim publication referred to as SQL/PSM, or PSM-96(PSM refers topersistent stored module.) A PSM is a type of procedure or function stored as an object ithe database. Aprocedure is a set of one or more SQL statements stored as a unit, and afunction is atype of operation that performs a specific task and then returns a value.

    The SQL/PSM standard defined how to implement PSMs in SQL. Specifically, SQL/PSM included tlanguage necessary to support stored procedures (which were referred to as SQL-invoked proceduresthe standard). SQL/PSM was later incorporated into the SQL:1999 standard.

    The problem that ANSI ran into when trying to standardize the SQL language related to stored proceduis that the way in which stored procedures were implemented from product to product varied wideAs a result, the manner in which stored procedures are called and retrieved can be very different noonly between products and the SQL:1999 standard, but also among the products themselves. As a rethe implementation of stored procedures remains very proprietary, with few products conforming toactual standard.

    MySQL currently does not support stored procedures, although SQL AB is including this functionalityin version 5.0. The stored procedure functionality is based on the SQL:2003 standard.

    The differences among the products extend beyond only stored procedures. Other features have expenced the same fate as stored procedures because so many of these features had been implemented p

    to the standardization of related SQL statements. Still, many of SQLs advanced features, with theirobject-oriented characteristics, are here to stay, as can be seen in both the SQL:1999 and SQL:2003 stadards and in the RDBMS products, making SQL an object-relational database language and the RDBMproducts object-relational database management systems.

    Introducing the MySQL Relational Database Management Syst

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    14/42

    The Nonprocedural Nature of SQL

    Despite the influence of object-oriented programming on SQL, SQL is still very different from otherprogramming languages. Traditional procedural programming languages such as COBOL, Fortran,and C were designed for very specific purposes, none of which were for accessing data. For this reason,SQL was intended for use in conjunction with these languages in order to build applications that couldeasily access data. For this reason, SQL is not intended for use as a standalone language, which is whyit is sometimes referred to as a sublanguage. Insufficient for writing complete applications, SQL wasdesigned with the idea that there would always be a host language for application building.

    Traditional programming languages, which range from Fortran to C, are considered to beprocedurallanguages; that is, they define how to carry out an applications operations and the order in which tocarry them out. SQL, on the other hand, is nonprocedural in nature. It is concerned primarily with theresults of an operation. The host language determines how to process the operation. Of course, this doesntmean that SQL doesnt include procedural elements. For example, stored procedures are such anelement, and certainly RDBMS vendors recognize the need for at least some procedural functionality.

    Yet these procedural elements do not make SQL a procedural language. SQL doesnt have many of thebasic programming capabilities of the other languages. As a result, you cannot build an application with

    SQL alone. You must use a procedural language that works in conjunction with SQL to manipulate datastored in a RDBMS.

    SQL Statements

    SQL is made up of a set of statements that define the structure of a database, store and manage datawithin that structure, and control access to the data. At the heart of each SQL statement is a syntacticalstructure that specifies how to create the statement can be created. The syntax acts as blueprint forbuilding statements that the RDBMS interprets. Most RDBMS products provide little leeway for state-ments that dont adhere strictly to the syntactical foundations. As a result, you should know how to readand interpret statement syntax if you plan to use SQL in your applications or access data in an SQLdatabase.

    Working with Statement Syntax

    When you create an SQL statement, you must often rely on the statement syntax defined in a productsdocumentation. The syntax provides the guidelines you need to create a statement that RDBMS caninterpret. For each statement, the syntax through the use of keywords and symbols defines thestatements structure, the elements required within the statement, and options you can include to helprefine the statement.

    When you first look at the complete syntax for any statement, it might seem overwhelming, depending onthe statement. For some statements, there are relatively few elements, so interpretation is easy. However,other syntax can be pages long. Despite the complexities of a particular statement, the basic syntax

    elements are the same, and if you learn how to interpret those elements, you can, with practice, understandany syntax presented to you.

    The elements comprising a syntactic structure can vary from reference to reference and from productto product, although in many cases, the symbols used are the same. This book follows ANSIs SQL:2003standards. You may encounter partial syntax throughout this book. In some cases, there are simply toomany syntactic elements, and many of those elements are rarely implemented. Whenever you want to becertain that youre seeing a statements syntax in its entirety, be certain to check the MySQL documentation.

    14

    Chapter 1

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    15/42

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    16/42

    Once you understand how to use these six symbols, you should be able to interpret most syntax.However, one other syntactic element that you should be aware of is the use and placement of keywords.A keyword is a reserved word or set of reserved words that are part of the SQL lexicon. The keywordsdefine a statements action and how that action is carried out. For example, the CREATE TABLE keywordsindicate that this statement does what you would expect it to do create a table.

    Normally, keywords are represented in all uppercase to distinguish them from placeholders, but SQL isa case-insensitive language, so the use of uppercase is meant only as a way to write more readable code.You could also write Create Table, create table, or CREate taBLE, and MySQL would interpret the codein the same way.

    Not only is SQL indifferent to capitalization, it also isnt concerned with tabs, extra spaces, or linebreaks. In theory, you could write your entire SQL statement on one line, or you could place each wordon separate lines. However, its recommended that you construct your statements in such a way thatthey are easy to read and understand, so breaking a statement into several lines is a common approachto take.

    Returning to the example syntax and reviewing it line by line, the syntax begins by identifying the type

    of statement that is being defined:

    ::=

    Literally, the syntax means that the placeholder is equivalent to the syntax thatfollows. SQL-related documentation often omits this introductory line, and it is seldom necessary at thebeginning of the syntax. Usually, the syntax itself clearly defines the statements purpose. However, itsincluded here so that you recognize it should you run into it in SQL documentation. To review the secondline of the syntax:

    CREATE [TEMPORARY] TABLE [IF NOT EXISTS]

    This line represents the actual first part of a CREATE TABLE statement. Notice that the keyword TEMPORARYseparates the CREATE TABLE keywords. Because square brackets enclose this keyword, the keyword isoptional. You would include it only if you plan to create a temporary table. (Temporary tables arediscussed in Chapter 5.) Because of the optional keyword, a table definition can begin with CREATETABLE or CREATE TEMPORARY TABLE.

    The next part in this line of syntax is the keywords IF NOT EXISTS. Again, these keywords areoptional and would be included only if you want to check for the existence of a table with the samename. Note, however, that when a set of brackets encloses multiple words in this manner, all the keywordsare included or none are included. You would not use IF, NOT, or EXISTS alone within this context ofthis part of the statement. In other words, you would never create a statement that begins with thefollowing:

    CREATE TABLE EXISTS

    Notice that the final element in this line of syntax is the placeholder. This is the positionwithin the statement in which you provide a name for the table that youre creating. When the table isadded to the database, it is assigned the name that you provide here, and this is the name that you usewhenever referring to the table. Now look at the next line of syntax:

    ( [{, }...])

    16

    Chapter 1

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    17/42

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    18/42

    What you might have noticed is that a vertical bar precedes the last two lines and that curly bracketsenclose all three lines. This means that each line represents one of the options you can use to define a placeholder. In other words, for each that you include in yourCREATE TABLE statement, you can define a column, a primary key, or an index.

    A primary key is a constraint placed on one or more columns within a table to indicate that the columns

    act as the primary identifier for each row in that table. Values within a primary keys columns must beunique when taken as a whole. You learn about primary keys in Chapter 5, which discusses how tocreate a table.

    Take a look at the first line of the definition:

    { [NOT NULL | NULL] [DEFAULT ] [AUTO_INCREMENT]}

    This line defines a column within the table. Each column definition must include a name () and a data type (). A data type determines the type of data that can be stored in atable. The line also includes three optional elements. The first of these is [NOT NULL | NULL], whichmeans that you can set a column as NOT NULL or NULL. A null value indicates that a value is undefined

    or unknown. It is not the same as zero or blank. Instead it means that a value is absent. When youinclude NOT NULL in your column definition, youre saying that the column does not permit nullvalues. On the other hand, the NULL option permits null values.

    The next optional element in the column definition is [DEFAULT ]. This option allows you todefine a value that is automatically inserted into a column if a value isnt inserted into the column whenyou create a row. When you include the DEFAULT keyword in your column definition, you must includea value in place of the placeholder.

    The final optional element of the column definition is [AUTO INCREMENT]. You include this option inyour definition if you want MySQL to automatically generate sequential numbers for this columnwhenever a new row is added to the table.

    With regard to the three options available in the definition, the column definition isthe one you use most often. However, as stated above, you can choose any of three options, so take alook at the second line:

    | {PRIMARY KEY ( [{, }...])}

    The purpose of this line is to define a primary key for the table. If you choose this option, you mustinclude the PRIMARY KEY keywords and at least one column name, enclosed in parentheses. Theelements contained in the square brackets[{, }...] indicate that you caninclude one or more additional columns and that a comma must precede each additional column.For example, if you base your primary key on three columns, your syntax is as follows:

    PRIMARY KEY (, , )

    Dont worry if you dont understand how primary keys are created or how they can be made up ofmultiple columns. Primary keys are discussed in detail in Chapter 5.

    18

    Chapter 1

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    19/42

    Now examine the last optional element in the definition:

    | {INDEX [] ( [{, }...])}

    This line creates an index. If you use this option, you must include the INDEX keyword and at least ocolumn name, enclosed in parentheses. As was the case when creating a primary key, you can also

    include additional columns, as long as a comma precedes each additional column. However, unlikeprimary key, the index name is optional. Its up to you whether you want to name the index, althougnaming all objects in a database is generally considered a good practice.

    You should now have a fairly good sense of how to interpret a statements syntax. As you have seen fthe table definition example, the syntax for an SQL statement can contain many elements. However,once youre comfortable with syntax structure and how symbols define this structure, you should bable to interpret the syntax for nearly any SQL statement (albeit some statements might present a fagreater challenge than other statements). The next section discusses how to use this syntax to create SQL statement.

    Creating an SQL Statement

    An SQL statement can range from very simple only a few words to very complicated. If at anypoint in the statement-creation process youre uncertain how to proceed, you can refer to the syntax fodirection. Even experienced SQL programmers must often refer back to the syntax in order to understand the subtleties of a particular statement, but once you have that syntax as a frame of reference,youre ready to build your statement.

    Below is an example of a statement based on the table definition syntax. The following CREATE TABstatement creates a table named Parts:

    /* Creates the Parts table */CREATE TABLE Parts(

    PartID INT NOT NULL,PartName VARCHAR(40) NOT NULL,CatID INT NOT NULL,PRIMARY KEY (PartID)

    )ENGINE=MYISAM;

    The first thing to note is that the CREATE TABLE example is a single SQL statement. Notice that it enwith a semi-colon, which is sometimes referred to as a terminator. When you access a MySQL databadirectly (for example, by using the mysql client utility), you must terminate each SQL statement witsemi-colon.

    As mentioned earlier, SQL is indifferent to extra spaces, tabs, and line breaks. However, the statement iswritten in such a way as to facilitate readability and to make it easier to explain each element. For example,the table elements are indented and the opening and closing parentheses are placed on their own lines.

    Introducing the MySQL Relational Database Management Syst

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    20/42

    The first line of code reads:

    /* Creates the Parts table */

    The code is merely a comment and is not processed by MySQL. (In fact, you normally wouldnt usecomments when working with MySQL interactively, but the comment is included here to demonstrate

    how they work.) It is there only to provide information to anyone who might be viewing the code.Adding comments to your code to explain the purpose of each part or to provide any special informationis always a good idea. Comments are particularly useful when updating code you had created in thepast or when someone else is working on code that you created. Comments are also very useful if youretrying to debug your code.

    You can also create a comment by preceding the text with double dashes (--). However, the commentcannot include any line breaks.

    As you can see from the line of code, a comment begins with /* and ends with */. Everything betweenthe two symbols, including line breaks, is considered part of the comment and therefore ignored byMySQL when processing the SQL statements.

    The next line of code is the first line of the actual CREATE TABLE statement:

    CREATE TABLE Parts

    As you can see, the line includes the CREATE TABLE keywords and the name of the new table Parts.If you refer to the related line of syntax, you can see how to form the CREATE TABLE clause :

    CREATE [TEMPORARY] TABLE [IF NOT EXISTS]

    Notice that the optional keyword TEMPORARY and the optional keywords IF NOT EXISTS are notincluded in the clause, only the required elements. Now take a look at the definitions:

    (

    PartID INT NOT NULL,

    PartName VARCHAR(40) NOT NULL,

    CatID INT NOT NULL,

    PRIMARY KEY (PartID)

    )

    This part of the CREATE TABLE statement includes four components. The firstthree represent column definitions and the last represents a primary key definition. The elements areenclosed in parentheses and separated by commas. If you compare this to the syntax, you can seehow the placeholders represent each component:

    (, , , )

    20

    Chapter 1

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    21/42

    However, as you may recall, this is only a part of the story because the syntax further defines the placeholder to include three options: a column definition, a primary key definitiand an index definition. Take a look at one of the column definitions in the sample CREATE TABLEstatement to illustrate how it compares to the syntax:

    PartID INT NOT NULL,

    In this case, the columns name is PartID, it is configured with INT data type (to permit up to fournumerals), and null values are not permitted. If you compare this to the syntax, you can see why thecolumn definition is structured as it is:

    [NOT NULL | NULL] [DEFAULT ] [AUTO_INCREMENT]

    As you can see, PartID is the value used for the placeholder, INT is the value usedfor the placeholder, and the only optional element used is NOT NULL. The placeholdrefers to the columns data type, which in this case is INT. Notice also that this definition ends with a comma because another definition follows. Now look at tprimary key definition:

    PRIMARY KEY (PartID)

    This line only includes the PRIMARY KEY keywords and one column name. As a result, a comma isnot required after the column name. However, parentheses must still enclose the column name. Alsobecause this is the last definition, you dont need to use a comma after the primakey definition. Compare this to the syntax:

    PRIMARY KEY ( [{, }...])

    As you can see, you use none of the optional elements, only what is essential for a primary key definiMoving on to the final line of the CREATE TABLE statement:

    ENGINE=MYISAM;

    This part of the statement defines the type of table that is being created. If you compare this to the synyou see that youve chosen one of the available options:

    [ENGINE = {BDB | MEMORY | ISAM | INNODB | MERGE | MRG_MYISAM | MYISAM}]

    As the syntax indicates, this entire line of code is optional. However, if youre going to include it, yomust include ENGINE= and exactly one of the options.

    As you can see from this example, creating an SQL statement is a matter of conforming to the structas it is defined in the statement syntax. Running the CREATE TABLE statement in the example above

    adds a table to your database. From there, you could add data to the table, access that data, and modit as necessary. Figure 1-5 shows what the table might look like in a MySQL database once youveexecuted the CREATE TABLE statement and then added data to the table.

    Introducing the MySQL Relational Database Management Syst

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    22/42

    Figure 1-5

    As displayed in the figure, the Parts table includes the three columns PartID, PartName, andCatID as well as the sample data. You could have created a table with as many columns as necessary,depending on the design of your database and your requirements for storing data, and you couldhave added many more rows of data.

    MySQL provides a client utility named mysql, which allows you to interact directly with MySQLdatabases. The mysql client utility is similar to a command prompt as you would see in an operatingsystem command window. If you were use the client utility to view the contents of the table, youwould see the data displayed in a manner similar the following:

    +--------+-------------------+-------+

    | PartID | PartName | CatID |+--------+-------------------+-------+| 1001 | Guy wire assembly | 503 || 1002 | Magnet | 504 || 1003 | Regulator | 505 || 1004 | Brushes | 504 || 1005 | Generator | 506 || 1006 | Dump load system | 506 || 1007 | Power assembly | 501 || 1008 | Tower assembly | 501 || 1009 | Rotor assembly | 501 || 1010 | Hub | 611 || 1011 | Shaft assembly | 612 |

    | 1012 | Governor | 619 || 1013 | Furling tail | 612 |+--------+-------------------+-------+13 rows in set (0.03 sec)

    PartID PartName CatID

    1001 Guy wire assembly 503

    1002 Magnet 504

    1003 Regulator 505

    1004 Brushes 504

    1005 Generator 506

    1006 Dump load system 506

    1007 Power assembly 501

    1008 Tower assembly 501

    1009 Rotor assembly 501

    1010 Hub 611

    1011 Shaft assembly 612

    1012 Governor 619

    1013 Furling tail 612

    Parts table

    22

    Chapter 1

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    23/42

    These results arent quite as elegant as the table in Figure 1-5, but they display the same informationaddition, this option represents the way youre likely to see data displayed if youre working withMySQL directly.

    MySQL, the RDBMS, is very different from mysql the command-line utility. The mysql utility is aclient tool that provides an interactive environment in which you can work directly with MySQL

    databases. In most documentation, including the MySQL product documentation, the utility is shownin all lowercase. You learn more about using the mysql client tool in Chapter 3.

    Now that you have an overview of how to use statement syntax to create SQL statements, you can labout the different types of statements that SQL supports.

    Types of SQL Statements

    As you work your way through this book, you find that SQL supports many different types of statemand that most of these statements include a number of options. SQL is generally broken down into tcategories of statements: data definition language (DDL), data manipulation language (DML), and dcontrol language (DCL). The following three sections discuss each of these statement types and provyou with examples. These examples use the table in Figure 1-5. However, keep in mind that these examare meant only to introduce you to SQL statements. Each statement is covered in much greater detailater in the book, but the examples help to provide you with an overview of how to create SQL statem

    Using DDL Statements

    In MySQL, DDL statements create, alter, and delete data structures within the database. DDL statemdefine the structure of a MySQL database and determine the type of data that can be stored in the dataand how to store that data. Specifically, DDL statements allow you to do the following:

    Create and remove databases (the CREATE DATABASE and DROP DATABASE statements)

    Create, alter, rename, and remove tables (the CREATE TABLE, ALTER TABLE, RENAME TABL

    and DROP TABLE statements) Create and remove indexes (the CREATE INDEX and DROP INDEX statements)

    As you move through the book, you learn more about databases, tables, and indexes and are providwith details on how to create statements that allow you to work with those objects. In the meantimeheres a brief description of each of these objects so you have a better idea of the nature of DDL statem

    Database: As you learned at the beginning of the chapter, a database is a collection of relatedata organized in a structural format that is described by metadata.

    Table: A table is a grid-like structure that consists of a set of columns and rows that represesingle entity within the database. Each row is a unique record that stores a set of specific da

    Index: An index is a list of values taken from a specified column. Indexes are used to speedsearches and reduce the time it takes to execute an SQL query.

    Introducing the MySQL Relational Database Management Syst

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    24/42

    Earlier in the chapter, you saw an example of a DDL statement the CREATE TABLE statement whichyou used to create a table named Parts. Another example of a DDL statement, the following DROP TABLEstatement removes the Parts table from the database:

    /* Removes the Parts table from the database */

    DROP TABLE Parts;

    As this example demonstrates, some DDL statements (as well as some DML and DCL statements) canbe quite simple. In this case, you need only to specify the tables name along with the keywords DROPTABLE to remove its contents from the database. (As you may recall, the first line in this code is merelya comment that provides information about the statement to come.)

    In Chapter 5, you learn how to create, alter, rename, and drop tables, as well as how to create and dropdatabases and indexes. The next section outlines DML statements.

    Using DML Statements

    Unlike DDL statements, DML statements are more concerned with the data stored in the database thanthe database structure itself. For example, you can use DDL statements to request information from thedatabase as well as insert, update, and delete data; however, you would not use a DML statement tocreate or modify the tables that hold the data. Specifically, DML statements allow you to do the following:

    Query a database for specific types of information from one or more tables (the SELECTstatement)

    Insert data into a table (the INSERT, REPLACE, and LOAD DATA INFILE statements)

    Update existing data in a table (the INSERT and REPLACE statements)

    Delete data from a table (the DELETE FROM and TRUNCATE TABLE statements)

    The SELECT statement is perhaps the statement that you use more than any other. The SELECT statement

    allows you to retrieve data from one or more tables in a database. Whenever you query a database, youuse the SELECT statement to initiate that query. The statement can be relatively simple or very complex,depending on the type of information youre trying to retrieve and the degree to which you want torefine your search.

    The following SELECT statement provides you with an example of how you can retrieve data from theParts table:

    /* Retrieves data for parts with CatID less than 600 */

    SELECT PartName, PartID, CatID

    FROM Parts

    WHERE CatID < 600

    ORDER BY PartName;

    Again, a comment that describes the codes purpose introduces the statement. The actual statementbegins on the second line and is divided into four clauses, each written on its own line. A clause issimply a section of a statement. The clause is usually referred to by the keyword that starts the clause.For example, the first clause is the SELECT statement is the SELECT clause. The first clause in any

    24

    Chapter 1

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    25/42

    SELECT statement is always the SELECT clause, which indicates which columns to include in the queIn this case, the SELECT clause retrieves data from the PartName, PartID, and CatID columns. (You crefer back to Figure 1-5 to view the table and its contents.) The FROM clause is next, and it provides tname of the table or tables to include in the query. TheWHERE clause refines the query based on theconditions specified in the clause. In this case, only rows with a CatID value less than 600 are includin the query results. This is indicated by the name of the column (CatID), the less than operator (

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    26/42

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    27/42

    process known as direct invocation is often the most expeditious way to create and modify thedatabase structure; control access to data; and view, insert, update, or delete data.

    The nature in which SQL statements are executed and the results displayed depends on the client tosupported for a RDBMS. In MySQL, the primary tool available for directly invoking SQL statementsthe mysql command-line utility, which you run from the command prompt of the operating system

    where MySQL is installed. For example, if you run MySQL on Windows Server 2003, you can open aCommand Prompt window, change to the \mysql\bin directory, and run the mysql utility, as shownFigure 1-6. As you can see, mysql has been used to execute a SELECT statement against the Parts tabthe Test database. The query results display directly beneath where you enter your statement.

    Figure 1-6

    You can also run the mysql utility from a command prompt on a remote computer. The client programmust be installed on the remote computer and you must provide the necessary parameters when youlaunch the utility. The mysql tool is discussed in detail in Chapter 3.

    The mysql tool is not limited to SELECT statements. You can execute DDL statements such as the CRDATABASE statement, DMS statements such as the UPDATE statement, and DCL statements such as thREVOKE statement. However, unlike a SELECT statement, which normally returns rows of data, the ostatements return only a message that reports the success of the statement executed.

    The statement below demonstrates how the mysql utility works. Suppose you want to create a table

    named Categories. (You can refer back to Figure 1-3 to view this table.) You can use the mysql utilityexecute the following statement:

    Introducing the MySQL Relational Database Management Syst

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    28/42

    /* Creates the Categories table */

    CREATE TABLE Categories

    (

    CatID INT NOT NULL,

    CatName VARCHAR(40) NOT NULL,

    Parent INT NOT NULL,

    PRIMARY KEY (CatID)

    )

    ENGINE=MYISAM;

    As you can see, the statement creates a table that contains three columns: CatID, CatName, and Parent.The statement also defines a primary key on the CatID column and defines the table as type MYISAM.When you execute the statement, the table is added to the database, and mysql returns the followingmessage:

    Query OK, 0 rows affected (0.06 sec)

    From this message, you can see that the statement processed with no problem and that the statementaffected no rows, which is expected if youre creating a table. If you were to run a statement such as the

    INSERT statement, the message would reflect the number of rows inserted into the table or the numberof rows affected in some other way, depending on the type of statement. In addition to informationabout whether the query ran without error and the number of rows affected, the message tells you howlong it took to process your query, which in this case is .06 seconds.

    The greatest advantage, then, of using the mysql utility is that it allows you to execute and receiveimmediate responses to your SQL statements. However, directly invoking SQL statements through aclient tool such as mysql has another advantage it avoids a condition known as impedance mismatch,which occurs when a data type used in a programming language is not compatible with a data typeused in a MySQL database.

    Whenever you pass data between an application programming language and a MySQL database, you

    must ensure that the data type used to define the data in the database is compatible with the data typeused to define that same data in the application language. If they are not compatible, an impedancemismatch can occur, resulting in an error in your application or in the loss of data.

    As you might recall from earlier in the chapter, a data type determines the type of data that can be storedin a tables column. Data types are discussed in greater detail in Chapter 5.

    Accessing a MySQL database interactively avoids the issue of impedance mismatch and providesimmediate results to your SQL statements. However, only specific types of users, such as databaseadministrators or programmers, generally use this method. The majority of users access data in aMySQL database through the applications in which theyre working. Still, for the purposes of thisbook, you use the mysql utility to learn how to create database objects and manipulate data. Once

    you have a better understanding of how MySQL implements SQL, you can create applications thatpass SQL statements to MySQL databases.

    28

    Chapter 1

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    29/42

    Module Binding

    Few RDBMS vendors have implemented module binding in their products, and MySQL is not one othem. As a result, this chapter covers the topic only briefly. The only reason its covered at all is becait is part of the SQL:2003 standard, and you should have as complete a picture of SQL as possible.

    Module binding is a type of statement execution in which modules made up of SQL statements are ca

    from within a host programming language. A module includes properties that define the module itsas well as one or more SQL statements that are invoked when the programming language calls the moThe module is stored as an object separate from the host programming language, so the host languacontains calls to the module that invoke the SQL statements within the module.

    Embedded SQL

    At one time, embedded SQL was one of the most common methods used to access data in a databasfrom within a programming language. As the name suggests, embedded SQL refers to SQL statementthat are embedded directly within the programming language to allow that language to access and modata within an SQL database. The SQL:2003 standard defines how SQL statements are to be embeddinto a language and recommends which languages a RDBMS should support. According to the stand

    the supported languages should include C, COBOL, Fortran, and several others.

    Despite the SQL:2003 standards recommendations, few RDBMSs support all the suggested programmlanguages. Some products support a few of the languages, while others support languages other thathe ones listed in the SQL:2003 standard. Regardless of how extensively a RDBMS supports embeddSQL, most systems support at least a couple of languages, and MySQL AB is no exception. MaxDB, enterprise-level RDBMS, includes a precompiler that allows you to embed SQL in your C and C++applications. The precompiler removes the SQL statements from the code and places them in a fileseparate from the original application file. The precompiler then replaces the statements in the origifile with calls to the SQL statements.

    In order to embed an SQL statement into a C or C++ application, you must precede each statement w

    the keywords EXEC SQL and end the statement with a semi-colon. For example, the following embedSQL statement inserts data into a table named Parts:

    /* Embed an INSERT INTO statement in the application */

    EXEC SQL INSERT INTO Parts

    (PartID, PartName, CatID)

    VALUES (1014, Heater, 505);

    Notice that you can include comments with your SQL statement. A comment must begin with /* andend with */.

    There are, of course, more elements to embedded SQL than those shown here, not only with regardto how you embed the actual statements, but also in terms of the various options that you can usewhen running the precompiler. However, a more thorough discussion of embedded SQL is beyondthe scope of this book. This is due primarily to the fact that embedded SQL is used on a limited baswhen developing applications that connect to a MySQL database. The method used most commonlyfor establishing that connection and executing SQL statements is through one of the APIs that MySQsupports.

    Introducing the MySQL Relational Database Management Syst

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    30/42

    Call-Level Interface

    When the SQL:2003 standard defines the methods available for accessing data in a database, it includesthe call-level interface. A call-level interface is essentially an API that allows a programming language tocommunicate directly with an SQL database. A call-level interface, or API, includes a set of routinesthat the programming language can call in order to facilitate data access from within that language. Theroutines access the data as defined within the programming language and return that data to the

    program, where the host programming language can process it.

    MySQL supports a number of APIs that allow applications written in various types of programminglanguages to communicate with MySQL databases. The following descriptions provide an overview ofseveral of these APIs.

    C: The C API, which is distributed with MySQL, is the main programming interface thatallows applications to connect to MySQL. Most of the client applications included in the MySQLdistribution are written in C and rely on this API. In addition, the other APIs, except those usedfor Java applications, are based on the C client library, which defines the C API.

    ODBC: MySQL supports Open Database Connectivity (ODBC) through the MySQL AB product

    MySQL Connector/ODBC. ODBC is a database connectivity standard that allows differenttypes of applications to connect to different types of databases. ODBC-compliant applicationscan use MySQL Connector/ODBC to connect to MySQL databases.

    JDBC: MySQL supports Java Database Connectivity (JDBC) through the MySQL AB productMySQL Connector/JDBC. JDBC is a database connectivity standard that allows Java applicationsto connect to different types of databases. JDBC-compliant applications can use MySQLConnector/ODBC to connect to MySQL databases.

    PHP: The PHP API, which is now included with the PHP preprocessor, allows a PHP script on aWeb page to communicate directly with a MySQL database. Database connections and requestsfor data (through SQL statements) are coded directly in the PHP script.

    MySQL supports many more APIs than are listed here. However, these are the four that this book ismost concerned with because, by the end of the book, you learn how to connect to a MySQL databasefrom within a PHP application, a JDBC-compliant application, and an ODBC-compliant application.(The ODBC and PHP APIs interface with the C client library, which is why the C API is also includedhere.) For more information about each of these APIs and the other APIs supported by MySQL, seeAppendix B.

    As already mentioned, the MySQL APIs are the most common method used for accessing data in MySQLdatabases. An API allows your application to establish a connection to MySQL and its databases, sendSQL statements to the databases, and process the results that the statements return. For this reason, thisbook includes considerable coverage of database connectivity within PHP, JDBC, and ODBC applica-tions. (See chapters 18, 19, and 20, respectively.) In addition, you are introduced to data-driven applications

    in more detail later in this chapter, where you see an example of how an application uses an API to accessdata within a MySQL database.

    30

    Chapter 1

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    31/42

    Implementation-Specific SQLBy now, you should have a good overview of SQL and how to create SQL statements. As you have sthere are several types of SQL statements (DDL, DML, and DCL). For example, the CREATE TABLE sment is a type of DDL statement. However, not all CREATE TABLE statements are created equally, orother type of statement for that matter. What this means is that each RDBMS product implements SQ

    its own way. Although most of them try to reach at least some conformance to the ANSI standard, mof a statements details are unique to the product. In other words, a CREATE TABLE statement in Myis not quite the same as a CREATE TABLE statement in Oracle. And the CREATE TABLE statements inboth products are implemented a little differently from how the SQL:2003 standard defines the statem

    Still, generally a number of similarities exist between statements as they appear in the products andthe SQL standard. The following example takes a close look at the CREATE TABLE statement to helpillustrate the differences. Earlier in the chapter you learned the basic table definition syntax. The firthree lines of the syntax for the actual statement are as follows:

    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] ( [{, }...])[ENGINE = {BDB | MEMORY | ISAM | INNODB | MERGE | MRG_MYISAM | MYISAM}]

    The opening line (::=) of the table definition is omitted because its not impor-tant to the discussion here.

    The statement syntax provided previously was for the CREATE TABLE statement as it is used in aMySQL database. When creating a table in MySQL, you can create a basic table or a temporary tableand you can create the table whose creation is dependant on whether a table by that name already eIn addition, you can select the type of table that you want to create, for example, an INNODB table.

    The first few lines of the table definition syntax as it appears in the SQL:2003 standard appear below

    CREATE [{GLOBAL | LOCAL} TEMPORARY] TABLE

    ( [{, }...])[ON COMMIT {PRESERVE|DELETE} ROWS]

    The basic syntax is the same; however, there are a number of differences in the optional syntax elemFor example, according to the SQL standard, if you create a temporary table, you define it as GLOBALLOCAL. In addition, the SQL standard includes no facility for checking whether a table already exists(There is no set of IF NOT EXISTS keywords.) The options in the third row are also very differentbetween the SQL standard and the statement its use in MySQL. MySQL gives you the ability to defithe type of table that you want to create; the SQL standard does not.

    Another difference between MySQL and the SQL standard is the ON COMMIT option that the standardsupports. In actuality, MySQL supports a similar option, but it isnt covered in this chapter. However,

    MySQL implements this functionality in a manner different from the standard. For more informationabout all the options of the CREATE TABLE statement, as MySQL implements is, see Chapter 5.

    Introducing the MySQL Relational Database Management Syst

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    32/42

    Now that youve seen how the CREATE TABLE statement can differ between MySQL and the SQL:2003standard, take a look at yet another version of the statement. The following CREATE TABLE syntaxshows the first few lines of the CREATE TABLE syntax as SQL Server 2000 defines it:

    CREATE TABLE ( [{, }...])[ON { | DEFAULT}]

    The first two lines of the statement contain elements that are basically the same as in MySQL and theSQL:2003 standard. However, the third line, which is optional, contains elements that you wont see inMySQL or in the SQL:2003 standard.

    In addition, if you were to compare the definitions for these three syntax examples,you would find a number of differences at this level as well. The point here is that each product imple-ments SQL differently from one another. This can be important if youre writing applications that couldbe used to access databases in different RDBMS products. In other words, if youre writing an applicationthat uses SQL to access data, you must be sure that youre familiar with how that product implementsSQL, which is why SQL statements are covered, as theyre implemented in MySQL, in considerable detail.

    Data-Driven ApplicationsThe goal for many of you in reading this book is to learn about MySQL so that you can create data-drivenapplications that can access MySQL databases. For some of you, this may mean installing MySQL, design-ing and creating databases, populating the databases with data, and administering the MySQL environment.However, many of you may be concerned primarily with how to build applications in a specific program-ming language that can connect to those databases.

    In order to build an effective data-driven application, its helpful to have a high-level understandingof how these types of applications operate. Youve already been introduced to MySQL, relational

    databases, and SQL, and have been provided an overview of how these components fit together. Asyou may recall, the MySQL RDBMS provides the structure necessary to support and interact withSQL databases. However, MySQL is only part of the equation in any data-driven application. Theapplication itself must reside within some sort of framework in order to operate and communicatewith the database.

    A good example of how this structure works is the Web-based application. The application must becalled from within the context of a Web server (for example, Apache or Internet Information Services)and must reside in an environment that supports the applications functionality. The next section givesyou an example to better illustrate these concepts.

    The Application ServerWeb-based applications are one of the most widely implemented types of data-driven applications in usetoday. Nearly every time you access a Web site, youre using an application that in some way interacts witha database. Whether youre shopping online, searching for information, or managing your bank account,youre working with a data-driven application.

    32

    Chapter 1

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    33/42

    Web-based applications based on PHP and MySQLare becoming increasingly popular. PHP is a server-scripting language that is embedded directly in a Web page. The PHP preprocessor, which includes MySQL API, processes the PHP script on a Web page on the server and provides Hypertext MarkupLanguage (HTML) output that is then sent to the client computer along with the other HTML elemeon the page.

    This section outlines an example of a server that is set up to support PHP applications. Figure 1-7 shhow to use PHP, Apache, and Linux together to support a PHP application. At the first layer on ansystem youre setting up is the operating system, which in this case is Linux; however, this could beoperating system that would support the necessary PHP environment. At the next layer is Apache, aWeb server that runs in the Linux environment. Apache supports a variety of Web-based applicationincluding PHP. The PHP preprocessor runs in conjunction with Apache and includes the PHP MySQL

    Together, Linux, Apache, and the PHP preprocessor provide the necessary environment to support aPHP application. The application (.php) files are located within the Linux file structure, are hostedwithin the Apache environment, and are processed through the PHP preprocessor. However, you neone more ingredient to allow the PHP application to communicate with a MySQL database the PHMySQLAPI. The API facilitates the communication with MySQL and its databases, allowing the applic

    to access data within the databases.

    Figure 1-7

    Connecting to a MySQL DatabaseIn order to communicate with MySQL, a PHP application must include within its script the elementnecessary to establish and maintain a connection with MySQL. You achieve the connection by levera

    the MySQL API, which is based on the C client library in MySQL. When a client computer requestsdata from a PHP application, the PHP preprocessor executes the PHP code and replaces it with whatevoutput is produced by executing that code. If code execution includes retrieval from a MySQL databthe data is retrieved and the output is incorporated into the output that the preprocessor produces. Thoutput is rendered as HTML and returned to the client computer requesting the information. If yourefer to Figure 1-8, you can get a better idea of how this process works.

    Linux operating system

    Apache web server

    PHP preprocessor

    PHP MySQL APIPHP

    application(.php)files

    Introducing the MySQL Relational Database Management Syst

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    34/42

    Figure 1-8

    As the figure indicates, a number of steps are necessary in order to support a PHP data-drivenapplication. The following list takes a closer look at each step so you can better understand how aPHP application retrieves data:

    1. A client computer, running a browser such as Netscape, issues a Hypertext Transfer Protocol(HTTP) request to the PHP application on the Apache Web server. (This would be the samething as entering a URL in the address box of your browser.) When Apache receives the request,it begins to process the requested page.

    2. If a requested page has a .php file extension, the PHP preprocessor kicks in and reads the file.The preprocessor treats everything that is not marked as PHP script as literal text. This wouldinclude all your HTML tags that are outside the enclosed PHP script.

    3. The PHP preprocessor begins executing the PHP script.

    4. If data is requested from a MySQL database, PHP uses the MySQLAPI to connect to MySQLand request data. The API is based the MySQL C client library, which is part of the

    MySQL installation.

    5. MySQL returns the requested data.

    6. The PHP preprocessor incorporates the data retrieved from the MySQL database into the script-execution process and outputs all processed scripts into HTML.

    7. The Apache Web server responds to the client computer with an HTML page that includes theinformation that the PHP preprocessor generates.

    Of course, other application programming languages and applications environments work a littledifferently than what is shown here, but this at least provides you with an overview of a data-drivenapplication. However, note that, although the application server and database server are shown as

    separate computers, this does not necessarily have to be the case. You can install Apache, PHP, andMySQL on the same computers (which is a typical configuration for developers). In fact, you couldalso install the browser on the same computer.

    Client computerconfigured with anInternet browser

    Linux serverconfigured withApache and PHP

    Linux serverconfigured with

    MySQL

    PHP

    application(.php)files

    HTTP requests/responses PHP MySQL API

    MySQL Cclientlibrary

    MySQLdatabase

    34

    Chapter 1

    TEAM LinG - Live, Informative, Non-cost and Genuine !

  • 8/13/2019 Wrox.beginning.mysql.mar.2005 - 01. Introduction

    35/42

    Creating a Data-Driven Application

    Now that you have an overview of how a data-driven application works, take a look at a sample PHapplication that connects to a MySQL database. The following application connects to the Parts tablthe MySQL T