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

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

🍔 常用的关系型数据库

🐼 什么是关系型数据?

  • 可以存放在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

 

相关文章
|
24天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
16天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
20天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2577 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
18天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
3天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
2天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
163 2
|
20天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1576 16
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
22天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
973 14
|
3天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
219 2
|
17天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
734 9