目录
一.数据库介绍
1.什么是数据库?
数据库(Database)是一个组织和存储数据的系统,它允许高效地检索、管理、更新和分析这些数据。数据库不仅仅是一个简单的数据文件集合,它还包含了用于控制数据访问和管理的一系列规则、结构和算法,这些称为数据模型。数据库系统(Database Management System, DBMS)是用于创建、操作和管理数据库的软件工具,它提供了一组接口和语言,让用户可以与数据库交互。
2.数据库的分类
数据库大致可以分为关系型数据库和菲关系型数据库
一. 关系型数据库(RDBMS):是指采用了关系模型来组织数据的数据库。简单来说就关系模型就是二维表格模型,二关系型数据就是有二维表及其之间的联系所组成的一个数据组织。
常见的关系型数据库有:
- Oracle:属于甲骨文公司的产品,适合大型项目,适用于做复杂的业务逻辑,收费
- MySQL:属于甲骨文,不适合做复杂的业务,免费
- SQL Server:微软产品,安装部署在windows server上,适用于中大型项目,收费。
二.非关系型数据库(No SQL):指不使用传统关系型数据库的表格模型来组织数据的数据库。非关系型数据库的设计理念是为了解决关系型数据库在某些特定场景下的局限性,特别是在大数据、高并发、高可用性和可伸缩性方面的挑战。
键值存储(Key-Value Stores):这类数据库将数据存储为键值对集合,其中键是唯一的,用于检索对应的值。例如 Redis 和 Amazon DynamoDB。
文档型数据库(Document Stores):文档型数据库用于存储、检索和管理文档,文档通常是以JSON、XML或其他格式存储的。例如 MongoDB 和 CouchDB。
列存储数据库(Column-Family Stores):这类数据库优化了对于大量数据读写的操作,通常用于分布式存储系统。例如 Apache Cassandra 和 HBase。
图数据库(Graph Databases):图数据库使用图结构来存储数据,其中节点、边和属性用于表示和存储实体和它们之间的关系。例如 Neo4j 和 ArangoDB。
时间序列数据库(Time-Series Databases):这类数据库专门用于处理时间相关的数据,优化了按时间顺序的数据检索和存储。例如 InfluxDB 和 Prometheus。
对象存储数据库(Object Stores):对象存储数据库用于存储和检索对象,通常用于存储大量的非结构化数据。例如 ObjectDB 和 Versant。
关系型数据库 非关系型数据库 使用SQL 是 不强制要求,一般不基于SQL实现 事务支持 支持 不支持 复杂操作 支持 不支持 海量读写操作 效率低 效率高 基本结构 基于表和列,结构固定 灵活性比较高 使用场景 业务方面的OLTP系统 用于数据的缓存、或基于统计分析的OLAP系统
3.数据库的特点
数据一致性:DBMS确保数据的一致性,防止数据冗余和不一致的情况发生。
数据完整性:DBMS可以实施规则和约束,以保证数据的准确性和完整性。
数据共享:多个用户和应用程序可以同时访问数据库中的数据,促进了数据共享和协作。
数据独立性:数据库实现了数据和应用程序的分离,使得在不影响应用程序的情况下,可以修改数据库的结构。
数据安全性:DBMS提供了安全机制,如用户认证、访问控制和加密,以保护数据不被未授权访问或修改。
数据备份和恢复:DBMS通常提供数据备份和恢复功能,以防止数据丢失。
事务处理:DBMS支持事务,可以确保一系列操作要么全部完成,要么全部不做,保证了数据的一致性和可靠性。
查询能力:DBMS使用查询语言(如SQL)来快速检索特定的数据,支持复杂的搜索条件和排序。
可伸缩性和性能:DBMS可以处理大量数据,并且可以随着数据量的增加而扩展其存储容量和处理能力。
多用户支持:DBMS允许多个用户同时访问数据库,支持并发访问。
经济性:通过减少数据冗余和提高效率,数据库可以帮助降低存储成本和运营成本。
可维护性:DBMS提供了工具和功能,使得数据库的维护和管理变得更加容易。
适应性和灵活性:DBMS可以适应不同的应用场景和数据管理需求,支持多种数据模型和数据结构。
在后序的学习中,主要使用的是MySQL,下面就讲解一下MySQL。
二.MySQL
1.什么是MySQL?
MySQL是一个开源的关系型数据库管理系统,由瑞典MySQL AB公司开发,后来被甲骨文公司收购。它是目前最流行的数据库之一,特别是在Web应用程序中。MySQL使用SQL(结构化查询语言)作为查询语言,支持标准的数据库操作和事务处理。
2.MySQL的特点
- 开源免费:MySQL是开源软件,遵循GPL许可,这意味着用户可以免费获得并使用它,也允许查看和修改其源代码。这对于成本敏感的项目特别有吸引力。
- 性能高效:MySQL优化得当,能够处理高并发的读写操作,尤其在Web应用领域表现出色,常作为网站后端数据库。
- 稳定性强:MySQL有着良好的稳定性和可靠性记录,能够提供持续运行的服务,减少意外宕机的风险。
- 跨平台性:可以在多种操作系统上运行,包括Windows、Linux、macOS等,这为部署提供了灵活性。
- 支持多种存储引擎:MySQL提供了多种存储引擎,如InnoDB(支持事务处理、行级锁和外键)、MyISAM(适合读取密集型应用)、MEMORY(数据存储在RAM中,适合临时表)等,可以根据应用场景选择最合适的存储方式。
- 安全性:MySQL支持一系列的安全特性,包括SSL加密、访问控制、视图(View)和行级权限控制,有助于保护数据安全。
- 强大的SQL支持:完全支持SQL标准,包括复杂的查询、触发器、存储过程和视图,便于进行数据管理和分析。
- 社区活跃:MySQL拥有庞大的开发者和用户社区,这意味着丰富的资源、教程、解决方案和第三方工具,遇到问题时容易找到帮助。
- 可扩展性:通过分区、复制、集群等功能,MySQL可以支持大数据量和高并发访问,易于扩展以应对业务增长。
- 集成性好:MySQL与多种编程语言(如PHP、Python、Java、C#等)和Web框架兼容良好,易于集成到现有系统中。
3.MySQL环境搭建
1.版本选择:在选择版本时,需要考虑版本的稳定性、兼容性、安全性和性能需求等,所以推荐使用5.5,5.6或者5.7版本。
2.在安装完成之后,需要配置环境,这里可跟着博哥的教程走mysql安装视频_哔哩哔哩_bilibiliWindows下通过MySQL Installer安装MySQL服务 - 大博哥VV6 - 博客园 (cnblogs.com)
在搭建完环境后,就可以开始进行数据库的学习。
三.基本操作
1.数据库操作
1.数据库的创建
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,
create_specification] ...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
说明:
- 大写的表示关键字
- []是可选项
- CHARACTER SET :指定数据库采用的字符集
- COLLATE: 指定数据库字符集的校验规则
在创建数据库的时候没有指定字符集和校验规则时,系统默认使用字符集:utf8 ,校验规则是:utf8_general_ci
示例:
1、创建名为db_test 1 的数据库;
create database db_test1;
2、如果系统没有db_test2的数据库,则创建一个名为db_test2的数据库,如果有则不创建;
create database if not exists db_test2;
3、 如果系统没有db_test3的数据库,则创建一个使用utf8mb4字符集的db_test3数据库,如果有则不创建。
create database if not exists db_test3 character set utf8mb4;
2.显示数据库
show databases;
3.使用数据库
use 数据库名;
4.删除数据库
drop database 数据库名;
2.表的操作
要进行表操作,需要先使用数据库,这里使用db_test1 并且指定字符集utf8;
use db_test1 charset utf8;
1.表的创建
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
);
也可以用comment增加字段说明。
示例:
create table stu_test (
id
int,
name varchar(20) comment '姓名',
password varchar(50) comment '密码',
age int,
sex varchar(1),
birthday timestamp,
amout decimal(13,2),
resume text
);
2.查看表结构
desc 表名;
示例:假设我们创建了一个users表;
create table users(id int(11),name varchar(20),password varchar(20),birthday date);
可以得到:
3.删表
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...
示例:删除上表db_test1;
drop database db_test1;
四.常用数据类型
1.数值类型
分为整型和浮点型:
数据类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 | 对应java类型 |
TINYINT | 1字节 | -128~127 | 0 ~ 255 | 小整数值 | Byte |
SMALLINT | 2字节 | -32768~32767 | 0 ~65,535 | 大整数值 | Short |
MEDIUMINT | 3字节 | -8,388,608 ~ 8,388,607 | 0~16,777,215 | 大整数值 | - |
INT或INTEGER | 4字节 | -2,147,483,648 ~ 2,147,483,647 | 0 ~ 4,294,967,295 | 大整数值 | Integer |
BIGINT | 8字节 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 0 ~ 18,446,744,073,709,551,615 | 极大整数值 | Long |
FLOAT | 4字节 | 近似数值,尾数精度7 | 同有符号范围 | 单精度浮点数值 | Float |
DOUBLE | 8字节 | 近似数值,尾数精度 16 | 同有符号范围 | 双精度浮点数值 | Double |
DECIMAL | 可变 | 用户定义的精度和小数位数 | 同有符号范围 | 定点数 | Big Decimal |
CHAR | 1字节 | 最大长度255字节,不足时用空格填补 | - | 固定长度字符串 | Char |
数据类型可以指定为无符号,表示不取负数。
1字节(bytes)=8bit
尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其 如此,还不如设计时,将int类型提升为bigint类型
2.字符串类型
数据类型 | 大小 | 说明 | 对于java类型 |
VARCHAR(SIZE) | 0~65,535字节 | 可变长度字符串 | String |
TEXT | 0~65,535字节 | 长文本数据 | String |
MEDIUMTEST | 0~16,777,215字节 | 中等长度文本数据 | String |
BLOB | 0~65,535字节 | 二进制形式的长文本数据 | byte[] |
3.日期类型
数据类型 | 大小 | 说明 | 对于java类型 |
DATETIME | 8字节 | 范围从1000到9999年,自动检索当前时区并进行转换 | java.util.Date、 java.sql.Timestamp |
TIMESTAMP | 4字节 | 范围从1970到2038年,自动检索当前时区并进行转换。 | java.util.Date、 java.sql.Timestamp |
五.SQL中的注释语句(三种)
1.单行注释
采用“--”(双减号)进行单行注释,注意:"--”需要与注释内容用空格隔开才有效。
2.多行注释
采用/*...*/进行多行注释
3.(单行)注释
在mysql中可以使用“#”进行单行注释。
“#”不与注释内容隔开也会生效。
练习
有一个商店的数据,记录客户及购物情况,有以下三个表组成:
- 商品goods(商品编号goods_id,商品名goods_name, 单价unitprice, 商品类别category, 供 应商provider)
- 客户customer(客户号customer_id,姓名name,住址address,邮箱email,性别sex,身份证 card_id)
- 购买purchase(购买订单号order_id,客户号customer_id,商品号goods_id,购买数量nums)
如下:
#创建数据库
create database if not exists db_test1;
#使用数据库并指定字符集
use db_test1 character set utf8;
#创建商品表
create table goods(goods_id int(11),goods_name varchar(20),unitprice decimal,category varchar(20),provider varchar(20));
#创建客户表
create table customer(customer_id int(11),name varchar(20),address varchar(21),email varchar(20),sex varchar(2),card_id varchar(20));
#创建购物表
create table purchase(order_id varchar(20),customer_id varchar(20),goods_id varchar(20),nums int(11));
总结:
通过对MySQL的学习,了解了什么是关系型数据库和非关系数据库,以及他们的优缺点,学会了MySQL中数据库如何创建、如何使用数据库,如何让数据库指定字符集和校验规则以及如何删除数据库,对表进行创建、使用、删除。认识了在SQL中所常见的数据类型,整型、浮点型以及字符串类型、时间类型,如何运用。在MySQL中如何对语句进行注释。
以上就是本章所有内容,若有错误,欢迎各位大佬指正~😄