1、存储引擎

数据创建,查询,更新和删除操作都是通过数据引擎来进行的。不同的存储引擎存储限制不同,支持不同的索引机制等。

查询数据库支持的存储引擎

MySQL 5.7.2支持的存储引擎有:InnoDB,MRG_MYISAM,MEMORY,BLACKHOLE,MyISAM,CSV,ARCHIVE,PERFORMANCE_SCHEMA,FEDERATED。默认的存储引擎是InnoDB。

SHOW ENGINES;
mysql> SHOW ENGINES;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

InnoDB的特点:存储限制64TB,支持事务,支持树索引和数据缓存,外键。

2、数据类型

MySQL常见的数据类型有整型,字符串类型,时间类型,二进制类型。

整型

MySQL主要提供的整型有:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT。不同的整数类型支持的取值范围不同,需要的存储空间也不同。使用时根据需求选择合适的类型,节省存储空间提高查询的效率。

浮点数

MySQL的浮点数类型有单精度(FLOAT)和双精度(DOUBLE)以及定点类型(DECIMAL)。浮点类型和定点类型都可以用(M, D)来表示,其中M称为精度,表示总共的位数;D称为标度,表示小数的位数。

DECIMAL 的默认 D 值为 0、M 值为 10。

字符串

MySQL 中的字符串类型有 CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、ENUM、SET 等。

二进制类型

MySQL中的二进制字符串有: BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。

时间或日期类型

MySQL中表示日期的数据类型有:YEAR、TIME、DATE、DTAETIME、TIMESTAMP。

3、主键与外键

主键

主键,英文名称:PRIMARY KEY,能够唯一表示每一行,由一列或者多列组成。

外键

MySQL 外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可以有一个或多个外键。

外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键的值必须等于另一个表中主键的某个值。

外键是表的一个字段,不是本表的主键,但对应另一个表的主键。定义外键后,不允许删除另一个表中具有关联关系的行。

示例

#创建表cluster 主键为id
create table cluster(
id Int(20) primary key,
name char(20) not null,
status char(10) not null,
userId Int(10) not null,
createAt datetime not null,
delAt datetime not null ,
updateAt datetime not null
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
#创建表instance主键为id,外键为fk_clusterId,和cluster表的id字段对应
create table instance(
id Int(20) primary key,
name char(20) not null,
clusterId Int(20) not null,
status char(10) not null,
isBilling tinyint not null,
delAt datetime not null,
CONSTRAINT fk_clusterId
foreign key (clusterId) REFERENCES cluster(id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

4、内连接和外连接

连接是多表查询的基础。

#cluster表
mysql> select * from cluster;
+-------+-----------+--------+--------+---------------------+---------------------+---------------------+
| id | name | status | userId | createAt | delAt | updateAt |
+-------+-----------+--------+--------+---------------------+---------------------+---------------------+
| 18888 | qws-test | 200 | 18 | 2019-04-11 20:24:24 | NULL | 2019-04-11 20:24:24 |
| 18889 | qws-test1 | 300 | 18 | 2019-04-11 20:24:24 | 2019-04-11 20:30:30 | 2019-04-11 20:24:24 |
+-------+-----------+--------+--------+---------------------+---------------------+---------------------+
2 rows in set (0.00 sec) #instance表
mysql> select * from instance;
+----+---------------+-----------+--------+-----------+---------------------+
| id | name | clusterId | status | isBilling | delAt |
+----+---------------+-----------+--------+-----------+---------------------+
| 1 | qws-test-1-1 | 18888 | 200 | 1 | NULL |
| 2 | qws-test-2-1 | 18888 | 200 | 1 | NULL |
| 3 | qws-test-3-1 | 18888 | 200 | 1 | NULL |
| 4 | qws-test1-1-1 | 18889 | 400 | 0 | 2019-04-11 20:30:30 |
| 5 | qws-test1-2-1 | 18889 | 400 | 0 | 2019-04-11 20:30:30 |
| 6 | qws-test1-3-1 | 18889 | 400 | 0 | 2019-04-11 20:30:30 |
+----+---------------+-----------+--------+-----------+---------------------+
6 rows in set (0.00 sec)

内连接

返回满足的连接条件的所有行,类似于两个集合的交集。

#查询已删除的集群名称和实例名称
mysql> select c.name,d.name from cluster c inner join instance d on c.delAt = d.delAt;
+-----------+---------------+
| name | name |
+-----------+---------------+
| qws-test1 | qws-test1-1-1 |
| qws-test1 | qws-test1-2-1 |
| qws-test1 | qws-test1-3-1 |
+-----------+---------------+
3 rows in set (0.00 sec)
等价于:
mysql> select c.name,d.name from cluster c ,instance d where c.delAt = d.delAt;
+-----------+---------------+
| name | name |
+-----------+---------------+
| qws-test1 | qws-test1-1-1 |
| qws-test1 | qws-test1-2-1 |
| qws-test1 | qws-test1-3-1 |
+-----------+---------------+
3 rows in set (0.00 sec)

左外连接(left join)

返回左表中所有的记录以及符合连接条件的记录。把左表看成A集合,右表看出B集合。左连接的返回结果为:A并上AB的交集。

mysql> select  c.name,c.status,d.name from  cluster  c  left outer join  instance d on   c.delAt = d.delAt ;
+-----------+--------+---------------+
| name | status | name |
+-----------+--------+---------------+
| qws-test1 | 300 | qws-test1-1-1 |
| qws-test1 | 300 | qws-test1-2-1 |
| qws-test1 | 300 | qws-test1-3-1 |
| qws-test | 200 | NULL |
+-----------+--------+---------------+
4 rows in set (0.00 sec)
等价于
<pre>mysql&gt; select c.name,d.name from cluster c ,instance d where c.delAt = d.delAt;
+-----------+---------------+
| name | name |
+-----------+---------------+
| qws-test1 | qws-test1-1-1 |
| qws-test1 | qws-test1-2-1 |
| qws-test1 | qws-test1-3-1 |
+-----------+---------------+
3 rows in set (0.00 sec</pre>

右外连接(outer join)

返回右表中所有的记录和符合连接条件的记录。把左表看成A集合,右表看出B集合。左连接的返回结果为:B并上AB的交集。

mysql> select  c.name,c.status,d.name from  cluster  c  right outer join  instance d on   c.delAt = d.delAt ;
+-----------+--------+---------------+
| name | status | name |
+-----------+--------+---------------+
| qws-test1 | 300 | qws-test1-1-1 |
| qws-test1 | 300 | qws-test1-2-1 |
| qws-test1 | 300 | qws-test1-3-1 |
| NULL | NULL | qws-test-1-1 |
| NULL | NULL | qws-test-2-1 |
| NULL | NULL | qws-test-3-1 |
+-----------+--------+---------------+
6 rows in set (0.00 sec)

交叉连接

返回两个表的笛卡尔乘积,比如集合a={x,y} b={1,2}其迪卡尔乘积为(x,1)(x,2) (y,1) (y,2)。

mysql> select  c.name,d.name  from cluster  c cross join  instance d ;
+-----------+---------------+
| name | name |
+-----------+---------------+
| qws-test | qws-test-1-1 |
| qws-test1 | qws-test-1-1 |
| qws-test | qws-test-2-1 |
| qws-test1 | qws-test-2-1 |
| qws-test | qws-test-3-1 |
| qws-test1 | qws-test-3-1 |
| qws-test | qws-test1-1-1 |
| qws-test1 | qws-test1-1-1 |
| qws-test | qws-test1-2-1 |
| qws-test1 | qws-test1-2-1 |
| qws-test | qws-test1-3-1 |
| qws-test1 | qws-test1-3-1 |
+-----------+---------------+
12 rows in set (0.00 sec)

文中的部分概念来自:http://c.biancheng.net/mysql/

MySQL系列--3.数据类型和连接查询的更多相关文章

  1. MySQL系列:数据类型、运算符及函数(5)

    1. 数据类型 MySQL支持多种数据类型,主要有数值类型.日期/时间类型和字符串类型. (1)数值类型:包括整数类型:TINYINT.SMALLINT.MEDIUMINT.INT.BIGINT,   ...

  2. mysql(4)—— 表连接查询与where后使用子查询的性能分析。

    子查询就是在一条查询语句中还有其它的查询语句,主查询得到的结果依赖于子查询的结果. 子查询的子语句可以在一条sql语句的FROM,JOIN,和WHERE后面,本文主要针对在WHERE后面使用子查询与表 ...

  3. MySQL全面瓦解12:连接查询的原理和应用

    概述 MySQL最强大的功能之一就是能在数据检索的执行中连接(join)表.大部分的单表数据查询并不能满足我们的需求,这时候我们就需要连接一个或者多个表,并通过一些条件过滤筛选出我们需要的数据. 了解 ...

  4. Sql Server系列:多表连接查询

    连接查询是关系数据中最主要的查询,包括内连接.外连接等.通过连接运算符可以实现多个表查询.内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值.SQL Server中的内连接有 ...

  5. mysql学习之路_连接查询

    回顾 列属性:主键,自增长,唯一键. 关系:一对一,一对多,多对多 三层范式: 1NF:字段设计必须符合原子性 2NF:不存在部分依赖(没有复合主键) 3NF:不存在传递依赖(实体单独成表) 逆规范化 ...

  6. MySQL数据库实验三:连接查询

    实验三    连接查询 实验名称:连接查询(2课时) 一.实验目的 理解JOIN语句的操作和基本使用方法,掌握内连接.外连接.自身连接的概念和使用. 二.实验环境 是MS SQL SERVER 200 ...

  7. MySQL数据库:多表连接查询

    多表连接查询 注意:使用连接技术建议将表经行重命名! # explain 检索连接是否达标 # 内连接 # 语法1 from 表1 inner join 表2 on 主键字段=外键字段 [where ...

  8. Mysql系列(五)—— 分页查询及问题优化

    一.用法 在Mysql中分页查询使用关键字limit.limit的语法如下: SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15 limit关键字带有 ...

  9. MySQL系列(一)--数据类型

    如何选择优化的数据类型: 1.通常更小的更好 相同级别的数据类型,选择占据空间更小的数据类型.更小的数据类型通常更快,因为占用更少的磁盘.内存和CPU缓存,处理时需要的 CPU周期也更少,但是要确保需 ...

随机推荐

  1. IZT复杂电磁环境记录回放和模拟系统

    结合实验室复杂电磁环境特性与模拟研究需求,实现对复杂多变的电磁环境录制.分析.重构和模拟,记录回放系统应具备如下几项能力: 1.电磁环境信号记录能力:能够实现对9KHz-18GHz频带范围内射频信号的 ...

  2. MAC下安装如何安装mysql?

    最近有位搞开发的朋友,估计是买了一个新的MAC本,他说不是很熟悉这个系统(什么人哪,太懒了!),于是让我给他装一下后台开发过程中经常使用的数据库软件MYSQL,今天给大家分享一下我的操作步骤以及出现问 ...

  3. 用java代码将从数据库中取出的具有父子关系的数据转成json格式

    思路:①.取出数据中的所有父节点放入一个集合中②.取出数据中所有为该父节点的子节点放入另一个集合中③.用到迭代的方法将子节点一层一层的遍历工具类:package com.assasion.test;i ...

  4. 安卓----Spinner

    <?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android=" ...

  5. 开发你的第一个BLE应用程序—Blinky

    本文将和大家一起编写我们的第一个BLE应用程序:Blinky(闪灯程序),哪怕你之前没有任何BLE开发经验,也不用担心,只要跟着文中所述步骤,你就可以一步步搭建自己的第一个BLE应用程序.通过这个Bl ...

  6. Linux的内存分页管理

    作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载 内存是计算机的主存储器.内存为进程开辟出进程空间,让进程在其中保存数据.我将从内存的物理特性出发,深入到内存 ...

  7. Netty基础系列(1) --linux网路I/O模型

    引言 我一直认为对于java的学习,掌握基础的性价比要远远高于使用框架,而基础知识中对于网络相关知识的掌握也是重中之重.对于一个java程序来说,无论是工作中还是面试,对于Netty的掌握都是及其重要 ...

  8. 【.NET异步编程系列1】:await&async语法糖让异步编程如鱼得水

    前导 Asynchronous programming Model(APM)异步编程模型以BeginMethod(...) 和 EndMethod(...)结对出现. IAsyncResult Beg ...

  9. Android6.0 源码修改之 Contacts应用

    一.Contacts应用的主界面和联系人详情界面增加顶部菜单添加退出按钮 通过Hierarchy View 工具可以发现 主界面对应的类为 PeopleActivity 联系人详情界面对应的类为 Qu ...

  10. .netcore2.1在控制器中和类中,获取appsettings中值的方法

    一般我们在开发项目中,都会从配置文件中获取数据库连接信息.自定义参数配置信息等. 在.netcore中在控制器和自定义类中,获取配置文件中参数方式如下: appsettings.json { &quo ...