大家好,我是老表,本文将带大家从零开始安装 MySQL,并分享一些 MySQL 的常用操作,比如:密码设置、如何链接、创建数据库、创建数据表、插入数据等,还会有一个案例教大家使用Python链接MySQL,然后批量从excel里插入数据。
最后还给大家安排了赠书活动《MySQL必知必会(第二版)》,欢迎大家看到最后参与赠书活动。
MySQL 安装
先前往官网下载对应系统的安装包。
https://dev.mysql.com/downloads/mysql/
目前最新的是 MySQL9,本文将下载安装这个版本。
上一步点击了下载后,在这里点击这行小字No thanks, just start my download.
就可以直接下载了,无需注册登录。
下载完成后直接双击安装。
一直下一步,到这里设置 MySQL 默认的 root 用户密码(设置个好记点的,甚至可以微信或者备忘录记下,本地学习用,无需设置太复杂),然后点击 Finsh 即可完成安装。
启动连接MySQL
Mac下,MySQL默认安装路径是/usr/local/mysql
,Windows看自己安装的时候设置的路径,然后设置下环境变量,有问题可以评论交流,或者加学习交流群提问。
# mac 设置环境变量操作
echo 'export PATH=/usr/local/mysql/bin:$PATH'>> ~/.zshrc
source ~/.zshrc
然后输入以下指令启动MySQL服务:
sudo /usr/local/mysql/support-files/mysql.server start
然后输入以下指令即可连接数据库了。
mysql -u root -p
创建数据库和表
输入以下指令先创建一个数据库Movie
,然后在创建一个数据表MovieComment
。
# 创建数据库
CREATE DATABASE IF NOT EXISTS Movie;
# 指定当前数据库
USE Movie;
# 在当前数据库中创建一张 MovieComment 表
CREATE TABLE IF NOT EXISTS MovieComment (
id INT
movie_id INT NOT NULL,
movie_name VARCHAR(255) NOT NULL,
comment TEXT,
rating_value FLOAT,
vote_count INT,
create_time DATETIME,
user_loc_name VARCHAR(255),
user_reg_time DATETIME,
user_gender VARCHAR(10),
user_in_blacklist BOOLEAN,
ip_location VARCHAR(255),
PRIMARY KEY (movie_id)
);
修改主键
很明显,作为一个电影评论数据表,电影id肯定不适合作为主键(不可重复),所以这里我们输入以下指令修改下主键。
# 删除之前的主键
ALTER TABLE MovieComment
DROP PRIMARY KEY;
# 新增 id 列,设置为主键
ALTER TABLE MovieComment
ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY FIRST;
# 展示表结构
SHOW CREATE TABLE MovieComment;
数据插入
只是样例代码,真正运行的时候需要将 movie_id, movie_name, comment 等换成具体值。
# INSERT 样例代码
INSERT INTO MovieComment (
movie_id, movie_name, comment, rating_value, vote_count, create_time,
user_loc_name, user_reg_time, user_gender, user_in_blacklist, ip_location
) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);
案例:Python 链接 MySQL 后,批量插入数据
需求:将本地的一个文件夹里所有excel表格数据插入 MySQL 数据库。
为了读取 excel数据和连接MySQL,需要先安装两个库:
pip install mysql-connector-python openpyxl
数据库连接代码:
import os
import mysql.connector
from openpyxl import load_workbook
# MySQL 配置
DB_HOST = 'localhost'
DB_USER = 'root'
DB_PASSWORD = '你安装MySQL的时候设置的密码'
DB_NAME = 'Movie' # 数据库名称
# 连接到 MySQL 数据库
def create_connection():
return mysql.connector.connect(
host=DB_HOST,
user=DB_USER,
password=DB_PASSWORD,
database=DB_NAME
)
代码的核心思路是:
使用 openpyxl 库打开 Excel 文件,并读取其中的数据 利用 Python 的 MySQL 连接库来创建数据库连接 事务处理来执行批量插入
最开始是for循环一行行插入,但效率太差,为了优化性能,我们使用了 executemany() 方法,每次插入 1000 条数据。
完成数据插入后,我们提交事务,确保数据安全,同时关闭数据库连接。
# 批量插入数据
def import_data_from_xlsx(file_path, m_id, m_name):
# 打开 Excel 文件
workbook = load_workbook(file_path)
sheet = workbook.active
# 获取数据(假设第一行是表头,数据从第二行开始)
data = []
for row in sheet.iter_rows(min_row=2, values_only=True):
data.append(row)
# 连接 MySQL
connection = create_connection()
cursor = connection.cursor()
# 使用事务开始批量插入
cursor.execute("START TRANSACTION")
# 批量插入,每次插入 1000 条数据
insert_sql = f"""
INSERT INTO MovieComment (
movie_id, movie_name, comment, rating_value, vote_count, create_time,
user_loc_name, user_reg_time, user_gender, user_in_blacklist, ip_location
) VALUES ({m_id}, '{m_name}', %s, %s, %s, %s, %s, %s, %s, %s, %s)
"""
print(insert_sql)
batch_size = 1000
for i in range(0, len(data), batch_size):
batch_data = data[i:i + batch_size]
cursor.executemany(insert_sql, batch_data)
print(f"成功插入了{len(data)}条数据!")
# 提交事务
connection.commit()
# 关闭连接
cursor.close()
connection.close()
# 测试单个文件数据插入
file_path, movie_id, movie_name = "./1116/7065187_不惧风暴_all_4830.xlsx", 7065187, "不惧风暴"
import_data_from_xlsx(file_path, movie_id, movie_name)
执行结果,成功插入excel里的数据:
拓展学习:计算数据表行数
在前面我们用Python调用MySQL,并向里面插入了4830条数据,但 Python 是不是真的插入成功了呢?我们可以在 MySQL 里查看下,要查看 MySQL 数据表中的总数据量(即表中总行数),常见的方法有:COUNT(*)。
使用 COUNT(*)
查询行数
最常见的查询方式是使用 COUNT(*)
来获取表中的总行数。这个方法适用于所有情况,但如果表很大,执行时可能会比较慢,因为它需要扫描整个表。
SELECT COUNT(*) FROM table_name;
将 table_name
替换为你要查询的表名。例如,查询 MovieComment
表的总行数:
SELECT COUNT(*) FROM MovieComment;
其他方法
查看表的元数据(SHOW TABLE STATUS
),不准确。
SHOW TABLE STATUS LIKE 'MovieComment';
使用 INFORMATION_SCHEMA
查询,不准确
SELECT TABLE_NAME, TABLE_ROWS
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'MovieComment' AND TABLE_SCHEMA = 'Movie';
使用 EXPLAIN
分析查询,不准确
在某些情况下,你还可以使用 EXPLAIN
语句查看查询的执行计划和表的大小。尽管它并不是专门用来查询行数的工具,但它能帮助你了解查询执行的基本信息。
EXPLAIN SELECT * FROM MovieComment;
数据量不多的情况下先用 COUNT(*),其他方法可以做参考。
更多MySQL操作,大家可以购买图书《MySQL必知必会(第二版)》查阅学习。
这本书畅销 15 年,是 MySQL 领域的经典著作,累计销量达 19 万册,如今它的升级版来了!带着更新的内容和不变的简洁语言,学习 MySQL 这本书可以说是必备!
小小的一本,太适合随身带着啦,就像我初中时候的英文单词背诵本一样,都是干货。
这里我也联系到出版社,拿到了一些赠书,欢迎大家评论交流自己对MySQL的认识,以及是什么缘由让你接触到了MySQL?
我会从留言中随机选一位读者,赠书一本。12.1 开奖。
我印象中第一次接触MySQL是大学实训课上。好久以前
扫码加老表微信,进入学习交流群