返回顶部
首页 > 资讯 > 数据库 >Mysql数据库教程(二)[云图智联]
  • 508
分享到

Mysql数据库教程(二)[云图智联]

Mysql数据库教程(二)[云图智联] 2018-06-25 08:06:02 508人浏览 猪猪侠
摘要

1.1数据库存储引擎 1.1.1存储引擎介绍 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,

Mysql数据库教程(二)[云图智联]

1.1数据库存储引擎

1.1.1存储引擎介绍

数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎

因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(Table Type,即存储和操作此表的类型)。

1.1.2Mysql常用的存储引擎-InnoDB

InnoDB 是 mysql 上第一个提供外键约束的数据存储引擎,除了提供事务处理外,InnoDB 还支持行锁,提供和 oracle 一样的一致性的不加锁读取,能增加并发读的用户数量并提高性能,不会增加锁的数量。InnoDB 的设计目标是处理大容量数据时最大化性能,它的 CPU 利用率是其他所有基于磁盘的关系数据库引擎中最有效率的。

InnoDB是默认的数据库存储引擎,他的主要特点有:

(1)可以通过自动增长列,方法是auto_increment。

(2)支持事务。默认的事务隔离级别为可重复度,通过mvcC(并发版本控制)来实现的。

(3)使用的锁粒度为行级锁,可以支持更高的并发;

(4)支持外键约束;外键约束其实降低了表的查询速度,但是增加了表之间的耦合度。

(5)配合一些热备工具可以支持在线热备份;

(6)在InnoDB中存在着缓冲管理,通过缓冲池,将索引和数据全部缓存起来,加快查询的速度;

(7)对于InnoDB类型的表,其数据的物理组织形式是聚簇表。所有的数据按照主键来组织。数据和索引放在一块,都位于B+数的叶子节点上;

当然InnoDB的存储表和索引也有下面两种形式:

(1)使用共享表空间存储:所有的表和索引存放在同一个表空间中。

(2)使用多表空间存储:表结构放在frm文件,数据和索引放在IBD文件中。分区表的话,每个分区对应单独的IBD文件,分区表的定义可以查看我的其他文章。使用分区表的好处在于提升查询效率。

对于InnoDB来说,最大的特点在于支持事务。但是这是以损失效率来换取的。

 

1.1.3 Mysql常用的存储引擎-MyISM

MyISAM基于ISAM存储引擎,并对其进行扩展。它是在WEB、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度,但不支持事物和外键。

每个MyISAM在磁盘上存储成3个文件,其中文件名和表名都相同,但是扩展名分别为:

  • .frm(存储表定义)
  • MYD(MYData,存储数据)
  • MYI(MYIndex,存储索引)

frm和MYI可以存放在不同的目录下。MYI文件用来存储索引,但仅保存记录所在页的指针,索引的结构是B+树结构。下面这张图就是MYI文件保存的机制:

从这张图可以发现,这个存储引擎通过MYI的B+树结构来查找记录页,再根据记录页查找记录。并且支持全文索引、B树索引和数据压缩。

(1)静态固定长度表

这种方式的优点在于存储速度非常快,容易发生缓存,而且表发生损坏后也容易修复。缺点是占空间。这也是默认的存储格式。

(2)动态可变长表

优点是节省空间,但是一旦出错恢复起来比较麻烦。

(3)压缩表

上面说到支持数据压缩,说明肯定也支持这个格式。在数据文件发生错误时候,可以使用check table工具来检查,而且还可以使用repair table工具来恢复。

有一个重要的特点那就是不支持事务,但是这也意味着他的存储速度更快,如果你的读写操作允许有错误数据的话,只是追求速度,可以选择这个存储引擎。

1.1.4 查看当前数据库存储引擎

语法:

SHOW VARIABLES LIKE ‘storage_engine%’;

4.1.5 修改当前数据库存储引擎

语法:

default-storage-engine= InnoDB   //可以修改为其他存储引擎
 

在创建表的同时进行设置存储引擎:

 
CREATE TABLE 表名(
    #省略代码
)ENGINE=存储引擎;
   

4.1.6 系统中数据文件的位置及含义

1)Innodb存储类型文件

一般除了表结构定义文件以外,还有用于存储数据的ibdata1文件。

2)MyISM存储类型文件

4.2 DML语句 (数据操作语言

4.2.1 表数据插入

1、单条数据插入:

INSERT INTO 表名 [(字段名列表)] VALUES (值列表);
例如:
INSERT INTO `student`(`loginPwd`,`studentName`,`gradeId`,`phone`,`bornDate`)  VALUES("111","小明",1,"15000001111","1999-9-9");
 

注意:

1) 字段名是可选的,如省略则依次插入所有字段

2) 多个列表和多个值之间使用逗号分隔

3) 值列表和字段名列表一一对应

4) 如插入的是表中部分数据,字段名列表必填

2、多条数据插入

INSERT INTO 新表(字段名列表)  VALUES(值列表1),(值列表2),……,(值列表n);
例如:
INSERT INTO `subject`(`subjectName`,`classhour`,`gradeID`)   VALUES("Logic Java",110,1),("html",120,1),("Java OOP",130,2);

注意:为避免表结构发生变化引发的错误,建议插入数据时写明具体字段名!

 

4.2.2 将查询的结果插入至新表

CREATE TABLE 新表(SELECT 字段1,字段2……  FROM 原表);
例如:
CREATE TABLE `phoneList`( SELECT `studentName`,`phone` FROM `student`);

注意如新表已存在,将会报错!

4.2.3 表数据更新

UPDATE 表名 SET 字段1=值1,字段2=值2,…,字段n=值n  [WHERE 条件];
例如:
UPDATE student SET sex = ‘男’;//未指定条件修改所有数据
UPDATE student SET address = ‘上海市’  WHERE address = ‘北京市’;  //将北京市修改为上海市

4.2.4 表数据删除

DELETE FROM 表名 [WHERE条件];
 或
 TRUNCATE TABLE 表名;
 例如:
 DELETE FROM student WHERE studentName = ‘小明’;   //删除学生为小明的学生信息
 TRUNCATE TABLE student;    //清空当前表数据
 

注意: TRUNCATE语句删除后将重置自增列,表结构及其字段、约束、索引保持不变,执行速度比DELETE语句快

4.3 DQL语句(数据查询语言

4.3.1 什么是查询

查询就是产生一个虚拟表看到的是表形式显示的结果,但结果并不真正存储每次执行查询只是从数据表中提取数据,并按照表的形式显示出来。

平时在生活中大家使用的最多的无非就是像百度,谷歌这些搜索引擎了,那么这些搜索的结果也可以说是通过关键字进行查询,那么在查询语句中一般也会涉及到这些内容,精确匹配和模糊匹配。

4.3.2 查询语法

SELECT   <列名|表达式|函数|常量>    
FROM    <表名>  
[WHERE   <查询条件表达式>] 
[ORDER BY <排序的列名>[ASC或DESC]];
例如:
SELECT `studentNo`,`studentName`,`phone`,`address`,`bornDate` 
FROM `student`
WHERE `gradeId` = 1
ORDER BY `studentNo`;   //查询学生的学号、姓名、电话、地址、生日  并且年级为1的学生信息  并根据学号进行排序
   

下面,我们就来详细讲解一下查询语句:

1)查询全部行和列

 SELECT  *  FROM  表名;
 例如:
 SELECT * FROM `student`; 
   

2)查询部分列

SELECT 字段,字段1,字段2
FROM 表名
WHERE 字段名=值;
例如:
SELECT `studentNo`,`studentName`,`address`
FROM `student`
WHERE `address`=‘河南新乡’;

注意:在查询时 where 语句为查询的条件,可以配合MySQL中的逻辑运算符进行使用。

3)模糊查询

SELECT  *  FROM  表名 where  字段名  like  值% ;  //  开头为‘值’开头,结尾可以为任意结果
 SELECT  *  FROM  表名 where  字段名  like  %值 ;  //  开头可以为任意结果,结尾为‘值’结尾
 SELECT  *  FROM  表名 where  字段名  like  %值% ; //  包含‘值’的内容
 SELECT  *  FROM  表名 where  字段名  like  _值% ;  // 一个任意字符和‘值’开头,任意值为结尾
 SELECT  *  FROM  表名 where  字段名  like  %值_ ;  // 任意开头,‘值’后面结尾为一个任意值
 

4)查询空行

SELECT 字段名 FROM 表名 WHERE 字段名 IS NULL;
例如:
SELECT `studentName` FROM `student` WHERE `email` IS NULL;// 查询email为空的学生名字
   

4.4 常用函数

4.4.1 聚合函数

函数名 作用
AVG() 返回某字段的平均值
COUNT() 返回某字段的行数
MAX() 返回某字段的最大值
MIN() 返回某字段的最小值
SUM() 返回某字段的和

4.4.2 字符串函数

CONCAT(str1, str1...strn) 字符串连接 SELECT CONCAT("My","S","QL"); 返回:MySQL
INSERT(str, pos,len, newstr) 字符串替换 SELECT INSERT( "这是SQL Server数据库", 3,10,"MySQL"); 返回:这是MySQL数据库
LOWER(str) 将字符串转为小写 SELECT LOWER("MySQL"); 返回:mysql
UPPER(str) 将字符串转为大写 SELECT UPPER("MySQL"); 返回:MYSQL
SUBSTRING (str,num,len) 字符串截取 SELECT SUBSTRING( "JavaMySQLOracle",5,5); 返回:MySQL

4.4.3 时间日期函数

函数名 作用 举例**(结果与当前时间有关)**
CURDATE() 获取当前日期 SELECT CURDATE(); 返回:2016-08-08
CURTIME() 获取当前时间 SELECT CURTIME(); 返回:19:19:26
NOW() 获取当前日期和时间 SELECT NOW(); 返回:2016-08-08 19:19:26
WEEK(date) 返回日期date为一年中的第几周 SELECT WEEK(NOW()); 返回:26
YEAR(date) 返回日期date的年份 SELECT YEAR(NOW()); 返回:2016
HOUR(time) 返回时间time的小时值 SELECT HOUR(NOW()); 返回:9
MINUTE(time) 返回时间time的分钟值 SELECT MINUTE(NOW()); 返回:43
DATEDIFF(date1,date2) 返回日期参数date1和date2之间相隔的天数 SELECT DATEDIFF(NOW(), "2008-8-8"); 返回:2881
ADDDATE(date,n) 计算日期参数date加上n天后的日期 SELECT ADDDATE(NOW(),5); 返回:2016-09-02 09:37:07

4.4.4 数学函数

函数名
CEIL(x) 返回大于或等于数值x的最小整数 SELECT CEIL(2.3) 返回:3
FLOOR(x) 返回小于或等于数值x的最大整数 SELECT FLOOR(2.3) 返回:2
RAND() 返回0~1间的随机数 SELECT RAND() 返回:0.5525468583708134

4.5 ORDER BY 和 LIMIT子句

4.5.1 order by排序

SELECT  <字段名列表>
FROM  <表名或视图>
[WHERE  <查询条件>]
[GROUP BY <分组的字段名>]
[ORDER BY  <排序的列名>[ASC(默认) 或 DESC]]     
[LIMIT [位置偏移量,]行数];
例如:
SELECT `studentName` AS 学生姓名
FROM `student`
WHERE `sex` = `女`
ORDER BY studentNo DESC;    //  查询出性别为女的学生姓名并根据学号进行降序排序 
 

4.5.2 LIMIT 分页

MySQL查询语句中使用LIMIT子句限制结果集
SELECT  <字段名列表>
FROM  <表名或视图>
[WHERE  <查询条件>]
[GROUP BY <分组的字段名>]
[ORDER BY  <排序的列名>[ASC 或 DESC]]
[LIMIT [位置偏移量,]行数];
例如:
SELECT * 
FROM `student`
WHERE `gradeId` = 1
ORDER BY studentNo
LIMIT 4;      //  查询年级为1的学生信息并且根据学号进行升序分组的前4条

LIMIT 0,4;    //  表示从第1条开始,显示4条
LIMIT 4,4;    //  表示从第5条开始,显示4条(就是第5~8条)
LIMIT 5,4;    //  表示从第6条开始,显示4条(就是7~10条)

注意: 使用LIMIT子句时,注意第1条记录的位置是0!

4.6 子查询

4.6.1 什么是子查询

子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询可以将子查询理解为将多个操作合并在一起得出结果。

4.6.2 子查询

子查询在WHERE语句中的一般用法:

SELECT … FROM 表1 WHERE 字段1  比较运算符(子查询)
例如:
SELECT *
 FROM `student` 
 WHERE `bornDate` > 
(SELECT `bornDate` FROM `student` WHERE `studentName`="张三");  //查询生日大于张三生日的学生信息
(常用的比较运算符  >  <  >=  <=  =)

4.6.3 IN 子查询

一般常用IN替换等于(=)的子查询 ,并且IN后面的子查询可以返回多条记录

SELECT studentName
FROM student
WHERE studentNo IN(1001,1002);   //查询学生学号为1001,1002的学生姓名
   

除了上述情况外,也可以将查询结果当作子查询的条件。

SELECT studentName
FROM student
WHERE studentNo IN(
 select studentNo from student where bornDate >
 (SELECT `bornDate` FROM `student` WHERE `studentName`="张三")
);   //查询大于张三生日的学生学号的学生姓名
   

4.6.4 NOT IN子查询

NOT IN 的用法和 IN子查询相反,取IN的反义

SELECT studentName
FROM student
WHERE studentNo NOT IN(
 select studentNo from student where bornDate >
 (SELECT `bornDate` FROM `student` WHERE `studentName`="张三")
);   //查询除了大于张三生日的学生学号的学生姓名

 

您可能感兴趣的文档:

--结束END--

本文标题: Mysql数据库教程(二)[云图智联]

本文链接: https://lsjlt.com/news/7103.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Mysql数据库教程(二)[云图智联]
    1.1数据库存储引擎 1.1.1存储引擎介绍 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,...
    99+
    2018-06-25
    Mysql数据库教程(二)[云图智联]
  • Mysql数据库教程(三)[云图智联]
    1.1高级查询 1.1.1 EXISTS子查询 在实际开发中,我们常常会遇到表是否存在,及创建表等等的过程,mysql中如何对已存在的表进行提示并且进行创建呢?可以 使用exists子句对表创建进行判断生成。 语法: DRO&...
    99+
    2020-06-03
    Mysql数据库教程(三)[云图智联]
  • 数据库基本知识点总结(二)[云图智联]
           18. 数据库设计必须遵循结构设计和行为设计相结合的原则。        19. 数据字典主要包括数据项、数据结构、数据流、数据存储和处理过程五个部分。        20. 三种常用抽象方法是分类、聚集和概括。     ...
    99+
    2014-08-04
    数据库基本知识点总结(二)[云图智联]
  • 数据库基本知识点总结(一)[云图智联]
    第一节       一、相关概念        1. Data:数据,是数据库中存储的基本对象,是描述事物的符号记录。        2. Database:数据库,是长期储存在计算机内、有组织的、可共享的大量数据的集合。       ...
    99+
    2021-01-12
    数据库基本知识点总结(一)[云图智联]
  • DBeaver连接mysql数据库图文教程
    文章目录 前言一、DBeaver连接mysql数据库二、文档下载地址 前言 DBeaver是免费、开源、通用数据库工具,是许多开发开发人员和数据库管理员的所选。下面详细介绍Dbeaver连接mysql数据库的过程。 一、DBe...
    99+
    2023-08-16
    数据库 mysql sql
  • MySQL数据库(二)
    ####################################### Mysql-索引类型 索引类似于“书的目录” 索引的优点 加快查询的速度 索引的缺点 减慢写的速度(占用物...
    99+
    2024-04-02
  • MySQL 数据库(DBMS)安装教程图文详解
    一、 下载 在MySQL的官网上提供了两种安装方式, 第一种是在线联网安装, 第二种是本地安装。第一种必须联网安装, 当安装时必须能够访问网络, 第二种, 离线安装即可; 区别: 第一种, 在线联...
    99+
    2023-10-21
    mysql 数据库
  • 阿里云配置MySQL数据库教程
    本篇文章将详细介绍如何在阿里云上配置MySQL数据库。首先,我们将创建一个阿里云账户并注册一个实例。然后,我们将设置数据库实例的安全组和网络规则,以确保安全访问。接着,我们将安装并配置MySQL服务器,包括设置数据库服务器的用户名、密码和权...
    99+
    2023-11-18
    阿里 数据库 教程
  • mysql数据库优化教程
    数据库优化概述:——通过优化查询、索引、表结构、硬件等方面,提升数据库性能。主要优化技术:使用索引。优化查询语句。缓存查询结果。创建适当的索引。使用组合索引。避免不必要的索引。选择合适的...
    99+
    2024-08-01
    mysql
  • mysql数据库安装教程
    mysql 安装教程解答:系统要求:操作系统(linux、macos、windows)、磁盘空间(至少 500 mb)、内存(至少 256 mb)。安装步骤:linux 和 macos:...
    99+
    2024-08-02
    mysql linux centos macos
  • mysql 8.0.15 安装图文教程及数据库基础
    MySQL软件安装及数据库基础,供大家参考,具体内容如下 一、任务 任务一 MySQL 软件安装及数据库基础 任务时间 请于2月26日22:00前完成,在本文章评论打卡。逾期尚未打卡的会被清退。 学习内...
    99+
    2024-04-02
  • IDEA连接Mysql数据库的详细图文教程
    目录配置操作第一步操作第二步操作第三步操作第四步操作解决方案:验证总结配置操作 第一步操作 如图:选择右侧的database页签,一般在idea的右边会有Database界面,点击它...
    99+
    2023-03-06
    如何用idea连接mysql数据库 idea连接mysql数据库 idea与数据库建立连接
  • 阿里云CentOS安装MySQL数据库教程
    在阿里云上安装MySQL数据库是一项基础的操作,对于网站开发者和数据分析师来说,这是一项必须掌握的技能。本文将详细介绍如何在CentOS系统上安装MySQL数据库。 在阿里云上安装MySQL数据库,首先需要创建一个ECS实例,然后使用云盾安...
    99+
    2023-10-29
    阿里 数据库 教程
  • mysql数据库存储过程教程
    mysql 存储过程是预编译的 sql 语句集合,可作为单个单元执行,提供提高性能、代码重用、安全性、数据完整性等优势。创建存储过程需要确定功能、编写代码、使用 create proce...
    99+
    2024-08-01
    mysql
  • SQLServer创建数据库图文教程
    目录方法一:使用SSMS工具创建1、在SSMS工具左侧的对象资源管理器2、在弹出的新建数据库对话框中填入要创建的数据库名称3、设置完成后点击确定4、注意事项方法二:使用T-SQL语句...
    99+
    2023-02-25
    SQL Server创建数据库 创建数据库 SQL Server数据库
  • springboot数据库操作图文教程
    4.1 Spring-Data-JpaSpring-Data-Jpa定义了一系列对象持久化的标准。目前实现这一规范的产品有Hibernate。Application.yml的配置 Spring.jpa.hibernate.ddl-...
    99+
    2023-05-31
    spring boot 数据库
  • Django配置MySQL数据库教程
    简介   在实际生产环境,Django是不可能使用SQLite这种轻量级的基于文件的数据库作为生产数据库。一般较多的会选择MySQL。如果使用SQLite这种轻量级的数据库不需要手动配置。 一、安装Python访问MySQL的模块   在 ...
    99+
    2018-12-25
    Django配置MySQL数据库教程 数据库入门 数据库基础教程
  • MySQL数据库菜鸟教程(一)
    1、MySQL安装 Windows系统:(解压文件)下载地址:https://dev.mysql.com/downloads/file/id=496745 解压后进入文件夹,找到bin文件下两个可执行文...
    99+
    2017-04-20
    MySQL数据库菜鸟教程(一) 数据库入门 数据库基础教程 数据库 mysql
  • Android 连接 MySQL 数据库教程
    在 Android 应用程序中连接 MySQL 数据库可以帮助开发人员实现更丰富的数据管理功能。本教程将介绍如何在 Android 应用程序中使用低版本的 MySQL Connector/J 驱动程序来连接 MySQL 数据库。 步骤一:下...
    99+
    2023-09-02
    java 数据库 android
  • MySQL数据库(二)事务
    MySQL的存储引擎InnoDB支持事务,MyISAM不支持事物 数据库事务的四大特性(ACID) 原子性(atomic)  原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务...
    99+
    2017-02-17
    MySQL数据库(二)事务
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作