表的操做

1、存储引擎(了解)

现实生活咱们用来存储数据的文件有不一样的类型 , 每种文件类型对应各自不一样的处理机制 : 好比处理文本用tet 类型, 处理表格用excel , 处理图片png等 .css

数据库中的表也应该有不一样的类型,表的类型不一样 , 会对应mysql不一样的存取机制,表类型又称为存储引擎.node

ps: 存储引擎说白了就是如何存储数据、如何为存储的数据创建索引和如何更新、查询数据等技术的实现方法。由于在关系数据库中数据的存储是以表的形式存储的,因此存储引擎也能够称为表类型(即存储和操做此表的类型)mysql

在Oracle 和SQL Server等数据库中只有一种存储引擎,全部数据存储管理机制都是同样的。而MySql
数据库提供了多种存储引擎。用户能够根据不一样的需求为数据表选择不一样的存储引擎,用户也能够根据
本身的须要编写本身的存储引擎
sql

 

 

 

 

 

 

 

 

SQL 解析器 , SQL优化器 , 缓冲池 ,存储引擎等组件在每一个数据库中都存在 , 但不是每一个数据库都有这么多存储引擎 , MySQL 的插件式存储引擎可让存储引擎层的开发人员设 计他们但愿的存储层,例如,有的应用须要知足事务的要求,有的应用则不须要对事务有这 么强的要求 ;有的但愿数据能持久存储,有的只但愿放在内存中,临时并快速地提供对数据 的查询。数据库

 

2、mysql支持的存储引擎

 #  查看全部支持的引擎
show engines\G;  


# 查看正在使用的存储引擎
show variables like 'storage_engine%';

 

一、InnoDB 存储引擎

支持事务,其设计目标主要面向联机事务处理(OLTP)的应用。其缓存

特色是行锁设计、支持外键,并支持相似 Oracle 的非锁定读,即默认读取操做不会产生锁。 从 MySQL 5.5.8 版本开始是默认的存储引擎。架构

InnoDB 存储引擎将数据放在一个逻辑的表空间中,这个表空间就像黑盒同样由 InnoDB 存储引擎自身来管理。从 MySQL 4.1(包括 4.1)版本开始,能够将每一个 InnoDB 存储引擎的 表单独存放到一个独立的 ibd 文件中。此外,InnoDB 存储引擎支持将裸设备(row disk)用 于创建其表空间。并发

nnoDB 经过使用多版本并发控制(MVCC)来得到高并发性,而且实现了 SQL 标准 的 4 种隔离级别,默认为 REPEATABLE 级别,同时使用一种称为 netx-key locking 的策略来 避免幻读(phantom)现象的产生。除此以外,InnoDB 存储引擎还提供了插入缓冲(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead) 等高性能和高可用的功能。框架

对于表中数据的存储,InnoDB 存储引擎采用了汇集(clustered)的方式,每张表都是按 主键的顺序进行存储的,若是没有显式地在表定义时指定主键,InnoDB 存储引擎会为每一 行生成一个 6 字节的 ROWID,并以此做为主键。高并发

InnoDB 存储引擎是 MySQL 数据库最为经常使用的一种引擎,Facebook、Google、Yahoo 等 公司的成功应用已经证实了 InnoDB 存储引擎具有高可用性、高性能以及高可扩展性。对其 底层实现的掌握和理解也须要时间和技术的积累。若是想深刻了解 InnoDB 存储引擎的工做 原理、实现和应用,能够参考《MySQL 技术内幕:InnoDB 存储引擎》一书。

 

二、MyISAM 存储引擎

不支持事务、表锁设计、支持全文索引,主要面向一些 OLAP 数 据库应用,在 MySQL 5.5.8 版本以前是默认的存储引擎(除 Windows 版本外)。数据库系统 与文件系统一个很大的不一样在于对事务的支持,MyISAM 存储引擎是不支持事务的。究其根 本,这也并不难理解。用户在全部的应用中是否都须要事务呢?在数据仓库中,若是没有 ETL 这些操做,只是简单地经过报表查询还须要事务的支持吗?此外,MyISAM 存储引擎的 另外一个不同凡响的地方是,它的缓冲池只缓存(cache)索引文件,而不缓存数据文件,这与 大多数的数据库都不相同。

三、NDB 存储引擎

MySQL AB 公司从 Sony Ericsson 公司收购了 NDB 存储引擎。 NDB 存储引擎是一个集群存储引擎,相似于 Oracle 的 RAC 集群,不过与 Oracle RAC 的 share everything 结构不一样的是,其结构是 share nothing 的集群架构,所以能提供更高级别的 高可用性。NDB 存储引擎的特色是数据所有放在内存中(从 5.1 版本开始,能够将非索引数 据放在磁盘上),所以主键查找(primary key lookups)的速度极快,而且可以在线添加 NDB 数据存储节点(data node)以便线性地提升数据库性能。因而可知,NDB 存储引擎是高可用、 高性能、高可扩展性的数据库集群系统,其面向的也是 OLTP 的数据库应用类型。

四、Memory 存储引擎

正如其名,Memory 存储引擎中的数据都存放在内存中,数据库重 启或发生崩溃,表中的数据都将消失。它很是适合于存储 OLTP 数据库应用中临时数据的临时表,也能够做为 OLAP 数据库应用中数据仓库的维度表。Memory 存储引擎默认使用哈希 索引,而不是一般熟悉的 B+ 树索引。

五、Infobright 存储引擎

第三方的存储引擎。其特色是存储是按照列而非行的,所以很是 适合 OLAP 的数据库应用。其官方网站是 http://www.infobright.org/,上面有很多成功的数据 仓库案例可供分析。

六、NTSE 存储引擎

网易公司开发的面向其内部使用的存储引擎。目前的版本不支持事务, 但提供压缩、行级缓存等特性,不久的未来会实现面向内存的事务支持。

七、BLACKHOLE

黑洞存储引擎,能够应用于主备复制中的分发主库。

MySQL 数据库还有不少其余存储引擎,上述只是列举了最为经常使用的一些引擎。若是 你喜欢,彻底能够编写专属于本身的引擎,这就是开源赋予咱们的能力,也是开源的魅 力所在。

 

指定表类型/存储引擎

# 默认不写就是innodb
create table t1(id int)engine=innodb;

 

小练习 : 

建立四张表 , 分别使用innodb,myisam,memory,blackhole 存储引擎 , 进行插入数据测试

create table t2(id int)engine=innodb;
create table t3(id int)engine=myisam;
create table t4(id int)engine=memory;
create table t5(id int)engine=blackhole;

查看data文件下db1数据库中的文件:

 

 

 

 

 

 

 

 

# .frm 是存储数据表的框架结构

# .ibd是mysql数据文件

# .MYD是MyISAM表的数据文件的扩展名

# .MYI是MyISAM表的索引的扩展名

# 发现后两种存储引擎只有表结构 , 无数据


#memory 在重启mysql或者机器后 , 表内数据清空 , 缓存机制

#blackhole ,  往表内插入任何数据 , 都至关于丢入黑洞 , 表内永远不存记录

 

3、表介绍

表至关于文件, 表中的一条疾苦就至关于文件的一行内容 , 不一样的是,表中的一条记录有对应的标题 , 称为表的字段 

 

 

 

 

id , name , sex , age , birth  称为字段 , 其与的 , 一行内容称为一条记录

 

4、建立表

语法 : 

create table 代表(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
);



# 注意: 
1. 在同一张表中, 字段名是不能相同 
2. 宽度和约束条件可选
3. 字段名和类型是必须的

 

1 .  建立数据库 

create database db2 charset utf8;

2 . 使用数据库

use db2;

3 . 建立a1表

create table a1(
     id int,
     name varchar(50),
     age int(3)     
);

4. 插入表的记录

insert into a1 values
(1,"heshun",18),
(2,"liuxin",17);

ps:以;做为mysql的结束语

5 . 查询表的数据和结构

(1) 查询a1表中的存储数据

mysql> select * from a1;
+------+--------+------+
| id   | name   | age  |
+------+--------+------+
|    1 | heshun |   18 |
|    2 | liuxin |   17 |
+------+--------+------+
2 rows in set (0.00 sec)

(2) 查看a1表的结构

mysql> desc a1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(50) | YES  |     | NULL    |       |
| age   | int(3)      | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

(3) 查看表的详细结构

mysql> show create table a1\G;
*************************** 1. row ***************************
       Table: a1
Create Table: CREATE TABLE `a1` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(50) DEFAULT NULL,
  `age` int(3) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

6 . 复制表

(1)新建立一个数据库db3

mysql> create database db3 charset utf8;

(2)使用db3

mysql> use db3;

(3)复制db1.a1的表结构和记录

# 这就是复制表的操做(既复制了表结构,又复制了记录)
mysql> create table b1 select * from db2.a1;

(4)查看db3.b1中的数据和表结构

#再去查看db3文件夹下的b1表发现 跟db1文件下的a1表数据同样
mysql> select * from b1;
+------+--------+------+
| id   | name   | age  |
+------+--------+------+
|    1 | heshun |   18 |
|    2 | liuxin |   17 |
+------+--------+------+
2 rows in set (0.00 sec)

ps1:若是只要表结构,不要记录

#在db2数据库下新建立一个b1表,给一个where条件,条件要求不成立,条件为false,只拷贝表结构
mysql> create table b2 select * from db1.a1 where 1>5;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

查看表结构:

# 查看表结构
mysql> desc b2;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(50) | YES  |     | NULL    |       |
| age   | int(3)      | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.02 sec)

#查看表结构中的数据,发现是空数据
mysql> select * from b2;
Empty set (0.00 sec)

ps2:还有一种作法,使用like(只拷贝表结构,不拷贝记录)

mysql> create table b3 like db2.a1;
ERROR 1146 (42S02): Table 'db2.a1' doesn't exist
mysql> desc b3;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(50) | YES  |     | NULL    |       |
| age   | int(3)      | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> select * from db3.b3;
Empty set (0.00 sec)

 

7.删除表:

drop table 代表;
相关文章
相关标签/搜索