MySQL

安装

下载

https://dev.mysql.com/downloads/mysql/

初始化

  • exe格式安装不需要
  • 初始化完成后默认用户名:root 默认密码:空
mysqld --initialize-insecure

启动服务端

  • exe格式安装不需要
mysqld

启动客户端

mysql -u root -p
Enter password:输入密码

SQL

数据库操作

创建数据库

create database 数据库名;

create database db1;

删除数据库

drop database 数据库名;

drop database db1;

切换数据库

use 数据库名;

use db1;

表操作

创建表

create table 表名(
字段名 类型,
字段名 类型 [是否可以为空  null | not null],
字段名 类型 [默认值 default 默认值],
字段名 类型 [[自增 auto_increment] 主键 primary key], // auto_increment 和 primary key 必须同时使用,且每个表只能有一个auto_increment
[constraint 外键名] foreign key 从表(字段名称) references 主表(字段名称),
[primary key (字段1,字段2,....)]//设置主键,可以设置多个字段
[unique 索引名称 (字段名,...)]//设置唯一索引
.......);

示例:
create table t1(id int, name char(10));
create table t1(id int null, name char(10));
create table t3(id int auto_increment primary key, name char(10)) engine=innodb default charset=utf8;
create table t1(id int, name char(10)) engine=innodb default charset=utf8;//引擎为innodb 默认字符编码为utf8
//innodb 支持事务(原子性操作)
constraint fk_score_student foreign key score(student_id) references student(sid)

查询数据

select 列 from 表名;
select * from t1;

select 列名 as 别名 from 表名;
select tname as "姓名" from teacher;

select 列名 from 表名 where 条件;
select * from t1 where name="张三";
select * from t1 where name like "张%";//查询姓名以张开头的人的所有信息
select * from t1 where name like "张_";//查询姓名以张开头的并且名只有一个字的人(例如张三,张四)的所有信息

select 列名 from 表名 limit 数量;//只显示查询的到前多少条
select * from t1 limit 10;// 只显示前十条

select 列名 from 表名 limit 起始值,数量;//只显示查询的从起始值开始的多少条信息
select * from t1 limit 5,10;// 只显示从第五条开始的十条信息

select count(*) as 数量 from 表名 group by 字段名;//分组
select gender,count(*) as "数量" from student group by gender;//按性别分组统计人数

select * from 表1,表2 where 关联条件; //多表查询
select * from course,teacher where course.teacher_id = teacher.tid;

select * from 表1 left join 表2 on 关联条件;// 多表查询
select * from course left join teacher on course.teacher_id = teacher.tid;

插入数据

insert into 表名(字段名,字段名,.....)values(数据,数据),(数据,数据) //数据个数与字段名个数对应
insert into t1(id,name)values(1,"a");

insert into t1(字段1,字段2) select 字段1,字段2 from t2;
insert into t1(id,name) select id,name from t2;;

更新数据

update 表名 set 更新内容 where 条件;
update t1 set id=3 where id=1;

alter table 表名 AUTO_INCREMENT=数值; //修改表的自增值
alter table t1 AUTO_INCREMENT=30;

删除数据

delete from t1 where 条件;
delete from t1 where name='张三';

清空表

  • 清空表里的内容,并不删除表
delete from 表名;//不会清空自增值
delete from t1;


truncate table 表名;//会清空自增值,速度更快
truncate table t1;

删除表

drop table 表名;
drop table t1;

查看

查看数据库

show databases;

查看表

show tables;

查看表结构

desc 表名;

查看表的创建方法

show create table 表名;

查看用户

use mysql;
select user from user;

用户管理

创建用户

create user '用户名'@'可登陆的ip地址' identified by '密码';

示例:
create user 'a'@"localhost" identified by '123'; //创建一个名字叫a的账户,只允许本地登陆,密码123
create user 'b'@'192.168.1.1' identified by '123'; //创建一个名字叫b的账户,只允许ip为192.168.1.1登陆,密码123
create user 'c'@'192.168.%' identified by '123'; //创建一个名字叫c的账户,只允许ip为192.168.*.*的地址登陆,密码123
create user 'd'@'%' identified by '123'; //创建一个名字叫a的账户,允许所有ip登陆,密码123

权限管理

授权

grant 权限 on 数据库.表 to 用户@可登陆地址;
  • 权限
权限名 作用
select 查找权限
update 更新权限

其他操作

视图

create view v1 as select * from teacher;//创建
alter view v1 as select * from student;//修改
drop view v1;//删除

索引

create index 索引名 on 表名(字段名);
create index ix_name on	user(username);//普通索引

create unique ix_name on user(username);//唯一索引

drop index ix_name on user;

慢日志

show variables like "%query%"; // 查看有关查询的变量

设置

set global 参数;


set global slow_query_log = on;// 开启慢日志记录
set global long_query_time = 1;// 设置慢日志记录阈值
set global slow_query_log_file = "f:\\slow_query.conf"; //设置慢日志存储文件位置
set global log_queries_not_using_indexes = on; //设置没有命中索引记录

分页

  • 直接使用limit来分页时,当页数过大时,查询会很慢
  • limit 200000,10 会扫描表的前200000项,然后取10条,速度慢
  • 可以通过程序记录上一次分页的id
  • 使用 where id > 上一次分页的最后一个id 来实现不扫描前面的数据

上一页,下一页实现

select * from t1 where id > 200000 limit 10;// 下一页
SELECT * FROM student WHERE sid < 200000 ORDER BY id DESC LIMIT 10;// 上一页

跳转到指定页数

SELECT * FROM student WHERE sid IN(SELECT sid FROM (SELECT e.sid FROM (SELECT sid FROM student WHERE sid > 上一次记录的页数 LIMIT (目标页数-记录页数)*每页个数 ) AS e  LIMIT 每页个数) as t);

SELECT * FROM student WHERE sid IN(SELECT sid FROM (SELECT e.sid FROM (SELECT sid FROM student WHERE sid > 5000 LIMIT 30) AS e  LIMIT 10) as t);
posted @ 2019-11-30 10:42  长江尾  阅读(173)  评论(0编辑  收藏  举报