Getting started with MySQL
by Russell J.T. Dyer
Over the past few years, MySQL has become one of the most popular database
systems. The company which develops the software, MySQL AB of Sweden, is
experiencing about 35,000 downloads a day and estimates over 5 million
installations worldwide.
Since MySQL can be selected from installation as part of Red Hat� Enterprise
Linux� and Fedora Core, I won't explain how to install the software. However,
if you don't have MySQL installed on your server, you can either get it from
your Linux installation CDs or you can go to MySQL's download page to get the
latest RPMs. Just be sure to use the latest, recommended Generally Available
release and install the Standard distribution of each RPM for your type of
system.
Connecting to MySQL
MySQL is a database system, a database server. To interface with the MySQL
server, you can use a client program or you can write a program or script with
one of the popular programming languages (such as Perl) using an API
(Application Programming Interface) to interface with the MySQL server. This
article focuses on using the default client that comes with MySQL called mysql.
With this client, you can either enter queries from the command line or you can
switch to a terminal, that is to say, monitor mode. We'll use the latter.
>From the command line, enter the following to log in as the root user and to
>enter monitor mode:
mysql -u root -p -h localhostThe -u option is for specifying the user name.
Replace root if you want to use a different user name. This is the MySQL user
name, not the Linux user name. The password for the MySQL user root is probably
different from the Linux user root. Incidentally, it's not a good security
practice to use the root user unless you have a specific administrative task to
perform for which only root has the needed privileges. The -p option above
instructs the mysql client to prompt for the password. If the password for the
root user hasn't been set yet, then the password is blank and you would just
hit Enter when prompted. The -h option is for specifying the host name or the
IP address of the server. This would be necessary if the client is running on a
different machine than the server. If you've secure-shelled into the server
machine, you probably won't need to use the host option. In fact, if you're
logged into Linux as root, you won't need the user option-the -p is all you'll
need. Once you've entered the line above along with the password when prompted,
you are logged into MySQL through the client. To exit, type quit or exit and
press Enter.
Creating a structure
To be able to add and manipulate data, first you have to create a database
structure. Creating a database is simple. Enter something like the following
from within the mysql client:
CREATE DATABASE bookstore;
USE bookstore;This very minimal, first SQL statement creates a sub-directory
called bookstore on the Linux file system in the directory which holds your
MySQL data files. It won't create any data, obviously. It just sets up a place
to add tables, which in turn hold data. The second SQL statement above sets
this new database as the default database. It will remain your default until
you change it or until you log out of MySQL.
The next step is to begin creating tables. This is only a little more
complicated. To create a simple table that holds basic data on books, enter the
following:
CREATE TABLE books (
isbn CHAR(20) PRIMARY KEY,
title VARCHAR(50),
author_id INT,
publisher_id INT,
year_pub CHAR(4),
description TEXT
);This SQL statement creates the table books with six fields, or rather
columns. The first column (isbn) is an identification number for each row-this
name relates to the unique identifier used in the book publishing business. It
has a fixed width character type of 20 characters. It will be the primary key
column on which data will be indexed. The column data type for the book title
is a variable width character column of fifty characters at most. The third and
fourth columns will be used for identification numbers for the author and the
publisher. They are integer data types. The fifth column is used for the
publication year of each book. The last column is for entering a description of
each book. It's a TEXT data type, which means that it's a variable width column
and it can hold up 65535 bytes of data for each row. There are several other
data types that may be used for columns, but this gives you a good sampling.
To see how the table we created looks, enter the following SQL statement:
DESCRIBE books;which produces the following output:
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| isbn | varchar(20) | | PRI | | |
| title | varchar(50) | YES | | NULL | |
| author_id | int(11) | YES | | NULL | |
| publisher_id | int(11) | YES | | NULL | |
| year_pub | char(4) | YES | | NULL | |
| description | text | YES | | NULL | |
+--------------+-------------+------+-----+---------+-------+To change the
settings of a table, you can use the ALTER TABLE statement. I'll cover that
statement in another article. To delete a table completely (including its
data), you can use the DROP TABLE statement, followed by the table name. Be
careful with this statement since it's not reversible.
The next table we'll create for our examples is the authors table to hold
author information. This table saves us from having to enter the author's name
and other related data for each book written by each author. It also helps to
ensure consistency of data: there's less chance of inadvertent spelling
deviations.
CREATE TABLE authors (
author_id INT AUTO_INCREMENT PRIMARY KEY,
name_last VARCHAR(50),
name_first VARCHAR(50),
country VARCHAR(50)
);We'll join this table to the books table as needed. For instance, we would
use it when we want a list of books along with their corresponding authors'
names. For a real bookstore's database, both of these tables would probably
have more columns. There would also be several more tables. For the examples
that follow, these two tables are enough.
Minor items
Before moving on to the next step of adding data to the tables, let me point
out a few minor items that I've omitted mentioning. SQL statements end with a
semi-colon (or a \G). You can spread an SQL statement over multiple lines.
However, it won't be passed to the server by the client until you terminate it
with a semi-colon and hit Enter. To cancel an SQL statement once you've started
typing it, enter \c and press Enter.
As a basic convention, reserved words are printed in all capital letters. This
isn't necessary, though. MySQL is case-insensitive with regards to reserved
words. Database and table names, however, are case-sensitive on Linux. This is
because they reference the related directories and files on the file system.
Column names aren't case sensitive since they're not affected by the file
system, per se. As another convention, I use lower-case letters for structural
names (such as table names). It's a matter of preference for deciding on names.
Entering data
The primary method for entering data into a table is to use the INSERT
statement. As an example, let's enter some information about an author into the
authors table:
INSERT INTO authors
(name_last, name_first, country)
VALUES('Kafka', 'Franz', 'Czech Republic');This adds the name and country of
the author Franz Kafka to the authors table. We don't need to give a value for
the author_id since that column was created with the AUTO_INCREMENT flag. MySQL
automatically assigns an identification number. You can manually assign one,
especially if you want to start the count at a higher number than 1 (such as
1000). Since we are not providing data for all of the columns in the table, we
have to list the columns for which we are giving data and in the order that the
data is given in the set following the VALUES keyword. This means that we could
give the data in a different order.
For an actual database, we would probably enter data for many authors. We'll
assume that we've done that and move on to entering data for some books. Below
is an entry for one of Kafka's books:
INSERT INTO books
(title, author_id, isbn, year_pub)
VALUES('The Castle', '1', '0805211063', '1998');This adds a record for
Kafka's book, The Castle. Notice that I mixed up the order of the columns, but
it still works because both sets agree. We indicate that the author is Kafka by
giving a value of 1 for the author_id. This is the value that was assigned by
MySQL when we entered the row for Kafka earlier. Let's enter a few more books
for Kafka, but by a different method:
INSERT INTO books
(title, author_id, isbn, year_pub)
VALUES('The Trial', '1', '0805210407', '1995'),
('The Metamorphosis', '1', '0553213695', '1995'),
('America', '1', '0805210644', '1995');In this example, we've added
three books in one statement. This allows us to give the list of column names
once. We also give the keyword VALUES only once, followed by a separate set of
values for each book, each contained in parentheses and separated by commas.
This cuts down on typing and speeds up the process. Either method is fine, and
both have their advantages. To be able to continue with our examples, let's
assume that data on thousands of books has been entered. With that behind us,
let's look at how to retrieve data from tables.
Retrieving data
The primary method of retrieving data from tables is to use a SELECT statement.
There are many options available with the SELECT statement, but you can start
simply. As an example, let's retrieve a list of book titles from the books
table:
SELECT title
FROM books;This displays all of the rows of books in the table. If the
table has thousands of rows, MySQL displays thousands. To limit the number of
rows retrieved, add a LIMIT clause to the SELECT statement:
SELECT title
FROM books
LIMIT 5;This limits the number of rows displayed to five. To be able to
list the author's name for each book along with the title, you have to join the
books table with the authors table. To do this, use the JOIN clause:
SELECT title, name_last
FROM books
JOIN authors USING (author_id);Notice that the primary table from which
we're drawing data is given in the FROM clause. The table to which we're
joining is given in the JOIN clause along with the commonly named column
(author_id) that we're using for the join. For older versions of MySQL, you may
have to join the tables differently.
To retrieve the titles of only books written by Kafka based on his name (not
the author_id), we would use the WHERE clause with the SELECT statement:
SELECT title AS 'Kafka Books'
FROM books
JOIN authors USING (author_id)
WHERE name_last = 'Kafka';
+-------------------+
| Kafka Books |
+-------------------+
| The Castle |
| The Trial |
| The Metamorphosis |
| America |
+-------------------+This statement lists the titles of Kafka books stored in
the database. Notice that I've added the AS parameter next to the column name
title to change the column heading in the results set to Kafka Books. This is
known as an alias. Looking at the results here, we can see that the title for
one of Kafka's books is incorrect. His book Amerika is spelled above with a "c"
in the table instead of a "k". This leads to the next section on changing data.
Changing and deleting data
To change existing data, a common method is to use the UPDATE statement. When
changing data, though, we need to be sure that we change the correct rows. In
our example, there could be another book with the title America written by a
different author. Since the key column isbn has only unique numbers and we know
the ISBN number for the book that we want to change, we can use it to specify
the row.
UPDATE books
SET title = 'Amerika'
WHERE isbn = '0805210644';This changes the value of the title column for
the row specified. We could change the value of other columns for the same row
by giving the column = value for each, separated by commas.
If we want to delete a row of data, we can use the DELETE statement. For
instance, suppose that our fictitious bookstore has decided no longer to carry
books by John Grisham. By first running a SELECT statement, we determine the
identification number for the author to be 2034. Using this author
identification number, we could enter the following:
DELETE FROM books
WHERE author_id = '2034';This statement deletes all rows from the table
books for the author_id given. To do a clean job of it, we'll have to do the
same for the authors table. We would just replace the table name in the
statement above; everything else would be the same.
Conclusion
This is a very basic primer for using MySQL. Hopefully, it gives you the idea
of how to get started with MySQL. Each of the SQL statements mentioned here
have several more options and clauses each. You can learn more about them from
experimenting and by reading the on-line documentation provided by MySQL AB.
About the author
Russell Dyer has written on MySQL and other open sources topics for several
magazines. He is the author of MySQL in a Nutshell (O'Reilly 2005).
[Non-text portions of this message have been removed]
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/Indo-Linux/
<*> To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/