您的位置:首页 > 其它

InnoDB中文参考手册---4建立InnoDB表

2008-04-30 08:43 489 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: