数据库相关

选择使用某个数据库use 数据库名;
创建数据库create database 数据库名字;
创建数据库并且指定字符编码create database 数据库名字 charset=utf8;
查看有哪些数据库show databases;
删除数据库drop database 数据库名字;
查看当前使用的是哪个数据库select database();
查看mysql数据库的版本号select version();
导入数据库表(先进到某个数据库下)source 文件路径; (路径不要出现中文)
查看某个数据库下有哪些表show tables;
查看表的结构desc 表名; //第一列都是字段名

示例:

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
27
28
29
30
31
-- 查看当前版本号
select version();

-- 查看当前

-- 查看当前有哪些数据库
show databases;

-- 创建数据库
create database school charset=utf8mb4;

-- 指定数据库
use school;

-- 查看当前使用那个数据库
select database();

-- 创建表
create table student(
id int(10) primary key comment '学号',
stu_name varchar(10) not null comment '学生姓名'
)engine=innodb default charset=utf8mb4

-- 查看当前数据库下的表
show tables;

-- 查看当前表结构
desc student;

-- 删除数据库
drop database school;

数据表相关

创建表create table 表名(
字段名 数据类型,
字段名 数据类型
)engine=innodb default charset=utf8mb4;
查看表结构desc 表名;
查看所有表show tables;
删除表drop table 表名;(drop table if exists 表名;(判断是否有该表如果有就删除没有就不删除))
查看建表语句show create table 表名;
建表时指定表的存储引擎ENGINE来指定存储引擎;CHARSET来指定这张表的字符编码方式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-- 生成数据
create database school charset=utf8mb4;
use school;

-- 创建表
create table student(
id int(10) primary key comment '学号',
stu_name varchar(10) not null comment '学生姓名'
)engine=innodb default charset=utf8mb4 ; -- 指定存储引擎
-- 查看表结构
desc student;

-- 查看该数据库所有表
show tables;
### 指定存储引擎


表数据的增删改查等相关命令

查询一个、多个、所有字段

查询一个字段(列)select 字段名 from 表名; //字段也就是列,那一列的内容
查询多个字段select 字段名1,字段名2,字段名3 from 表名; //中间用逗号隔开
查询所有字段方式1:select * from 表名;
查询所有字段方式2:select 字段名1,字段2…. from 表名;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-- 生成数据
create database school charset=utf8mb4;
use school;
create table student(
id int(10) primary key comment '学号',
stu_name varchar(10) not null comment '学生姓名'
)engine=innodb default charset=utf8mb4 ;
insert into student values(1,'张三'),(2,'王二'),(3,'王五'),(4,'张三');


-- 查询多个字段
select id from student;

-- 查询所有
select * from student;

-- 查询所有
select id as '学号' ,stu_name as '姓名' from student;

列(字段)起别名和参与数学运算

列(字段)起别名select 字段名 as 新名字 from 表名; 注意:as只作用于左边那一个字段。as可以用空格代替;起的别名有空格,要用单引号。别名是中文要用单引号括起来;新版已经不需要括起来了。
字段(列)参与数学运算例如:select 字段名*12 from 表名; //注意:只作用于那次查询,不会对源数据修改。//结论:字段可以使用数学表达式!
1
2
3
4
5
6
7
8
9
10
11
12
-- 生成数据
drop database if exists school;
create database school charset=utf8mb4;
use school;
create table student(
id int(10) primary key comment '学号',
stu_name varchar(10) not null comment '学生姓名'
)engine=innodb default charset=utf8mb4 ;
insert into student values(1,'张三'),(2,'王二'),(3,'王五'),(4,'张三');

-- 示例
select id*20 from student;

结果

条件查询和多字段排序

条件查询select 字段n from 表名 where 条件; 注意条件有: = , !=,<> , < , <= , > , >= , between…and\等同于<=and<= , is null\is not null , and , or , in , not , like
多个字段排序select 字段名 from 表名 order by 要排序的字段名 排序方式 , 要排序的字段名 排序方式; 注意:排序字段名在前,起主导,只有前面的相等的时候,才会考虑启用后面的排序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- 生成数据
drop database if exists school;
create database school charset=utf8mb4;
use school;
create table student(
id int(10) primary key comment '学号',
stu_name varchar(10) not null comment '学生姓名',
age int(10) comment '年龄'
)engine=innodb default charset=utf8mb4 ;
insert into student values(1,'张三',20),(2,'王二',21),(3,'王五',22),(4,'张三',23);


-- 多个字段排序
select * from student order by id desc,age asc;
-- between…and
select * from student where age between 20 and 22;
符号解释
=等于
!=,<>都是不等于
>,>=大于,大于等于
<,<=小于,小于等于
between…and相当于a<=and<=b(select * from student where age between 20 and 22)
is null值为null(空)
is not null值不为null(空)
and逻辑运算符,两边为true结果为true
or逻辑运算符,一边为true结果为true
in包含(select * from student where age in (20,21,22))
not取反,可以配合着用(not in, not between 1 and 2, not link ‘%1%’ ,is not null等 )
like模糊匹配(select * from student where stu_name like ‘张%’)

insert 插入数据

insert 插入数据insert into 表名(字段名1,字段名2,字段名3…) values(值1,值2,值3);注意:字段名和值要一一对应。什么是一一对应?数量要对应。数据类型要对应。//注意:除了数字,其他都要加单引号
insert 插入多条数据语法:insert into 表名(字段名1,字段名2) values(),(),(),();
1
2
3
4
5
6
7
8
9
10
11
12
13
-- 生成数据
drop database if exists school;
create database school charset=utf8mb4;
use school;
create table student(
id int(10) primary key comment '学号',
stu_name varchar(10) not null comment '学生姓名',
age int(10) comment '年龄'
)engine=innodb default charset=utf8mb4 ;

-- 插入数据
insert into student values(1,'张三',20),(2,'王二',21),(3,'王五',22),(4,'张三',23);

update修改数据

update修改数据update 表名 set 字段名1=值1,字段名2=值2,字段名3=值3… where 条件;注意:没有条件限制会导致所有数据全部更新。
1
2
3
4
5
6
7
8
9
10
11
12
13
-- 生成数据
drop database if exists school;
create database school charset=utf8mb4;
use school;
create table student(
id int(10) primary key comment '学号',
stu_name varchar(10) not null comment '学生姓名',
age int(10) comment '年龄'
)engine=innodb default charset=utf8mb4 ;
insert into student values(1,'张三',20),(2,'王二',21),(3,'王五',22),(4,'张三',23);

-- 修改数据
update student set age=20 where id = 1;

delete删除数据

delete删除数据delete from 表名 where 条件;注意:没有条件,整张表的数据会全部删除!
快速删除表中的数据truncate table 表名;
1
2
3
4
5
6
7
8
9
10
11
12
13
-- 生成数据
drop database if exists school;
create database school charset=utf8mb4;
use school;
create table student(
id int(10) primary key comment '学号',
stu_name varchar(10) not null comment '学生姓名',
age int(10) comment '年龄'
)engine=innodb default charset=utf8mb4 ;
insert into student values(1,'张三',20),(2,'王二',21),(3,'王五',22),(4,'张三',23);

-- 删除数据
delete from student where id = 1;

约束相关命令

非空约束not null
唯一性约束unique
主键约束(主键值:是当前行数据的唯一标识、是当前行数据的身份证号)primary key (简称PK)
外键约束(外键约束主要用来维护两个表之间数据的一致性。)foreign key(简称FK)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
-- 生成数据
drop database if exists school;
create database school charset=utf8mb4;
use school;
create table student(
-- 指定主键约束 给某个字段添加主键约束之后,该字段不能重复也不能为空
id int(10) primary key comment '学号',
-- 非空约束 用not null约束的字段不能为null值,必须给定具体的数据
stu_name varchar(10) not null comment '学生姓名',
-- 唯一约束 unique约束的字段,具有唯一性,不可重复,但可以为null
card varchar(18) unique comment '身份证',
age int(10) comment '年龄',
c_id int(10) primary key comment '班号',
-- 外键:foreign key(当前表字段) references 被引用的外键表(被引用的外键表的字段)
foreign key(c_id) references t_class(c_id)
)engine=innodb default charset=utf8mb4 comment '学生表';
insert into student values(1,'张三',20),(2,'王二',21),(3,'王五',22),(4,'张三',23);

create table class(
c_id int(10) primary key comment '班号',
c_name varchar(10) not null comment '班级名称'
)engine=innodb default charset=utf8mb4 comment '班级表';

注意点

  • 外键值可以为null
  • 外键字段去引用一张表的某个字段的时候,被引用的字段必须具有unique约束
  • 有了外键引用之后,表分为父表和子表
    • 班级表:父表
    • 学生表:子表
  • 创建先创建父表
  • 删除先删除子表数据
  • 插入先插入父表数据

单行处理函数相关命令

单行处理函数使用方法 也可以用在where条件里面
lower 转换成小写select lower(字段名) from 表名;
upper 转换成大写select upper(字段名) from 表名;
substr 取子串select substr(被截取的字符串 ,起始下标,截取长度) from 表名 ;//注意:起始下标从1开始。
concat 字符串拼接select concat(字段名,字段名) from 表名;
length 获取长度select length(字段名) from 表名;
format 设置千分位format(数字, ‘格式’) 例如:select ename,format(sal, ‘$999,999’) as sal from emp;
round 四舍五入ect round(字段名,0) from 表名; //可以不写字段名写数字,那么它就对这个数字进行四舍五入,而且还是借助表名的结构输出。后面是0表示保留一位小数,2表示保留两位小数,-1表示保留到十位,-2保留到百位依次后推。
rand 生成随机数select round() from 表名; //生成随机数
100以内的随机数select round(rand()*100,0);
ifnull() 将null转为具体的值。只要有null参与的数学运算,结果一定是nullifnull(数据,被当做哪个值) 如果数据为null,把这个数据当做哪个值。

多行处理函数(分组函数)相关命令

多行处理函数(分组函数)也就是说一列数据 输出一个值。
sun 求和select sun(字段) from 表名; //输出这个字段的和
max 最大值select max(字段) from 表名; //输出这个字段的最大值
min 最小值select min(字段) from 表名; //输出这个字段的最小值
avg 平均值select avg(字段) from 表名; //输出这个字段的平均值
count 计数select count(字段) from 表名; //输出这个字段的数据(也就是有多少行)的数量

分组查询等相关命令

分组查询select 字段… from 表名 group by 要分组的字段; //在一条select语句当中,如果有group by语句的话,select后面只能跟:参加分组的字段,以及分组函数。其它的一律不能跟。
联合分组查询select 字段… from 表名 group by 要分组的字段1,字段2; //两个字段联合成1个字段看。(两个字段联合分组)
having 分组后再过滤使用having可以对分完组之后的数据进一步过滤。having不能单独使用,having不能代替where,having必须和group by联合使用。优化策略:where和having,优先选择where,where实在完成不了了,再选择having。having 是跟 group by后面用的,可以用分组函数。where后面可不能用。例如:select deptno,avg(sal) from emp group by deptno having avg(sal) > 2500;
distinct去重distinct只能出现在所有字段的最前方distinct出现在job,deptno两个字段之前,表示两个字段联合起来去重。例如:select distinct job from emp;select distinct job,deptno from emp;错误写法: select ename,distinct job from emp; distinct只能出现在所有字段的最前方

连接查询,多表联查等相关命令

连接查询 内连接select e.ename,d.dname from emp e join dept d on e.deptno = d.deptno; //join连接的意思 ,on是连接条件
连接查询 外连接select e.ename,d.dname from dept d left join emp e on e.deptno = d.deptno; //left 是join左边的表是主表。right代表什么:表示将join关键字右边的这张表看成主表,主要是为了将这张表的数据全部查询出来,捎带着关联查询左边的表。在外连接当中,两张表连接,产生了主次关系。
多表联查语法:select … from a join b on a和b的连接条件 join c on a和c的连接条件 right join d on a和d的连接条件;//一条SQL中内连接和外连接可以混合。都可以出现!
union合并查询结果集例如:select ename,job from emp where job = ‘MANAGER’ union select ename,job from emp where job = ‘SALESMAN’; //要求:结果集合并时列和列的数据类型也要一致。
limit取出部分数据完整用法:limit startIndex, length; // startIndex是起始下标,length是长度。起始下标从0开始。缺省用法:limit 5; 这是取前5。例如:select ename,sal from emp order by sal desc limit 2, 3;
通用分页查询公式limit (pageNo-1)*pageSize , pageSize //pagNo是第多少页 pageSize是每行显示多少条数据

事务相关的命令

关闭自动提交事务start transaction
提交事务commit
事务回滚rollback
查看隔离级别SELECT @@tx_isolation //注意:新版mysql 应该换语句了
修改隔离级别set global transaction isolation level 级别名;

索引创建与删除

索引的创建例:create index emp_ename_index on emp(ename);// 给emp表的ename字段添加索引,起名:emp_ename_index
索引的删除例:drop index emp_ename_index on emp;//将emp表上的emp_ename_index索引对象删除。
查看一个SQL语句是否使用了索引进行检索explain select * from emp where ename = ‘KING’;//在sql语句前面添加explain

视图对象的创建与删除

创建视图对象create view 视图对象的名字 as select * from 表名;
删除视图对象drop view 视图对象的名字;