![]() ![]() ![]() |
|||||||||||||||||||||||||||||||||
7.6
| |||||||||||||||||||||||||||||||||
| File | Purpose |
tbl_name.frm | Table definition (form) file |
tbl_name.ISD | Data file |
tbl_name.ISM | Index file |
For more information on the properties of the various column types, see 7.2 Column types.
NULL nor NOT NULL is specified, the column
is treated as though NULL had been specified.
AUTO_INCREMENT.
When you insert a value of NULL (recommended) or 0 into an
AUTO_INCREMENT column, the column is set to value+1, where
value is the largest value for the column currently in the table.
AUTO_INCREMENT sequences begin with 1.
mysql_insert_id().
If you delete the row containing the maximum value for an AUTO_INCREMENT
column, the value will be reused. If you delete all rows in the table, the
sequence starts over.
Note: There can be only one AUTO_INCREMENT column per table,
and it must be indexed.
To make MySQL compatible with some ODBC applications, you can find
the last inserted row with the following query:
SELECT * FROM tbl_name WHERE auto_col IS NULL
NULL values are handled differently for TIMESTAMP columns than
for other column types. You cannot store a literal NULL in a
TIMESTAMP column; setting the column to NULL sets it to the
current date and time. Because TIMESTAMP columns behave this way, the
NULL and NOT NULL attributes do not apply in the normal way and
are ignored if you specify them.
On the other hand, to make it easier for MySQL clients to use
TIMESTAMP columns, the server reports that such columns may be
assigned NULL values (which is true), even though TIMESTAMP
never actually will contain a NULL value. You can see this when you
use DESCRIBE tbl_name to get a description of your table.
Note that setting a TIMESTAMP column to 0 is not the same
as setting it to NULL, because 0 is a valid TIMESTAMP
value.
DEFAULT value is specified for a column, MySQL
automatically assigns one.
If the column may take NULL as a value, the default value is
NULL.
If the column is declared as NOT NULL, the default value depends on
the column type:
AUTO_INCREMENT
attribute, the default is 0. For an AUTO_INCREMENT column, the
default value is the next value in the sequence.
TIMESTAMP, the default is the
appropriate ``zero'' value for the type. For the first TIMESTAMP
column in a table, the default value is the current date and time.
7.2.6 Date and time types.
ENUM, the default is the empty string.
For ENUM, the default is the first enumeration value.
KEY is a synonym for INDEX.
UNIQUE key can have only distinct values. An
error occurs if you try to add a new row with a key that matches an existing
row.
PRIMARY KEY is an unique KEY with the extra constraint
that all key columns must be defined as NOT NULL. In MySQL
the key is named PRIMARY. A table can have only one PRIMARY KEY.
If you don't have a PRIMARY KEY and some applications ask for the
PRIMARY KEY in your tables, MySQL will return the first
UNIQUE key, which doesn't have any NULL columns, as the
PRIMARY KEY.
PRIMARY KEY can be a multiple-column index. However, you cannot
create a multiple-column index using the PRIMARY KEY key attibute in a
column specification. Doing so will mark only that single column as primary.
You must use the PRIMARY KEY(index_col_name, ...) syntax.
index_col_name, with an optional suffix (_2,
_3, ...) to make it unique. You can see index names for a
table using SHOW INDEX FROM tbl_name.
SHOW.
MyISAM table type supports indexes on columns that can have
NULL values. In other cases you must declare such columns
NOT NULL or an error results.
col_name(length) syntax, you can specify an index which
uses only a part of a CHAR or VARCHAR column. This can
make the index file much smaller.
7.2.9 Column indexes.
MyISAM table type supports indexing on BLOB and
TEXT columns. When putting an index on a BLOB or TEXT
column you MUST always specify the length of the index:
CREATE TABLE test (blob_col BLOB, index(blob_col(10)));
ORDER BY or GROUP BY with a TEXT or
BLOB column, only the first max_sort_length bytes are used.
BLOB.
FOREIGN KEY, CHECK and REFERENCES clauses don't
actually do anything. The syntax for them is provided only for compatibility,
to make it easier to port code from other SQL servers and to run applications
that create tables with references.
5.3 Functionality missing from MySQL.
NULL column takes one bit extra, rounded up to the nearest byte.
row length = 1
+ (sum of column lengths)
+ (number of NULL columns + 7)/8
+ (number of variable-length columns)
table_options and SELECT options is only
implemented in MySQL 3.23 and above.
The different table types are:
| ISAM | The original table handler |
| MyISAM | The new binary portable table handler |
| HEAP | The data for this table is only stored in memory |
AUTO_INCREMENT | The next auto_increment value you want to set for your table (MyISAM) |
AVG_ROW_LENGTH | An approximation of the average row length for your table. You only need to set this for tables with variable size records. |
CHECKSUM | Set this to 1 if you want MySQL to maintain a checksum for all rows (makes the table a little slower to update but makes it easier to find corrupted tables) (MyISAM) |
COMMENT | A 60 character comment for your table |
MAX_ROWS | Max number of rows you plan to store in the table |
MIN_ROWS | Minimum number of rows you plan to store in the table |
PACK_KEYS | Set this to 1 if you want to have smaller index. This usually makes updates slower and reads faster (MyISAM, ISAM). |
PASSWORD | Encrypt the .frm file with a password. This option doesn't do anything in the standard MySQL version.
|
DELAY_KEY_WRITE | Set this to 1 if want to delay key table updates until the table is closed (MyISAM). |
MyISAM table, MySQL uses the product of
max_rows * avg_row_length to decide how big the resulting table
will be. If you don't specify any of the above options, the maximum size
for a table will be 4G (or 2G if your operating systems only supports 2G
tables).
SELECT after the CREATE STATEMENT,
MySQL will create new fields for all elements in the
SELECT. For example:
mysql> CREATE TABLE test (a int not null auto_increment,
primary key (a), key(b))
TYPE=HEAP SELECT b,c from test2;
This will create a HEAP table with 3 columns. Note that the table will
automatically be deleted if any errors occur while copying data
into the table.
In some cases, MySQL silently changes a column specification from
that given in a CREATE TABLE statement. (This may also occur with
ALTER TABLE.)
VARCHAR columns with a length less than four are changed to
CHAR.
VARCHAR, TEXT or BLOB), all
CHAR columns longer than three characters are changed to
VARCHAR columnss. This doesn't affect how you use the columns in any
way; in MySQL, VARCHAR is just a different way to store
characters. MySQL performs this conversion because it saves space
and makes table operations faster.
10.17 What are the different row formats? Or, when should VARCHAR/CHAR be used?.
TIMESTAMP display sizes must be even and in the range from 2 to 14.
If you specify a display size of 0 or greater than 14, the size is coerced
to 14. Odd-valued sizes in the range from 1 to 13 are coerced
to the next higher even number.
NULL in a TIMESTAMP column; setting
it to NULL sets it to the current date and time. Because
TIMESTAMP columns behave this way, the NULL and NOT NULL
attributes do not apply in the normal way and are ignored if you specify
them. DESCRIBE tbl_name always reports that a TIMESTAMP
column may be assigned NULL values.
If you want to see whether or not MySQL used a column type other
than the one you specified, issue a DESCRIBE tbl_name statement after
creating or altering your table.
Certain other column type changes may occur if you compress a table using
pack_isam.
10.17 What are the different row formats? Or, when should VARCHAR/CHAR be used?.