Python数据库入门从零掌握SQL核心操作
一、引言
python这块咱们也讲的差不多了,剩下的内容也讲不了几天了,大家有任何问题都可以私信我,我有时间都会回复大家的.
二、数据库
1.什么是数据库
简单来说,数据库就是一个有组织、可高效访问和管理的电子化数据集合。
我们可以用一个形象的比喻来理解:
文件柜 vs. 数据库:一个装满杂乱无章文件的文件柜,找一份文件非常困难。而数据库就像一个智能文件柜,它不仅把所有文件(数据)分门别类地放好,还有一个专业的图书管理员(数据库管理系统)帮你快速找到、添加、修改或删除任何你需要的文件。
官方定义:数据库是长期存储在计算机内、有组织的、可共享的、统一管理的海量数据的集合。
2.为什么要用数据库
在没有数据库的时代,数据通常存储在文件(如txt、excel、csv)中,但这会带来诸多问题:
- 数据冗余与不一致性:相同的数据可能在多个文件中重复存储,且更新时容易产生不一致。
- 数据访问困难:需要编写复杂的程序来查找特定数据,效率低下。
- 数据孤立性:数据分散在不同格式的文件中,难以关联和整合。
- 并发访问异常:多个用户同时读写同一文件时,数据容易损坏。
- 安全问题:难以精细化控制不同用户对数据的访问权限。
数据库的出现,正是为了解决上述所有问题。
3.数据库的核心组件
我们通常所说的“数据库”其实包含两个核心部分:
数据库本身
- 即实际存储数据的“仓库”,通常是一个或多个文件。
数据库管理系统
- DBMS 是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。它是用户(或应用程序)与数据库之间的接口。
- 常见的DBMS:MySQL, Oracle, PostgreSQL, SQL Server, SQLite,Redis, MongoDB, Hbase, Neo4j 等。
用户和应用程序通过 DBMS 来访问和操作数据库,而不是直接操作数据文件。
4.数据库分类
数据库根据其组织数据的方式可以分为不同类型,其中最主要的两类是:
数据库根据其组织数据的方式(数据模型)可以分为多种类型,其中最主要的两类是:
关系型数据库
- 概念:将数据组织成一系列二维表(由行和列组成),表与表之间存在关系。
- 核心术语:
- 表:存储特定类型数据的结构。
- 行/记录:表中的一条具体数据。
- 列/字段:数据的某个属性(如姓名、年龄)。
- 主键:唯一标识一条记录的字段。
- 外键:建立表与表之间关系的字段。
- 查询语言:SQL,这是一种声明式语言,你只需要告诉数据库“想要什么”,而不需要关心“如何获取”。
- 优点:ACID特性(原子性、一致性、隔离性、持久性)保证数据强一致性、成熟稳定。
- 代表:MySQL, Oracle, PostgreSQL, SQL Server, SQLite。
非关系型数据库
- 概念:为了应对互联网时代海量、多样、高速的数据处理需求而诞生。它没有固定的表结构,数据模型灵活。
- 主要类型:
- 键值型:简单的键值对存储(如Redis)。
- 文档型:数据存储为类似JSON的文档(如MongoDB)。
- 列族型:按列存储数据,适合大数据分析(如HBase)。
- 图数据库:存储实体(节点)和它们之间的关系(边),适合社交网络、推荐系统(如Neo4j)。
- 优点:灵活、可扩展性强、读写性能高。
- 代表:Redis, MongoDB, Hbase, Neo4j。
5.数据库的应用
选择 SQL 还是 NoSQL,不是一个谁更好的问题,而是一个 “更适合” 的问题。
- 当你需要构建一个关键业务系统(如银行、电商、ERP),其中数据的准确性和一致性是生命线,并且业务逻辑复杂、涉及大量关联查询时,SQL 数据库是毋庸置疑的首选。
- 当你需要处理海量非结构化数据、要求极高的写入速度和无限的水平扩展能力(如日志记录、社交媒体的动态流、物联网传感器数据),并且可以接受最终一致性时,NoSQL 数据库是更好的选择
数据库是现代信息系统的核心,无处不在:
- 电子商务:存储商品、用户、订单信息。
- 银行系统:管理账户、交易记录。
- 社交网络:存储用户资料、好友关系、动态信息。
- 物联网:收集和处理海量传感器数据。
- 企业ERP系统:整合企业的人力、财务、供应链等数据。
简单来说,数据库是现代数字世界的基石,它以一种可靠、高效和安全的方式,帮助我们存储和管理日益增长的数据资产。 理解数据库的基本概念是进入软件开发、数据分析等领域的必备第一步。
三、关系型数据库
1.SQL语言
1.1SQL简介
SQL: 结构化查询语言, 是所有关系型数据库都要遵循的规范
大白话解释: 可以理解成sql是普通话,mysql,oracle等是方言
1.2SQL分类
DDL: 数据定义语言:简称DDL(Data Definition Language) 作用: 用来定义数据库对象:数据库,表,列/字段等。 关键字: create,drop,alter等
DML: 数据操作语言:简称DML(Data Manipulation Language) 作用:用来对数据库中表的记录进行更新。 关键字: insert,delete,update等
DQL: 数据查询语言:简称DQL(Data Query Language) 作用:用来查询数据库中表的记录。 关键字: select,from,where等
DCL: 数据控制语言:简称DCL(Data Control Language) 用来定义数据库的访问权限和安全级别,及创建用户。
1.3SQL通用语法
1、SQL语句可以单行或多行书写,以分号结尾。 举例: select * from 表名 where 条件;
2、可使用空格和缩进来增强语句的可读性 select * from 表名 where 条件;
3、MySQL数据库的SQL语句不区分大小写,关键字建议使用大写 例如:select * from 表名 where 条件; SELECT * FROM 表名 WHERE 条件; 大小写切换快捷键: ctrl+shift+u
4、可以使用 /**/,--,# 的方式完成注释 /**/:多行注释,在注释区域内可以随意换行 -- 和 # :单行注释,写在语句开头,换行后注释截止。注意: --的后面必须有一个空格 单行注释快捷键: ctrl+/ 多行注释快捷键: ctrl+shift+/
2.MySQL操作
2.1数据库核心操作
知识点:
创建数据库: create database [if not exists] 数据库名;
使用/切换数据库: use 数据库名;
查看所有的数据库名: show databases;
# 一.数据库的增删改查
# 1.创建数据库:
create database test;
create database test; # 报错,因为test已经存在
# if not exists: 如果库不存在就创建,存在就忽略 create database test1;
create database IF NOT EXISTS test1; # 存在忽略
create database IF NOT EXISTS test2; # 不存在就创建
# character set utf8: 设置编码为utf8,注意: mysql大多数版本已经都默认utf8
create database test3 CHARACTER SET utf8;
create database test4 CHARSET utf8;
# 2.切换数据库: use test;
# 3.查看所有库: show databases;
2.2数据类型和约束
数据类型:
字符串类型: varchar(字符长度)
整数类型: int 注意: 默认长度是11,如果int不够用就用bigint
浮点类型: float(python默认) 或者 double(java默认) decimal(默认是有效位数是10,小数后位数是0) 日期时间: date datetime year
数据约束:
主键约束: primary key 特点: 修饰列对应的值非空唯一
主键自增: AUTO_INCREMENT 特点: 修饰主键对应的值不指定主键字段或者用0和null占位代表自动使用自增
非空约束: not null 特点: 修饰列对应的值不能为空
唯一约束: unique 特点: 修饰列对应的值不能重复
默认约束: default 特点: 修饰列对应的值提前设置默认值
外键约束: FOREIGN KEY 特点: 保证数据的完整性:限制从表插入数据,同时也限制主表删除数据
2.3库中表核心操作
知识点:
创建表: create table 表名(字段名 字段类型 [字段约束] , 字段名 字段类型 [字段约束] ...);
查看所有表: show tables;
示例:
# 创建my_db数据库
create database my_db;
# 使用my_db库
use my_db;
# 操作表的前提: 先创建库,并使用它
# 需求:创建学生表,用于存储学生的姓名,年龄,身高,生日信息
create table student(
id int,
name VARCHAR(100),
age int,
height float,
birthday date
);2.4表中记录增删改
知识点:
插入数据记录: insert into 表名 (字段名...) values (具体值...) , (具体值...);
注意1: 具体值要和前面的字段名以及顺序一一对应上
注意2: 如果要插入的是所有字段,那么字段名可以省略(默认代表所有列都要插入数据)
注意3: 如果要插入多条记录,values后多条数据使用 逗号 分隔
修改数据记录: update 表名 set 字段名=值 [where 条件];
注意: 如果没有加条件就是修改对应字段的所有数据
删除数据记录: delete from 表名 [where 条件];
注意: 如果没有加条件就是删除所有数据
清空所有数据:
方式1: delete from 表名;
注意:delete删除所有数据,自增顺序保留,下次再插入的时候继续自增
方式2: truncate [table] 表名;
注意:truncate删除所有数据,自增顺序重置,下次再插入数据的时候从1重新开始自增
/*
操作库的前提: 先启动mysql服务,并连接它
操作表的前提: 先有库,并使用它
操作数据的前提: 先有表,并有对应字段
*/
# 创建库
create database my_db;
# 使用库
use my_db;
# 创建表
create table student(
id int,
name VARCHAR(100),
age int
);
# 插入数据
# 指定字段插入一条数据
insert into student(name) values ('张三');
# 指定字段插入多条数据
insert into student(name) values ('李四'),('王五'),('赵六');
# 注意: 不指定字段本质代表指定所有字段
# 不指定字段插入一条数据
insert into student values (1,'张三',18);
# 不指定字段插入多条数据
insert into student values (1,'张三',18),(2,'李四',18),(3,'王五',18);
# 修改数据
# 修改李四的年龄为28
update student set age = 28 where name = '李四';
# 修改王五和赵六的年龄为39
update student set age = 39 where name = '王五' or name = '赵六';
# 修改赵六的id为4,年龄为40
update student set id = 4,age = 40 where name = '赵六';
# 注意: 如果没有加条件,修改的是所有数据(慎用!!!)
update student set age = 12; # 报黄警告!然后弹窗警告,如果非要执行,选择execute
# 删除数据
# 删除id为1的记录
delete from student where id = 1;
# 删除id为1,以及id为3的记录
delete from student where id = 2 or id = 3;
# 注意: 如果不加条件删除的是所有数据(慎用!!!)
delete from student; # 报黄警告!然后弹窗警告,如果非要执行,选择execute
# 为了演示truncate删除数据,重新插入多条
insert into student values (1,'张三',18),(2,'李四',18),(3,'王五',18);
# truncate也能删除所有数据
truncate table student; 3.表单查询
3.1准备数据
# 创建数据库: create database 库名;
CREATE DATABASE IF NOT EXISTS my_db CHARSET=utf8;
# 使用数据库: use 库名;
USE my_db;
# 创建表: create table 表名(字段名 字段类型 [约束],...);
# 建测试表
drop table if EXISTS products;
CREATE TABLE IF NOT EXISTS products
(
id INT PRIMARY KEY AUTO_INCREMENT, -- 商品ID
name VARCHAR(24) NOT NULL, -- 商品名称
price DECIMAL(10, 2) NOT NULL, -- 商品价格
score DECIMAL(5, 2), -- 商品评分,可以为空
is_self VARCHAR(8), -- 是否自营
category_id INT -- 商品类别ID
);
drop table if EXISTS category;
CREATE TABLE IF NOT EXISTS category
(
id INT PRIMARY KEY AUTO_INCREMENT, -- 商品类别ID
name VARCHAR(24) NOT NULL -- 类别名称
);
# 插入数据: insert into 表名 (字段名,字段名) values(字段值,字段值),(字段值,字段值);
# 添加测试数据
INSERT INTO category
VALUES (1, '手机'),
(2, '电脑'),
(3, '美妆'),
(4, '家居');
INSERT INTO products
VALUES (1, '华为Mate50', 5499.00, 9.70, '自营', 1),
(2, '荣耀80', 2399.00, 9.50, '自营', 1),
(3, '荣耀80', 2199.00, 9.30, '非自营', 1),
(4, '红米note 11', 999.00, 9.00, '非自营', 1),
(5, '联想小新14', 4199.00, 9.20, '自营', 2),
(6, '惠普战66', 4499.90, 9.30, '自营', 2),
(7, '苹果Air13', 6198.00, 9.10, '非自营', 2),
(8, '华为MateBook14', 5599.00, 9.30, '非自营', 2),
(9, '兰蔻小黑瓶', 1100.00, 9.60, '自营', 3),
(10, '雅诗兰黛粉底液', 920.00, 9.40, '自营', 3),
(11, '阿玛尼红管405', 350.00, NULL, '非自营', 3),
(12, '迪奥996', 330.00, 9.70, '非自营', 3);3.2条件查询
知识点:
条件查询关键字:
where
条件查询基础格式:
select 字段名 from 表名 where 条件;
比较运算符: > < >= <= != <>
逻辑运算符: and or not
范围查询: 连续范围:between x and y 非连续范围: in(x,y)
模糊查询: 关键字:like %:0个或者多个字符 _:一个字符
非空判断: 为空: is null 不为空:is not null
四、结语
篇幅问题剩下的排序、聚合、分组等等下次再讲.
到此这篇关于Python数据库入门从零掌握SQL核心操作的文章就介绍到这了,更多相关python数据库sql入门内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
用 Django 开发一个 Python Web API的方法步骤
这篇文章主要介绍了用 Django 开发一个 Python Web API的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-12-12
Python 3.x 安装opencv+opencv_contrib的操作方法
下面小编就为大家分享一篇Python 3.x 安装opencv+opencv_contrib的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2018-04-04


最新评论