跳到正文
南歌 EuanSu
返回

MySQL基础使用

MySQL

MySQL的基础使用

Mysql的链接串

# -h mysql主机ip
# -P mysql的服务端口
# -u mysql用户名
# -p mysql用户密码
mysql -h101.43.211.36 -P3306 -ueuansu -p

image-20240422230556683

基础的mysql语句

-- 查看有哪些数据库
show databases;
-- 使用某个数据库
use <database>;
-- 退出mysql的命令行环境
exit;

SQL的注释:

SQL基础和DDL

SQL的概述

SQL:Structured Query Lanuage,结构化查询语言,用于访问和处理数据库的标准计算机语言。

SQL语言1974年由Boyce和Chamberlin提出,并首先在IBM公司研制的关系数据库系统SystemR上实现。

经过多年发展,SQL已经成为数据库领域统一的数据操作标准语言。

SQL语言的分类

由于数据库管理系统(数据库软件)功能非常多,不仅仅是存储数据库,换药包含:数据的管理、表的管理、库的管理、账户管理、权限管理等等。

操作数据库的SQL语言可以基于功能,划分为4类:

SQL-DDL

-- 创建数据库
create database 数据库名称[charset utf8];
-- 删除数据库
drop database 数据库名称;
-- 查看当前使用的数据库
select database();
-- 查看数据库下有哪些表
show tables;
-- 创建表
create table 表名称(
    列名称 列类型,
    ...
);
-- 删除表
drop table 表名称;
drop table if exists 表名称;

SQL-DML

数据插入 INSERT

-- 基础语法
INSERT INTO 表[(列1, 列2, ..., 列N)] VALUES (值1, 值2, ..., 值N)[, (值1, 值2, ..., 值N), ..., (值1, 值2, ..., 值N)]
-- 示例
CREATE TABLE student(
    id INT,
    name VARCHAR(20),
    age INT
);
-- 仅插入id列数据
INSERT INTO student(id) VALUES(10001), (10002), (10003);
-- 插入全部列数据
INSERT INTO student(id, name, age) VALUES(10004, '南歌', 18), (10005, 'EuanSu', 18), (10006, '青山', 18);
-- 插入全部列数据,快捷写法
INSERT INTO student VALUES(10007, '南歌', 18), (10008, 'EuanSu', 18), (10009, '青山', 18);

image-20240422233148524

image-20240422233215858

image-20240422233236806

image-20240422233306041

数据删除 DELETE

-- 基础语法
DELETE FROM 表名称 WHERE 条件判断
-- 示例
DROP TABLE IF EXISTS student;
CREATE TABLE student(
    id INT,
    name VARCHAR(20),
    age INT
);
-- 向表中快捷插入数据
INSERT INTO student VALUES(10001, '南歌', 18), (10002, 'EuanSu', 19), (10003, '青山', 20);
-- 删除name为南歌的数据
DELETE FROM student WHERE name='南歌';
-- 删除age大于19的数据
DELETE FROM student WHERE age>19;

image-20240422234314346

image-20240422234333692

数据更新 UPDATE

-- 基础语法
UPDATE 表名 SET 列=值 [WHERE 条件判断];
-- 示例
DROP TABLE IF EXISTS student;
CREATE TABLE student(
    id INT,
    name VARCHAR(20),
    score INT
);
-- 向表中快捷插入数据
INSERT INTO student VALUES(10001, '南歌', 100), (10002, 'EuanSu', 98), (10003, '青山', 99);
-- 更新所有数据
UPDATE student SET score=60;
-- 更新指定条件的数据
UPDATE student SET score=100 WHERE name='南歌';

image-20240422235106749

image-20240422235127784

SQL-DQL

基础查询

-- 基础语法
SELECT 字段列表|* FROM 表
-- 演示
DROP TABLE IF EXISTS student;
CREATE TABLE student(
    id INT,
    name VARCHAR(20),
    score INT
);
-- 向表中快捷插入数据
INSERT INTO student VALUES(10001, '南歌', 100), (10002, 'EuanSu', 98), (10003, '青山', 99);
-- 查询id和name两个列
SELECT id, name FROM student;
-- 查询全部列
SELECT id, name, score FROM student;
-- 查询全部列,快捷写法
SELECT * FROM student;

image-20240423074309594

image-20240423074325696

image-20240423074342486

基础数据查询 - 过滤

-- 基础语法
SELECT 字段列表|* FROM 表 WHERE 条件判断
-- 演示
-- 查询id和name两个列,id<=10002
SELECT id, name FROM student WHERE id<=10002;
-- 查询全部列,name=南歌
SELECT * FROM student WHERE name="南歌";

image-20240423074617700

分组聚合

分组聚合应用场景非常多,如:统计班级中,男生和女生的人数。

这种需求就需要:

这就称之为:分组聚合。

-- 基础语法
SELECT 字段|聚合函数 FROM 表 [WHERE条件] GROUP BY 列;
-- 聚合函数有:
-- SUM(列),求和
-- AVG(列),求平均值
-- MIN(列),求最小值
-- MAX(列),求最大值
-- COUNT(列|*),求数量e
-- 演示
DROP TABLE IF EXISTS student;
CREATE TABLE student(
    id INT,
    name VARCHAR(20),
    score INT,
    gender VARCHAR(2)
);
INSERT INTO student VALUES(10001, '南歌', 100, '男'), (10002, 'EuanSu', 98, '男'), (10003, '青山', 99, '男'), (10004, '西野七濑', 100, '女'), (10005, '正源司阳子', 100, '女'), (10006, '与田佑希', 100, '女');
-- 按照性别分组查询平均分数
SELECT gender, avg(score) FROM student group by gender;
-- 分组聚合函数查询
SELECT gender, avg(score), sum(score), min(score), max(score), count(*) FROM student group by gender;

image-20240423075631598

image-20240423075740567

排序分页

-- 基础语法
SELECT 列|聚合函数|* FROM 表
WHERE ...
GROUP BY ...
ORDER BY ... [ASC|DESC]
LIMIT n[, m]
-- 执行顺序: FROM->WHERE->GROUP BY和聚合函数->SELECT->ORDER BY->LIMIT
-- 示例
-- 升序排列
SELECT * FROM student where score > 98 order by score asc;
-- 降序排列
SELECT * FROM student where score > 98 order by score desc;

image-20240423080132876

-- 查询2条数据
SELECT * FROM student limit 2;
-- 从第3条开始,查询2条
SELECT * FROM student limit 3, 2;

image-20240423080339671

Python操作Mysql

创建到Mysql的数据库链接

import pymysql
# 连接到数据库
connect = pymysql.connect(host='localhost', port=3306, user='root', passwd='password',charset='utf8')
# 打印MySQL数据库软件信息
print(connect.get_server_info())
# 关闭到数据库的连接
connect.close()

image-20240423081038975

执行SQL语句

import pymysql

# 连接到数据库
connect = pymysql.connect(host='localhost', port=3306, user='root', passwd='password', charset='utf8')
# 获取游标对象
cursor = connect.cursor()
# 选择数据库
connect.select_db('website')
# 使用游标对象,执行SQL语句
cursor.execute("SELECT * FROM student;")
# 获取查询结果
result: tuple = cursor.fetchall()
for row in result:
    print(row)
# 关闭到数据库的连接
connect.close()

image-20240423081412315

commit提交

import pymysql

# 连接到数据库
connect = pymysql.connect(host='101.43.211.36', port=3306, user='euansu', passwd='suwenhui123@', charset='utf8')
# 获取游标对象
cursor = connect.cursor()
# 选择数据库
connect.select_db('website')
# 使用游标对象,执行SQL语句
cursor.execute("INSERT INTO student VALUES(10007, '斋藤飞鸟', 100, '女')")
# 通过commit确认
connect.commit()
# 关闭连接
connect.close()

image-20240423081813808

自动commit

import pymysql

# 连接到数据库
connect = pymysql.connect(host='localhost', port=3306, user='root', passwd='password', charset='utf8', autocommit=True)
# autocommit,自动提交
# 获取游标对象
cursor = connect.cursor()
# 选择数据库
connect.select_db('website')
# 使用游标对象,执行SQL语句
cursor.execute("INSERT INTO student VALUES(10008, '有村架纯', 100, '女')")
# 关闭连接
connect.close()

image-20240423082000270

MySQL性能测试工具

mysqlslap 
# --concurrency 	并发数据量
# --iterations  	要运行测试多少次
# --query			要执行的SQL
# --create-schema	测试的database
mysqlslap -hlocalhost -P3306 -uroot -p'password' --concurrency=2 --iterations=3 --create-schema=test --query=test.sql

评论


上一篇
Mysql源码编译安装
下一篇
Python 序列化