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:不支持事务,支持表锁

原文地址:https://www.cnblogs.com/YajunRan/p/11756460.html