mysql学习笔记一
概述
连接
客户端连接:mysql [-h 127.0.0.1] [-P 3306] -u root -p+密码
SQL通用语法
1.sql语句可以单行或多行书写,以分号结尾
2.sql语句可以使用空格/缩进来增强语句的可读性
3.MYSQL数据库的SQL语句不区分大小写,关键字建议使用大写
4.注释:
单行#注释内容
多行/*注释内容*/
分类:
数据定义语言DDL:定义数据库对象(数据库、表、字段)
数据操纵语言DML:对数据库表中的数据进行增删改
数据查询语言DQL:查询数据库中表的记录
数据控制语言DCL:创建数据库用户,控制数据库的访问权限
DDL
DDL-数据库操作
查询所有数据库:show databases;
查询当前数据库:select database();
创建数据库:
create database [if not exists/*不存在则创建,存在则不做任何操作*/] 数据库名 [default charset 字符集/*指定utf8、utf8mb4或其他*/] [collate 排序规则];
删除数据库:
drop database [if exists] 数据库名;
使用数据库:use 数据库名;
DDL-表操作
查询当前数据库所有表:show tables;
创建表
create table 表名(
字段一 字段类型[comment 字段一注释],
字段二 字段类型[comment 字段二注释],
字段三 字段类型[comment 字段三注释],
字段四 字段类型[comment 字段四注释],
字段五 字段类型[comment 字段五注释]
)[comment 表注释];
查询表结构:desc 表名;
添加字段:
alter table 表名 add 字段名 类型(长度)[comment 注释][约束];
修改字段数据类型:alter table 表名 modify 字段名 新数据类型(长度);
修改字段名和数据类型:alter table 表名 change 旧字段名 新字段名 新类型(长度)[comment 注释][约束];
删除字段:alter table 表名 drop 字段名;
修改表名:alter table 旧表名 rename to 新表名;
删除表:
drop table [if exists] 表名;
truncate table 表名;#删除数据再创建新表
数值类型
DML
增加数据insert
1.给指定的字段添加数据:
insert into 表名(字段1,字段2,....)value(值1,值2,....);
2.给全部字段添加数据:
insert into 表名 value(值1,值2,....);
3.批量添加数据:
insert into 表名(字段1,字段2,....)value(值1,值2,....),(值1,值2,....),(值1,值2,....);
insert into 表名value(值1,值2,....),(值1,值2,....),(值1,值2,....);
插入的字符串和日期数据应该包含在引号内
修改数据update
update 表名 set 字段名1=值1,字段名2=值2,....[where 条件];
修改语句的条件可以没有,代表修改整张表的所有数据
删除数据delete
delete from 表名[where 条件]
没有where会删除整张表
delete语句不能删除某一字段的值(可以使用update,将某一字段置为null即可)
DQL
select 字段名 from 表名 where 条件 group by 分组 having 分组后的条件列表 order by 排序字段列表 limit 分页参数
简单查询
select 字段1,字段2....from 表名;
select * from 表名;
设置别名:select 字段1[as 别名1],字段2[as 别名2]....from 表名;
去重:select distinct 字段 from 表名;
条件查询
select 字段列表 from 表名 where 条件列表;
> 大于
>= 大于等于
< 小于
<= 小于等于
= 等于
<>或!= 不等于
between....and... 在....范围之间(包含最小值也包含最大值)
in(...) 在in之后的列表中的值,多选一
like 占位符 模糊匹配(_匹配单个字符,%匹配任意字符)
is null 是null#注意null的比较用is 或者 is not null
and 或者 && 并且
or 或者 || 或者
not 或 ! 非
分组查询
聚合函数
count 统计数量 #统计数量用count(*)
max 最大值
min 最小值
avg 平均值
sum 求和
select 聚合函数(字段列表) from 表名;
null不参与聚合函数计算
分组查询
select 字段列表 from 表名 [where 条件] group by 分组字段名[having 分组后的过滤条件];
where对分组之前的数据进行过滤,不满足where条件,不参与分组;having 是对分组之后的结果进行过滤
where不能对聚合函数进行判断,having可以
where>聚合函数>having
分组之后查询字段一般为聚合函数和分组字段,查询其他字段无意义
排序查询
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;
支持多字段排序,第一个字段相同则按照第二个字段进行排序
排序方式
asc 升序(默认)
desc 降序
分页查询
select 字段列表 from 表名 limit 起始索引,查询记录数;
注意:
起始索引从0开始,起始索引=(页码-1)*每页记录数
分页查询是数据库的方言,不同数据库有不同的实现
如果查询的是第一页数据,起始索引可以省略
DQL语句的执行顺序(区别与编写顺序)
编写顺序:select 字段列表 from 表名列表 where 条件列表 group by 分组字段列表 having 分组后条件列表 order by 排序字段列表 limit 分页参数
执行顺序:
1.from 2.where 3.group by 4.select 5.order by 6.limit
DCL
DCL用来管理数据库用户,控制数据库的访问权限
DCL-用户管理
1.查询用户
use mysql;
select * from user;
2.创建用户
create user '用户名'@'主机名' identified by '密码';
3.修改用户密码
alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';
4.删除用户
drop user '用户名'@'主机名';
DCL-权限控制
all,all privileges 所有权限
select 查询数据权限
insert 插入数据权限
update 修改数据权限
delete 删除数据权限
alter 修改表权限
drop 删除数据库/表/视图权限
create 创建数据库/表 权限
1.查询权限
show grant for '用户名'@'主机名';
2.授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
3.撤销权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';