一.原理
一.原理![](https://i-blog.csdnimg.cn/blog_migrate/a2925886fc94b00765e1a49b6ce467d0.png)
1.mysql逻辑架构
mysql 逻辑架构共三层
最上层的为客户端层(不是mysql独有的)
中间层包含mysql的核心服务 包括查询解析,分析,优化,缓存,内置函数,且所有的跨存储引擎的功能也在这一层实现
最下层为存储引擎,负责mysql中的数据存储和提取
2.mysql查询过程
注意事项:
客户端/服务器通信协议是“半双工”的,不可同时向对方发送数据
二.其他
DB :database
DBMS: batabase management system
分为两类:基于共享文件系统的DBMS(access)
基于客户机------服务器的DBMS
SQL: 结构化查询语言
字段 即为列
表中的数据是按行存储的
mysql常见命令
show databases
use+库名----打开库-----database changed
show tables----打开表
show tables from +库名
select database()
create table 表名(列名 列类型, 列名 列类型 ) -----创建表 -----指定列
desc +表名-----查看表的结构
select * from +表名 where +地址
insert into +表名+(内容)values(‘ ’ )-----在表中插入内容
update +表名 set +内容---修改表中内容
delete from +表名 +where +地址-----删除表中内容
查看Mysql版本: select version
mysql--version(不是mysql命令)
DQL语言(查询)
基础查询
语法: select +查询列表 from + 表名;
(查询列表可以是:表中的字段,常量值,表达式,函数)
查询的结果是一个虚拟的表格
查询表中的单个字段:select +字段名 from + 表名 ;
查询表中的多个字段:select +字段名1,字段名2........from +表名
查询表中的所有字段:select +所有字段名+from+表名
select * from +表名(*代表所有字段)
查询常量值: select +常量值;(字符常量加'')
查询表达式: select+表达式;
查询函数:select version();
起别名:法一:使用AS
select 表达式 AS 结果;
selectl last_name AS 姓,first_name AS 名 from +表名;
法二:使用空格
selectl last_name +空格 姓,first_name +空格 名 from +表名;
去重: select distinct +列名from+表名
+号的作用: 运算符 select last_name +first_name AS 姓名 from +表名
select 100+90; 俩个操作数都为数值型,则做加法运算
select'123'+90 其中一方为字符,试图将字符型数值转换成数值型
select 'john'+90 如果转换成功,则继续做加法运算
如果转换失败,则将字符型数值转换成0
select null+10 只要其中一方为Null,则结果肯定为null
连接:concat ( 列表名 )
判断null:ifnull(表达式1,表达式2):null 参与的运算,计算结果都是null
表达式1:那个字段需要判断是否为null
表达式2:如果该字段为null后的替换值
isnull(参数):判断某字段或表达式是否为null,如果是,返回1;否则返回0
条件查询
select +查询列表 +from+表名+where +筛选条件
分类: 按条件表达式筛选: 条件运算符:> < =!= >= <=
按逻辑表达式筛选: 逻辑运算符:&& ||
模糊查询
like :select *from 表名 where 字段名 like '通配符字符串'
通配符字符串:含有通配符的字符串
通配符有两个:-- %:表示 0 个或多个字符(任意个字符) -- _: 表示一个字符
in :判断某字段的值是否属于in列表中的某一项
is null /is no null : =或<>不能判断null 的值
范围查询
between 值1 and 值2 表示从值1 到值2 范围,包头又包尾
分组查询
select 分组函数,列 from 表 where 筛选条件 group by 分组的列表 order by 子句
分页查询
select 查询列表 from 表 on 连接条件 where 筛选条件 group by 分组字段 having 分组后的筛选 order by 排序的字段 limit
排序查询
select 查询列表 from 表名 order by 排序列表【asc|desc】
asc升序 desc 降序
order by子句中支持单个字段、多个字段、表达式、函数、别名
联合查询
查询语句1 union 查询语句2
DML语言(增删改)
insert :插入
insert into 表名 values (数据)
update: 修改
update 表名 set 字段名=新值,列名2=新值,.....
delete:删除
delete from 表名[where 条件]
select;选择
DDL语言
create :创建数据库
retrieve:查询数据库
update:修改
delete:删除
DCL语言(数据控制语言)
创建用户: creat user '用户名'@主机名 BY ’密码';
授权用户: grant 权限1,权限2.....on 数据库.表名 to ‘用户名’ @'z主机名‘;
撤销授权:revoke 权限1,权限2......on 数据库名.表名 to '用户名'@’主机名‘;
查看权限: show grants for ‘用户名’@‘主机名’;
删除用户:drop user '用户名' @'主机名';
修改管理员密码: mysqladmin-uroot-p password(需要在未登录MYSQL的情况下操作,这是在命令行中操作)
修改普通用户密码:set password for '用户名'@'主机名'=password('新密码')
Mysql的语法规范
1.不区分大小写,但建议关键字大写,表名 列名小写
2.每条命令最好用分号结尾
3.每条命令根据需要,可以进行缩进或换行
4.注释
单行注释:#注释文字
单行注释:-- 注释文字
多行注释:/* 注释文字 */