📄 06-5.html
字号:
<HTML>
<HEAD>
<TITLE>MySQL 4.1.0 中文参考手册 --- 犬犬(心帆)翻译</TITLE>
<style> code {color:purple} tt {color:green} samp {color:navy} pre {color:maroon} </style>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
<META name="description" content="MySQL 4.1.0 中文参考手册">
<META name="keywords" content="MySQL,4.1.0,Shuixin13,MySQL 4.1.0,中文,中文参考手册,犬犬(心帆)">
<LINK rel="shortcut icon" href="shuixin13.ico" />
<LINK href="images/index.css" type=text/css rel=STYLESHEET>
<SCRIPT language=javascript src="images/index.js"></SCRIPT>
<SCRIPT language=javascript><!--
x = new Date()
function cal() {
y = new Date()
diff = y.getTime() - x.getTime()
document.write("载入时间 " + diff/1000 + " 秒")
}
//--></SCRIPT>
<SCRIPT language=JavaScript>
var currentpos,timer;
function initialize()
{
timer=setInterval("scrollwindow()",10);
}
function sc()
{
clearInterval(timer);
}
function scrollwindow()
{
currentpos=document.body.scrollTop;
window.scroll(0,++currentpos);
if (currentpos != document.body.scrollTop)
sc();
}
document.onmousedown=sc
document.ondblclick=initialize
</SCRIPT>
</HEAD>
<BODY BGCOLOR=#efefff TEXT=#000000 LINK=#101090 VLINK=#7030B0>
<H1>MySQL Reference Manual for version 4.1.0-alpha.</H1>
<P>
<P><HR>
<H2><A NAME="Data_Definition"></A>6.5 数据定义: <CODE>CREATE</CODE>、<CODE>DROP</CODE>、<CODE>ALTER</CODE></H2>
<H3><A NAME="CREATE_DATABASE"></A>6.5.1 <CODE>CREATE DATABASE</CODE> 句法</H3>
<P>
<A NAME="IDX1446"></A>
</P>
<PRE>
CREATE DATABASE [IF NOT EXISTS] db_name
</PRE>
<P>
<CODE>CREATE DATABASE</CODE> 以给定名字创建一个数据库。允许的数据库名规则在章节 <A HREF="06-1.html#Legal_names">6.1.2 数据库、表、索引、列和别名</A> 中被给出。 如果数据库已经存在,并且你没有指定 <CODE>IF NOT EXISTS</CODE>,这时会产生一个错误。
</P>
<P>
在 MySQL 中,数据库以包含数据库表对应文件的目录实现的。因为数据库在初始创建时没有表,所以 <CODE>CREATE DATABASE</CODE> 语句只在 MySQL 数据目录下创建一个目录。
</P>
<P>
<A NAME="IDX1447"></A>
你也可以使用 <CODE>mysqladmin</CODE> 创建一个数据库。查看章节 <A HREF="manual1.html#Client-Side_Scripts">4.8 MySQL 客户端脚本和实用程序</A>。
</P>
<H3><A NAME="DROP_DATABASE"></A>6.5.2 <CODE>DROP DATABASE</CODE> 句法</H3>
<P>
<A NAME="IDX1448"></A>
<A NAME="IDX1449"></A>
<A NAME="IDX1450"></A>
</P>
<PRE>
DROP DATABASE [IF EXISTS] db_name
</PRE>
<P>
<CODE>DROP DATABASE</CODE> 移除数据库是的所有表并删除数据库。如果你在一个符号链接(symbolic link)数据库上执行一个 <CODE>DROP DATABASE</CODE>,链接与原始数据库均会被删除。<STRONG>要非常小心地使用这个命令!</STRONG>
</P>
<P>
<CODE>DROP DATABASE</CODE> 返回从数据库目录下删除的文件数目。通常,它是表的数目的三倍,因为第张表通常对应于一个 <TT>“.MYD”</TT> 文件、一个 <TT>“.MYI”</TT> 文件和一个 <TT>“.frm”</TT> 文件。
</P>
<P>
<CODE>DROP DATABASE</CODE> 命令从给定的数据库目录下移除以下列为扩展名的所有文件:
</P>
<TABLE BORDER WIDTH="95%">
<TR><TD><STRONG>扩展名 </STRONG> </TD><TD> <STRONG>扩展名 </STRONG> </TD><TD> <STRONG>扩展名 </STRONG> </TD><TD> <STRONG>Ext</STRONG>
</TD></TR>
<TR><TD>.BAK </TD><TD> .DAT </TD><TD> .HSH </TD><TD> .ISD
</TD></TR>
<TR><TD>.ISM </TD><TD> .ISM </TD><TD> .MRG </TD><TD> .MYD
</TD></TR>
<TR><TD>.MYI </TD><TD> .db </TD><TD> .frm </TD><TD>
</TD></TR>
</TABLE>
<P>
所有包含两个数字的子目录(<CODE>RAID</CODE> 目录)也同样被删除。
</P>
<P>
在 MySQL 3.22 或以后的版本中,你可以使用关键词 <CODE>IF EXISTS</CODE> 以防止如果数据库不存在时发生错误。
</P>
<P>
<A NAME="IDX1451"></A>
你也可以使用 <CODE>mysqladmin</CODE> 移除数据库。查看章节 <A HREF="manual1.html#Client-Side_Scripts">4.8 MySQL 客户端脚本和实用程序</A>。
</P>
<H3><A NAME="CREATE_TABLE"></A>6.5.3 <CODE>CREATE TABLE</CODE> 句法</H3>
<P>
<A NAME="IDX1452"></A>
</P>
<PRE>
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]
[table_options] [select_statement]
or
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name LIKE old_table_name;
create_definition:
col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT]
[PRIMARY KEY] [reference_definition]
or PRIMARY KEY (index_col_name,...)
or KEY [index_name] (index_col_name,...)
or INDEX [index_name] (index_col_name,...)
or UNIQUE [INDEX] [index_name] (index_col_name,...)
or FULLTEXT [INDEX] [index_name] (index_col_name,...)
or [CONSTRAINT symbol] FOREIGN KEY [index_name] (index_col_name,...)
[reference_definition]
or CHECK (expr)
type:
TINYINT[(length)] [UNSIGNED] [ZEROFILL]
or SMALLINT[(length)] [UNSIGNED] [ZEROFILL]
or MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]
or INT[(length)] [UNSIGNED] [ZEROFILL]
or INTEGER[(length)] [UNSIGNED] [ZEROFILL]
or BIGINT[(length)] [UNSIGNED] [ZEROFILL]
or REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]
or DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
or FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
or DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL]
or NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL]
or CHAR(length) [BINARY]
or VARCHAR(length) [BINARY]
or DATE
or TIME
or TIMESTAMP
or DATETIME
or TINYBLOB
or BLOB
or MEDIUMBLOB
or LONGBLOB
or TINYTEXT
or TEXT
or MEDIUMTEXT
or LONGTEXT
or ENUM(value1,value2,value3,...)
or SET(value1,value2,value3,...)
index_col_name:
col_name [(length)]
reference_definition:
REFERENCES tbl_name [(index_col_name,...)]
[MATCH FULL | MATCH PARTIAL]
[ON DELETE reference_option]
[ON UPDATE reference_option]
reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
table_options:
TYPE = {BDB | HEAP | ISAM | InnoDB | MERGE | MRG_MYISAM | MYISAM }
or AUTO_INCREMENT = #
or AVG_ROW_LENGTH = #
or CHECKSUM = {0 | 1}
or COMMENT = "string"
or MAX_ROWS = #
or MIN_ROWS = #
or PACK_KEYS = {0 | 1 | DEFAULT}
or PASSWORD = "string"
or DELAY_KEY_WRITE = {0 | 1}
or ROW_FORMAT= { default | dynamic | fixed | compressed }
or RAID_TYPE= {1 | STRIPED | RAID0 } RAID_CHUNKS=# RAID_CHUNKSIZE=#
or UNION = (table_name,[table_name...])
or INSERT_METHOD= {NO | FIRST | LAST }
or DATA DIRECTORY="absolute path to directory"
or INDEX DIRECTORY="absolute path to directory"
select_statement:
[IGNORE | REPLACE] SELECT ... (Some legal select statement)
</PRE>
<P>
<CODE>CREATE TABLE</CODE> 以给定的名字在当前数据库创建一个表。允许的表名规则在章节 <A HREF="06-1.html#Legal_names">6.1.2 数据库、表、索引、列和别名</A> 中被给出。如果没有当前数据库或表已经存在,一个错误将会发生。
</P>
<P>
在 MySQL 3.22 或以后的版本中,表名可以被指定为 <CODE>db_name.tbl_name</CODE>。不管有没有当前数据库,它也能正常工作。</P>
<P>
从 MySQL 3.23 开始,在创建一个表时,你可以使用关键词 <CODE>TEMPORARY</CODE>。它的名字被限止在当前连接中,当连接关闭时,临时表会自动地被删除。这就意味着,两个不同的连接可以使用同一个临时表名而不会与另一个冲突,也不会与同名现有的表相冲突(现有表将被隐藏,只到临时表被删除)。从 MySQL 4.0.2 开始,为了能创建临时表,你必须有 <CODE>CREATE TEMPORARY TABLES</CODE> 权限。
</P>
<P>
在 MySQL 3.23 或以后的版本中,你可以使用关键词 <CODE>IF NOT EXISTS</CODE>,因而如果表已存在,错误也不会发生。注意,它并不验证表结构是否一致。
</P>
<P>
在 MySQL 4.1 中你可以使用 <CODE>LIKE</CODE> 来基于一个表定义创建另一个表。to create a table based on
a table definition in another table. In MySQL 4.1 中,你同样也可以为一个被生成的列指定类型:
</P>
<PRE>
CREATE TABLE foo (a tinyint not null) SELECT b+1 AS 'a' FROM bar;
</PRE>
<P>
第张表 <CODE>tbl_name</CODE> 由数据库目录下的一些文件表示。对于 MyISAM 类型的表,你将得到:
</P>
<TABLE BORDER WIDTH="95%">
<TR><TD><STRONG>文件 </STRONG> </TD><TD> <STRONG>用途 </STRONG>
</TD></TR>
<TR><TD><CODE>tbl_name.frm</CODE> </TD><TD> 表定义 (form) 文件
</TD></TR>
<TR><TD><CODE>tbl_name.MYD</CODE> </TD><TD> 数据文件
</TD></TR>
<TR><TD><CODE>tbl_name.MYI</CODE> </TD><TD> 索引文件
</TD></TR>
</TABLE>
<P>
对于各种列类型的性质的更多信息,查看章节 <A HREF="06-2.html#Column_types">6.2 列类型</A>:
</P>
<UL>
<LI>
如果既没有指定 <CODE>NULL</CODE> 也没有指定 <CODE>NOT NULL</CODE>,列被视为指定了 <CODE>NULL</CODE> 。
<P></P>
<LI>
一个整型列可以有附加属性 <CODE>AUTO_INCREMENT</CODE>。当你插入一个 <CODE>NULL</CODE> 值(推荐)或 <CODE>0</CODE> 到一个 <CODE>AUTO_INCREMENT</CODE> 列,该列将被设置到 <CODE>value+1</CODE>,在这里,<CODE>value</CODE> 是表中当前列的最大值。<CODE>AUTO_INCREMENT</CODE> 序列以 <CODE>1</CODE> 开始。查看章节 <A HREF="manual2.html#mysql_insert_id">8.1.3.130 <CODE>mysql_insert_id()</CODE></A>。
如果你一个 <CODE>AUTO_INCREMENT</CODE> 列中包含最大值的行,对于 <CODE>ISAM</CODE> 或 <CODE>BDB</CODE> 表,该值会被重新使用,但是对于一个 <CODE>MyISAM</CODE> 或 <CODE>InnoDB</CODE> 表,却不会被重用。如果你以 <CODE>AUTOCOMMIT</CODE> 模式执行 <CODE>DELETE FROM table_name</CODE> (没有一个 <CODE>WHERE</CODE> 子句) 删除表中的所有记录行,对于所有的表序列均重新开始。
<STRONG>注意:</STRONG>每个表只能有一个 <CODE>AUTO_INCREMENT</CODE> 列,并且必须被索引。MySQL 3.23 同样也只工作于 <CODE>AUTO_INCREMENT</CODE> 列只支持正值。插入一个负值将被当作插入一个很大的正值。
这是为了避免数字从正到负“包装”的精度问题,也是为了确保不会意外地得到一个包含 0 的 <CODE>AUTO_INCREMENT</CODE> 列。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -