MySQL
连接
默认:用户root
show databases;
use 数据库名称;
show tables;
select * from 表名;
select name,age,id from 表名;
mysql数据库user表
use mysql;
select user,host from user;
创建用户:
create user 'username'@'192.168.1.1' identified by '123123';
create user 'username'@'192.168.1.%' identified by '123123';
create user 'username'@'%' identified by '123123';
授权
grant select,insert,update on db1.t1 to 'username'@'%';
grant all privileges on db1.t1 to 'username'@'%';
revoke all privileges on db1.t1 from 'username'@'%';
DBA: 用户名密码
创建表:
auto_increment
是自增
show tables;
create tables t1(
id int not null auto_increment primary,
name char(10),
grade int
)engine=innodb default charset=utf8;
数字类型
数据类型:
数字:
tinyint
int
bigint
FLOAT
0.00000100000123000123001230123
DOUBLE
0.00000000000000000000100000123000123001230123
0.00000100000123000000000000000
decimal
0.1
字符串:
char(10) 速度快()
root
varchar(10) 节省空间
root
PS: 创建数据表定长列往前放
时间类型:
DATETIME
enum
set
清空表:
delete from t1;
truncate table t1;
删除表:
drop table t1;
基本增删改查
插入数据
insert into t1(id,name) values(xx,xx)
case when ... then
删除
delete from 表 where 约束条件
修改
添加列:alter table 表名 add 列名 类型
删除列:alter table 表名 drop column 列名
修改列:
alter table 表名 modify column 列名 类型; – 类型
alter table 表名 change 原列名 新列名 类型; – 列名,类型
添加主键:
alter table 表名 add primary key(列名);
删除主键:
alter table 表名 drop primary key;
alter table 表名 modify 列名 int, drop primary key;
添加外键:alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
删除外键:alter table 表名 drop foreign key 外键名称
修改默认值:ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
删除默认值:ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
在修改表时添加唯一约束的语法格式为:
ALTER TABLE <数据表名> ADD CONSTRAINT <唯一约束名> UNIQUE(<列名>);
查看数据
select * from 表
1.对自增的补充:
MySQL:自增步长
基于对话:对于设置的初始步长和初始值只能对一个对话起作用(一个mysql窗口)
基本操作
show session variables like ‘auto_inc%’; 查看全局变量
set session auto_increment_increment=2; 设置会话步长
set session auto_increment_offset=10; 下一个自增的数值
基于全局级别(不推荐使用):
show global variables like ‘auto_inc%’; 查看全局变量
set global auto_increment_increment=2; 设置会话步长
set global auto_increment_offset=10;
唯一索引
1 | create table t1( |
MySQL索引
1. 索引
索引是表的目录,保存在额外的空间中,加速查找。
1 | create index xxx(索引名) on 表名(列名) |
2.索引的种类
- 普通索引:仅加速查询
- 唯一索引:加速查询 + 列名唯一(可以为空)
- 主键索引:加速查找 + 列名唯一 + 表中只有一个(不能为空)
- 组合索引:多列值组成一个索引,专门用于组合搜索,骑效率大于索引合并
- 全文索引:对文本的内容进行分词,进行搜索
索引合并,使用多个单列索引组合搜索
覆盖索引,select的数据列只用从索引中就能够取得,不必读取数据行,换句话说查询列要被所建的索引覆盖
3. 相关命令
1 | - 查看表结构 |
4.正确使用索引
1 | - like '%xx' |
5.注意事项
- 避免使用select *
- count(1)或count(列) 代替 count(*)
- 创建表时尽量时 char 代替 varchar
- 表的字段顺序固定长度的字段优先
- 组合索引代替多个单列索引(经常使用多个条件查询时)
- 尽量使用短索引
- 使用连接(JOIN)来代替子查询(Sub-Queries)
- 连表时注意条件类型需一致
- 索引散列值(重复少)不适合建索引,例:性别不适合
6.limit分页
1 | 每页显示10条: |
7.慢日志查询
a、配置MySQL自动记录慢日志
1 | slow_query_log = OFF 是否开启慢日志记录 |
b、查看MySQL慢日志
1 | """ |
MySQL的存储过程
s
存储过程
保存在MySQL上的一个别名 => 一串MySQL语句
用于代替程序员写MySQL语句
1 | -- 创建存储过程 |
相当于将SQL语句封装起了个别名,这样以后用其他语言操作数据库的时候就不用写SQL语句了,将程序和SQL语句拆开了,存储过程保存在数据库中,以后如果想要修改直接在数据库中找到存储过程改一下即可,可以解放程序员
1 | import pymysql |
传参数(in,out,inout)
1 | -- 创建存储过程 |
1 | import pymysql |
参数out
1 | -- 创建存储过程 |
1 | import pymysql |
事务
1 | delimiter // |
游标
1. 声明游标
2. 获取数据
1 | delimiter // |
动态执行SQL(防SQL注入)
1 | delimiter // |