MySQL数据库介绍
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
数据库是一个存储数据的仓库,按照数据结构,来组织,管理和存储数据,并提供了增、删、改、查的功能。
数据库的主要特点
- 实现数据共享:
- 数据共享包含所有用户可同时存取数据库中的数据,也包括用户可以用各种方式通过接口使用数据库。
- 减少数据的冗余度:
- 同文件系统相比,由于数据库实现了数据共享,从而避免了用户各自建立应用文件。
- 数据的独立性:
- 数据的独立性包括数据库中数据库的逻辑结构和应用程序相互独立,也包括数据物理结构的变化不影响数据的逻辑结构。
- 数据实现集中控制:
- 文件管理方式中,数据处于一种分散的状态,不同的用户或同一用户在不同处理中其文件之间毫无关系。利用数据库可对数据进行集中控制和管理,并通过数据模型表示各种数据的组织以及数据间的联系。
- 数据一致性可维护性,以确保数据的安全性和可靠性
- 安全性控制:以防止数据丢失、错误更新和越权使用;
- 完整性控制:保证数据的正确性、有效性和相容性;
- 并发控制:使在同一时间周期内,允许对数据实现多路存取,又能防止用户之间的不正常交互作用;
- 故障的发现和恢复:由数据库管理系统提供一套方法,可及时发现故障和修复故障;
- 故障恢复
- 由数据库管理系统提供一套方法,可及时发现故障和修复故障,从而防止数据被破坏。数据库系统能尽快恢复数据库系统运行时出现的故障,可能是物理上或是逻辑上的错误。比如对系统的误操作造成的数据错误等。
数据库的类型
关系型数据库
- Oracle
- Mysql
- PostgreSql
- DB2
- Microsoft SQL server
- MicroSoft Access
非关系型数据库
- Redis
- Mongodb
- Big Table
MySQL数据库安装
- 访问网址:http://www.mysql.com
- 具体网址:https://dev.mysql.com/downloads/windows/installer/8.0.html
点击:DOWNLOADS
进入,Downloads 向下滑动,到最低层,找到MySQLcommunity (GPL) Downloads,单击进入(社区版对于大部分开发者就足够使用了)
点击 Go to Download Page 进入
看到 MSI,单击本机版,431.7M 大的,进入
点击No thanks, just start my download(下载时不需要登录)
![image.png](https://cdn.nlark.com/yuque/0/2023/png/25414438/1683699252411-14feb17e-9477-4f46-a3a6-a8c4c3bfa406.png#averageHue=%23f6f7f1&clientId=u4a875b24-42fa-4&from=paste&height=401&id=u6ffdfed2&originHeight=551&originWidth=724&originalType=binary&ratio=1.375&rotation=0&showTitle=false&size=236317&status=done&style=none&taskId=ub5fff353-5f37-4191-8dce-06f946ba5ee&title=&width=526.5454545454545)
等待安装包下载完成后,点击安装包进行安装
点击之后等待一下选择安装方式
验证是否安装成功
以管理员的方式进入cmd命令行,然后输入mysql -u root -p,出现如下界面,那是因为我们还没有配置环境变量。
找到我们mysql下的bin的路径,默认是C:\Program Files\MySQL\MySQL Server 8.0\bin
复制这个路径,右击我的电脑,点击属性
点击高级系统设置>点击环境变量>点击Path>点击编辑
点击新建>粘贴路径>点击确定(一直点确定)
重新打开cmd命令行,验证mysql是否安装成功(下图证明已经安装成功)
MySQL数据库的基本操作
创建数据库
我们可以在登陆 MySQL 服务后,使用命令创建数据库,语法如下:
CREATE DATABASE 数据库名;
显示所有的数据库
show databases;
删除数据库
使用普通用户登陆 MySQL 服务器,你可能需要特定的权限来创建或者删除 MySQL 数据库,所以我们这边使用 root 用户登录,root 用户拥有最高权限。
在删除数据库过程中,务必要十分谨慎,因为在执行删除命令后,所有数据将会消失。
语法如下:
drop database 数据库名;
选择数据库
在你连接到 MySQL 数据库后,可能有多个可以操作的数据库,所以你需要选择你要操作的数据库。
可以使用SQL命令来选择指定的数据库:
use 数据库名;
MySQL数据库类型
MySQL 中定义数据字段的类型对你数据库的优化是非常重要的。
MySQL 支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。
数值类型
下面的表显示了需要的每个整数类型的存储和范围。
日期与时间类型
字符串类型
char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。
MySQL创建数据表
创建MySQL数据表需要以下信息:
- 表名
- 表字段
- 定义每个表字段
语法:
CREATE TABLE table_name (column_name column_type);
以下例子中我们将在数据库中创建数据表book_tbl:
CREATE TABLE book_tbl(
book_id INT AUTO_INCREMENT,
book_title VARCHAR(100) NOT NULL,
book_author VARCHAR(40) NOT NULL,
book_date DATE,
PRIMARY KEY ( book_id )
)CHARSET=utf8;
实例解析:
- 如果你希望字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
- AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。
- PRIMARY KEY关键字用于定义列为主键。 可以使用多列来定义主键,列间以逗号分隔。
- CHARSET是设置编码。
成功创建表之后,可以通过命令行查看表结构:
show tables; //查看所有的表
desc book_tbl; //查看book_tbl的结构
MySQL删除数据表
MySQL中删除数据表是非常容易操作的,但是我们在进行删除表操作时要非常谨慎,因为执行删除命令后所有数据都会消失。
语法:以下为删除mysql数据表的通用语法
DROP TABLE 表名;
执行成功后,可以尝试查看表,会发现查询不到。
MySQL插入数据
MySQL 表中使用 INSERT INTO 语句来插入数据。
语法:以下为向MySQL数据表插入数据通用的语法
INSERT INTO 表名 ( 字段1, 字段2,...字段N ) VALUE ( 值1, 值2,...值N );
如果数据是字符型,必须使用单引号或者双引号,如:"value"。
例如:
INSERT INTO book_tbl
(book_id, book_title, book_author, book_date)
VALUE
(1, 'python爬虫', '轻舟', NOW());
添加完成之后,可以通过查询语句进行查询:
select * from book_tbl;
MySQL更新数据
如果我们需要修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作。
语法:以下是 UPDATE 命令修改 MySQL 数据表数据的通用 SQL 语法
UPDATE 表名 SET 字段1=new-value1, 字段2=new-value2 [WHERE 条件];
- 可以同时更新一个或者多个字段
- 你可以在 WHERE 子句中指定条件
实例:
修改表中book_id=1的book_author字段值
UPDATE book_tbl SET book_author='温轻舟' WHERE book_id=1;
MySQL删除数据
你可以使用 SQL 的 DELETE FROM 命令来删除 MySQL 数据表中的记录。
语法:以下是 SQL DELETE 语句从 MySQL 数据表中删除数据的通用语法
DELETE FROM 表名 [WHERE 条件];
- 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
- 可以在 WHERE 子句中指定条件。
实例:
删除book_tbl表中book_id=1的记录:
DELETE FROM book_tbl WHERE book_id=1;
删除整个表:
DELETE FROM book_tbl;
MySQL查询数据
MySQL 数据库使用SQL SELECT语句来查询数据。
语法:在MySQL数据库中查询数据通用的 SELECT 语法
SELECT 字段1,字段2,……,字段n FROM table_name [WHERE 条件] [LIMIT N]
- 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
- SELECT 命令可以读取一条或者多条记录。
- 可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
- 可以使用 WHERE 语句来包含条件。
- 可以使用 LIMIT 属性来设定返回的记录数。
实例:返回数据表 book_data 的所有记录
# 数据表
create table book_data(
id int auto_increment,
book_name varchar(10),
book_price int,
book_love varchar(5),
primary key(id)
)default charset="utf8";
insert into book_data(book_name, book_price, book_love) values ("三国演义", 100, "男");
insert into book_data(book_name, book_price, book_love) values ("红楼梦", 80, "女");
insert into book_data(book_name, book_price, book_love) values ("水浒传", 110, "男");
insert into book_data(book_name, book_price, book_love) values ("西游记", 150, "男");
insert into book_data(book_name, book_price, book_love) values ("羊皮卷", 250, "男");
insert into book_data(book_name, book_price, book_love) values ("鬼谷子", 110, "女");
insert into book_data(book_name, book_price, book_love) values ("甄嬛传", 110, "女");
insert into book_data(book_name, book_price, book_love) values ("三国演义2", 110, "男");
insert into book_data(book_name, book_price, book_love) values ("西游记续集", 110, "男");
select * from book_tbl;
where查询
模糊查询
在 MySQL 中,LIKE 关键字主要用于搜索匹配字段中的指定内容。其语法格式如下:
select book_price from book_data where book_price like '110';
# 查询所有以110的价格
select * from book_data where book_price like '1%%';
参考:https://blog.csdn.net/qq_46940224/article/details/125031647
范围查询 between
between......and......表示在一个连续的范围内查询
in......表示在一个非连续的范围内查询
SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2;
SELECT column_name(s) FROM table_name WHERE column_name IN (value1, value2, ...);
示例语句
select * from book_data where id >= 3 and id <= 8;
select * from book_data where id between 3 and 8;
select * from book_data where not(id between 3 and 8) and book_name="三国演义";
select * from book_data where id in (2,4,6);
select * from book_data where id not in (2,4,6);
空判断查询
is null 查询某个字段为空的数据
增加数据集
insert into book_data(book_name, book_price) values ("老人与海", 110);
insert into book_data(book_name, book_price) values ("孙子兵法", 100);
insert into book_data(book_name, book_price) values ("红与黑", 90);
insert into book_data(book_name, book_price) values ("鬼吹灯", 210);
select * from book_data where book_love is null;
select * from book_data where book_love is not null;
高级查询
分页查询---limit
limit---分页查询语法
start---表示开始行索引,默认0
count---表示查询条数
select * from 表名 limit start,count;
select * from book_data where book_love="男" limit 0,5;
# 查询前五行sex=男的数据
聚合查询
通常对表中的数据进行统和计算
count()---求指定列的总行数
max()---求指定列最大值
min()---求指定列的最小值
sum()---求指定列和
avg()---求平均数
select count(id) from book_data;
select count(*) from book_data;
select max(book_price) from book_data where book_love="女";
select sum(book_price) from book_data;
排序---order by
升序 ---- asc
降序 ---- desc
select * from book_data order by book_price desc;
select * from book_data order by book_price asc;
分组查询
- group by 列名 【条件表达式】
增加数据集合
insert into book_data(book_name, book_price, book_love) values ("三国演义", 200, "男");
insert into book_data(book_name, book_price, book_love) values ("红楼梦", 200, "女");
insert into book_data(book_name, book_price, book_love) values ("水浒传", 200, "男");
insert into book_data(book_name, book_price, book_love) values ("西游记", 200, "男");
select book_name,sum(book_price) from book_data group by book_name;
# 查询书名一致的书本价格总和
- group_concat() 统计每个分组指定字段的信息集合
select book_name,group_concat(book_price) from book_data group by book_name;
连接查询
数据集
create table book_author(
id int auto_increment,
name varchar(10),
book_id int,
primary key (id)
)default charset="utf8";
insert into book_author(name, book_id) values ("罗贯中",1);
insert into book_author(name, book_id) values ("曹雪芹",2);
insert into book_author(name, book_id) values ("施耐庵",3);
insert into book_author(name, book_id) values ("吴承恩",4);
内连接
查询两张表中符合条件的共有记录
inner join---内连接关键字,一张表连接另外一张表
on---连接查询条件
select book_data.book_name,book_author.name from book_data inner join book_author on book_data.id = book_author.book_id;
# 查询两张表id值相同的name和book_name
左连接
查询左边所有记录和右表符合条件的记录
left join
insert into book_author(name, book_id) values ("孙 武",11);
insert into book_author(name, book_id) values ("海明威",10);
select book_data.book_name,book_author.name from book_data left join book_author on book_data.id =book_author.book_id;
# 根据左表id查询右表相同数据,右表不存在即为null
右连接
查询右表所有记录和左表符合条件的记录
right join
select book_author.name,book_data.book_name from book_author right join book_data on book_author.book_id = book_data.id;
# 根据右表id查询左表相同数据,左表不存在即为null
pymysql操作MySQL数据库
python操作数据库流程
创建连接—获取游标—执行命令—关闭游标—关闭连接
图解:
代码实现
第三方模块的安装 pip install pymysql
import pymysql
# 创建链接
db = pymysql.Connect(
host="127.0.0.1",
port=3306,
user="root",
password="123456",
db="xiangxue"
)
# 创建游标,用于传递python给MySQL的命令和MySQL返回的内容
cursor = db.cursor()
# SQL插入语句
sql = "insert into book_tbl(book_id, book_title, book_author,book_date) values (4,'python基础','轻舟3',NOW())"
# 执行SQL语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
csv文件写入MySQL数据库
import csv
import pymysql
conn = pymysql.Connect(
host="127.0.0.1",
port=3306,
user="root",
password="123456",
db="xiangxue"
)
cursor = conn.cursor()
with open('douban.csv', 'r', encoding='utf-8') as file:
reader = csv.reader(file)
data = [row for row in reader]
print(data)
sql = 'INSERT INTO douban(title, grade, link,quote) VALUES (%s, %s, %s,%s)'
for row in data:
cursor.execute(sql, row)
conn.commit()
cursor.close()
conn.close()