MySQL数据库
数据库分类
关系型数据库:maridb, MySQL, SqlServer,Oracle
非关系型数据库:mongodb, redis
区别: 关系型数据库每列中数据类型是固定的,把数据存在硬盘中;非关系型数据库,可存多种类型数据,数据存在内存中
基本操作
mysql -h localhost -P 3306 -u root -p
数据库操作
show create database
show databases
drop database # 线上环境中,不能直接删除,必须先备份
数据表操作
show tables;
create table test_tb (id int, name char(10)) default charset=utf8
insert into test_tb (id, name) values(1, name);
truncate table table_name;
delete from test_tb;
alter table test_tb add primary key (id)
查询
select count(*) as result_num from test_tbl;
select id from test_tbl order by score desc;
创建
create table 表名(
字段名 列类型 [可选参数]
字段名 列类型 [可选参数]
)charset=utf8;
列约束
auto_increment
primary key
not null
default
数据类型
整形
tinyint
smallint
int
mediumint
bigint
# 加上unsigned表示不能取负数
浮点型
float:不一定精确
decimal:非常精确的数字
字符串
char
# 无论插入字符是多少个,永远固定占规定的长度
# 场景:
1.身份证,2.手机号,3.md5加密后的值
varchar
# 不确定时,一般建议使用varchar(255)
时间日期类型
YEAR # YYYY
DATE # YYYY-MM-DD
TIME # HH:MM:SS
DATETIME # YYYY-MM-DD HH:MM:SS
修改
# 修改表名
alter table 旧表名 rename 新表名
# 增加字段
alter table 表名 add 字段名 列类型 [可选的参数]
# 删除字段
alter table 表名 drop 字段名
# 修改字段属性
alter table 表名 modify 字段名 数据类型 [完整性约束条件]
# 修改字段名
alter table 表名 旧字段名 新字段名 新数据类型 [完整性约束条件]
复制表结构
show create table 表名;
数据行操作
增加
insert into 表名 (列1, 列2) values (值1, 值2)
删除
delete from 表名 where 条件;
delete from 表名 # 删除所有
truncate 表名 # 删除所有,没有where条件的
修改
update 表名 set 列名='xxx' where 条件
查
select * from 表名 where 条件
# 条件
between..and..
distinct
like # 模糊查询
'x%' # 以x开头
索引
作用:加快查询
底层原理:B+树
种类
- 主键索引:primary key
- 唯一索引:unique
- 联合唯一索引:unique(name, email)
- 普通索引:index (name)
- 联合索引: index (name, job)
使用注意:
- 不能在sql语句中,进行四则运算
- 不推荐使用函数
- 类型要一致
- 用count(列名)代替count(*)
- 组合索引前缀
慢查询
set global slow_query_log = on
set global slow_query_log_file = ''
set global long_query_time = 1
pymysql
conn = pymysql.connect(host="localhost", user="root", password="", database="test_db") # 连接
cursor = conn.cursor()
cursor.execute(sql, args) # 执行
result = cursor.fetchone()
result = cursor.fetchall()
result = cursor.fetchmany(size)
cursor.lastrowid
cursor.close()
conn.close()
补充
事务
事务的特征
- 原子性,最大特征,任务要么全部执行,要么全部取消
- 一致性,执行前后,数据匹配
- 隔离性,某个事务操作,对其他事务是不可见的
- 永久性,事务完成后,其影响应该保持下来
start transaction
# rollback;
commit;
存储引擎
InnoDB: 支持事务,支持行锁
MyIsam:不支持事务,支持表锁