2.6表的创建删除索引和修改
2.6.1存储引擎的特性
2.6.2创建表
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.存储引擎的特性
MySQL支持多种搜索引擎,每一种存储引擎所实现的表都具有一组特定的属性或特性。接下来主要介绍
InnoDB和MyISAM
show engine\g
这个命令可以查出服务器的搜索引擎
mysql> show engines\g
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.02 sec)
suppot栏的值为yes或者no 分别代表了该存储引擎是否可用
disabled的意思是该存储引擎存在,但是已被关闭,default表示它是服务器默认使用的存储引擎。
另外transactions栏表示的是存储引擎是否支持事务处理。
XA和Savepoints栏表示的是存储引擎是否支持分布式事务和部分事务回滚(本书未涉及)。
select engine from information_schema.engines where transactions = 'yes';
这句查询语句会使用engines表来检查有哪些可用引擎支持事务处理。
+--------+
| engine | +--------+
| InnoDB | +--------+
1 row in set (0.00 sec)
表的磁盘存储方式了解即好,这一节并没有具体分析
书本接下来对四种存储引擎进行了介绍
我们主要使用的是InnoDB是MySQL的默认存储引擎,如果暂时不打算对数据库操作系统具体了解的话这里可以稍作查看。
今天的主要内容是创建表
2.创建表
create table mytable { name char(20), birth date not null, weight int , sex enum('F','M') };
这是最基础的创建表命令。
create table mytable1 (.....) engine=engine_name;
如果想改变某个表的存储特性,可以如上创建表。
存储引擎的名字不区分大小写。如果不给出这句命令,服务器将使用默认的存储引擎来创建表。
如果你想更改默认的存储引擎 ,需要去看12.5.2节的指导内容。
show create table;
show table status;
inforamation_schema.tables;
通过这三条语句,可以查看存储引擎。
alter table mytable1 engine =engine_name;
通过这条语句可以修改存储引擎。
创建暂时性表
create table if not exists;
使用暂时性表可以适应许多程序的功能,第二次运行程序时会自动忽略创建表的过程,并且不会报错。
需要注意的是,使用if not exists时,MySQL不会把创建的表和已有表相比较 ,无哦一如果想避免出错的话
可以
drop table if exists;
temporary表
顾名思义 临时性表 会话终止时该表会自动消失
create temporary table table_name;
也可以为其加上engines 选项来创建使用某种临时存储引擎的临时表。
对于temporary表有几点需要注意
1.最好能够使用完后显式删除,这样可以让服务器尽快释放与之相关的资源,这是一个良好的习惯。
2.这种表只对创建该表的客户端可见。所以可以创建具有相同名字的表
3.可以创建与永久表相同名字的temporary表,这时永久表就会被隐藏起来,当drop这个表后,原来的永久
表才能重新允许被访问(终端服务器连接后,该表会自动消失)。
4.无法创建两个相同名字的temporary表
5.删除的时候,尽量使用drop temporary table语句来代替drop table 避免发生意外。
书上有说连接池机制,大致就是程序终止了,但是与MySQL 的链接不一定会关闭,所以在这里需要注意
但是还不知道连接池是什么 所以这里先记下来。
这一节还剩两部分没有学习完,后天继续。