【数据库】常用数据库简介

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 【数据库】常用数据库简介

🍔 常用的关系型数据库

🐼 什么是关系型数据?

  • 可以存放在Excel中的数据
  • 数据表有明确的结构, 结构不会频繁变化
  • 列名, 每一列有固定的类型, 每一列大小范围可以预计
  • 用来存储关系型数据的就是关系型数据库

🐼 常用的关系型数据库

Oracle

mysql

sqlserver

postgre

 

非关系型数据

  • 文本/图像 长度不固定
  • 结构频繁变化

 

常用的非关系型数据库

  • 强调 Key-Value 的方式存储数据

Pycharm链接Mysql

🍔 Mysql简介

  • MySQL的特点:免费,支持大型数据库,标准的SQL语言形式,跨平台。
  • 课程使用的版本时MySQL8.0/5.6版本。
  • MySQL登录的两种方式:
  • 方法一:mysql -uroot -p123456 (登陆本机的mysql)
  • 方法二:mysql --host=192.168.88.161 --user=root --password=123456 (登陆远程的mysql)

 

🍔 SQL 简介

sql 结构化查询语言(Structured Query Language)简称SQL

不同数据库厂商在标准SQL的基础上, 都会做一些微调

标准SQL 和 Mysql /Oracle SQL 大多数语句都是一样的, 但是有一些细节上的差别

  • sql 语句, 如果是针对Mysql来写的, 迁移到其它的数据库, 这些SQL语句可能还需要调整, 不见得直接就能运行

SQL语句的分类

1、数据定义语言:简称DDL(Data Definition Language)用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等

2、数据操作语言:简称DML(Data Manipulation Language)用来对数据库中表的记录进行更新。关键字:insert,delete,update等

3、数据查询语言:简称DQL(Data Query Language)用来查询数据库中表的记录。关键字:select,from,where等

4、数据控制语言:简称DCL(Data Control Language)用来定义数据库的访问权限和安全级别,及创建用户。

DDL/DML/DQL 重点是查询语句 DQL

SQL 写法

  • 在pycharm中 写SQL 所有的关键字会自动变色(默认蓝色)
  • 在建表, 给表名,字段起名字的时候要避开关键字
  • 注释写法 单行注释 # 多行 /* */

SQL 常用的数据类型

  • MySQL 支持多种类型,大致可以分为三类:
  • 数值 整形/浮点型
  • 日期/时间 日期/时间/日期时间/时间戳
  • 字符串(字符)类型
  • char (100) 声明100 就会申请100个字符
  • varchar(100) 看用了多少, 用多少占多少,但是不会超过上限(100)
  • text/blob 比较长的二进制文件 长文本 用的不多

 

🍔 DDL语句

对数据库的操作

  • 创建数据库:CREATE DATABASE 数据库名;
  • 查看数据库:SHOW DATABASES;
  • 删除数据库:DROP DATABASE 数据库名;
  • 使用数据库:USE 数据库名;

对数据表的操作

🐻 创建表

# 创建数据表  创建表的时候, 需要指定字段名字, 字段类型, 如果某些字段需要添加约束 在类型后面写约束的内容

create table category(
    cid varchar(20) primary key not null ,
    cname varchar(100)
);

🐻 查看表

desc 表名; # 查看表结构

show tables; # 查看当前数据库内所有的数据表

🐻 删除表

drop table 表名;

🐻 修改表

  • 增加字段

alter table 表名 add 字段名字 类型(长度) [约束]

  • 修改字段

alter table 表名 change 要修改的字段名字 要改成的字段名字 类型(长度) [约束]

  • 删除字段

alter table 表名 drop 字段名字

  • 修改表名

# 修改表名

格式:rename table 表名 to 新表名;

 

🍔 DML语句

插入数据 insert into

insert into 表名(字段1, 字段2...) values (值1, 值2 ....),(值1, 值2 ....)....

# 如果所有的字段都赋值了, 字段名字可以不写, 传入值的时候, 就按照所有字段的先后顺序传入

insert into 表名 values (值1, 值2 ....),(值1, 值2 ....)....

如果数据中有中文的内容, 最好在建数据库的时候, 就指定数据库的字符集charset=utf8

建数据库的时候指定好了中文字符集, 里面所有的数据表字段都是utf8的, 否则每次建表的时候都要单独指定

修改数据 update

update 表名 set 字段名 = 值, 字段名= 值 ...

update category2 set cname = '家电'; # 不加条件, 整列值都修改成相同的


update category2 set cname='水果' where cid = 'c001'; # 加了条件只修改满足条件的记录

1、列名的类型与修改的值要一致.

2、修改值得时候不能超过最大长度.

3、除了数值类型外,其它的字段类型的值必须使用引号引起

 

删除数据 delete

delete from 表名 [where 条件]
delete from category2 # 删除表中所有数据
delete from category2 where cid='05';  # 删除 cid是05的数据
truncate category2; # 清空表

delete from category2

truncate category2

使用delete删除表记录时,主键自增序列不清零。使用truncate删除表记录时,主键自增序列清零。

约束

建表的时候, 可以给字段添加约束信息, 用来对字段做一些限制

主键约束

primary key auto_increment

  • 不能为空
  • 不能重复
  • 加上auto_increment 可以由Mysql自己维护, 每次自动+1
create table person2(
    id int primary key auto_increment,
    last_name varchar(100),
    first_name varchar(100),
    address varchar(100),
    city varchar(100)
);

1)主键应当是对用户没有意义的

2)永远也不要更新主键。

3)主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。

4) 主键应当由计算机自动生成。

当字段为主键并自增的时候, 插入数据的时候, 可以不传这一列

insert into person2(first_name,last_name) values ('Bill','Gates');

如果只是声明了primary key 没有声明自动增长, 这列信息一定要传, 需要自己维护

insert into person(id,first_name,last_name) values (1,'Bill','Gates');

 

Not null

非空约束

  • 当前列添加了非空约束, 这一列中不能有空值
create table person3(
    id int primary key auto_increment,
    last_name varchar(100) not null ,
    first_name varchar(100),
    address varchar(100),
    city varchar(100)
);

unique

唯一约束

  • 当前列添加了非空约束, 这一列中不能有重复值
create table person4(
    id int primary key auto_increment,
    last_name varchar(100) unique,
    first_name varchar(100),
    address varchar(100),
    city varchar(100)
);

default 默认值

  • 如果一列添加了默认值, 某一行没有传入这一列数据的时候, 就会用默认值来填充
create table person5(
    id int primary key auto_increment,
    last_name varchar(100) unique,
    first_name varchar(100),
    address varchar(100),
    city varchar(100) default '北京'
);


🍔 条件查询语句

比较查询

select * from product where pname='花花公子';

select * from product where price=800;

select * from product where price!=800;

select * from product where price<>800;

select * from product where price>60;

select * from product where price<800;

范围查询

select * from product where price between 200 and 1000;

select * from product where price in (200,800);

这里 in 不是范围, 而是两个具体的取值, 上面的sql语句只能查询出价格=200 价格=800的商品, 而不是0<价格<800

逻辑查询

select * from product where price >=200 and price<=1000;

select * from product where price =200 or price=800;

select * from product where not (price =800);

模糊查询

# 模糊查询

select * from product where pname like '香%';

select * from product where pname like '%想%';

% 通配符 这里可以代替0~多个字符

_ 代表一个字符

模糊查询遍历这列数据的所有行, 看字段是否满足传入的条件

非空查询

select * from product where category_id is Null;
select * from product where category_id is not null ;

查询结果排序 order by

select * from product order by price;

select * from product order by price ,category_id DESC ;

默认升序 ASC

降序 DESC

多字段排序, 当前面的字段排序的时候, 排序结果中有相同取值的时候, 后面排序的字段才能看到效果

🍔 聚合查询

count() 计数 NULL值会过滤

sum() 求和

avg() 求平均

min() 最小值

max() 最大值

# 聚合查询

# 查询所有商品的条目数

select count(*) from product;

select count(*) from product where category_id='c001';

# 查询类别是c002的所有商品价格的总和

select sum(price) from product where category_id='c002';

# 查询类别是c002的所有商品价格的平均值

select avg(price) from product where category_id='c003';

# 查询c003类别中商品价格最大值最小值

select MAX(price),MIN(price) from product where category_id='c003';

pycharm常用快捷键

shift + alt + ↑↓ 移动一行/多行代码

ctrl+D  复制代码

🍔 分组查询

group by

  • group by 分组字段 会把这个字段中取值相同的数据行放到一组中, 做后续的计算
  • 分组聚合
  • 分组过滤
  • 分组转换
  • 分组之后的结果可以添加having子句进行过滤, 类似于where条件
# 统计各个分类商品的个数
select category_id,count(*) from product group by category_id;
# 统计各个分类商品的个数 , 且只显示个数大于1的类别
select category_id,count(*) from product group by category_id HAVING count(*)>1;
# 统计各个类别商品的平均价格
select category_id,avg(price) from product group by category_id;
select
    category_id,
    max(price)
from
    product
group by
    category_id;

1).having是在分组后对数据进行过滤,where是在分组前对数据进行过滤

2).having后面可以使用分组函数(统计函数),where后面不可以使用分组函数。

🍔 分页查询

  • 当满足查询条件的记录比较多的时候, 我们希望控制每次返回的数据条目数, 可以使用LIMIT 做分页返回

LIMIT M,N

  • M 从第几条开始返回 M计算 (第几页-1) * N(一页返回几条数据)
  • N 一次返回几条数据

select * from product LIMIT 0,5;

select * from product LIMIT 5,5;

select * from product LIMIT 10,5;

 

🍔 小结

SQL语言

  • DDL 了解(对数据库和数据表的操作, 场景相对比较少, 作为了解)
  • DML 重点掌握插入数据
  • insert into 表名(字段) values (值)
  • DQL 重点掌握
  • 基本结构

select 字段

from 表名

where 条件

group by 分组

having 分组之后条件

  • where 条件
名称 符号 说明
比较查询 > < , <=, >= ,=, <> != 大于、小于、大于(小于)等于、不等于
范围查询 BETWEEN ...AND... 显示在某一区间的值(含头含尾) []
  IN(set) 显示在in列表中的值,例:in(100,200)
模糊查询 LIKE ‘张%’LIKE ‘%涛%’ 模糊查询,Like语句中,%代表零个或多个任意字符,代表一个字符,例如:first_name like ‘a%’;
非空查询 IS NULL IS NOT NULL 判断是否为空
逻辑查询 and 多个条件同时成立
  or 多个条件任一成立
  not 不成立,例:where not(salary>100);
  • 聚合函数
    count() 计数/sum() 求和/avg() 求平均/max() 求最大/min()求最小
    排序 order by ASC 升序(默认)|DESC(降序)
  • group by分组 和 having
  • 分页(了解) Limit

 

约束 (了解)

  • 主键 primary key 一般会跟着auto_increment
  • 非空+唯一
  • 非空 not null
  • 唯一 unique
  • 默认值 default

 

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
SQL 关系型数据库 MySQL
数据库开发之SQL简介以及DDL的详细解析
数据库开发之SQL简介以及DDL的详细解析
82 0
|
4天前
|
SQL 关系型数据库 分布式数据库
Citus 简介,将 Postgres 转换为分布式数据库
【10月更文挑战第4天】Citus 简介,将 Postgres 转换为分布式数据库
28 4
|
5天前
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介
12 3
|
2月前
|
Oracle 关系型数据库 MySQL
OceanBase数据库简介
【8月更文挑战第9天】OceanBase数据库简介
315 60
|
2月前
|
SQL 存储 NoSQL
Redis6入门到实战------ 一、NoSQL数据库简介
这篇文章是关于NoSQL数据库的简介,讨论了技术发展、NoSQL数据库的概念、适用场景、不适用场景,以及常见的非关系型数据库。文章还提到了Web1.0到Web2.0时代的技术演进,以及解决CPU、内存和IO压力的方法,并对比了行式存储和列式存储数据库的特点。
Redis6入门到实战------ 一、NoSQL数据库简介
|
4月前
|
存储 安全 关系型数据库
|
4月前
|
SQL 安全 关系型数据库
MySQL数据库——事务-简介、事务操作、四大特性、并发事务问题、事务隔离级别
MySQL数据库——事务-简介、事务操作、四大特性、并发事务问题、事务隔离级别
73 1
|
4月前
|
NoSQL Java 关系型数据库
非关系型数据库NoSQL数据层解决方案 之 Mongodb 简介 下载安装 springboot整合与读写操作
非关系型数据库NoSQL数据层解决方案 之 Mongodb 简介 下载安装 springboot整合与读写操作
60 0
|
4月前
|
存储 关系型数据库 MySQL
MySQL数据库简介
MySQL数据库简介
|
5月前
|
存储 人工智能 数据库
【LangChain系列】第四篇:向量数据库与嵌入简介及实践
【5月更文挑战第18天】 本文介绍了构建聊天机器人和语义搜索的关键组件——向量存储和嵌入。首先,文章描述了工作流程,包括文档拆分、生成嵌入和存储在向量数据库中。接着,通过Python代码展示了如何设置环境并处理文档,以及如何创建和比较文本嵌入。向量存储部分,文章使用Chroma存储嵌入,并进行了相似性检索的演示。最后,讨论了故障模式,如重复文档和未捕获结构化信息的问题。整个博文中,作者强调了在实际应用中解决这些问题的重要性。
370 0