-
BT 0075 RDBMS with MySQL
Contents
Unit 1
Basics of MySQL 1
Unit 2
Data Types 24
Unit 3
Data Definition Language (DDL) 52
Unit 4
Data Manipulation Language (DML) 90
Unit 5
Advanced Data Manipulation Language 114
Unit 6
Subqueries 133
Unit 7
Operators and Functions 153
Unit 8
Advanced Functions 183
Unit 9
Transaction Management 214
Unit 10
Stored Procedures 229
Edition: Spring 2009
BKID B1003 10
th June 2009
-
Unit 11
Control Statement 242
Unit 12
User Account Management 253
Unit 13
General Security Issues 281
Unit 14
Log Files 294
References 311
-
Prof. S. Kannan Director & Dean (in-charge) Directorate of
Distance Education Sikkim Manipal University of Health, Medical
& Technological Sciences (SMU DDE)
Board of Studies Dr. U. B. Pavanaja (Chairman) Nirmal Kumar
Nigam General Manager Academics HOP IT Manipal Universal Learning
Pvt. Ltd. Sikkim Manipal University DDE Bangalore. Manipal. Prof.
Bhushan Patwardhan Dr. A. Kumaran Chief Academics Research Manager
(Multilingual) Manipal Education Microsoft Research Labs India
Bangalore. Bangalore. Dr. Harishchandra Hebbar Ravindranath P. S.
Director Director (Quality) Manipal Centre for Info. Sciences,
Yahoo India Bangalore Bangalore. Dr. N. V. Subba Reddy Dr. Ashok
Kallarakkal HOD-CSE Vice President Manipal Institute of Technology,
Manipal IBM India, Bangalore Dr. Ashok Hegde H. Hiriyannaiah Vice
President Group Manager MindTree Consulting Ltd., Bangalore EDS
Mphasis, Bangalore Dr. Ramprasad Varadachar Director, Computer
Studies Dayanand Sagar College of Engg. Bangalore.
Content Preparation Team Content Writing Content Editing Mr.
Nirmal Kumar Nigam Mr. Vinayak G. Pai Assistant Professor, HoP IT
Assistant Professor, Dept. of IT Sikkim Manipal University DDE
Sikkim Manipal University DDE Manipal. Manipal. Instructional
Design Mr. Kulwinder Pal Senior Lecturer (Education) Sikkim Manipal
University DDE, Manipal
Edition: Spring 2009
This book is a distance education module comprising a collection
of learning material for our students. All rights reserved. No part
of this work may be reproduced in any form by any means without
permission in writing from Sikkim Manipal University of Health,
Medical and Technological Sciences, Gangtok, Sikkim. Printed and
published on behalf of Sikkim Manipal University of Health, Medical
and Technological Sciences, Gangtok, Sikkim by Mr. Rajkumar
Mascreen, GM, Manipal Universal Learning Pvt. Ltd., Manipal 576
104. Printed at Manipal Press Limited, Manipal.
-
RDBMS with MySQL is a 4 credit subject in third semester of BSc
IT
program.
MySQL, the most popular Open Source SQL database management
system, is developed, distributed, and supported by MySQL
AB.
Open Source means that it is possible for anyone to use and
modify the
software. Anybody can download the MySQL software from the
Internet and
use it without paying anything. If you wish, you may study the
source code
and change it to suit your needs. The MySQL software uses the
GPL (GNU
General Public License), http://www.fsf.org/licenses/, to define
what you
may and may not do with the software in different
situations.
The MySQL Database Server is very fast, reliable, and easy to
use. MySQL
Server works in client/server or embedded systems.
MySQL is named after co-founder Monty Widenius's daughter,
My.
In this book on MySQL, we would lay the emphasis on the
applications of
MySQL in solving the database related problems and also deal
with the
coverage of every aspect related to MySQL.
The SLM of this subject is divided into 14 units, the overview
of which is
given below.
Unit 1 Basics of MySQL:
This unit introduces the user to the basic theoretical concepts
and features
behind MySQL.
Unit 2 MySQL Data Types:
This unit introduces the theoretical and practical aspects of
dealing with
various data types of MySQL database, their syntax, usage and
applications
in the real world.
Unit 3 Data Definition Language (DDL):
This unit starts with an introduction of Data Definition
Language Statements
used in MySQL. It describes the syntaxes of creating and
modifying
Databases, Indexes and Tables.
SUBJECT INTRODUCTION
-
Unit 4 Data Manipulation Language (DML):
The Data Manipulation Language or DML statements are used to
manipulate the data inside a database. This unit introduces
various DML
Statements built into MySQL.
Unit 5 Advanced Data Manipulation Language:
This unit deals with the advanced DML Statements which is an
extension of
unit 4. It deals with Join and Union operations used to join
database objects
like tables. It also deals with various other operations of
truncating the data,
Updating or Modifying the existing data. It speaks about the
specific
operator Do, Handler and Replace.
Unit 6 Subqueries:
This unit deals with subqueries. A subquery is a query written
within a query
where in the result processing is segregated among the inner and
outer
queries.
Unit 7 Operators and Functions:
This unit introduces the reader with all varieties of operators
used in both
SQL and also in case of Functions and procedures used along with
them.
Unit 8 Advanced Functions:
This unit deals in detail with the next level of functions used
in addition to
the functions discussed in the previous unit. It discusses
regarding the Full
text search functions, Cast Functions Encryption Functions, and
the usage
of Group By clause with various functions, and modifiers.
Unit 9 Transaction Management:
A Transaction is a series of one or more SQL Statements that are
logically
related or a series of operations performed on table data. This
unit
introduces to the reader with various statements used in MySQL
to treat
with Transactions like Starting Transactions, making the output
of the
transaction permanent by using Commit Statements.
Unit 10 Stored Procedures
A stored procedure is a set of SQL commands that can be stored
in the
server. This unit discusses the commands used to create, alter,
and Drop
procedures and / or functions.
-
Unit 11 Control Statements:
This unit deals with various flow control constructs used in
case of stored
procedures or functions.
Unit 12 User Account Management:
This section describes how to set up accounts for clients of
your MySQL
server. The meaning of account names and passwords as used in
MySQL
and how that compares to names and passwords used by your
operating
system is discussed.
Unit 13 General Security Issues:
This unit describes some general security issues to be aware of
and what
you can do to make your MySQL installation more secure against
attack or
misuse. It also describes the methods to maintain security while
transferring
data into MySQL from external resources
Unit 14 Log Files:
This unit describes the importance of maintaining log files
within MySQL. It
describes various types of log files maintained in MySQL like
Error, General
Query, Binary, etc.
Objectives of studying this subject
After studying this subject, you should be able to:
discuss the features and use MySQL for database applications
define and use the appropriate data types in your
applications
Describe the syntaxes of DML Statements and use them
appropriately
Define and explain the syntaxes of DDL statements
explain the usage of subqueries as applicable
Describe the usage of various available operators and
functions
Discuss the concepts of Transaction Management
describe the usage of Stored Procedures and functions in
conjunction
with flow control statements
Explain the importance of User Account Management
Define general security guidelines in the usage of database
servers
Describe the need of maintaining different types of log
files
-
The subject demands knowledge and understanding of the subject
titled
Database Management Systems bearing the subject code BT0066
of
BSc IT First Semester with respect to both the theoretical and
practical
concepts.
-
RDBMS with MySQL Unit 1
Sikkim Manipal University Page No. 1
Unit 1 Basics of MySQL Structure
1.1 Introduction
Objectives
1.2 Features of MySQL
1.3 Top 10 Reasons to use MySQL
1.4 MySQL Development Roadmap
1.5 Connecting to and Disconnecting from the Server
1.6 Accessing and Creating Databases and Tables
1.7 Loading Data
1.8 Summary
1.9 Terminal Questions
1.10 Answers
1.1 Introduction
MySQL, the most popular Open Source SQL database management
system, is developed, distributed, and supported by MySQL AB.
MySQL AB
is a commercial company, founded by the MySQL developers. It is
a second
generation Open Source company that unites Open Source values
and
methodology with a successful business model.
The MySQL Web site (http://www.mysql.com/) provides the
latest
information about MySQL software and MySQL AB.
MySQL is a Database Management System
A database is a structured collection of data. It may be
anything from a
simple shopping list to a picture gallery or the vast amounts
of
information in a corporate network. To add, access, and process
data
stored in a computer database, you need a database
management
system such as MySQL Server.
MySQL is a Relational Database Management System
A Relational Database stores data in separate tables rather than
putting
all the data in one big storeroom. This adds speed and
flexibility.
MySQL software is Open Source
Open Source means that it is possible for anyone to use and
modify the
software. Anybody can download the MySQL software from the
Internet
and use it without paying anything. If you wish, you may study
the
-
RDBMS with MySQL Unit 1
Sikkim Manipal University Page No. 2
source code and change it to suit your needs. The MySQL
software uses the GPL (GNU General Public License),
http://www.fsf.org/licenses/, to define what you may and may not
do with
the software in different situations. If you feel uncomfortable
with the
GPL or need to embed MySQL code into a commercial application,
you
can buy a commercially licensed version from us.
The MySQL Database Server is very fast, reliable, and easy to
use.
MySQL Server works in client/server or embedded systems.
The MySQL Database Software is a client/server system that
consists of
a multi-threaded SQL server that supports different backends,
several
different client programs and libraries, administrative tools,
and a wide
range of application programming interfaces (APIs).
A large amount of contributed MySQL software is available.
It is very likely that your favorite application or language
supports the
MySQL Database Server.
The official way to pronounce MySQL is My Ess Que Ell (not
my
sequel), but we don't mind if you pronounce it as my sequel or
in
some other localized way.
In this unit, we would be dealing with the features of MySQL
followed by
the development roadmap and the steps in starting and stopping
the
MySQL server. In addition, we will be dealing with the commands
used
to create and access databases and tables in the database
server.
Objectives
After studying this unit, you should be able to:
explain the features of MySQL
describe the process of connecting to and disconnecting from
MySQL
server
explain the operations of accessing and creating databases and
tables
using MySQL
discuss the steps in Loading data from external data sources
1.2 Features of MySQL
This section describes some of the important characteristics of
the MySQL
Database Software.
-
RDBMS with MySQL Unit 1
Sikkim Manipal University Page No. 3
Internals and Portability:
Written in C and C++.
Tested with a broad range of different compilers.
Works on many different platforms.
Uses GNU Automake, Autoconf, and Libtool for portability.
The MySQL Server design is multi-layered with independent
modules.
Fully multi-threaded using kernel threads. It can easily use
multiple
CPUs if they are available.
Provides transactional and non-transactional storage
engines.
Uses very fast B-tree disk tables (MyISAM) with index
compression.
Relatively easy to add other storage engines. This is useful if
you want
to provide an SQL interface for an in-house database.
A very fast thread-based memory allocation system.
Very fast joins using an optimized one-sweep multi-join.
In-memory hash tables, which are used as temporary tables.
SQL functions are implemented using a highly optimized class
library
and should be as fast as possible. Usually there is no memory
allocation
at all after query initialization.
The MySQL code is tested with Purify (a commercial memory
leakage
detector) as well as with Valgrind, a GPL tool
(http://developer.kde.org/~sewardj/).
The server is available as a separate program for use in a
client/server
networked environment. It is also available as a library that
can be
embedded (linked) into standalone applications. Such
applications can
be used in isolation or in environments where no network is
available.
Data Types:
Supports the following data types: signed/unsigned integers 1,
2, 3, 4,
and 8 bytes long, FLOAT, DOUBLE, CHAR, VARCHAR, TEXT, BLOB,
DATE, TIME, DATETIME, TIMESTAMP, YEAR, SET, ENUM, and
OpenGIS spatial types.
Fixed-length and variable-length records.
Statements and Functions:
Full operator and function support in the SELECT list and
WHERE
clause of queries. For example:
-
RDBMS with MySQL Unit 1
Sikkim Manipal University Page No. 4
Full support for SQL GROUP BY and ORDER BY clauses. Support
for
group functions (COUNT(), COUNT(DISTINCT ...), AVG(), STD(),
SUM(), MAX(), MIN(), and GROUP_CONCAT()).
Support for LEFT OUTER JOIN and RIGHT OUTER JOIN with both
standard SQL and ODBC syntax.
Support for aliases on tables and columns as required by
standard SQL.
DELETE, INSERT, REPLACE, and UPDATE return the number of
rows
that were changed (affected). It is possible to return the
number of rows
matched instead by setting a flag when connecting to the
server.
The MySQL-specific SHOW statement can be used to retrieve
information about databases, storage engines, tables, and
indexes.
MySQL 5.0 adds support for the INFORMATION_SCHEMA database,
implemented according to standard SQL.
The EXPLAIN statement can be used to determine how the
optimizer
resolves a query.
Function names do not clash with table or column names. For
example,
ABS is a valid column name. The only restriction is that for a
function
call, no spaces are allowed between the function name and the (
that
follows it.
You can refer to tables from different databases in the same
statement.
Security:
A privilege and password system that is very flexible and
secure, and
that allows host-based verification.
Passwords are secure because all password traffic is encrypted
when
you connect to a server.
Scalability and Limits:
Handles large databases. We use MySQL Server with databases
that
contain 50 million records. We also know of users who use
MySQL
Server with 60,000 tables and about 5,000,000,000 rows.
Up to 64 indexes per table are allowed (32 before MySQL 4.1.2).
Each
index may consist of 1 to 16 columns or parts of columns. The
maximum
mysql> SELECT CONCAT(first_name, ' ', last_name) -> FROM
citizen -> WHERE income/dependents > 10000 AND age >
30;
-
RDBMS with MySQL Unit 1
Sikkim Manipal University Page No. 5
index width is 1000 bytes (767 for InnoDB); before MySQL 4.1.2,
the
limit is 500 bytes. An index may use a prefix of a column for
CHAR,
VARCHAR, BLOB, or TEXT column types.
Connectivity:
Clients can connect to MySQL Server using several protocols:
Clients can connect using TCP/IP sockets on any platform.
On Windows systems in the NT family (NT, 2000, XP, 2003, or
Vista), clients can connect using named pipes if the server is
started
with the enable-named-pipe option. In MySQL 4.1 and higher,
Windows servers also support shared-memory connections if
started
with the shared-memory option. Clients can connect through
shared memory by using the protocol=memory option.
On Unix systems, clients can connect using Unix domain
socket
files.
MySQL client programs can be written in many languages. A
client
library written in C is available for clients written in C or
C++, or for any
language that provides C bindings.
APIs for C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, and Tcl
are
available, allowing MySQL clients to be written in many
languages.
The Connector/ODBC (MyODBC) interface provides MySQL support
for
client programs that use ODBC (Open Database Connectivity)
connections. For example, you can use MS Access to connect to
your
MySQL server. Clients can be run on Windows or Unix. MyODBC
source is available. All ODBC 2.5 functions are supported, as
are many
others.
The Connector/J interface provides MySQL support for Java
client
programs that use JDBC connections. Clients can be run on
Windows or
Unix. Connector/J source is available.
MySQL Connector/NET enables developers to easily create .NET
applications that require secure, high-performance data
connectivity with
MySQL. It implements the required ADO.NET interfaces and
integrates
into ADO.NET aware tools. Developers can build applications
using their
choice of .NET languages. MySQL Connector/NET is a fully
managed
ADO.NET driver written in 100% pure C#.
-
RDBMS with MySQL Unit 1
Sikkim Manipal University Page No. 6
Localization:
The server can provide error messages to clients in many
languages.
Full support for several different character sets, including
latin1
(cp1252), german, big5, ujis, and more. For example, the
Scandinavian
characters , and are allowed in table and column names.
Unicode support is available as of MySQL 4.1.
All data is saved in the chosen character set.
Sorting and comparisons are done according to the chosen
character
set and collation (using latin1 and Swedish collation by
default). It is
possible to change this when the MySQL server is started. To see
an
example of very advanced sorting, look at the Czech sorting
code.
MySQL Server supports many different character sets that can
be
specified at compile time and runtime.
As of MySQL 4.1, the server time zone can be changed
dynamically,
and individual clients can specify their own time zone.
Clients and Tools:
MySQL AB provides several client and utility programs. These
include
both command-line programs such as mysqldump and mysqladmin,
and graphical programs such as MySQL Administrator and MySQL
Query Browser.
MySQL Server has built-in support for SQL statements to
check,
optimize, and repair tables. These statements are available from
the
command line through the mysqlcheck client. MySQL also
includes
myisamchk, a very fast command-line utility for performing
these
operations on MyISAM tables.
MySQL programs can be invoked with the --help or -? option to
obtain
online assistance.
Self Assessment Questions
1. MySQL is a _______________ .
2. The _______ is a privileged and Password system that is very
flexible
and secure, and that allows host-based verification.
-
RDBMS with MySQL Unit 1
Sikkim Manipal University Page No. 7
1.3 Top 10 reasons to use MySQL
1. Scalability and Flexibility
The MySQL database server provides the ultimate in scalability,
sporting
the capacity to handle deeply embedded applications with a
footprint of
only 1MB to running massive data warehouses holding terabytes
of
information. Platform flexibility is a stalwart feature of MySQL
with all
flavors of Linux, UNIX, and Windows being supported. And, of
course,
the open source nature of MySQL allows complete customization
for
those wanting to add unique requirements to the database
server.
2. High Performance
A unique storage-engine architecture allows database
professionals to
configure the MySQL database server specifically for
particular
applications, with the end result being amazing performance
results.
Whether the intended application is a high-speed
transactional
processing system or a high-volume web site that services a
billion
queries a day, MySQL can meet the most demanding performance
expectations of any system. With high-speed load utilities,
distinctive
memory caches, full text indexes, and other
performance-enhancing
mechanisms, MySQL offers all the right ammunition for today's
critical
business systems.
3. High Availability
Rock-solid reliability and constant availability are hallmarks
of MySQL,
with customers relying on MySQL to guarantee around-the-clock
uptime.
MySQL offers a variety of high-availability options from
high-speed
master/slave replication configurations, to specialized Cluster
servers
offering instant failover, to third party vendors offering
unique high-
availability solutions for the MySQL database server.
4. Robust Transactional Support
MySQL offers one of the most powerful transactional database
engines
on the market. Features include complete ACID (atomic,
consistent,
isolated, durable) transaction support, unlimited row-level
locking,
distributed transaction capability, and multi-version
transaction support
where readers never block writers and vice-versa. Full data
integrity is
also assured through server-enforced referential integrity,
specialized
transaction isolation levels, and instant deadlock
detection.
-
RDBMS with MySQL Unit 1
Sikkim Manipal University Page No. 8
5. Web and Data Warehouse Strengths
MySQL is the de-facto standard for high-traffic web sites
because of its
high-performance query engine, tremendously fast data insert
capability,
and strong support for specialized web functions like fast full
text
searches. These same strengths also apply to data
warehousing
environments where MySQL scales up into the terabyte range for
either
single servers or scale-out architectures. Other features like
main
memory tables, B-tree and hash indexes, and compressed
archive
tables that reduce storage requirements by up to eighty-percent
make
MySQL a strong standout for both web and business
intelligence
applications.
6. Strong Data Protection
Because guarding the data assets of corporations is the number
one job
of database professionals, MySQL offers exceptional security
features
that ensure absolute data protection. In terms of database
authentication, MySQL provides powerful mechanisms for ensuring
only
authorized users have entry to the database server, with the
ability to
block users down to the client machine level being possible. SSH
and
SSL support are also provided to ensure safe and secure
connections. A
granular object privilege framework is present so that users
only see the
data they should, and powerful data encryption and decryption
functions
ensure that sensitive data is protected from unauthorized
viewing.
Finally, backup and recovery utilities provided through MySQL
and third
party software vendors allow for complete logical and physical
backup
as well as full and point-in-time recovery.
7. Comprehensive Application Development
One of the reasons MySQL is the world's most popular open
source
database is that it provides comprehensive support for every
application
development need. Within the database, support can be found for
stored
procedures, triggers, functions, views, cursors, ANSI-standard
SQL, and
more. For embedded applications, plug-in libraries are available
to
embed MySQL database support into nearly any application.
MySQL
also provides connectors and drivers (ODBC, JDBC, etc.) that
allow all
forms of applications to make use of MySQL as a preferred
data
management server. It doesn't matter if it's PHP, Perl, Java,
Visual
-
RDBMS with MySQL Unit 1
Sikkim Manipal University Page No. 9
Basic, or .NET, MySQL offers application developers everything
they
need to be successful in building database-driven information
systems.
8. Management Ease
MySQL offers exceptional quick-start capability with the average
time
from software download to installation completion being less
than fifteen
minutes. This rule holds true whether the platform is Microsoft
Windows,
Linux, Macintosh, or UNIX. Once installed, self-management
features
like automatic space expansion, auto-restart, and dynamic
configuration
changes take much of the burden off already overworked
database
administrators. MySQL also provides a complete suite of
graphical
management and migration tools that allow a DBA to manage,
troubleshoot, and control the operation of many MySQL servers
from a
single workstation. Many third party software vendor tools are
also
available for MySQL that handle tasks ranging from data design
and
ETL, to complete database administration, job management,
and
performance monitoring.
9. Open Source Freedom and 24 x 7 Support
Many corporations are hesitant to fully commit to open source
software
because they believe they can't get the type of support or
professional
service safety nets they currently rely on with proprietary
software to
ensure the overall success of their key applications. The
questions of
indemnification come up often as well. These worries can be put
to rest
with MySQL as complete around-the-clock support as well as
indemnification is available through MySQL Network. MySQL is not
a
typical open source project as all the software is owned and
supported
by MySQL AB, and because of this, a unique cost and support
model
are available that provides a unique combination of open
source
freedom and trusted software with support.
10. Lowest Total Cost of Ownership
By migrating current database-drive applications to MySQL, or
using
MySQL for new development projects, corporations are realizing
cost
savings that many times stretch into seven figures.
Accomplished
through the use of the MySQL database server and scale-out
architectures that utilize low-cost commodity hardware,
corporations are
finding that they can achieve amazing levels of scalability
and
performance, all at a cost that is far less than those offered
by
-
RDBMS with MySQL Unit 1
Sikkim Manipal University Page No. 10
proprietary and scale-up software vendors. In addition, the
reliability and
easy maintainability of MySQL means that database administrators
don't
waste time troubleshooting performance or downtime issues, but
instead
can concentrate on making a positive impact on higher level
tasks that
involve the business side of data.
1.4 MySQL Development Roadmap
This section describes the general MySQL development roadmap,
provides
an overview about features that have been implemented in
previous series
and that are new in this current release series (5.1), and an
overview about
upcoming additions or changes in the next release series
(6.0).
The maturity level of the release series covered in this manual
(5.1) is
general availability.
The most requested features and the versions in which they
were
implemented or are scheduled for implementation are summarized
in the
following table:
Feature MySQL Series
Unions 4.0
Subqueries 4.1
R-trees 4.1 (for the MyISAM storage
engine)
Stored procedures 5.0
Views 5.0
Cursors 5.0
XA transactions 5.0
Triggers 5.0 and 5.1
Event scheduler 5.1
Partitioning 5.1
Pluggable storage engine API 5.1
Plugin API 5.1
Row-based replication 5.1
Server log tables 5.1
Foreign keys 6.x (implemented in 3.23 for
InnoDB)
-
RDBMS with MySQL Unit 1
Sikkim Manipal University Page No. 11
Whats New in MySQL 5.1 ?
The following features have been added to MySQL 5.1.
Partitioning. This capability enables distributing portions of
individual
tables across a file system, according to rules which can be set
when
the table is created. In effect, different portions of a table
are stored as
separate tables in different locations, but from the user point
of view, the
partitioned table is still a single table. Syntactically, this
implements a
number of new extensions to the CREATE TABLE, ALTER TABLE,
and
EXPLAIN ... SELECT statements. As of MySQL 5.1.6, queries
against
partitioned tables can take advantage of partition pruning. In
some
cases, this can result in query execution that is an order of
magnitude
faster than the same query against a non-partitioned version of
the
same table.
Row-Based Replication. Replication capabilities in MySQL
originally
were based on propagation of SQL statements from master to
slave.
This is called statement-based replication. As of MySQL 5.1.5,
another
basis for replication is available. This is called row-based
replication.
Instead of sending SQL statements to the slave, the master
writes
events to its binary log that indicate how individual table rows
are
effected. As of MySQL 5.1.8, a third option is available: mixed.
This will
use statement-based replication by default, and only switch to
row-
based replication in particular cases.
Plugin API. MySQL 5.1 adds support for a very flexible plugin
API that
enables loading and unloading of various components at
runtime,
without restarting the server. Although the work on this is not
finished
yet, plugin full-text parsers are a first step in this
direction. This allows
users to implement their own input filter on the indexed text,
enabling
full-text search capability on arbitrary data such as PDF files
or other
document formats. A pre-parser full-text plugin performs the
actual
parsing and extraction of the text and hands it over to the
built-in MySQL
full-text search.
Event Scheduler. MySQL Events are tasks that run according to
a
schedule. When you create an event, you are creating a named
database object containing one or more SQL statements to be
executed
at one or more regular intervals, beginning and ending at a
specific date
-
RDBMS with MySQL Unit 1
Sikkim Manipal University Page No. 12
and time. Conceptually, this is similar to the idea of the Unix
crontab
(also known as a cron job) or the Windows Task Scheduler.
Server Log Tables. Before MySQL 5.1, the server writes general
query
log and slow query log entries to log files. As of MySQL 5.1,
the server's
logging capabilities for these logs are more flexible. Log
entries can be
written to log files (as before) or to the general_log and
slow_log tables
in the mysql database. If logging is enabled, either or both
destinations
can be selected. The --log-output option controls the
destination or
destinations of log output.
Upgrade Program. The mysql_upgrade program (available as of
MySQL 5.1.7) checks all existing tables for incompatibilities
with the
current version of MySQL Server and repairs them if necessary.
This
program should be run for each MySQL upgrade.
MySQL Cluster. MySQL Cluster is now released as a separate
product, based on MySQL 5.1 but with the addition of the
NDBCLUSTER storage engine. Clustering support is longer
available in
mainline MySQL 5.1 releases. MySQL Cluster releases are
identified by
a 3-part NDB version number; currently, the MySQL Cluster NDB
6.2
and MySQL Cluster NDB 6.3 release series are available for
production
use.
Self Assessment Questions
3. The number of indexes allowed per table in MySQL are
_______.
1.5 Connecting to and Disconnecting from the Server
To connect to the server, you will usually need to provide a
MySQL user
name when you invoke mysql and, most likely, a password. If the
server
runs on a machine other than the one where you log in, you will
also need to
specify a host name. Contact your administrator to find out what
connection
parameters you should use to connect (that is, what host, user
name, and
password to use). Once you know the proper parameters, you
should be
able to connect like this:
shell> mysql -h host -u user -p Enter password: ********
-
RDBMS with MySQL Unit 1
Sikkim Manipal University Page No. 13
host and user represent the host name where your MySQL server
is
running and the user name of your MySQL account. Substitute
appropriate
values for your setup. The ******** represents your password;
enter it when
mysql displays the Enter password: prompt.
If that works, you should see some introductory information
followed by a
mysql> prompt:
The mysql> prompt tells you that mysql is ready for you to
enter
commands.
If you are logging in on the same machine that MySQL is running
on, you
can omit the host, and simply use the following:
If, when you attempt to log in, you get an error message such as
ERROR
2002 (HY000): Can't connect to local MySQL server through
socket
'/tmp/mysql.sock' (2), it means that that MySQL server daemon
(Unix) or
service (Windows) is not running. Consult the administrator
Some MySQL installations allow users to connect as the
anonymous
(unnamed) user to the server running on the local host. If this
is the case on
your machine, you should be able to connect to that server by
invoking
mysql without any options:
After you have connected successfully, you can disconnect any
time by
typing QUIT (or \q) at the mysql> prompt:
shell> mysql -h host -u user -p Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL
connection id is 25338 to server version: 5.1.30-standard Type
'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
shell> mysql -u user -p
shell> mysql
mysql> QUIT Bye
-
RDBMS with MySQL Unit 1
Sikkim Manipal University Page No. 14
Most examples in the following sections assume that you are
connected to
the server. They indicate this by the mysql> prompt.
1.6 Accessing and Creating Databases and Tables
The following screen shots demonstrate a step-by-step approach
in
connecting to the MySQL database server using a specific user
name and
password as created during the installation steps.
User is asked for the password before logging in.
User enters the password.
-
RDBMS with MySQL Unit 1
Sikkim Manipal University Page No. 15
The following screen shot shows the appearance of mysql>
prompt after the
user types in the correct password.
The following screen shot demonstrates the usage of Show
Databases
command which shows all the available databases in the MySQL
Server.
The following screen shot shows an error message wherein the
user tries to
access a table without using any database; i.e. as s first step,
the user must
select a database already present by using the USE
command and then access the tables, views or any other data
structures
within the database.
Other wise the error message Error 1046: No database Selected
would be
generated by the database server.
-
RDBMS with MySQL Unit 1
Sikkim Manipal University Page No. 16
The screen shot below shows the command Create Database used to
create a database by the user.
After successful execution of the above command, the user can
type in the
Show Databases command to find out the successful creation of
the
database created by him / her. Then the user can start creating
his data
objects like tables inside the database.
-
RDBMS with MySQL Unit 1
Sikkim Manipal University Page No. 17
The following screenshot shows how the user can select his own
database
created in the previous step and start creating tables using
Create Table
command. The DESC command can be used to show the metadata
regarding the table created.
1.7 Loading Data
The following screen shots shows the step-by-step execution of
the process
of loading data from a notepad (.txt file) into the MySQL server
database
table.
It demonstrates from the first step of creating a notepad file
to the stage of
loading and checking the data in your database table.
-
RDBMS with MySQL Unit 1
Sikkim Manipal University Page No. 18
Step 1: Opening a Notepad file from the Start menu of the
Windows OS
Step 2: The data should be tab separated and the number of
columns
correpsond to the number of columns of the base table. The data
typed in
the notepad file should correspond to the data type set in the
underlying
table.
-
RDBMS with MySQL Unit 1
Sikkim Manipal University Page No. 19
Step - 3: Saving in the notepad in the C drive of your hard
disk.
-
RDBMS with MySQL Unit 1
Sikkim Manipal University Page No. 20
Step 4: Creation of the underlying base table to which the data
values
should be populated from the notepad file created in the C drive
of your hard
disk.
In this process we use the LOAD DATA INFILE C:\FileName.txt
command which enables us to load the data into the specified
database
table.
-
RDBMS with MySQL Unit 1
Sikkim Manipal University Page No. 21
1.8 Summary
This unit has covered the following topics:
1. Features of MySQL: Some of the major features discussed here
are
Internals and Portability, Data Type support, Security Issues,
etc.
-
RDBMS with MySQL Unit 1
Sikkim Manipal University Page No. 22
2. Top Reasons for using MySQL: The top 10 reasons for using
MySQL
by majority of the user community are discussed here like
Scalability &
Flexibility, High Performance, Robust Transactional support, Web
and
Data Warehouse strengths, Stronger data protection, etc.
3. MySQL Development Roadmap: This topic provides an
overview
about features that have been implemented in previous series and
that
are new in this current release series (5.1), and an overview
about
upcoming additions or changes in the next release series
(6.0).
4. Connecting to and Disconnecting from the Server: This
section
discusses about the syntax used to connect to the database
server and
disconnect from the database server using command line
interface.
5. Accessing and Creating Databases and Tables: This topic
discusses
various methods and functions used to access and create
databases
and tables within the MySQL server database.
6. Loading Data: This topic discusses about the methods of
loading data
into the MySQL database tables from external files such as
notepad
data.
1.9 Terminal Questions
1. Mention 4 features of MySQL.
2. Write the syntax used to connect to MySQL server.
3. Give the syntax of Loading the data from a Notepad file into
a table.
1.10 Answers
Self Assessment Questions
1. Relational Database Management System
2. Security
3. 64
Terminal Questions
1. 1. Portability
2. Fast Thread based Memory Allocation System
3. Full operator and Functional Support
4. Support for Group By and Order By Clauses
(Refer to section 1.2)
-
RDBMS with MySQL Unit 1
Sikkim Manipal University Page No. 23
2. shell> mysql -h host -u user -p
Enter password: ********
(Refer to section 1.5)
3. LOAD DATA LOCAL INFILE C:\empdata.txt INTO TABLE emp1;
(Refer to section 1.7)
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 24
Unit 2 Data Types
Structure
2.1 Introduction
Objectives
2.2 Numeric Types
2.3 String Types
The CHAR and VARCHAR Types
The BLOB and TEXT Types
The ENUM Type
The SET Type
2.4 Date and Time Types
The DATETIME, DATE, and TIMESTAMP Types
The TIME Type
The YEAR Type
Y2K Issues and Date Types
2.5 Column Type Storage Requirements
2.6 Choosing the Right Type for a Column
2.7 Using Column Types from Other Database Engines
2.8 Summary
2.9 Terminal Questions
2.10 Answers
2.1 Introduction
In this unit the information regarding the data types uses in
MySQL is
presented. An exhaustive discussion regarding the Numeric data
types is
made with suitable examples is given. The String data type is
used to
manipulate strings and characters; In this regards the data
types such as
CHAR, VARCHAR, BLOB, and so on are discussed.
The Date and Time data types are also discussed.
In addition, the column storage requirements of different data
types are
mentioned, so that the user can choose the right column types
for his
database.
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 25
Objectives
After studying this unit, you should be able to:
describe the importance of data types
apply the Numeric, String and Date & Time data types
describe the column storage requirements in MySQL
explain how to choose a right column type for individual
columns
describe how to use column types from other database engines
2.2 Numeric Types
MySQL supports a number of data types in several categories:
numeric
types, date and time types, and string (character) types. This
chapter first
gives an overview of these data types, and then provides a more
detailed
description of the properties of the types in each category, and
a summary
of the data type storage requirements.
MySQL also supports extensions for handing spatial data.
Data type descriptions use these conventions:
M indicates the maximum display width for integer types. For
floating-
point and fixed-point types, M is the total number of digits
that can be
stored. For string types, M is the maximum length. The
maximum
allowable value of M depends on the data type.
D applies to floating-point and fixed-point types and indicates
the
number of digits following the decimal point. The maximum
possible
value is 30, but should be no greater than M2.
Square brackets ([ and ]) indicate optional parts of type
definitions.
M indicates the maximum display width for integer types. The
maximum
legal display width is 255. Display width is unrelated to the
range of values a
type can contain.
For floating-point and fixed-point types, M is the total number
of digits that
can be stored.
If you specify ZEROFILL for a numeric column, MySQL
automatically adds
the UNSIGNED attribute to the column.
Numeric data types that allow the UNSIGNED attribute also allow
SIGNED.
However, these data types are signed by default, so the SIGNED
attribute
has no effect.
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 26
SERIAL is an alias for BIGINT UNSIGNED NOT NULL
AUTO_INCREMENT
UNIQUE.
SERIAL DEFAULT VALUE in the definition of an integer column is
an alias
for NOT NULL AUTO_INCREMENT UNIQUE.
BIT[(M)]: A bit-field type. M indicates the number of bits per
value, from
1 to 64. The default is 1 if M is omitted.
TINYINT[(M)] [UNSIGNED] [ZEROFILL]: A very small integer.
The
signed range is -128 to 127. The unsigned range is 0 to 255.
BOOL, BOOLEAN: These types are synonyms for TINYINT(1). A
value
of zero is considered false. Non-zero values are considered
true:
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 27
However, the values TRUE and FALSE are merely aliases for 1 and
0,
respectively, as shown here:
The last two statements display the results shown because 2 is
equal to
neither 1 nor 0.
We intend to implement full boolean type handling, in accordance
with
standard SQL, in a future MySQL release.
SMALLINT[(M)] [UNSIGNED] [ZEROFILL]: A small integer. The
signed
range is -32768 to 32767. The unsigned range is 0 to 65535.
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]: A medium-sized
integer.
The signed range is -8388608 to 8388607. The unsigned range is 0
to
16777215.
INT[(M)] [UNSIGNED] [ZEROFILL]: A normal-size integer. The
signed
range is -2147483648 to 2147483647. The unsigned range is 0
to
4294967295.
INTEGER[(M)] [UNSIGNED] [ZEROFILL]: This type is a synonym
for
INT.
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 28
BIGINT[(M)] [UNSIGNED] [ZEROFILL]: A large integer. The
signed
range is 9223372036854775808 to 9223372036854775807. The
unsigned range is 0 to
18446744073709551615.
SERIAL is an alias for BIGINT UNSIGNED NOT NULL
AUTO_INCREMENT
UNIQUE.
Some things you should be aware of with respect to BIGINT
columns:
All arithmetic is done using signed BIGINT or DOUBLE values, so
you
should not use unsigned big integers larger than
9223372036854775807
(63 bits) except with bit functions! If you do that, some of the
last digits in the
result may be wrong because of rounding errors when converting a
BIGINT
value to a DOUBLE.
You can always store an exact integer value in a BIGINT column
by
storing it using a string. In this case, MySQL performs a
string-to-number
conversion that involves no intermediate double-precision
representation.
The -, +, and * operators use BIGINT arithmetic when both
operands are
integer values. This means that if you multiply two big integers
(or
results from functions that return integers), you may get
unexpected
results when the result is larger than 9223372036854775807.
FLOAT [(M,D)] [UNSIGNED] [ZEROFILL]: A small
(single-precision)
floating-point number. Allowable values are -3.402823466E+38 to
-
1.175494351E-38, 0, and
1.175494351E-38 to 3.402823466E+38.
These are the theoretical limits, based on the IEEE standard.
The actual
range might be slightly smaller depending on your hardware or
operating
system.
M is the total number of digits and D is the number of digits
following the
decimal point. If M and D are omitted, values are stored to the
limits allowed
by the hardware. A single-precision floating-point number is
accurate to
approximately 7 decimal places.
UNSIGNED, if specified, disallows negative values.
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 29
Note: Using FLOAT might give you some unexpected problems
because all
calculations in MySQL are done with double precision.
DOUBLE [(M,D)] [UNSIGNED] [ZEROFILL]:
A normal - size (double-precision) floating-point number.
Allowable values are -1.7976931348623157E+308 to -
2.2250738585072014E-308, 0, and 2.2250738585072014E-308 to
1.7976931348623157E+308.
These are the theoretical limits, based on the IEEE standard.
The actual
range might be slightly smaller depending on your hardware or
operating
system.
M is the total number of digits and D is the number of digits
following the
decimal point. If M and D are omitted, values are stored to the
limits allowed
by the hardware. A double-precision floating-point number is
accurate to
approximately 15 decimal places.
UNSIGNED, if specified, disallows negative values.
DOUBLE PRECISION [(M,D)] [UNSIGNED] [ZEROFILL], REAL[(M,D)]
[UNSIGNED] [ZEROFILL]: These types are synonyms for DOUBLE.
Exception: If the REAL_AS_FLOAT SQL mode is enabled, REAL is
a
synonym for FLOAT rather than DOUBLE.
FLOAT(p) [UNSIGNED] [ZEROFILL]: A floating - point number. p
represents the precision in bits, but MySQL uses this value only
to
determine whether to use FLOAT or DOUBLE for the resulting data
type. If
p is from 0 to 24, the data type becomes FLOAT with no M or D
values. If p
is from 25 to 53, the data type becomes DOUBLE with no M or D
values.
The range of the resulting column is the same as for the
single-precision
FLOAT or double-precision DOUBLE data types described earlier in
this
section.
Note: FLOAT(p) syntax is provided for ODBC compatibility.
DECIMAL [(M[,D])] [UNSIGNED] [ZEROFILL]: A packed exact
fixed-point
number. M is the total number of digits (the precision) and D is
the number
of digits after the decimal point (the scale). The decimal point
and (for
negative numbers) the - sign are not counted in M. If D is 0,
values have
no decimal point or fractional part. The maximum number of
digits (M) for
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 30
DECIMAL is 65. The maximum number of supported decimals (D) is
30. If D
is omitted, the default is 0. If M is omitted, the default is
10.
UNSIGNED, if specified, disallows negative values.
All basic calculations (+, -, *, /) with DECIMAL columns are
done with a
precision of 65 digits.
DEC[(M[,D])] [UNSIGNED] [ZEROFILL], NUMERIC[(M[,D])]
[UNSIGNED]
[ZEROFILL], FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]:
These types are synonyms for DECIMAL. The FIXED synonym is
available
for compatibility with other database systems.
2.3 String Types
The string types are CHAR, VARCHAR, BINARY, VARBINARY, BLOB,
TEXT, ENUM, and SET. This section describes how these types work
and
how to use them in your queries.
2.3.1 The CHAR and VARCHAR Types
The CHAR and VARCHAR types are similar, but differ in the way
they are
stored and retrieved. They also differ in maximum length and in
whether
trailing spaces are retained.
The CHAR and VARCHAR types are declared with a length that
indicates
the maximum number of characters you want to store. For
example,
CHAR(30) can hold up to 30 characters.
The length of a CHAR column is fixed to the length that you
declare when
you create the table. The length can be any value from 0 to 255.
When
CHAR values are stored, they are right-padded with spaces to the
specified
length. When CHAR values are retrieved, trailing spaces are
removed
unless the PAD_CHAR_TO_FULL_LENGTH SQL mode is enabled.
Values in VARCHAR columns are variable-length strings. The
length can be
specified as a value from 0 to 65,535. The effective maximum
length of a
VARCHAR is subject to the maximum row size (65,535 bytes, which
is
shared among all columns) and the character set used.
In contrast to CHAR, VARCHAR values are stored as a one-byte or
two-
byte length prefix plus data. The length prefix indicates the
number of bytes
in the value. A column uses one length byte if values require no
more than
255 bytes, two length bytes if values may require more than 255
bytes.
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 31
If strict SQL mode is not enabled and you assign a value to a
CHAR or
VARCHAR column that exceeds the column's maximum length, the
value is
truncated to fit and a warning is generated. For truncation of
non-space
characters, you can cause an error to occur (rather than a
warning) and
suppress insertion of the value by using strict SQL mode.
For VARCHAR columns, trailing spaces in excess of the column
length are
truncated prior to insertion and a warning is generated,
regardless of the
SQL mode in use. For CHAR columns, truncation of excess trailing
spaces
from inserted values is performed silently regardless of the SQL
mode.
VARCHAR values are not padded when they are stored. Trailing
spaces are
retained when values are stored and retrieved, in conformance
with
standard SQL.
The following table illustrates the differences between CHAR
and
VARCHAR by showing the result of storing various string values
into
CHAR(4) and VARCHAR(4) columns (assuming that the column uses
a
single-byte character set such as latin1):
Table 2.1: Differences between Char and Varchar Variables
The values shown as stored in the last row of the table apply
only when not
using strict mode; if MySQL is running in strict mode, values
that exceed the
column length are not stored, and an error results.
If a given value is stored into the CHAR(4) and VARCHAR(4)
columns, the
values retrieved from the columns are not always the same
because trailing
spaces are removed from CHAR columns upon retrieval. The
following
example illustrates this difference:
Value CHAR(4) Storage Required
VARCHAR(4) Storage Required
4 bytes 1 bytes
ab ab 4 bytes ab 3 bytes
abcd abcd 4 bytes abcd 5 bytes
abcdefgh abcd 4 bytes abcd 5 bytes
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 32
Values in CHAR and VARCHAR columns are sorted and compared
according to the character set collation assigned to the
column.
All MySQL collations are of type PADSPACE. This means that all
CHAR
and VARCHAR values in MySQL are compared without regard to
any
trailing spaces. For example:
This is true for all MySQL versions, and that it is not affected
by the server
SQL mode.
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 33
For those cases where trailing pad characters are stripped or
comparisons
ignore them, if a column has an index that requires unique
values, inserting
into the column values that differ only in number of trailing
pad characters
will result in a duplicate-key error. For example, if a table
contains 'a', an
attempt to store 'a' causes a duplicate-key error.
2.3.2 The BLOB and TEXT Types
A BLOB is a binary large object that can hold a variable amount
of data. The
four BLOB types are TINYBLOB, BLOB, MEDIUMBLOB, and
LONGBLOB.
These differ only in the maximum length of the values they can
hold. The
four TEXT types are TINYTEXT, TEXT, MEDIUMTEXT, and
LONGTEXT.
These correspond to the four BLOB types and have the same
maximum
lengths and storage requirements.
BLOB columns are treated as binary strings (byte strings). TEXT
columns
are treated as non-binary strings (character strings). BLOB
columns have no
character set, and sorting and comparison are based on the
numeric values
of the bytes in column values. TEXT columns have a character
set, and
values are sorted and compared based on the collation of the
character set.
If strict SQL mode is not enabled and you assign a value to a
BLOB or
TEXT column that exceeds the column's maximum length, the value
is
truncated to fit and a warning is generated. For truncation of
non-space
characters, you can cause an error to occur (rather than a
warning) and
suppress insertion of the value by using strict SQL mode.
Beginning with
MySQL 5.1.24, truncation of excess trailing spaces from values
to be
inserted into TEXT columns always generates a warning,
regardless of the
SQL mode. (Bug#30059)
If a TEXT column is indexed, index entry comparisons are
space-padded at
the end. This means that, if the index requires unique values,
duplicate-key
errors will occur for values that differ only in the number of
trailing spaces.
For example, if a table contains 'a', an attempt to store 'a '
causes a
duplicate-key error. This is not true for BLOB columns.
In most respects, you can regard a BLOB column as a VARBINARY
column
that can be as large as you like. Similarly, you can regard a
TEXT column
as a VARCHAR column. BLOB and TEXT differ from VARBINARY and
VARCHAR in the following ways:
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 34
For indexes on BLOB and TEXT columns, you must specify an
index
prefix length. For CHAR and VARCHAR, a prefix length is
optional.
BLOB and TEXT columns cannot have DEFAULT values.
LONG and LONG VARCHAR map to the MEDIUMTEXT data type. This is
a
compatibility feature. If you use the BINARY attribute with a
TEXT data type,
the column is assigned the binary collation of the column
character set.
MySQL Connector/ODBC defines BLOB values as LONGVARBINARY
and
TEXT values as LONGVARCHAR.
Because BLOB and TEXT values can be extremely long, you
might
encounter some constraints in using them:
Only the first max_sort_length bytes of the column are used
when
sorting. The default value of max_sort_length is 1024. This
value can be
changed using the --max_sort_length=N option when starting the
mysqld
server.
You can make more bytes significant in sorting or grouping by
increasing
the value of max_sort_length at runtime. Any client can change
the value of
its session max_sort_length variable:
Another way to use GROUP BY or ORDER BY on a BLOB or TEXT
column
containing long values when you want more than max_sort_length
bytes to
be significant is to convert the column value into a
fixed-length object. The
standard way to do this is with the SUBSTRING() function. For
example, the
following statement causes 2000 bytes of the comment column to
be taken
into account for sorting:
The maximum size of a BLOB or TEXT object is determined by its
type, but
the largest value you actually can transmit between the client
and server is
determined by the amount of available memory and the size of
the
mysql> SET max_sort_length = 2000;
mysql> SELECT id, comment FROM t
-> ORDER BY comment;
mysql> SELECT id, SUBSTRING(comment,1,2000) FROM t
-> ORDER BY SUBSTRING(comment,1,2000);
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 35
communications buffers. You can change the message buffer size
by
changing the value of the max_allowed_packet variable, but you
must do so
for both the server and your client program.
Each BLOB or TEXT value is represented internally by a
separately
allocated object. This is in contrast to all other data types,
for which storage
is allocated once per column when the table is opened.
2.3.3 The ENUM Type
An ENUM is a string object with a value chosen from a list of
allowed values
that are enumerated explicitly in the column specification at
table creation
time.
An enumeration value must be a quoted string literal; it may not
be an
expression, even one that evaluates to a string value. For
example, you can
create a table with an ENUM column like this:
2.3.4 The SET Type
A string type that can accept zero or more values from a set of
previously
defined possible values. This data type allows the selection of
any number
of values from a predefined set of string values.
SET column values that consist of multiple set members are
specified with
members separated by commas (,). A consequence of this is that
SET
member values should not themselves contain commas.
A SET can have a maximum of 64 different members.
Duplicate values in the definition cause a warning, or an error
if strict SQL
mode is enabled.
Trailing spaces are automatically deleted from SET member values
in the
table definition when a table is created.
CREATE TABLE sizes ( name ENUM('small', 'medium', 'large')
);
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 36
This makes the SET data type a good choice for multiple-choice
selections
as shown in the example given below:
Note: As with ENUM type, any attempt to use a value that is not
part of the
predefined set will cause MySQL to print an error message
instead as
shown in the example below:
Self Assessment Questions
1. If MySQL is running in ____ mode, values that exceed the
column
length are not stored, and an error results.
2. The ______ columns have no character set, and sorting and
comparison
are based on the numeric values of the bytes in column
values.
2.4 Date and Time Types
The date and time types for representing temporal values are
DATETIME,
DATE, TIMESTAMP, TIME, and YEAR. Each temporal type has a range
of
legal values, as well as a zero value that may be used when you
specify
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 37
an illegal value that MySQL cannot represent. The TIMESTAMP type
has
special automatic updating behavior, described later on.
MySQL gives warnings or errors if you try to insert an illegal
date. By setting
the SQL mode to the appropriate value, you can specify more
exactly what
kind of dates you want MySQL to support.
You can get MySQL to accept certain dates, such as '2009-11-31',
by using
the ALLOW_INVALID_DATES SQL mode. This is useful when you want
to
store a possibly wrong value which the user has specified (for
example, in
a web form) in the database for future processing.
Under this mode, MySQL verifies only that the month is in the
range from 0
to 12 and that the day is in the range from 0 to 31. These
ranges are defined
to include zero because MySQL allows you to store dates where
the day or
month and day are zero in a DATE or DATETIME column.
This is extremely useful for applications that need to store a
birthdate for
which you do not know the exact date. In this case, you simply
store the
date as '2009-00-00' or '2009-01-00'.
If you store dates such as these, you should not expect to get
correct results
for functions such as DATE_SUB() or DATE_ADD() that require
complete
dates. (If you do not want to allow zero in dates, you can use
the
NO_ZERO_IN_DATE SQL mode).
Prior to MySQL 5.1.18, when DATE values are compared with
DATETIME
values, the time portion of the DATETIME value is ignored, or
the
comparison could be performed as a string compare.
Starting from MySQL 5.1.18, a DATE value is coerced to the
DATETIME
type by adding the time portion as '00:00:00'. To mimic the old
behavior, use
the CAST() function to cause the comparison operands to be
treated as
previously.
For example:
MySQL also allows you to store '0000-00-00' as a dummy date (if
you are
not using the NO_ZERO_DATE SQL mode). This is in some cases
more
convenient (and uses less data and index space) than using NULL
values.
date_col = CAST(NOW() AS DATE);
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 38
Following are the general considerations to keep in mind when
working with
date and time types:
MySQL retrieves values for a given date or time type in a
standard
output format, but it attempts to interpret a variety of formats
for input
values that you supply (for example, when you specify a value to
be
assigned to or compared to a date or time type). Only the
formats
described in the following sections are supported. It is
expected that you
supply legal values. Unpredictable results may occur if you use
values in
other formats.
Dates containing two-digit year values are ambiguous because
the
century is unknown. MySQL interprets two-digit year values using
the
following rules:
o Year values in the range 70-99 are converted to 1970-1999.
o Year values in the range 00-69 are converted to 2000-2069.
Although MySQL tries to interpret values in several formats,
dates
always must be given in year-month-day order (for example,
'98-09-
04'), rather than in the month-day-year or day-month-year
orders
commonly used elsewhere (for example, '09-04-98',
'04-09-98').
MySQL automatically converts a date or time type value to a
number if
the value is used in a numeric context and vice versa.
By default, when MySQL encounters a value for a date or time
type that
is out of range or otherwise illegal for the type (as described
at the
beginning of this section), it converts the value to the zero
value for
that type. The exception is that out-of-range TIME values are
clipped to
the appropriate endpoint of the TIME range.
The following table shows the format of the zero value for each
type.
Note that the use of these values produces warnings if the
NO_ZERO_DATE SQL mode is enabled.
Data Type Zero Value
DATETIME '0000-00-00 00:00:00'
DATE '0000-00-00'
TIMESTAMP '0000-00-00 00:00:00'
TIME '00:00:00'
YEAR 0000
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 39
The table below lists the various date and time data types,
together with
their allowed ranges and formats:
Table 2.2: Date and Time Data Types
Type Size (bytes)
Range Format Used For
DATE 3 1000-01-01 to
9999-12-31
YYYY-MM-DD Date Values
TIME 3 -838:59:59 to 838:59:59
HH:MM:SS Time values or durations
YEAR 1 1901 to 2155 YYYY Year Values
DATETIME 8 1000-01-01 00:00:00 to
9999-12-31 23:59:59
YYYY-MM-DD HH:MM:SS
Combined date and time values
TIMESTAMP 8 1970-01-01 00:00:01 to 2038-01-09 03:14:07
YYYYMMDDHHMMSS
Combined date and time values, timestamps
2.4.1 The DATETIME, DATE, and TIMESTAMP Types
The DATETIME, DATE, and TIMESTAMP types are related. This
section
describes their characteristics, how they are similar, and how
they differ.
The DATETIME type is used when you need values that contain both
date
and time information. MySQL retrieves and displays DATETIME
values in
'YYYY-MM-DD HH:MM:SS' format. The supported range is
'1000-01-01
00:00:00' to '9999-12-31 23:59:59'.
The DATE type is used when you need only a date value, without a
time
part. MySQL retrieves and displays DATE values in 'YYYY-MM-DD'
format.
The supported range is '1000-01-01' to '9999-12-31'.
For the DATETIME and DATE range descriptions, supported means
that
although earlier values might work, there is no guarantee.
The TIMESTAMP data type has a range of '1970-01-01 00:00:01' UTC
to
'2038-01-09 03:14:07' UTC. It has varying properties, depending
on the
MySQL version and the SQL mode the server is running in.
These
properties are described later in this section.
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 40
You can specify DATETIME, DATE, and TIMESTAMP values using any
of a
common set of formats:
As a string in either 'YYYY-MM-DD HH:MM:SS' or 'YY-MM-DD
HH:MM:SS' format. A relaxed syntax is allowed: Any
punctuation
character may be used as the delimiter between date parts or
time parts.
For example, '98-12-31 11:30:45', '98.12.31 11+30+45',
'98/12/31
11*30*45', and '98@12@31 11^30^45' are equivalent.
As a string in either 'YYYY-MM-DD' or 'YY-MM-DD' format. A
relaxed
syntax is allowed here, too. For example, '98-12-31',
'98.12.31',
'98/12/31', and '98@12@31' are equivalent.
As a string with no delimiters in either 'YYYYMMDDHHMMSS' or
'YYMMDDHHMMSS' format, provided that the string makes sense as
a
date. For example, '20070523091528' and '070523091528' are
interpreted as '2007-05-23 09:15:28', but '071122129015' is
illegal (it has
a nonsensical minute part) and becomes '0000-00-00
00:00:00'.
As a string with no delimiters in either 'YYYYMMDD' or
'YYMMDD'
format, provided that the string makes sense as a date. For
example,
'20070523' and '070523' are interpreted as '2007-05-23', but
'071332' is
illegal (it has nonsensical month and day parts) and becomes
'0000-00-
00'.
As a number in either YYYYMMDDHHMMSS or YYMMDDHHMMSS
format, provided that the number makes sense as a date. For
example,
19830905132800 and 830905132800 are interpreted as
'1983-09-05
13:28:00'.
As a number in either YYYYMMDD or YYMMDD format, provided
that
the number makes sense as a date. For example, 19830905 and
830905 are interpreted as '1983-09-05'.
As the result of a function that returns a value that is
acceptable in a
DATETIME, DATE, or TIMESTAMP context, such as NOW() or
CURRENT_DATE.
A microseconds part is allowable in temporal values in some
contexts, such
as in literal values, and in the arguments to or return values
from some
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 41
temporal functions. Microseconds are specified as a trailing
.uuuuuu part in
the value. Example:
However, microseconds cannot be stored into a column of any
temporal
data type. Any microseconds part is discarded.
Conversion of TIME or DATETIME values to numeric form (for
example, by
adding +0) results in a double value with a microseconds part of
.000000:
Illegal DATETIME, DATE, or TIMESTAMP values are converted to
the
zero value of the appropriate type ('0000-00-00 00:00:00' or
'0000-00-00').
TIMESTAMP Properties
TIMESTAMP columns are displayed in the same format as
DATETIME
columns. In other words, the display width is fixed at 19
characters, and the
format is 'YYYY-MM-DD HH:MM:SS'.
TIMESTAMP values are converted from the current time zone to UTC
for
storage, and converted back from UTC to the current time zone
for retrieval.
(This occurs only for the TIMESTAMP data type, not for other
types such as
mysql> SELECT MICROSECOND('2010-12-10 14:12:09.019473');
+-------------------------------------------+ |
MICROSECOND('2010-12-10 14:12:09.019473') |
+-------------------------------------------+ | 19473 |
+-------------------------------------------+
mysql> SELECT CURTIME(), CURTIME()+0;
+-----------+---------------------------+ | CURTIME() | CURTIME()+0
| +-----------+---------------------------+ | 10:41:36 |
104136.000000 | +-----------+---------------------------+ mysql>
SELECT NOW(), NOW()+0;
+---------------------+--------------------------------------------+
| NOW() | NOW()+0 |
+---------------------+---------------------------------------------+
| 2007-11-30 10:41:47 | 20071130104147.000000 |
+---------------------+----------------------------------------------+
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 42
DATETIME.) By default, the current time zone for each connection
is the
server's time. The time zone can be set on a per-connection
basis.
As long as the time zone setting remains constant, you get back
the same
value you store. If you store a TIMESTAMP value, and then change
the time
zone and retrieve the value, the retrieved value is different
from the value
you stored. This occurs because the same time zone was not used
for
conversion in both directions.
The current time zone is available as the value of the time_zone
system
variable.
The TIMESTAMP data type offers automatic initialization and
updating. You
can choose whether to use these properties and which column
should have
them
2.4.2 The TIME Type
MySQL retrieves and displays TIME values in 'HH:MM:SS' format
(or
'HHH:MM:SS' format for large hours values). TIME values may
range from '-
838:59:59' to '838:59:59'. The hours part may be so large
because the
TIME type can be used not only to represent a time of day (which
must be
less than 24 hours), but also elapsed time or a time interval
between two
events (which may be much greater than 24 hours, or even
negative).
You can specify TIME values in a variety of formats:
As a string in 'D HH:MM:SS.fraction' format. You can also use
one of
the following relaxed syntaxes: 'HH:MM:SS.fraction',
'HH:MM:SS',
'HH:MM', 'D HH:MM:SS', 'D HH:MM', 'D HH', or 'SS'. Here D
represents
days and can have a value from 0 to 34. Note that MySQL does
not
store the fraction part.
As a string with no delimiters in 'HHMMSS' format, provided that
it
makes sense as a time. For example, '101112' is understood
as
'10:11:12', but '109712' is illegal (it has a nonsensical minute
part) and
becomes '00:00:00'.
As a number in HHMMSS format, provided that it makes sense as
a
time. For example, 101112 is understood as '10:11:12'. The
following
alternative formats are also understood: SS, MMSS, HHMMSS,
HHMMSS.fraction. Note that MySQL does not store the fraction
part.
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 43
As the result of a function that returns a value that is
acceptable in a
TIME context, such as CURRENT_TIME.
A trailing .uuuuuu microseconds part of TIME values is allowed
under the
same conditions as for other temporal values, The DATETIME,
DATE, and
TIMESTAMP Types. This includes the property that any
microseconds part
is discarded from values stored into TIME columns.
For TIME values specified as strings that include a time part
delimiter, it is
not necessary to specify two digits for hours, minutes, or
seconds values
that are less than 10. '8:3:2' is the same as '08:03:02'.
Be careful about assigning abbreviated values to a TIME column.
Without
colons, MySQL interprets values using the assumption that the
two
rightmost digits represent seconds. (MySQL interprets TIME
values as
elapsed time rather than as time of day.) For example, you might
think of
'1112' and 1112 as meaning '11:12:00' (12 minutes after 11
o'clock), but
MySQL interprets them as '00:11:12' (11 minutes, 12 seconds).
Similarly,
'12' and 12 are interpreted as '00:00:12'. TIME values with
colons, by
contrast, are always treated as time of the day. That is,
'11:12' mean
'11:12:00', not '00:11:12'.
By default, values that lie outside the TIME range but are
otherwise legal
are clipped to the closest endpoint of the range. For example,
'-850:00:00'
and '850:00:00' are converted to '-838:59:59' and
'838:59:59'.
Illegal TIME values are converted to '00:00:00'. Note that
because '00:00:00'
is itself a legal TIME value, there is no way to tell, from a
value of '00:00:00'
stored in a table, whether the original value was specified as
'00:00:00' or
whether it was illegal.
For more restrictive treatment of invalid TIME values, enable
strict SQL
mode to cause errors to occur.
2.4.3 The YEAR Type
The YEAR type is a one-byte type used for representing years. It
can be
declared as YEAR(2) or YEAR(4) to specify a display width of two
or four
characters. The default is four characters if no width is
given.
For four-digit format, MySQL displays YEAR values in YYYY
format, with a
range of 1901 to 2155. For two-digit format, MySQL displays
values with a
range of 70 (1970) to 69 (2069).
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 44
You can specify input YEAR values in a variety of formats:
As a four-digit string in the range '1901' to '2155'.
As a four-digit number in the range 1901 to 2155.
As a two-digit string in the range '00' to '99'. Values in the
ranges '00' to
'69' and '70' to '99' are converted to YEAR values in the ranges
2000 to
2069 and 1970 to 1999.
As a two-digit number in the range 1 to 99. Values in the ranges
1 to 69
and 70 to 99 are converted to YEAR values in the ranges 2001 to
2069
and 1970 to 1999. Note that the range for two-digit numbers is
slightly
different from the range for two-digit strings, because you
cannot specify
zero directly as a number and have it be interpreted as 2000.
You must
specify it as a string '0' or '00' or it is interpreted as
0000.
As the result of a function that returns a value that is
acceptable in a
YEAR context, such as NOW(). Illegal YEAR values are converted
to
0000.
2.4.4 Y2K Issues and Date Types
MySQL Server itself has no problems with Year 2000 (Y2K)
compliance:
MySQL Server uses Unix time functions that handle dates into the
year
2038 for TIMESTAMP values. For DATE and DATETIME values,
dates
through the year 9999 are accepted.
All MySQL date functions are implemented in one source file,
sql/time.cc, and are coded very carefully to be year
2000-safe.
In MySQL, the YEAR data type can store the years 0 and 1901 to
2155
in one byte and display them using two or four digits. All
two-digit years
are considered to be in the range 1970 to 2069, which means that
if you
store 01 in a YEAR column, MySQL Server treats it as 2001.
Although MySQL Server itself is Y2K-safe, you may run into
problems if you
use it with applications that are not Y2K-safe. For example,
many old
applications store or manipulate years using two-digit values
(which are
ambiguous) rather than four-digit values. This problem may be
compounded
by applications that use values such as 00 or 99 as missing
value
indicators. Unfortunately, these problems may be difficult to
fix because
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 45
different applications may be written by different programmers,
each of
whom may use a different set of conventions and date-handling
functions.
Thus, even though MySQL Server has no Y2K problems, it is
the
application's responsibility to provide unambiguous input. Any
value
containing a two-digit year is ambiguous, because the century is
unknown.
Such values must be interpreted into four-digit form because
MySQL stores
years internally using four digits.
For DATETIME, DATE, TIMESTAMP, and YEAR types, MySQL
interprets
dates with ambiguous year values using the following rules:
Year values in the range 00-69 are converted to 2000-2069.
Year values in the range 70-99 are converted to 1970-1999.
Remember that these rules are only heuristics that provide
reasonable
guesses as to what your data values mean. If the rules used by
MySQL do
not produce the correct values, you should provide unambiguous
input
containing four-digit year values.
Self Assessment Questions
3. Each _____ type has a range of legal values, as well as a
zero value
that may be used when you specify an illegal value that MySQL
cannot
represent.
4. You can get MySQL to accept certain dates, such as
'2009-11-31', by
using the ______ SQL mode.
5. The format of the timestamp column in MySQL is
________________.
2.5 Column Type Storage Requirements
The storage requirements for each of the column types supported
by
MySQL are listed by category.
The maximum size of a row in a MyISAM table is 65534 bytes. Each
BLOB
and TEXT column accounts for only 5-9 bytes toward this
size.
If a table includes any variable-length column types, the record
format will
also be variable-length.
Note that when a table is created, MySQL may, under certain
conditions,
change a column from a variable-length type to a fixed-length
type, or vice-
versa.
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 46
1. Numeric Types:
Table 2.3: Numeric Data Types
Column Type Storage Required
(in bytes)
TINYINT 1
SMALLINT 2
MEDIUMINT 3
INT 4
INTEGER 4
BIGINT 8
FLOAT(X) 4 if 0
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 47
String Types:
Table 2.4: String Data Type Storage Requirements
Column Type Storage Required
(in bytes)
CHAR(M) M bytes, 0
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 48
The size of a SET object is determined by the number of
different set
members. If the set size is N, the object occupies (N+7)/8
bytes, rounded
up to 1, 2, 3, 4, or 8 bytes. A SET can have a maximum of 64
members.
2.6 Choosing the Right Type for a Column
For the most efficient use of storage, try to use the most
precise type in all
cases. For example, if an integer column will be used for values
in the range
from 1 to 99999, MEDIUMINT UNSIGNED is the best type. Of the
types that
represent all the required values, it uses the least amount of
storage.
Accurate representation of monetary values is a common problem.
In
MySQL, you should use the DECIMAL type. This is stored as a
string, so no
loss of accuracy should occur. If accuracy is not too important,
the DOUBLE
type may also be good enough.
For high precision, you can always convert to a fixed-point type
stored in a
BIGINT. This allows you to do all calculations with integers and
convert
results back to floating-point values only when necessary.
2.7 Using Column Types from Other Database Engines
To make it easier to use code written for SQL implementations
from other
vendors, MySQL maps column types as shown in the following
table. These
mappings make it easier to import table definitions from other
database
engines into MySQL:
Column type mapping occurs at table creation time. If you create
a table
with types used by other vendors and then issue a DESCRIBE
tbl_name
statement, MySQL reports the table structure using the
equivalent MySQL
types.
Table 2.5: Mapping of MySQL Data Types and Other Vendor
Types
Other Vendor Type MySQL Type
BINARY(NUM) CHAR(NUM) BINARY
CHAR VARYING(NUM) VARCHAR(NUM)
FLOAT4 FLOAT
FLOAT8 DOUBLE
INT1 TINYINT
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 49
INT2 SMALLINT
INT3 MEDIUMINT
INT4 INT
INT8 BIGINT
LONG VARBINARY MEDIUMBLOB
LONG VARCHAR MEDIUMTEXT
LONG MEDIUMTEXT (MySQL 4.1.0 on)
MIDDLEINT MEDIUMINT
VARBINARY(NUM) VARCHAR(NUM) BINARY
Column type mapping occurs at table creation time. If you create
a table
with types used by other vendors and then issue a DESCRIBE
tbl_name
statement, MySQL reports the table structure using the
equivalent MySQL
types.
2.8 Summary
This unit covers the following topics with respect to data types
in MySQL:
1. Numeric Types: This topic discusses various Numeric data
types like
Bit, Float, Integer, and so on and their various syntaxes
available for
usage in numerical calculations of SQL statements.
2. String Types: This topic discusses the character data types
and their
variants like CHAR and VARCHAR, String data types and their
variations.
3. Date and Time Types: This topic discusses the different
variants of
Date, DateTime, and TimeStamp data types used in MySQL along
with
their syntaxes and the context of usage.
4. Column Type Storage Requirements: This topic discusses the
storage
requirements for each of the column types so that the user can
judge the
optimum data types for his database for saving the storage
space.
5. Using Column Types from other Database Engines: To make
it
easier to use code written for SQL implementations from other
vendors,
MySQL maps column types. These mappings make it easier to
import
table definitions from other database engines into MySQL.
-
RDBMS with MySQL Unit 2
Sikkim Manipal University Page No. 50
2.9 Terminal Questions
1. Write about float and double data types
2. Write the differences between char and varchar data types in
MySQL.
3. List the various date and time data types, together with
their allowed
ranges and formats
4. Describe the storage requirements of String Column types
2.10 Answers
Self Assessment Questions
1. strict
2. BLOB
3. temporal
4. ALLOW_INVALID_DATES
5. 'YYYY-MM-DD HH:MM:SS'
Terminal Questions
1. FLOAT [(M,D)] [UNSIGNED] [ZEROFILL]: A small
(single-precision)
floating-point number. Allowable values are -3.402823466E+38 to
-
1.175494351E-38, 0, and
1.175494351E-38 to 3.402823466E+38.
DOUBLE [(M,D)] [UNSIGNED] [ZE