在网上翻来覆去找不到一套适合新手自学的书,于是买了课,急急忙忙上完了课,又发现全还给老师了。 这一系列文放在这里,从下载软件开始,记录一条MySQL入门之旅。 新手也可以跟着这条路走,一条道走到黑。 粉丝可见,愿者上钩。 有任何疑问,参考三篇上课笔记,或者私信我。
1.使用show engines;
以查看当前系统下所有引擎,如图:
圈出来那一行,yes就是有,no就是没有,default就是系统默认的,一般是开着的,disabled就是有,但是被关了。
你每创建一个数据表,MySQL就会创建一个硬盘文件来保存该数据表的格式(也就是它的定义),这个格式文件的基本名和数据表的名字一样, 扩展名是. frm.
比如说,如果数据表的名字是t,其格式文件的名字就将是t. frm。你创建的数据表属于哪个数据库,服务器就会在该数据库的数据库子目录里创建这个文件。
. frm文件的内容是不变的,不管是哪一个存储引擎在管理数据表,每个数据表也只有-一个相应的. frm文件。如果数据表的名字字符在文件名里会引起麻烦,SQL 语句里使用的数据表的名字有可能与相应的. frm文件的基本名(表名)不致具体到某个特定的存储引擎,它还会为数据表再创建几个特定的文件以存储其内容。
对于给定的数据表,与之相关的所有文件都集中存放在这个数据表所在的数据库的数据库子目录里。
存储引擎有什么重要作用呢?开头那三篇里面有介绍啦。
选择标准:根据应用特点选择合适的存储引擎,对于复杂的应用系统可以根据实际情况选择多种存储引擎进行组合。
下面是常用存储引擎的适用环境:
MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一
InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。
Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。
Merge:允许MySQL DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。
创建数据表时设定存储引擎:create table temp(i int) engine = innoDB;
这里插几条,
有时候虽然执行语句没报错,不过会有警告,但是警告不主动显示。
如果我们想看,就要主动让它显示:show warnings;
create table if not exit tablename;
重复创建表是会报错的。
临时数据表会在与服务器断开连接时自动销毁。
创建方式:create temporary table tablename;
临时表的表名可以和已存在的表相同,不过在临时表存在期间那个永久表会被隐藏。
不过无法创建两个同名的临时表。
什么时候使用临时表:比如说要做实验的时候,你导入一个外部文件,但是你又不知道里面数据安全不安全,是吧。
1、create table tablename like othertable;
将另一个表的数据复制到新表中。
2、create table tablename select ...
以查询结果建表。
1、删除一张表:drop table tablename;
2、删除多张表:自己想
1.存储引的索引特性
MySQL提供了多种灵活的索引创建办法,如下所示。
你可以为单个数据列编制索引,也可以为多个数据列构造复合索引。
索引可以只包含独-无二的值,也可以包含重复的值。
你可以为同一个数据表创建多个索引并分别利用它们来优化基于不同数据列的查询。
对于ENUM和SET以外的字符串数据类型,可以只为数据列的-一个前缎创建索引,也就是为对最左边的n个字符(对二进制字符串类型来说就是最左边的n个字节)创建索引。(对于BLOB和TEXT数据列,你只有在指定了前缀长度的情况下才能创建-一个索引。)如果数据列在前缀长度范围内具有足够的独一无二性,查询性能通常不会受到影响,而是会得到改善:为数据列前缀而不是整个数据列编索引可以让索引本身更小并加快访问速度。
2.创建索引
MySQL可以创建好几种索引,如下所示。
唯一索引。这种索引不允许索引项本身出现重复的值。对只涉及-一个数据列的素引来说,这意味着该数据列不能包含重复的值。对涉及多个数据列的索引(复合索引)来说,这意味着那几个数据列的值的组合在整个数据表的范围内不能出现重复。
普通(非唯一)索引。这种索引的优点(从另一方面看是缺点) 是允许索引值出现重复。0 FULLTEXT索引。用来进行全文检索。这种索引只适用于MyISAM数据表。如果你想了解更多信息,请参阅2.15节。
SPATIAL索引。这种索引只适用于MyISAM数据表和空间(spatial) 数据类型,对这种数据类型的描述见第3章。(对于其他支持空间数据类型的存储引擎,你可以创建非SPATTAL索引.)
HASH索引。这是MEMORY数据表的默认索引类型,但你可以改用BTREE索引来代替这个默认索引。
alter table tablename add index index_name(index_columns);
tablename:要加索引的数据表
index_name:索引名
index_columns:要加索引的单列或多列,如果是多列要用逗号隔开。
索引干嘛用?开头那三篇里面讲的详细了。
drop index index_name on tablename;
alter语法:alter table tablename action ...;
示例:
改变数提列的数据类型。如果想改变某个数据列的数据类型,可以使用CHANGE或MODIFY子句。假设mytbl数据表里的某个数据列的数据类型是SMALLIT UNSIGNED,你想把它改成MEDIUMITUNSIGNEID。下面两条命令都可以达到目的:
ALTER TABLE mytbl MODIFY i MEDIUMINT UNSIGNED;
ALTER TABLB mytbl CHANGB i i MEDIUMINT UNSIGNED;
为什么在使用CHANGE子句时需要写两遍数据列的名字呢?因为CHANGE子句能够(而MODIFY子句不能)做到的事情是在改变其数据类型的同时重新命名一个数据列。如果想在改变其数据类型的同时把数据列i重新命名为k,你可以这样做:
ALTER TABLE mytbl CHANGE i k MEDIUMINT UNSIGNED;
在CHANGE子句里,需要先给出想改动的数据列的名字,然后给出它的新名字和新定义。因此,即使不想重新命名那个数据列,也需要把它的名字写两遍。
如果只想改变数据列的名字,不改变它的数据类型,先写出CHANGE o1d name new_ name、再写出数据列的当前定义即可。
重新命名-个数据表。用RENAME子句给数据表起-个新名字:
ALTER TABLE tbl name RENAME TO new_ tbl_ name;
另一个办法是使用RENAMB TABLE 语句来重新命名数据表。下面是它的语法:
RENAME TABLE old name TO new_ name;
ALTER TABLE语句每次只能重新命名一个数据表,而RENAME TABLE语句可以一次重新命名多个数据表。比如说,你可以像下面这样交换两个数据表的名字:
RENAME TABLE t1 TO tmp, t2 TO t1, tmp TO t2;
如果在重新命名个数据表时在它的名字前面加上了数据库名前级,就可以把它从一个数据库移动到另一个数据库。下面两条语句都可以把数据表t从sampdb数据库移到test数据库去:
ALTER TABLE sampdb.t RENAME TO test. t;
RENAME TABLE sampdb.t TO test.t:
不能把一个数据表重新命名为一个已有的名字。
如果重新命名的某个MyISAM数据表是某个MERGE数据表的成员,你必须重新定义那个MERGE数据表,让它使用那个MyISAM数据表的新名字。
本节就先到这里,东西有点杂乱,就需要看的人自行创造示例了。