Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 50 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
50
Dung lượng
1,22 MB
Nội dung
Table 14.3. Most Common SQL Data Types
(%&%123"#
(#)*$+"&+',
maximum!size!is!specified!in!the!parentheses.
TINYTEXT
A!string!with!a!maximum!length!of!255!characters.
TEXT
A!variable8length!text!string!with!a!maximum!length!of!65,535!characters,!
used!for!storing!large!text!files,!documents,!text!areas,!etc.
BLOB
Binary!large!object.!A!binary!string!with!a!maximum!length!of!65,535!
characters,!used!for!storing!binary!files,!images,!sounds,!etc.
Date!and!Time
DATE
(yyyy-mm-dd)!year,!month,!day;!e.g.,!2006-10-30!(Note:!MySQL!also!allows!
you!to!store!0000-00-00!as!a!“dummy!date.”)
DATETIME
(yyyy-mm-dd hh:mm:ss)!date!and!time;!e.g.,!2006-10-30 22:59:59
TIMESTAMP
(yyyy-mm-dd hh:mm:ss)!date!and!time;!e.g.,!1970-01-01!(date!and!time!of!
last!transaction!on!a!row)
TIME
(hh:mm:ss)!time;!e.g.,!10:30:58
YEAR
(yyyy | yy)!year!in!four!or!two!digits;!e.g.,!1978!or!78
!
14.3.3. Creating a Table
Creating a table is a little more complicated than creating the database. The CREATE TABLE statement is used to
create a new table in the database. First you must name the new table and then specify all the fields that will be included
in the table as well as the data types and any other attributes. A data type can be an integer, a floating-point (real)
number such as 5.4, a string of characters, a date, a time, and so on. Not all databases will specify data types in the same
way. To see what data types and attributes are available for MySQL, see Table 14.3 or the MySQL documentation.
Designing your tables correctly is important and a subject that merits further research if you have not worked with
databases before. See http://databases.about.com/od/specificproducts/a/normalization.htm for an excellent beginner’s
tutorial on database design. For now, here are some rules to keep in mind when designing the table:
451
Choose!the!right!data!type!for!your!fields;!for!example,!use!integer!types!for!primary!keys,!
use!float!and!double!types!for!large!numbers,!use!decimal!or!numeric!types!for!currency,!
use!the!correct!date!format!for!times!and!dates,!and!give!yourself!ample!field!width!for!
strings!containing!variable!numbers!of!characters,!such!as!names!and!addresses.!If!you!are!
saving!binary!data!such!as!images!and!sounds,!use!a!data!type!that!supports!such!large!
amounts!of!data!such!as!blob!and!text!types.!See!Table!14.3.
651
Give!columns!sensible!and!concise!names.!Make!them!unique!within!the!table.!Do!not!have!
duplicate!columns!in!the!same!table,!as!shown!below.!These!should!not!be!three!columns!
all!headed!with!phone.!
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
751
Store!only!one!value!under!each!column!heading!in!each!row;!for!example,!if!you!have!a!
“Phone”!field,!you!should!not!have!“cell,!home,!business”!all!in!one!table!cell,!as!shown!
here:!
851
Create!separate!tables!for!each!group!of!related!items!and!give!each!row!a!unique!column!
or!primary!key,!as!shown!here:!
!
User!Table:!
Phone!Table:!
951
If!you!still!have!redundant!data,!put!it!in!its!own!table!and!establish!a!relation!between!the!
tables!with!foreign!keys.
Format
CREATE TABLE table_name ( column_name1 data_type, column_name2 data_type,
column_name3 data_type < no comma on the last entry )
Example 14.26.
Code!View:!
1 mysql> CREATE DATABASE pets;
Query OK, 1 row affected (0.24 sec)
2 mysql> USE pets;
3 mysql> CREATE TABLE dog
-> ( name varchar(20),
-> owner varchar(20),
-> breed varchar(20),
-> sex char(1),
-> birth date,
-> death date
-> );
Query OK, 0 rows affected (0.16 sec)
4 mysql> describe dog;
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
+ + + + + + +
| Field | Type | Null | Key | Default | Extra |
+ + + + + + +
| name | varchar(20) | YES | | NULL | |
| owner | varchar(20) | YES | | NULL | |
| breed | varchar(20) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| birth | date | YES | | NULL | |
| death | date | YES | | NULL | |
+ + + + + + +
6 rows in set (0.00 sec)
Explanation
1
A!database!called!“pets”!is!created.
2
The!“pets”!database!is!selected!and!entered.
3
A!table!called!“dogs”!is!created!with!fields!and!their!data!types.!The!“name”,!
“owner”,!and!“breed”!will!consist!of!a!varying!number!of!up!to!20!characters.!
The!“sex”!is!one!character,!either!“f”!or!“m”!for!female!or!male.!The!“birth”!and!
“death”!columns!are!assigned!date!type.
4
The!DESCRIBE!command!is!like!the!SHOW!command.!It!displays!the!layout!of!the!
new!table.
Now we can insert some data into the new table.
Example 14.27.
mysql> INSERT INTO dog(name,owner,breed, sex, birth, death)
-> VALUES('Fido','Mr. Jones', 'Mutt', 'M', '2004-11-12',
'2006-04-02');
Query OK, 1 row affected (0.09 sec)
14.3.4. Creating a Key
In real life, people can be identified by Social Security numbers, driver’s license numbers, and employee numbers;
books can be identified by ISBN numbers; and a Web store order can be identified by a purchase order number. These
identification numbers must be unique so that no two people have the same Social Security number, no two books have
the same ISBN number, and so on. Keys are used to uniqely identify a record in a table. There are two types of keys:
primary keys and foreign keys.
Primary Keys
Each table typically has a primary key. Primary keys are used to uniquely identify a record in the database. They must
be unique, never change, occur only once per table, and are normally numeric types.
You can choose to manually generate this unique number for each record or let the database do it for you. If you let the
database generate the primary key, it will generate a unique number, given a starting value (e.g., 1) and then for each
new record increment that number by one. Even if a record is deleted, that number is never recycled. The database
increments its internal counter, guaranteeing that each record will be given a unique “key.”
To set a field as a primay key, use the attribute PRIMARY KEY (field_name) and to tell the database to
automatically create the unique number, use the AUTO_INCREMENT attribute following the field definition. The
primary key cannot be null.
The following two examples describe a table called “categories” where the primary key is called “CategoryID”. It will
automatically be incremented each time a new category is added to the table.
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
Example 14.28.
mysql> USE northwind;
Database changed
mysql> DESCRIBE categories;
+ + + + + + +
| Field | Type | Null | Key | Default | Extra
|
+ + + + + + +
| CategoryID | int(11) | | PRI | NULL
|auto_increment |
| CategoryName | varchar(15) | | MUL | |
|
| Description | longtext | YES | | NULL |
|
| Picture | longblob | YES | | NULL |
|
+ + + + + + +
4 rows in set (0.09 sec)
Explanation
The “CategoryID” is the primary key, an integer of up to 11 digits, which will be incremented by 1, initially
set to NULL (no value). The first time a record is inserted into the database, the value will be 1.
Example 14.29.
mysql> SELECT CategoryID, CategoryName FROM categories;
+ + +
| CategoryID | CategoryName |
+ + +
| 1 | Beverages |
| 2 | Condiments |
| 3 | Confections |
| 4 | Dairy Products |
| 5 | Grains/Cereals |
| 6 | Meat/Poultry |
| 7 | Produce |
| 8 | Seafood |
+ + +
8 rows in set (0.16 sec)
Explanation
The primary key is called “CategoryID”. It is used to uniquely identify the different categories in this table
from the “northwind” database. When a new category is added to the table, the “CategoryID” will be
automatically incremented by 1.
Foreign Keys
If a primary key is referenced in another table, it is called a foreign key. Foreign keys are used to create relation
between tables. In the following example, two tables are described, which both reference the “CategoryID” key,
although it is primary in one and foreign in the other.
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
Example 14.30.
Code!View:!
mysql> DESCRIBE categories;
+ + + + + + +
| Field | Type | Null | Key | Default | Extra
|
+ + + + + + +
1 | CategoryID | int(11) | | PRI | NULL |
auto_increment |
| CategoryName | varchar(15) | | MUL | |
|
| Description | longtext | YES | | NULL |
|
| Picture | longblob | YES | | NULL |
|
+ + + + + + +
4 rows in set (0.00 sec)
mysql> DESCRIBE products;
+ + + + + + +
| Field | Type | Null| Key | Default| Extra
|
+ + + + + +
| ProductID | int(11) | | PRI | NULL |
auto_increment|
| ProductName | varchar(40) | | MUL | |
|
| SupplierID | int(11) | YES | MUL | NULL |
|
2 | CategoryID | int(11) | YES | MUL | NULL |
|
| QuantityPerUnit| varchar(20) | YES | | NULL |
|
| UnitPrice | decimal(19,4)| YES | | NULL |
|
| UnitsInStock | smallint(6) | YES | | NULL |
|
| UnitsOnOrder | smallint(6) | YES | | NULL |
|
| ReorderLevel | smallint(6) | YES | | NULL |
|
| Discontinued | tinyint(4) | | | 0 |
|
+ + + + + + +
10 rows in set (0.00 sec)
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
Explanation
1
The!“categories”!table!has!a!primary!key!field!called!“CategoryID”.
2
The!“products”!table!has!its!own!primary!key!(“ProductID”)!in!addition!to!a!
foreign!key!called!“CategoryID”.!If!a!primary!key!is!referenced!in!another!table,!
it!is!called!a!foreign!key.
14.3.5. Relations
A major advantage of the relational database systems is the ability to create relations between tables. Simply put, a
relation is a connection between a field of one table and a field of another. This relation allows you to look up related
records in the database.
The operation of matching rows from one table to another using one or more column values is called a join. There are
several types of join statements, such as full joins, cross joins, left joins, and so on, but let’s start with a simple joining
of two tables, called an inner join.
Tables can be related to each other with keys. As we discussed earlier, a primary key is a column with a unique value
for each row. A matching key in a second table is called a foreign key. With these keys, you can bind data together
across tables without repeating all of the data in every table where a certain condition is met.
Consider the the previous Example 14.30, in which two tables from the “northwind” database are described. One table
is called “categories” and the other called “products”. “CategoryId” is a primary key field in the “categories” table, and
it is a foreign key in the “products” table. The “CategoryId” key is used to create a relationship between the two tables.
Two Tables with a Common Key
As discussed previously, both the “categories” table and the “products” table have a “CategoryID” key with the same
values, making it possible to create a relation between the two tables.
Let’s create a relation in which all the product names are listed if they are in the “Seafood” category. Because every
product in the “products” table falls into one of the eight categories in the “categories” table, the two tables can be
bound by their common “CategoryID”.
Example 14.31.
Code!View:!
mysql> SELECT CategoryID, CategoryName FROM categories;
+ + +
| categoryID | categoryName |
+ + +
| 1 | Beverages |
| 2 | Condiments |
| 3 | Confections |
| 4 | Dairy Products |
| 5 | Grains/Cereals |
| 6 | Meat/Poultry |
| 7 | Produce |
| 8 | Seafood |
+ + +
8 rows in set (0.00 sec)
mysql> SELECT CategoryID, ProductName FROM products;
(Partial Output)
+ + +
| CategoryID | ProductName |
+ + +
| 1 | Chai |
| 1 | Chang |
| 2 | Aniseed Syrup |
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
| 2 | Chef Anton's Cajun Seasoning |
| 2 | Chef Anton's Gumbo Mix |
| 2 | Grandma's Boysenberry Spread |
| 7 | Uncle Bob's Organic Dried Pears |
| 2 | Northwoods Cranberry Sauce |
| 6 | Mishi Kobe Niku |
| 8 | Ikura |
| 4 | Queso Cabrales |
| 4 | Queso Manchego La Pastora |
| 8 | Konbu |
| 7 | Tofu |
| 2 | Genen Shouyu |
Explanation
This example displays columns from both the “categories” table and the “products” table. In the
“categories” table the “CategoryID” is the primary field and uniquely identifies all other fields in the table.
In the “products” table, the “CategoryID” is a foreign key and is repeated many times for all the products.
Using a Fully Qualified Name and a Dot to Join the Tables
When querying more than one table, a dot is used to fully qualify the columns by their table name to avoid potential
ambiguity if two tables have a field with the same name, as shown in Example 14.32.
Example 14.32.
mysql> SELECT CategoryName, ProductName FROM categories, products
-> WHERE products.CategoryID = 8 AND categories.CategoryID =
8;
+ + +
| CategoryName | ProductName |
+ + +
| Seafood | Ikura |
| Seafood | Konbu |
| Seafood | Carnarvon Tigers |
| Seafood | Nord-Ost Matjeshering |
| Seafood | Inlagd Sill |
| Seafood | Gravad lax |
| Seafood | Boston Crab Meat |
| Seafood | Jack's New England Clam Chowder |
| Seafood | Rogede sild |
| Seafood | Spegesild |
| Seafood | Escargots de Bourgogne |
| Seafood | Röd Kaviar |
+ + +
12 rows in set (0.00 sec)
Explanation
In the SELECT, two tables (separated by commas) will be joined by the “CategoryID” field. Because the
field name is the same in both tables, the table name is prepended to the field name with a dot, as
products.CategoryId and categories.CategoryId. In the WHERE clause, the two tables are
connected if the both tables have a “CategoryID” equal to 8.
Aliases
To make things a little easier by typing less with complicated queries, SQL provides an aliasing mechanism that allows
you to use symbolic names for columns and tables. The alias is defined with the AS keyword and the alias consists of a
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
single character or an abbreviated string. When the alias is used in the WHERE clause to represent a table name, it is
appended with a dot and the name of the field being selected from that table.
Format
(Column Alias)
SELECT column_name AS column_alias_name FROM table_name
!
(Table Alias)
SELECT column_name FROM table_name AS table_alias_name
Example 14.33.
mysql> SELECT CategoryName as Foods FROM categories;
+ +
| Foods |
+ +
| Beverages |
| Condiments |
| Confections |
| Dairy Products |
| Grains/Cereals |
| Meat/Poultry |
| Produce |
| Seafood |
+ +
8 rows in set (0.00 sec)
Explanation
The column name from table “categories” was named “CategoryName”. An alias called “Foods” is created
by using the AS keyword after “CategoryName”. Now when the SELECT returns a result-set, the output
will show “Foods” as the name of the column.
Example 14.34.
mysql> SELECT ProductName FROM products AS p, categories AS c
WHERE
-> p.CategoryID = c.CategoryID AND c.CategoryName="SeaFood";
+ +
| ProductName |
+ +
| Ikura |
| Konbu |
| Carnarvon Tigers |
| Nord-Ost Matjeshering |
| Inlagd Sill |
| Gravad lax |
| Boston Crab Meat |
| Jack's New England Clam Chowder |
| Rogede sild |
| Spegesild |
| Escargots de Bourgogne |
| Röd Kaviar |
+ +
12 rows in set (0.00 sec)
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
Explanation
This example might look a little tricky at first. The table named “products” is given an alias called “p” and
the table name “categories” is given the alias “c”. These aliases are short names, making it easier to type
the query when more than one table is involved; for example, instead of typing
products.CategoryID, we can type p.CategoryID, and categories.CategoryName can be
referenced as c.CategoryName.
14.3.6. Altering a Table
When you alter a table, you redefine its structure by adding or dropping a new columns, keys, indexes, and tables. You
can also use the ALTER command to change column names, types, and the table name.
Format
ALTER TABLE tablename ADD column datatype
!
Example:
alter table artist add column ArtDate date; alter table artist drop column
"Address";
Example 14.35.
Code!View:!
use pets;
1 mysql> ALTER TABLE dog ADD pet_id int(11);
Query OK, 0 rows affected (0.13 sec)
Records: 0 Duplicates: 0 Warnings: 0
2 mysql> ALTER TABLE dog MODIFY column pet_id int(11)
> auto_increment primary key;
Query OK, 1 row affected (0.11 sec)
Records: 1 Duplicates: 0 Warnings: 0
3 mysql> describe dog;
+ + + + + + +
| Field | Type | Null | Key | Default | Extra
|
+ + + + + + +
| name | varchar(20) | YES | | NULL |
|
| owner | varchar(20) | YES | | NULL |
|
| breed | varchar(20) | YES | | NULL |
|
| sex | char(1) | YES | | NULL |
|
| birth | date | YES | | NULL |
|
| death | date | YES | | NULL |
|
| pet_id | int(11) | | PRI | NULL | auto_increment
|
+ + + + + + +
7 rows in set (0.00 sec)
mysql> select * from dog;
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
+ + + + + + + +
| name | owner | breed | sex | birth | death |
pet_id |
+ + + + + + +
| Fido | Mr. Jones | Mutt | M | 2004-11-12| 2006-04-02|
1 |
| Lassie| Tommy Rettig| Collie| F | 2006-01-10| NULL |
2 |
+ + + + + + + +
2 rows in set (0.00 sec)
Explanation
1
The!ALTER!command!will!change!the!table!by!adding!a!new!field,!called!
“pet_id”,!an!integer!of!11!digits.
2
Once!the!“pet_id”!field!has!been!created,!the!ALTER!command!is!used!again!to!
make!this!a!primary!key!that!will!automatically!be!incremented!each!time!a!
record!is!added.
3
The!DESCRIBE!command!shows!the!structure!of!the!table!after!it!was!changed.!
A!primary!key!has!been!added.
14.3.7. Dropping a Table
To drop a table is relatively simple. Just use the drop command and the name of the table:
mysql> drop table dog; Query OK, 20 rows affected (0.11 sec)
14.3.8. Dropping a Database
To drop a database, use the drop database command:
mysql> drop database pets; Query OK, 1 row affected (0.45 sec)
14.4. SQL Functions
The following functions are used to alter or format the output of a SQL query. Functions are provided for strings,
numbers, dates, server and information, and so on. They return a result-set. Functions are vendor specific, meaning
functions supported byMySQL might not be supported by Microsoft SQL Server. See the MySQL documenation for a
list of all functions supported.
When using SELECT with a function, the function, as it was called, is displayed as the name of the column in the
result-set as shown in Example 14.36.
Example 14.36.
1 mysql> SELECT avg(UnitPrice)
FROM order_details;
+ +
| avg(UnitPrice) |
+ +
| 26.21851972 |
+ +
1 row in set (0.01 sec)
2 mysql> SELECT avg(UnitPrice) as 'Average Price'
FROM order_details;
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
[...]... integrate PHP andMySQLPHP provides built-in functions that allow all the necessary operations for opening and selecting the database, and for sending it SQL queries to create tables, update and delete them, retrieve records, and display the results You can create your HTML form, process it, and connect to the MySQL database all in one PHP program! At the beginning of this book, we described PHP and MySQL. .. program ends, PHP provides the mysql_ close() function The mysql_ close() function closes the connection to the MySQL server referenced by the link Format bool mysql_ close ( [resource link_identifier] Example: mysql_ close($link); Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark Example 15.1 < ?php print "Opening the connection to the database server< br />"; 1 $link = mysql_ connect("localhost",... mysql_ affected_rows(), and so on You can also use the built-in error-handling functions to find out where a query failed You can test that your SQL statement is valid by executing it in any other client, such as the mysql command line For INSERT, UPDATE, and DELETE, this function will return TRUE if the operation was successful and FALSE otherwise Example 15.3 Code View: MySQL Query in PHP... SQL statement you would type in the MySQL Query Browser or at the mysql command line It can also contain explicit values or variables evaluated byPHP before sending the query to the database 4 The mysql_ query() function is executed and will return true if the query is successful and false if not 5 The mysql_ affected_rows() function returns the... name) and the value associated with it Figure 15.5 Fetching a record as an associative array with the mysql_ fetch_assoc() function Output from Example 15.5 15.1.5 Other Useful MySQL Functions PHP comes with a few more built-in MySQL functions In this section we look at some other commonly used ones Table 15.1 lists some of the MySQL functions you might find useful when integrating PHP and MySQL. .. the database server, and having selected a database, it is time to start executing SQL commands PHP provides the mysql_ query() function to perform database queries You must have adequate permissions to execute queries on a given database (see “The Grant and Revoke Commands” on page 589) Format resource mysql_ query ( string query [, resource link_identifier] ) Example: $result = mysql_ query("SELECT... SQL language, you can talk to your database In the next chapter, we learn how to use PHP functions to connect to the MySQL server and retrieve and display data from a database using the SQL statements Chapter 14 Lab 1 Go to the MySQL console and use the show command to list all the databases Use the mysql database Now display all of its tables 2 Create a new database called... when integrating PHP andMySQL Table 15.1 MySQL Functions Database Function What It Does mysql_ connect() Opens a connection to a MySQL server mysql_ pconnect() Opens a persistent connection mysql_ selectdb() Selects the default database mysql_ change_user() Changes the identity of the user logged on mysql_ list_dbs Lists databases for this MySQL server Please purchase PDF Split-Merge... 15.1 MySQL Functions Database Function What It Does mysql_ list_tables Lists tables in the database Query Functions Affecting Rows mysql_ fetch_assoc() Returns one result row, as an associative array mysql_ fetch_row() Returns one result row, as an array mysql_ affected_rows() Returns number of rows affected by query mysql_ num_rows() Returns number of rows selected mysql_ fetch_object()... Shippers"); $result = mysql_ query("DESCRIBE Shippers"); For the SELECT, SHOW, DESCRIBE, or EXPLAIN statements, mysql_ query() returns a resource on success, or FALSE on error For other types of SQL statements (UPDATE, DELETE, DROP, etc.), mysql_ query() returns TRUE on success or FALSE on error PHP provides a number of functions to deal with the result, such as mysql_ fetch_array(), mysql_ num_rows(), mysql_ affected_rows(), . server and information, and so on. They return a result-set. Functions are vendor specific, meaning
functions supported by MySQL might not be supported by. sec)
14.4.3. Date and Time Functions
To get the date and time, MySQL provides the functions shown in Table 14.6.
Table 14.6. MySQL Date and Time Functions