Mysql基础
安装
1 | https://downloads.mysql.com/archives/community/ |
初始化
1 | "D:安装目录\bin\mysqld.exe" --initialize-insecure |
配置文件
1 | 在安装目录创建my.ini |
一些命令
1 | show variables like '%time_zone%'; -- 查询当前数据库的时区 |
启动Mysql
- 临时启动
1 | "安装目录\bin\mysqld.exe" |
- 制作成windous服务
1 | "安装目录\bin\mysqld.exe" --install 名称可自定义 |
- 使用命令行连接Mysql
1 | "安装目录"\bin\mysqld.exe" -h ip地址 -P 端口 -u 用户名 -p 密码 |
- 设置密码
1 | mysql> set password = password("root123"); |
- 忘记密码
1 | 在配置文件中[mysqld节点下添加] |
数据库操作
查看当前所有数据库:
show databases;
创建数据库:
create database 数据库名 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
删除数据库:
drop database 数据库名;
进入数据库:
use 数据库;
数据表操作
- 查看当前数据库下的所有数据表
show tables;
- 创建表结构
1 | create table 表名( |
- 删除表
drop table 表名;
- 清空表
delete from 表名;
或truncate table 表名;
(速度快,但无法回滚撤销等)
修改表(列操作)
查看所有列:
desc 表名
添加列
1
2
3
4
5
6
7
8alter table 表名 add 列表 类型;
alter table 表名 add 列表 类型 DEFAULT 默认值;
alter table 表名 add 列表 类型 not null default 默认值;
alter table 表名 add 列表 类型 not null auto_increment primary key;
alter table 表名 add column 列名 char(1) not null default '男' check (列名 in ('男', '女'));
-- 使用CHECK关键字可以添加约束,确保这个列的取值仅能为'男'或'女'删除列
1
alter table 表名 drop column 列名;
修改列类型
1
alter table 表名 modify column 列名 类型;
修改列 类型—+名称
1
alter table 表名 change 原列名 新列名 新类型 (后面一样可用更规则);
修改列 默认值
1
ALTER TABLE 表名 ALTER 列名 SET DEFAULT 1000;
删除列 默认值
1
ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;
常见列类型
1 | int[(m)][unsigned][zerofill] |
数据操作/数据类型
- 整数
1 | -- 在表中添加数据 |
1 | tinyint[(m)] [unsigned] [zerofill] |
1 | bigint[(m)][(unsigned)] [(zerofill)] |
1 | mediumint |
- 小数
1 | decimal[(m,d)] [unsigned] [zerofill] |
1 | FLOAT [(M,D)] [UNSIGNED] [ZEROFILL] |
- 字符类型
1 | char(m) -- m代表字符串的长度,最多可容纳255【字符】(即使数据小于m的长度也会占用m个字符数,并且在存储的时候空的位置默认用空格补齐,但查询数据的时候会去除,如果不想去除在配置文件中的sql-mod中加入 PAD_CHAR_TO_FULL_LENGTH) |
- 时间
1 | date:仅存储日期,格式为'YYYY-MM-DD'。-- '1000-01-01'到'9999-12-31',共9888天。 |
数据行操作
- 新增数据
1 | insert into 表名 (列名,列名,列名) values(对应列的值,对应列的值,对应列的值) |
- 删除数据
1
2
3
4
5
6
7
8
9delete from 表名;
delete from 表名 where 条件;
-- 比如:
delete from tb1 where name="jxms" and password ="123";
delete from tb1 where name="jxms" or password ="123";
delete from tb1 where id>9;
-- 删除数据并重置自增id
truncate table 表名; - 修改数据
1
2
3
4
5
6
7
8update 表名 set 列名=值;
update 表名 set 列名=值 where 条件
-- 比如:
update tb1 set name="jxsm" where id=1;
-- concat是一个函数,可以拼接字符串(name为数据库中的name)
update users set name=concat(name,"123") where id=2;
-- 可以用自身数据相加(age必须为整形)
update tb1 set age=age+1; - 查询数据
1
2
3
4
5
6
7
8select * from 表名;
select 列名 列名 列名 from 表名;
select 列名,列名 as 别名,列名 from 表名; -- 别名是让最后的结果的表头变成别名
select * from 表名 where 条件;
-- 比如
select * from tb1 where id !=1;
select name,id,111 from tb1; -- 查询的时候会新曾一列,默认值为111
Python方面
- 安装pymysql :
pip install pymysql
连接数据库
1 | import pymysql |
数据操作
查询数据
1 | import pymysql |
储存案例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18def writeIn(username: str, password: str):
# 连接数据库
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='jxsm', charset='utf8', db='userdb')
# 创建游标
cursor = conn.cursor()
# 存储数据
cursor.execute(f"INSERT INTO `user` (`name`, `password`) VALUES ('{username}', '{password}')")
# 提交更改
conn.commit()
# 打印返回结果
result = cursor.fetchall()
print(result)
# 断开连接
cursor.close()
conn.close()查询案例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27def query(name: str, password: str) -> bool:
# 连接数据库
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='jxsm', charset='utf8', db='userdb')
# 创建游标
cursor = conn.cursor()
# 发送查询命令
cursor.execute(f"select name, password from user where name=%s and password=%s", (name, password))
# 获取返回结果
result = cursor.fetchall()
if result is None or cursor.rowcount == 0:
cursor.close()
conn.close()
return False
else:
if result[0] == name:
if result[1] == password:
cursor.close()
conn.close()
return True
else:
cursor.close()
conn.close()
return False
else :
cursor.close()
conn.close()
return False时间计算
1
2
3
4
5
6
7
8
9
10
11
12
13#获取时间差秒
import datetime
# 创建一个datetime对象
dt = datetime.datetime(2023, 3, 14, 12, 0, 0)
# 计算时间差
td = dt - datetime.datetime.now()
# 获取剩余的时间秒数
remaining_seconds = td.total_seconds()
print("剩余的时间秒数:", remaining_seconds)
防注入
1 | #在sql命令拼接的时候用pymysql自带的方法,通过占位符来实现与列表或元组实现 |
一些常用的命令
1 | #获取返回结果的行数 |