<script type="text/javascript">
</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
假设你已以mysqltest命令方式运行了客户端程序。为了 建立一个 InnoDB格式的表你必须在SQL命令中指定TYPE= InnoDB:
CREATETABLECUSTOMER(AINT,BCHAR(20),INDEX(A))TYPE= InnoDB;
这个SQL命令将在my.cnf中设定的 InnoDB数据文件中创建一个表和一个列A的索引,同时将在MySQL数据目录下的test中 建立一个名为CUSTOMER.frm的文件。在内部, InnoDB将在它自己的数据字典(datadictionary)中添加表“test/CUSTOMER”的进入点。这样你可以在其它的MySQL中 建立一个同样名为CUSTOMER的数据表,它将不会与 InnoDB中的表冲突。
可以通过发出MySQL的查看表状态命令查看任何一个 InnoDB类型表以查看 InnoDB数据文件的剩余空间。SHOW输出信息中的表注释部分将显示数据文件的剩余空间。示例:
SHOWTABLESTATUSFROMtestLIKE'CUSTOMER'
注意:SHOW给出的 InnoDB表统计只是近似的:他们被SQL优化。然而,表和索引的reservedsizesinbytes是精确的。
要特别注意不要在 InnoDB数据库中手动添加与删除“.frm”文件:使用CREATETABLE和DROPTABLE命令。 InnoDB有它自己的内部数据字典(datadictionary),如果MySQL的“.frm”文件与 InnoDB内部的数据字典不“同步”将产生一个错误。
4.1如何通过不同的APIs在 InnoDB中使用事务
默认的,MySQL总是启动自动提交你运行的每个SQL语句的自动提交(autocommit)模式创建每的新连接。为了使用事务,可以使用SQL命令SETAUTOCOMMIT=0关闭自动提交(autocommit)开关,使用COMMIT和ROLLBACK来提交事务和回滚事务。如果你想保留autocommit开关打开,你可以将事务放入BEGIN和COMMIT或ROLLBACK之间。
heikki@hundin:~/mysql/client>mysqltestWelcometotheMySQLmonitor.Commandsendwith;or/g.YourMySQLconnectionidis5toserverversion:3.23.50-logType'help;'or'/h'forhelp.Type'/c'toclearthebuffer.mysql>CREATETABLECUSTOMER(AINT,BCHAR(20),INDEX(A))TYPE= InnoDB;QueryOK,0rowsaffected(0.00sec)mysql>BEGIN;QueryOK,0rowsaffected(0.00sec)mysql>INSERTINTOCUSTOMERVALUES(10,'Heikki');QueryOK,1rowaffected(0.00sec)mysql>COMMIT;QueryOK,0rowsaffected(0.00sec)mysql>SETAUTOCOMMIT=0;QueryOK,0rowsaffected(0.00sec)mysql>INSERTINTOCUSTOMERVALUES(15,'John');QueryOK,1rowaffected(0.00sec)mysql>ROLLBACK;QueryOK,0rowsaffected(0.00sec)mysql>SELECT*FROMCUSTOMER;+------+--------+|A|B|+------+--------+|10|Heikki|+------+--------+1rowinset(0.00sec)mysql>
通过APIs(比如,PerlDBI/DBD,JDBC,ODBC,或MySQL的标准C调用接口),发送一个事务控制语句(比如"COMMIT")到MySQL服务器可以如同其它的SQL语句。例如:"SELECT..."或"INSERT..."。APIsoftencontainseparatespecialcommit-transactionmethods,但是MySQL对事务的支持还相对比较年轻,他们并不是在所有版本的APIs上均能工作的。
4.2将MyISAM表转换到 InnoDB类型重要提醒:不可以将MySQL系统表比如'user'或'host'转换成 InnoDB类型。系统表必须为MyISAM类型。
如果你希望所有你新建的表是 InnoDB类型,从MySQLversion3.23.43开始,你可以在你的my.cnf或my.ini文件的[mysqld]项下加入下列一行
default-table-type= InnoDB
InnoDB没有一个特殊的分册索引 建立优化机制。因此不支持先export/import表然后创建索引。最快的办法就是直接将表类型改变为 InnoDB类型或直接插入数据,这就是说,使用ALTERTABLE...TYPE= InnoDB或新建一个空的具有相同结构的 InnoDB表,然后使用INSERTINTO...SELECT*FROM....插入数据。 1 <script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript">
</script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
4
建立
InnoDB表
假设你已以mysqltest命令方式运行了客户端程序。为了 建立一个 InnoDB格式的表你必须在SQL命令中指定TYPE= InnoDB:
CREATETABLECUSTOMER(AINT,BCHAR(20),INDEX(A))TYPE= InnoDB;
这个SQL命令将在my.cnf中设定的 InnoDB数据文件中创建一个表和一个列A的索引,同时将在MySQL数据目录下的test中 建立一个名为CUSTOMER.frm的文件。在内部, InnoDB将在它自己的数据字典(datadictionary)中添加表“test/CUSTOMER”的进入点。这样你可以在其它的MySQL中 建立一个同样名为CUSTOMER的数据表,它将不会与 InnoDB中的表冲突。
可以通过发出MySQL的查看表状态命令查看任何一个 InnoDB类型表以查看 InnoDB数据文件的剩余空间。SHOW输出信息中的表注释部分将显示数据文件的剩余空间。示例:
SHOWTABLESTATUSFROMtestLIKE'CUSTOMER'
注意:SHOW给出的 InnoDB表统计只是近似的:他们被SQL优化。然而,表和索引的reservedsizesinbytes是精确的。
要特别注意不要在 InnoDB数据库中手动添加与删除“.frm”文件:使用CREATETABLE和DROPTABLE命令。 InnoDB有它自己的内部数据字典(datadictionary),如果MySQL的“.frm”文件与 InnoDB内部的数据字典不“同步”将产生一个错误。
4.1如何通过不同的APIs在 InnoDB中使用事务
默认的,MySQL总是启动自动提交你运行的每个SQL语句的自动提交(autocommit)模式创建每的新连接。为了使用事务,可以使用SQL命令SETAUTOCOMMIT=0关闭自动提交(autocommit)开关,使用COMMIT和ROLLBACK来提交事务和回滚事务。如果你想保留autocommit开关打开,你可以将事务放入BEGIN和COMMIT或ROLLBACK之间。
heikki@hundin:~/mysql/client>mysqltestWelcometotheMySQLmonitor.Commandsendwith;or/g.YourMySQLconnectionidis5toserverversion:3.23.50-logType'help;'or'/h'forhelp.Type'/c'toclearthebuffer.mysql>CREATETABLECUSTOMER(AINT,BCHAR(20),INDEX(A))TYPE= InnoDB;QueryOK,0rowsaffected(0.00sec)mysql>BEGIN;QueryOK,0rowsaffected(0.00sec)mysql>INSERTINTOCUSTOMERVALUES(10,'Heikki');QueryOK,1rowaffected(0.00sec)mysql>COMMIT;QueryOK,0rowsaffected(0.00sec)mysql>SETAUTOCOMMIT=0;QueryOK,0rowsaffected(0.00sec)mysql>INSERTINTOCUSTOMERVALUES(15,'John');QueryOK,1rowaffected(0.00sec)mysql>ROLLBACK;QueryOK,0rowsaffected(0.00sec)mysql>SELECT*FROMCUSTOMER;+------+--------+|A|B|+------+--------+|10|Heikki|+------+--------+1rowinset(0.00sec)mysql>
通过APIs(比如,PerlDBI/DBD,JDBC,ODBC,或MySQL的标准C调用接口),发送一个事务控制语句(比如"COMMIT")到MySQL服务器可以如同其它的SQL语句。例如:"SELECT..."或"INSERT..."。APIsoftencontainseparatespecialcommit-transactionmethods,但是MySQL对事务的支持还相对比较年轻,他们并不是在所有版本的APIs上均能工作的。
4.2将MyISAM表转换到 InnoDB类型重要提醒:不可以将MySQL系统表比如'user'或'host'转换成 InnoDB类型。系统表必须为MyISAM类型。
如果你希望所有你新建的表是 InnoDB类型,从MySQLversion3.23.43开始,你可以在你的my.cnf或my.ini文件的[mysqld]项下加入下列一行
default-table-type= InnoDB
InnoDB没有一个特殊的分册索引 建立优化机制。因此不支持先export/import表然后创建索引。最快的办法就是直接将表类型改变为 InnoDB类型或直接插入数据,这就是说,使用ALTERTABLE...TYPE= InnoDB或新建一个空的具有相同结构的 InnoDB表,然后使用INSERTINTO...SELECT*FROM....插入数据。 1 <script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript">
</script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>