0% found this document useful (0 votes)
19 views

SQL Database

This document discusses MySQL data types and provides examples of how to create and drop MySQL tables. It describes numeric, date/time, and string data types including INT, DATE, VARCHAR, TEXT. It provides SQL syntax for creating tables, specifying column names and types, primary keys, and NOT NULL and AUTO_INCREMENT attributes. Examples are given for creating tables from the MySQL command line and using PHP mysql_query function. Dropping tables is also demonstrated using the DROP TABLE SQL statement.

Uploaded by

Rohan Raj
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
19 views

SQL Database

This document discusses MySQL data types and provides examples of how to create and drop MySQL tables. It describes numeric, date/time, and string data types including INT, DATE, VARCHAR, TEXT. It provides SQL syntax for creating tables, specifying column names and types, primary keys, and NOT NULL and AUTO_INCREMENT attributes. Examples are given for creating tables from the MySQL command line and using PHP mysql_query function. Dropping tables is also demonstrated using the DROP TABLE SQL statement.

Uploaded by

Rohan Raj
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 13

MySQL Data Types

Properly defining the fields in a table is important to the overall optimization of your database. You
should use only the type and size of field you really need to use; don't define a field as 10
characters wide if you know you're only going to use 2 characters. These types of fields (or
columns) are also referred to as data types, after the type of data you will be storing in those
fields.

MySQL uses many different data types, broken into three categories: numeric, date and time, and
string types.

Numeric Data Types:

MySQL uses all the standard ANSI SQL numeric data types, so if you're coming to MySQL from a
different database system, these definitions will look familiar to you. The following list shows the
common numeric data types and their descriptions.

 INT - A normal-sized integer that can be signed or unsigned. If signed, the allowable range
is from -2147483648 to 2147483647. If unsigned, the allowable range is from 0 to
4294967295. You can specify a width of up to 11 digits.
 TINYINT - A very small integer that can be signed or unsigned. If signed, the allowable
range is from -128 to 127. If unsigned, the allowable range is from 0 to 255. You can
specify a width of up to 4 digits.

 SMALLINT - A small integer that can be signed or unsigned. If signed, the allowable range
is from -32768 to 32767. If unsigned, the allowable range is from 0 to 65535. You can
specify a width of up to 5 digits.

 MEDIUMINT - A medium-sized integer that can be signed or unsigned. If signed, the


allowable range is from -8388608 to 8388607. If unsigned, the allowable range is from 0 to
16777215. You can specify a width of up to 9 digits.

 BIGINT - A large integer that can be signed or unsigned. If signed, the allowable range is
from -9223372036854775808 to 9223372036854775807. If unsigned, the allowable range
is from 0 to 18446744073709551615. You can specify a width of up to 11 digits.

 FLOAT(M,D) - A floating-point number that cannot be unsigned. You can define the display
length (M) and the number of decimals (D). This is not required and will default to 10,2,
where 2 is the number of decimals and 10 is the total number of digits (including decimals).
Decimal precision can go to 24 places for a FLOAT.

 DOUBLE(M,D) - A double precision floating-point number that cannot be unsigned. You


can define the display length (M) and the number of decimals (D). This is not required and
will default to 16,4, where 4 is the number of decimals. Decimal precision can go to 53
places for a DOUBLE. REAL is a synonym for DOUBLE.

 DECIMAL(M,D) - An unpacked floating-point number that cannot be unsigned. In


unpacked decimals, each decimal corresponds to one byte. Defining the display length (M)
and the number of decimals (D) is required. NUMERIC is a synonym for DECIMAL.

Date and Time Types:

The MySQL date and time datatypes are:


 DATE - A date in YYYY-MM-DD format, between 1000-01-01 and 9999-12-31. For example,
December 30th, 1973 would be stored as 1973-12-30.
 DATETIME - A date and time combination in YYYY-MM-DD HH:MM:SS format, between
1000-01-01 00:00:00 and 9999-12-31 23:59:59. For example, 3:30 in the afternoon on
December 30th, 1973 would be stored as 1973-12-30 15:30:00.

 TIMESTAMP - A timestamp between midnight, January 1, 1970 and sometime in 2037.


This looks like the previous DATETIME format, only without the hyphens between numbers;
3:30 in the afternoon on December 30th, 1973 would be stored as 19731230153000
( YYYYMMDDHHMMSS ).

 TIME - Stores the time in HH:MM:SS format.

 YEAR(M) - Stores a year in 2-digit or 4-digit format. If the length is specified as 2 (for
example YEAR(2)), YEAR can be 1970 to 2069 (70 to 69). If the length is specified as 4,
YEAR can be 1901 to 2155. The default length is 4.

String Types:

Although numeric and date types are fun, most data you'll store will be in string format. This list
describes the common string datatypes in MySQL.

 CHAR(M) - A fixed-length string between 1 and 255 characters in length (for example
CHAR(5)), right-padded with spaces to the specified length when stored. Defining a length
is not required, but the default is 1.
 VARCHAR(M) - A variable-length string between 1 and 255 characters in length; for
example VARCHAR(25). You must define a length when creating a VARCHAR field.

 BLOB or TEXT - A field with a maximum length of 65535 characters. BLOBs are "Binary
Large Objects" and are used to store large amounts of binary data, such as images or other
types of files. Fields defined as TEXT also hold large amounts of data; the difference
between the two is that sorts and comparisons on stored data are case sensitive on BLOBs
and are not case sensitive in TEXT fields. You do not specify a length with BLOB or TEXT.

 TINYBLOB or TINYTEXT - A BLOB or TEXT column with a maximum length of 255


characters. You do not specify a length with TINYBLOB or TINYTEXT.

 MEDIUMBLOB or MEDIUMTEXT - A BLOB or TEXT column with a maximum length of


16777215 characters. You do not specify a length with MEDIUMBLOB or MEDIUMTEXT.

 LONGBLOB or LONGTEXT - A BLOB or TEXT column with a maximum length of


4294967295 characters. You do not specify a length with LONGBLOB or LONGTEXT.

 ENUM - An enumeration, which is a fancy term for list. When defining an ENUM, you are
creating a list of items from which the value must be selected (or it can be NULL). For
example, if you wanted your field to contain "A" or "B" or "C", you would define your ENUM
as ENUM ('A', 'B', 'C') and only those values (or NULL) could ever populate that field.

Create MySQL Tables


The table creation command requires:
 Name of the table
 Names of fields

 Definitions for each field

Syntax:

Here is generic SQL syntax to create a MySQL table:

CREATE TABLE table_name (column_name column_type);

Now we will create following table in TUTORIALS database.

tutorials_tbl(
tutorial_id INT NOT NULL AUTO_INCREMENT,
tutorial_title VARCHAR(100) NOT NULL,
tutorial_author VARCHAR(40) NOT NULL,
submission_date DATE,
PRIMARY KEY ( tutorial_id )
);

Here few items need explanation:

 Field Attribute NOT NULL is being used because we do not want this field to be NULL. SO if
user will try to create a record with NULL value then MySQL will raise an error.
 Field Attribute AUTO_INCREMENT tells to MySQL to go ahead and add the next available
number to the id field.

 Keyword PRIMARY KEY is used to define a column as primary key. You can use multiple
columns separated by comma to define a primary key.

Creating Tables from Command Prompt:

This is easy to create a MySQL table from mysql> prompt. You will use SQL command CREATE
TABLE to create a table.

Example:

Here is an example which creates tutorials_tbl:

root@host# mysql -u root -p


Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> CREATE TABLE tutorials_tbl(
-> tutorial_id INT NOT NULL AUTO_INCREMENT,
-> tutorial_title VARCHAR(100) NOT NULL,
-> tutorial_author VARCHAR(40) NOT NULL,
-> submission_date DATE,
-> PRIMARY KEY ( tutorial_id )
-> );
Query OK, 0 rows affected (0.16 sec)
mysql>

NOTE: MySQL does not terminate a command until you give a semi colon (;) at the end of SQL
command.

Creating Tables Using PHP Script:

To create new table in any existing database you would need to use PHP function mysql_query().
You will pass its second argument with proper SQL command to create a table.

Example:

Here is an example to create a table using PHP script:

<html>
<head>
<title>Creating MySQL Tables</title>
</head>
<body>
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully<br />';
$sql = "CREATE TABLE tutorials_tbl( ".
"tutorial_id INT NOT NULL AUTO_INCREMENT, ".
"tutorial_title VARCHAR(100) NOT NULL, ".
"tutorial_author VARCHAR(40) NOT NULL, ".
"submission_date DATE, ".
"PRIMARY KEY ( tutorial_id )); ";
mysql_select_db( 'TUTORIALS' );
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not create table: ' . mysql_error());
}
echo "Table created successfully\n";
mysql_close($conn);
?>
</body>
</html>

Drop MySQL Tables


It is very easy to drop an existing MySQL table. But you need to be very careful while deleting any
existing table because data lost will not be recovered after deleting a table.
Syntax:

Here is generic SQL syntax to drop a MySQL table:

DROP TABLE table_name ;

Dropping Tables from Command Prompt:

This needs just to execute DROP TABLE SQL command at mysql> prompt.

Example:

Here is an example which deletes tutorials_tbl:

root@host# mysql -u root -p


Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> DROP TABLE tutorials_tbl
Query OK, 0 rows affected (0.8 sec)
mysql>

Dropping Tables Using PHP Script:

To drop an existing table in any database you would need to use PHP function mysql_query(). You
will pass its second argument with proper SQL command to drop a table.

Example:
<html>
<head>
<title>Creating MySQL Tables</title>
</head>
<body>
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully<br />';
$sql = "DROP TABLE tutorials_tbl";
mysql_select_db( 'TUTORIALS' );
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not delete table: ' . mysql_error());
}
echo "Table deleted successfully\n";
mysql_close($conn);
?>
</body>
</html>

MySQL Insert Query


To insert data into MySQL table you would need to use SQL INSERT INTO command. You can
insert data into MySQL table by using mysql> prompt or by using any script like PHP.

Syntax:

Here is generic SQL syntax of INSERT INTO command to insert data


into MySQL table:

INSERT INTO table_name ( field1, field2,...fieldN )


VALUES
( value1, value2,...valueN );

To insert string data types it is required to keep all the values into double or single quote, for
example:- "value".

Inserting Data from Command Prompt:

This will use SQL INSERT INTO command to insert data into MySQL table tutorials_tbl

Example:

Following example will create 3 records into tutorials_tbl table:

root@host# mysql -u root -p password;


Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> INSERT INTO tutorials_tbl
->(tutorial_title, tutorial_author, submission_date)
->VALUES
->("Learn PHP", "John Poul", NOW());
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO tutorials_tbl
->(tutorial_title, tutorial_author, submission_date)
->VALUES
->("Learn MySQL", "Abdul S", NOW());
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO tutorials_tbl
->(tutorial_title, tutorial_author, submission_date)
->VALUES
->("JAVA Tutorial", "Sanjay", '2007-05-06');
Query OK, 1 row affected (0.01 sec)
mysql>
NOTE: Please note that all the arrow signs (->) are not part of SQL command they are indicating a
new line and they are created automatically by MySQL prompt while pressing enter key without
giving a semi colon at the end of each line of the command.

In the above example we have not provided tutorial_id because at the time of table create we had
given AUTO_INCREMENT option for this field. So MySQL takes care of inserting these IDs
automatically. Here NOW() is a MySQL function which returns current date and time.

Inserting Data Using PHP Script:

You can use same SQL INSERT INTO command into PHP function mysql_query() to insert data
into a MySQL table.

Example:

This example will take three parameters from user and will insert them
into MySQL table:

<html>
<head>
<title>Add New Record in MySQL Database</title>
</head>
<body>
<?php
if(isset($_POST['add']))
{
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}

if(! get_magic_quotes_gpc() )
{
$tutorial_title = addslashes ($_POST['tutorial_title']);
$tutorial_author = addslashes ($_POST['tutorial_author']);
}
else
{
$tutorial_title = $_POST['tutorial_title'];
$tutorial_author = $_POST['tutorial_author'];
}
$submission_date = $_POST['submission_date'];

$sql = "INSERT INTO tutorials_tbl ".


"(tutorial_title,tutorial_author, submission_date) ".
"VALUES ".
"('$tutorial_title','$tutorial_author','$submission_date')";
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not enter data: ' . mysql_error());
}
echo "Entered data successfully\n";
mysql_close($conn);
}
else
{
?>
<form method="post" action="<?php $_PHP_SELF ?>">
<table width="600" border="0" cellspacing="1" cellpadding="2">
<tr>
<td width="250">Tutorial Title</td>
<td>
<input name="tutorial_title" type="text" id="tutorial_title">
</td>
</tr>
<tr>
<td width="250">Tutorial Author</td>
<td>
<input name="tutorial_author" type="text" id="tutorial_author">
</td>
</tr>
<tr>
<td width="250">Submission Date [ yyyy-mm-dd ]</td>
<td>
<input name="submission_date" type="text" id="submission_date">
</td>
</tr>
<tr>
<td width="250"> </td>
<td> </td>
</tr>
<tr>
<td width="250"> </td>
<td>
<input name="add" type="submit" id="add" value="Add Tutorial">
</td>
</tr>
</table>
</form>
<?php
}
?>
</body>
</html>

While doing data insert its best practice to use function get_magic_quotes_gpc() to check if
current configuration for magic quote is set or not. If this function returns false then use function
addslashes() to add slashes before quotes.

You can put many validations around to check if entered data is correct or not and can take
appropriate action.

MySQL SELECT Query


The SQL SELECT command is used to fetch data from MySQL database. You can use this command
at mysql> prompt as well as in any script like PHP.
Syntax:

Here is generic SQL syntax of SELECT command to fetch data from


MySQL table:

SELECT field1, field2,...fieldN table_name1, table_name2...


[WHERE Clause]
[OFFSET M ][LIMIT N]

 You can use one or more tables separated by comma to include various condition using a
WHERE clause. But WHERE clause is an optional part of SELECT command.
 You can fetch one or more fields in a single SELECT command.

 You can specify star (*) in place of fields. In this case SELECT will return all the fields

 You can specify any condition using WHERE clause.

 You can specify an offset using OFFSET from where SELECT will start returning records. By
default offset is zero

 You can limit the number of returned using LIMIT attribute.

Fetching Data from Command Prompt:

This will use SQL SELECT command to fetch data from MySQL table tutorials_tbl

Example:

Following example will return all the records from tutorials_tbl table:

root@host# mysql -u root -p password;


Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
| 1 | Learn PHP | John Poul | 2007-05-21 |
| 2 | Learn MySQL | Abdul S | 2007-05-21 |
| 3 | JAVA Tutorial | Sanjay | 2007-05-21 |
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.01 sec)

mysql>

Fetching Data Using PHP Script:

You can use same SQL SELECT command into PHP function mysql_query(). This function is used
to execute SQL command and later another PHP function mysql_fetch_array() can be used to
fetch all the selected data. This function returns row as an associative array, a numeric array, or
both. This function returns FALSE if there are no more rows.
Below is a simple example to fetch records from tutorials_tbl table.

Example:

Try out following example to display all the records from tutorials_tbl
table.

<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title,
tutorial_author, submission_date
FROM tutorials_tbl';

mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
echo "Tutorial ID :{$row['tutorial_id']} <br> ".
"Title: {$row['tutorial_title']} <br> ".
"Author: {$row['tutorial_author']} <br> ".
"Submission Date : {$row['submission_date']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>

The content of the rows are assigned to the variable $row and the values in row are then printed.

NOTE: Always remember to put curly brackets when you want to insert an array value directly into
a string.

In above example the constant MYSQL_ASSOC is used as the second argument to PHP function
mysql_fetch_array(), so that it returns the row as an associative array. With an associative array
you can access the field by using their name instead of using the index.

PHP provides another function called mysql_fetch_assoc() which also returns the row as an
associative array.

Example:

Try out following example to display all the records from tutorial_tbl
table using mysql_fetch_assoc() function.
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title,
tutorial_author, submission_date
FROM tutorials_tbl';

mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_assoc($retval))
{
echo "Tutorial ID :{$row['tutorial_id']} <br> ".
"Title: {$row['tutorial_title']} <br> ".
"Author: {$row['tutorial_author']} <br> ".
"Submission Date : {$row['submission_date']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>

You can also use the constant MYSQL_NUM, as the second argument to PHP function
mysql_fetch_array(). This will cause the function to return an array with numeric index.

Example:

Try out following example to display all the records from tutorials_tbl
table using MYSQL_NUM argument.

<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title,
tutorial_author, submission_date
FROM tutorials_tbl';

mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_NUM))
{
echo "Tutorial ID :{$row[0]} <br> ".
"Title: {$row[1]} <br> ".
"Author: {$row[2]} <br> ".
"Submission Date : {$row[3]} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>

All the above three examples will produce same result.

Releasing Memory:

Its a good practice to release cursor memory at the end of each SELECT statement. This can be
done by using PHP function mysql_free_result(). Below is the example to show how it has to be
used.

Example:

Try out following example

<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title,
tutorial_author, submission_date
FROM tutorials_tbl';

mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_NUM))
{
echo "Tutorial ID :{$row[0]} <br> ".
"Title: {$row[1]} <br> ".
"Author: {$row[2]} <br> ".
"Submission Date : {$row[3]} <br> ".
"--------------------------------<br>";
}
mysql_free_result($retval);
echo "Fetched data successfully\n";
mysql_close($conn);
?>

While fetching data you can write as complex SQL as you like. Procedure will remain same as
mentioned above.

You might also like