CREATE TABLE
CREATE TABLE句法<br>CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]<br>[table_options] [select_statement]
create_definition:<br> col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT]<br> [PRIMARY KEY] [reference_definition]<br> or PRIMARY KEY (index_col_name,...)<br> or KEY [index_name] (index_col_name,...)<br> or INDEX [index_name] (index_col_name,...)<br> or UNIQUE [INDEX] [index_name] (index_col_name,...)<br> or [CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name,...)<br> [reference_definition]<br> or CHECK (expr)
type:<br> TINYINT[(length)] [UNSIGNED] [ZEROFILL]<br> or SMALLINT[(length)] [UNSIGNED] [ZEROFILL]<br> or MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]<br> or INT[(length)] [UNSIGNED] [ZEROFILL]<br> or INTEGER[(length)] [UNSIGNED] [ZEROFILL]<br> or BIGINT[(length)] [UNSIGNED] [ZEROFILL]<br> or REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]<br> or DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]<br> or FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]<br> or DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL]<br> or NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL]<br> or CHAR(length) [BINARY]<br> or VARCHAR(length) [BINARY]<br> or DATE<br> or TIME<br> or TIMESTAMP<br> or DATETIME<br> or TINYBLOB<br> or BLOB<br> or MEDIUMBLOB<br> or LONGBLOB<br> or TINYTEXT<br> or TEXT<br> or MEDIUMTEXT<br> or LONGTEXT<br> or ENUM(value1,value2,value3,...)<br> or SET(value1,value2,value3,...)
index_col_name:<br> col_name [(length)]
reference_definition:<br> REFERENCES tbl_name [(index_col_name,...)]<br> [MATCH FULL | MATCH PARTIAL]<br> [ON DELETE reference_option]<br> [ON UPDATE reference_option]
reference_option:<br> RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
table_options:<br> TYPE = {ISAM | MYISAM | HEAP}<br>or AUTO_INCREMENT = #<br>or AVG_ROW_LENGTH = #<br>or CHECKSUM = {0 | 1}<br>or COMMENT = "string"<br>or MAX_ROWS = #<br>or MIN_ROWS = #<br>or PACK_KEYS = {0 | 1}<br>or PASSWORD = "string"<br>or DELAY_KEY_WRITE = {0 | 1}<br>or ROW_FORMAT= { default | dynamic | static | compressed }
select_statement:<br> [IGNORE | REPLACE] SELECT ... (Some legal select statement)
CREATE TABLE在当前数据库中用给出的名字创建一个数据库表。如果当前数据库不存在或如果表已经存在,出现一个错误。
在MySQL3.22或以后版本中,表名可以被指定为db_name.tbl_name,不管有没有当前的数据库都可以。
在MySQL3.23中,当你创建一张表时,你可以使用TEMPORARY关键词。如果一个连接死掉,临时表将自动被删除,并且其名字是按连接命名。这意味着,2个不同的连接能使用相同的暂时表的名字而不会彼此冲突或与相同名字的现有数据库表冲突。(现有的表被隐蔽直到临时表被删除)。
在MySQL3.23或以后版本中,你可以使用关键词IF NOT EXISTS以便如果表已经存在不发生一个错误。注意,无法证实表结构是相同的。
每张表tbl_name由在数据库目录的一些文件表示。在MyISAM类型的表的情况下,你将得到:
文件 目的 <br>tbl_name.frm 表定义(表格)文件 <br>tbl_name.MYD 数据文件 <br>tbl_name.MYI 索引文件
如果既不指定NULL也不指定NOT NULL,列被视为指定了NULL。 <br>整型列可以有附加的属性AUTO_INCREMENT。当你插入NULL值(推荐)或0到一个AUTO_INCREMENT列中时,列被设置为value+1,在此value是当前表中的列的最大值。AUTO_INCREMENT顺序从1开始。如果你删除了包含一个AUTO_INCREMENT列的最大值的行,值将被重新使用。如果你删除表中所有的行,顺序重新开始。注意:每个表只能有一个AUTO_INCREMENT列,并且它必须被索引。为了使做MySQL兼容一些 ODBC 应用程序,用下列查询你可以找出最后插入的行: <br>SELECT * FROM tbl_name WHERE auto_col IS NULL
NULL值对于TIMESTAMP列的处理不同于其他列类型。你不能在一个TIMESTAMP列中存储一个文字NULL;设置列为NULL将把它设成当前的日期和时间。因为TIMESTAMP列表现就这样,NULL和NOT NULL属性不以一般方式运用并且如果你指定它们,将被忽略。在另一方面,为了使它MySQL客户更容易地使用TIMESTAMP列,服务器报告这样的列可以被赋值NULL( 它是对的),尽管TIMESTAMP实际上绝不包含一个NULL值。当你使用DESCRIBE tbl_name得到有关你的表的描述时,你就会明白。注意,设置一个TIMESTAMP列为0不同于将它设置为NULL,因为0是一个有效的TIMESTAMP值。 <br>如果没有为列指定DEFAULT值,MySQL自动地分配一个。如果列可以取NULL作为值,缺省值是NULL。如果列被声明为NOT NULL,缺省值取决于列类型: <br>对于没有声明AUTO_INCREMENT属性的数字类型,缺省值是0。对于一个AUTO_INCREMENT列,缺省值是在顺序中的下一个值。 <br>对于除TIMESTAMP的日期和时间类型,缺省值是该类型适当的“零”值。对于表中第一个TIMESTAMP列,缺省值是当前的日期和时间。<br>对于除ENUM的字符串类型,缺省是空字符串。对于ENUM,缺省值是第一个枚举值。 <br>KEY是INDEX的一个同义词。 <br>在MySQL中,一个UNIQUE键只能有不同的值。如果你试图用匹配现有行的键来增加新行,发生一个错误。 <br>A PRIMARY KEY是一个唯一KEY,它有额外的限制,即所有的关键列必须被定义为NOT NULL。在MySQL中,键被命名为PRIMARY。一张表只能有一个PRIMARY KEY。如果在表中你没有一个PRIMARY KEY并且一些应用程序要求PRIMARY KEY,MySQL将返回第一个UNIQUE键,它没有任何NULL列,作为PRIMARY KEY。 <br>一个PRIMARY KEY可以是一个多列索引。然而,你不能在一个列说明中使用PRIMARY KEY的关键字属性创建一个多列索引。这样做将仅仅标记单个列作为主键。你必须使用PRIMARY KEY(index_col_name, ...)语法。 <br>如果你不能给索引赋予一个名字,这个索引将赋予与第一个index_col_name相同的名字,用一个可选的suffix(_2, _3, ...)使它唯一。你能使用SHOW INDEX FROM tbl_name看到一张表的索引名字。<br> 只有MyISAM表类型支持可以有NULL值的列上的索引。在其他情况下,你必须声明这样的列为NOT NULL,否则导致一个错。 <br>用col_name(length)语法,你可以指定仅使用部分的CHAR或VARCHAR列的一个索引。这能使索引文件变得更小。见7.3.9 列索引。 <br>只有MyISAM表类型支持BLOB和TEXT列的索引。当在一个BLOB或TEXT列上放置索引时,你必须总是指定索引的长度: <br>CREATE TABLE test (blob_col BLOB, index(blob_col(10)));
当你与TEXT或BLOB列一起使用ORDER BY或GROUP BY时,只使用头max_sort_length个字节。 <br>FOREIGN KEY、CHECK和REFERENCES子句实际上不做任何事情,其语法仅仅提供兼容性,使得它更容易从其他的SQL服务器移植代码并运行借助引用创建表的应用。见5.4 MySQL缺少的功能。 <br>每个NULL列占据额外一位,取舍到最接近的字节。 <br>最大记录长度以字节计可以如下计算: <br>row length = 1<br> + (sum of column lengths)<br> + (number of NULL columns + 7)/8<br> + (number of variable-length columns)
table_options和SELECT选项只在MySQL 3.23和以后版本中被实现。不同的表类型是: ISAM 原来的表处理器 <br>MyISAM 全新二进制可移植的表处理器 <br>HEAP 用于该表的数据仅仅存储在内存中
见9.4 MySQL 表类型。其他表选项被用来优化表的行为。在大多数情况下,你不必指定他们任何一个。选项对所有表都适用,如果不是则说明。
AUTO_INCREMENT 你想要为你的表设定的下一个 auto_increment 值 ( MyISAM ) <br>AVG_ROW_LENGTH 你的表的平均行长度的近似值。你只需要为有变长记录的表设置它。 <br>CHECKSUM 如果你想要MySQL对每行维持一个校验和(使表变得更慢以更新但是使它更容易找出损坏的表)设置它为1 ( MyISAM ) <br>COMMENT 对于你的表的一篇60个字符的注释 <br>MAX_ROWS 你计划在表中存储的行的最大数目 <br>MIN_ROWS 你计划在表中存储的行的最小数目 <br>PACK_KEYS 如果你想要有更小的索引,将它设为1。这通常使的更新更慢并且读取更快(MyISAM,ISAM)。 <br>PASSWORD 用一个口令加密.frm文件。该选项在标准MySQL版本中不做任何事情。 <br>DELAY_KEY_WRITE 如果想要推迟关键表的更新直到表被关闭(MyISAM),将它设置为1。 <br>ROW_FORMAT 定义行应该如何被存储(为了将来)。
当你使用一个MyISAM表时,MySQL使用max_rows * avg_row_length的乘积决定最终的表将有多大。如果你不指定上面的任何选项,对一个表的最大尺寸将是4G(或2G,如果你的操作系统仅支持2G的表)。
如果你在CREATE语句后指定一个SELECT,MySQL将为在SELECT中所有的单元创键新字段。例如: <br>mysql> CREATE TABLE test (a int not null auto_increment,<br> primary key (a), key(b))<br> TYPE=HEAP SELECT b,c from test2;
这将创建一个有3个列的HEAP表。注意如果在拷贝数据进表时发生任何错误,表将自动被删除。
|
kehui
|
|
智慧家居
智慧家居颠覆传统智能家居
智慧云谷让智能家居变成有智慧的
智慧云谷引领智慧家居新生活
科技改变生活 智慧云谷智慧家居系
智慧家居领航者,智慧云谷助你玩
智能家居如何赢得市场美誉度?
智慧云谷智慧家居:创业者有无限
WiFi智能家居你还在用?这样的智
互联网+助推智能家居产业
智慧云谷为您打造真正的智能家居
智能家居产业需要的不是单品,而
新家如何选择开关?智慧云谷iWis
智能传感器-世界首款“智”为你的
智慧云谷开关智能安防智能空气质
智能开关品牌,如何选择智能开关
秋季干燥,智慧家居温湿度传感器
传感器助力智慧家居 感知爱家
iWiscloud智能触摸开关缔造家居装
※室内空气污染的危害及 [sensor]
※超声波风速传感器在生 [sensor]
※这么冷清 [gabc111]
※手机APP操作有问题 [ssy11407]
※智慧云谷智慧家居将在 [cici]
※上传下载 [cici]
※下载智慧家居 [apple2008]
※秋季干燥,智慧家居温 [apple2008]
※智慧家居紧扣热点 安全 [apple2008]
※办公大楼如何智慧化管 [apple2008]
※智慧云谷工业自控的优 [apple2008]
※传感器助力智慧家居 感 [apple2008]
※智能开关品牌,如何选 [apple2008]
※智慧云谷开关智能安防 [apple2008]
※没有专业人员,如何安 [apple2008]
※烟台智慧云谷董事长任 [apple2008]
※互联网+助推智能家居产 [apple2008]
※WiFi智能家居你还在用 [apple2008]
※智慧云谷智慧家居:创 [apple2008]
※智能家居如何赢得市场 [apple2008]
|