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?.