来自 美高梅4858mgm 2019-10-19 10:25 的文章
当前位置: 美高梅4858官方网站 > 美高梅4858mgm > 正文

美高梅4858mgm:表的操作

本节领悟

  • 存款和储蓄引擎介绍(掌握)
  • 表的增加和删除改查

一、存款和储蓄引擎(领会)

前几节我们知晓mysql中树立的库===》文件夹,库中的表====》文件

现实生活中大家用来囤积数据的公文有两样的门类,各个文件类型对应各自不相同的拍卖体制:比如拍卖公事用txt类型,管理表格用excel,管理图片用png等

数据库中的表也应该有例外的品类,表的品类区别,会对应mysql差异的存取机制,表类型又称之为存款和储蓄引擎。

ps: 存储引擎说白了就是怎么样存款和储蓄数据、怎么样为存储的数额创立目录和哪些翻新、查询数据等本事的贯彻方式。因为在关周密据库中数据的存款和储蓄是以表的情势积攒的,所以存款和储蓄引擎也得以称作表类型(即存款和储蓄和操作此表的项目)

在Oracle 和SQL Server等数据库中独有一种存款和储蓄引擎,全部数据存款和储蓄管理机制都以平等的。而MySql
数据库提供了多样存款和储蓄引擎。顾客能够依照分歧的须要为数据表选拔分裂的仓库储存引擎,用户也得以依靠
和睦的急需编写制定自身的累积引擎

美高梅4858mgm 1

SQL 深入分析器、SQL 优化器、缓冲池、存款和储蓄引擎等零件在每一个数据库中都设有,但不是每个数据库皆有那样多囤积引擎。MySQL 的插件式存储引擎能够让存储引擎层的开辟职员设 计他们期待的存款和储蓄层,举个例子,有的利用供给满意职业的渴求,有的使用则无需对职业有这 么强的渴求 ;有的盼望多少能悠久存款和储蓄,有的只期望放在内部存款和储蓄器中,有的时候并飞快地提供对数据 的询问。

 

二、mysql扶助的存款和储蓄引擎

mysql> show enginesG;# 查看所有支持的引擎
mysql> show variables like 'storage_engine%'; # 查看正在使用的存储引擎

 

1、InnoDB 存储引擎

支撑专门的学业,其布署目的首要面向联机事务管理(OLTP)的应用。其

特征是行锁设计、扶持外键,并扶持类似 Oracle 的非锁定读,即默许读取操作不会发出锁。 从 MySQL 5.5.8 版本起头是暗中认可的囤积引擎。

InnoDB 存款和储蓄引擎将数据放在一个逻辑的表空间中,这一个表空间就如黑盒一样由 InnoDB 存款和储蓄引擎本身来管理。从 MySQL 4.1(蕴含 4.1)版本初步,能够将各种InnoDB 存款和储蓄引擎的 表单独贮存到三个单身的 ibd 文件中。别的,InnoDB 存款和储蓄引擎扶植将裸设备(row disk)用 于组建其表空间。

InnoDB 通过利用多版本现身调控(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 数据库最为常用的一种引擎,推文(Tweet)(TWTCR-V.US)、Google、Yahoo 等 集团的打响采取已经证实了 InnoDB 存款和储蓄引擎具有高可用性、高品质以致高可增添性。对其 底层落成的支配和明白也急需时日和才具的积存。假设想深入摸底 InnoDB 存款和储蓄引擎的做事 原理、达成和应用,能够参照《MySQL 手艺内部原因:InnoDB 存款和储蓄引擎》一书。

2、MyISAM 存款和储蓄引擎

不帮衬专门的学业、表锁设计、援救全文索引,首要面向一些 OLAP 数 据库应用,在 MySQL 5.5.8 版本此前是私下认可的存款和储蓄引擎(除 Windows 版本外)。数据库系统 与文件系统二个异常的大的不相同在于对业务的扶持,MyISAM 存款和储蓄引擎是不扶持职业的。究其根 本,那也并简单精晓。客户在具备的施用中是或不是都亟需职业呢?在数据饭馆中,如果未有ETL 那几个操作,只是简单地经过报表查询还亟需工作的支撑啊?另外,MyISAM 存款和储蓄引擎的 另三个分化平常的地点是,它的缓冲池只缓存(cache)索引文件,而不缓存数据文件,这与 大好多的数据库都不一样样。

3、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 的数据库应用项目。

4、Memory 存款和储蓄引擎

正如其名,Memory 存款和储蓄引擎中的数据都寄放在内部存款和储蓄器中,数据库重 启或产生崩溃,表中的数码都将消失。它非常适合于积累 OLTP 数据库应用中一时数据的有的时候表,也得以当作 OLAP 数据库应用中数据旅馆的维度表。Memory 存款和储蓄引擎私下认可使用哈希 索引,实际不是惯常熟知的 B+ 树索引。

5、Infobright 存款和储蓄引擎

其三方的存款和储蓄引擎。其特征是积攒是遵照列而非洲开发银行的,因而十分 切合 OLAP 的数据库应用。其官方网站是 http://www.infobright.org/,上边有过多得逞的多少 仓库案例可供深入分析。

6、NTSE 存款和储蓄引擎

和讯集团开采的面向其内部使用的存款和储蓄引擎。这段日子的本子不扶助工作, 但提供压缩、行级缓存等特征,不久的未来会完毕面向内部存款和储蓄器的作业援救。

7、BLACKHOLE

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

MySQL 数据库还会有好些个别的存款和储蓄引擎,上述只是列举了极度常用的局部引擎。假如你欣赏,完全能够编写专项于自身的发动机,那就是开源给予我们的力量,也是开源的魔力所在。

 

点名表类型/存款和储蓄引擎

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

 

小练习:

制造四张表,分别选拔innodb,myisam,memory,blackhole存储引擎,进行扦插数据测量检验 

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

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

美高梅4858mgm 2

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

# .ibd是mysql数据文件 

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

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

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

#memory,在重启mysql或者重启机器后,表内数据清空
#blackhole,往表内插入任何数据,都相当于丢入黑洞,表内永远不存记录

 

三、表介绍

表约等于文件,表中的一条记下就一定于文件的一行内容,分化的是,表中的一条记下有相应的标题,称为表的字段

美高梅4858mgm 3

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

 

四、创建表

语法:

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,'mjj',18),
(2,'wusir',28);

ps:以;作为mysql的尾声

5.查询表的数目和布局

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

mysql> select * from a1;
+------+-------+------+
| id | name | age |
+------+-------+------+
| 1 | mjj   | 18  |
| 2 | wusir | 28  |
+------+-------+------+
2 rows in set (0.02 sec)

mysql>

 

(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.16 sec)

(3)查看表的详实结构

mysql> show create table a1G;
*************************** 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)

美高梅4858mgm,6.复制表

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

mysql> create database db3 charset utf8;
Query OK, 1 row affected (0.00 sec)

(2)使用db3

mysql> use db3;
Database changed

#这是上个创建的db2数据库中的a1表
mysql> select * from db2.a1;
+------+-------+------+
| id   | name  | age  |
+------+-------+------+
|    1 | mjj   |   18 |
|    2 | wusir |   28 |
+------+-------+------+

(3)复制db2.a1的表结议和著录

# 这就是复制表的操作(既复制了表结构,又复制了记录)
mysql> create table b1 select * from db2.a1;
Query OK, 2 rows affected (0.03 sec)

(4)查看db3.b第11中学的数据和表结构

#再去查看db3文件夹下的b1表发现 跟db2文件下的a1表数据一样
mysql> select * from db3.b1;
+------+-------+------+
| id   | name  | age  |
+------+-------+------+
|    1 | mjj   |   18 |
|    2 | wusir |   28 |
+------+-------+------+
2 rows in set (0.00 sec)

 

ps1:假诺假定表结构,不要记录

#在db2数据库下新创建一个b2表,给一个where条件,条件要求不成立,条件为false,只拷贝表结构
mysql> create table b2 select * from db2.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;
Query OK, 0 rows affected (0.01 sec)

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.02 sec)

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

 

7.删除表:

drop table 表名;

 

本文由美高梅4858官方网站发布于美高梅4858mgm,转载请注明出处:美高梅4858mgm:表的操作

关键词: