MySQL

DML:增删改表中的数据

1. 添加数据:
    * 语法:
        * insert into 表名(列名1,列名2,列名3) values(值1,值2,值3)
    * 注意:
        1. 列名和值类型要一一对应
        2. 如果表名后不定义列名,则默认给所有列添加值
        3. 除了数字类型,其他类型需要使用引号引起来,单双都可以
        
2. 删除数据
    * 语法
        * delete from 表名 [where 条件]
        * truncate table 表名 删除表中所有数据,保留结构信息
    * 注意
        1. 如果不加条件,则删除表中所有记录
        2. 如果要删除所有记录
            1. delete from 表名; 不推荐使用,有多少条记录就会执行多少次删除操作
            2. truncate table 表名; 先删除表,然后再创建一张一样的表结构 推荐使用,效率更高
3. 修改数据
    * 语法
        * update 表名 set 列名1 = 值1, 列名2 = 值2 [where 条件];
    * 注意
        1. 如果不加任何条件,则会将表中所有记录全部修改

DQL:查询表中的记录

1. 语法:
    select 
        字段列表
    from
        表名列表
    where
        条件列表 
    group by
        分组字段
    having
        分组之后的条件
    order by
        排序
    limit
        分页限定

2. 基础查询
    1. 多个字段的查询
        select 字段名1,字段名2 from 表名;
        * 注意:
            * 如果查询所有字段,则可以使用*来代替字段列表
    2. 去除重复
        * distinct
    3. 计算列
        * 一般可以使用四则运算计算一些列的值,一般只会进行数值型的计算
        * ifnull(表达式1,表达式2)
            * 表达式1:哪个字段需要判断是否为null
            * 表达式2:如果该字段为null值后的替换值
    * 起别名
        * as:as也可以省略用空格代替
3. 条件查询
    1. where子句后跟条件
    2. 运算符
        * > >= < <= <>或者!=(不等于) =(等于)
        * between...and
        * like 模糊查询
            * _: 单个任意字符
            * %: 多个任意字符
        * in(集合)
        * is null   is not null
        * and 或 &&
        * or 或 ||
        * not 或 !
4. 排序查询
    * 语法: order by 字句
        * order by 排序字段1 排序方式1, 排序字段2 排序方式2
    * 排序方式
        * ASC:升序 默认
        * DESC:降序
    * 注意:
        * 如果有多个排序条件,则当前边的条件之一样时,才会判断第二条件
5. 聚合函数:将一列数据作为一个整体,进行纵向的计算
    1. count 计算个数
        1. 一般会选择非空的列:主键
        2. count(*)
    2. max 计算最大值
    3. min 计算最小值
    4. sum 求和
    5. avg 计算平均值
    
    * 注意:聚合函数的计算,会排除null值
        解决方案:
            1. ifnull函数
    
6. 分组查询
    1. 语法:group by 分组字段
    2. 注意:
        1. 分组之后查询的字段:分组字段,聚合函数
        2. where和having的区别?
            1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
            2. where后不可以跟聚合函数,having可以进行聚合函数的判断
7. 分页查询
    1. 语法:limit 开始的索引,每页查询的条数;
    2. 公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
    
    3. 分页操作是一个"方言",即每个数据库软件实现的方式不太一样

DCL

* DBA:数据库管理员

* DCL:管理用户,授权
    1. 管理用户
        USE mysql;
                    
        -- 查询用户
        SELECT * FROM USER;
        
        -- % 表示可以在任意主机访问
        
        -- 创建用户
        CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
        CREATE USER 'moddemod'@'%' IDENTIFIED BY 'qwertyuiop';
        
        -- 删除用户
        DROP USER '用户名'@'主机名';
        
        -- 修改密码
        UPDATE USER SET PASSWORD = PASSWORD('新密码') WHERE USER = '用户名';
        UPDATE USER SET PASSWORD = PASSWORD('zhao') WHERE USER = 'moddemod';
        
        SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码'); -- 新版本只能用这种方法
        SET PASSWORD FOR 'moddemod'@'%' = PASSWORD('zxcvbn');
        
        * mysql中忘记密码怎么办?
            停止mysql服务
            net stop mysql
            使用无验证方式启动mysql服务
            mysqld --skip-grant-tables
            
            直接mysql就可进入mysql,更改密码后关掉mysqld进程,重启mysql即可用修改后的密码正常登录
            
    2. 权限管理

        -- 查询权限
        
        SHOW GRANTS FOR '用户名'@'主机名';
        
        SHOW GRANTS FOR 'root'@'localhost';
        SHOW GRANTS FOR 'moddemod'@'%';
        
        -- 授予权限
        
        GRANT 权限列表 ON 数据库名字.表名 TO '用户名'@'主机名';
        
        GRANT ALL ON *.* TO '用户名'@'主机名'; -- 给创建的用户授予像root用户的所有权限,可以操作所有数据库中的所有表 ALL代表所有权限
        
        GRANT ALL ON *.* TO 'moddemod'@'%';
        
        -- 撤销权限
        REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
        
        REVOKE ALL ON *.* FROM 'moddemod'@'%';

约束

 主键约束:primary key
    1. 注意:
        1. 含义:非空且唯一
        2. 一张表只能有一个字段为主键
        3. 主键就是表中记录的唯一标识

2. 在创建表时添加主键约束

create table stu(
    id int primary key,
    name varchar(20)
);

3. 删除主键

alter table stu drop primary key;

4. 创建完表后,添加主键

alter table stu modify id int primary key;

5. 自动增长

    1. * 概念:如果某一列是数值类型的,使用auto_increment可以完成值自动增长
    2. 在创建表时,添加主键约束,并且完成主键自增长
    
    create table stu (
        id int primary key auto_increment,
        name varchar(20)
    );
    3. 删除自动增长
    
    alter table stu modify id int;
    4. 添加自动增长
    
    alter table stu modify id int auto_increment;
    
    
外键约束:foreign key
    1. 在创建表时,可以添加外键
    
    create table 表名(
        ...
        外键列
        constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
    );
2. 删除外键

    alter table 表名 drop foreign key 外键名称;
    
3. 创建表后,添加外键

    alter table 表名 add constraint 外键名称 foreign key (外键字段名称) references 主表名称(主表列名称)
    
4. 级联操作
    1. 添加级联操作
        语法: alter table 表名 add constraint 外键名称
                foreign key (外键字段名称) references 主表名称(主表列名称) on update cascade on delete cascade;
    
    2. 分类:
        1. 级联更新: on update cascade
        2. 级联删除: on delete cascade

数据库的设计

  1. 多表之间的关系

    1. 一对一
    2. 一对多(多对一)
    3. 多对多
  2. 实现关系

    1. 一对多(多对一)
      如:部门和员工
      在多的一方建立外键,指向一的一方的主键
    2. 多对多
      如:学生和课程
      多对多关系需要借助第三张中间表,中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键
    3. 一对一
      一对一通常合为一张表就可以了
      一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键

数据库的设计泛式

数据库的备份和还原

DBA 数据库管理员

1. 命令行
    * 语法:
        备份:mysqldump -u用户名 -p密码 数据库名称 > 保存的路径
        还原:
            1. 登录
            2. 创建数据库: careate database 数据库名;
            3. 使用数据库: use 数据库名;
            4. 执行文件 source 文件路径
2. 图形化工具

多表查询

* 笛卡尔积
    * 有两个集合A,B,即区这两个集合的所有组合情况
    * 要完成多表查询,需要消除无用的数据
* 分类
    1. 内连接查询
        1. 隐式内连接: 使用where条件消除无用数据
        2. 显式内连接:
            select 字段列表 from 表名1 inner join 表名2 on 条件;
            inner是可选的
    2. 外链接查询
        1. 左外连接
            select 字段列表 from 表1 left [outer] join 表2 on 条件;
        2. 右外连接
            select 字段列表 from 表1 right [outer] join 表2 on 条件;
    3. 子查询
        * 概念: 查询中嵌套查询,称嵌套查询为子查询
        * 子查询的不同情况
            1. 子查询的结果是单行单列
                子查询可以作为条件,使用运算符去判断 > >= < <= =
            2. 子查询的结果是多行单列
                子查询可以作为条件,使用运算符in判断
            3. 子查询的结果是多行多列
                子查询可以作为一张虚拟表参与查询

事务

1. 事务的基本介绍
    1. 概念:
        * 如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败
    2. 操作:
        1. 开启事务:start transaction;
        2. 回滚: rollback;
        3. 提交:commit;
    3. MySQL数据库中的事务默认自动提交
        * 事务提交的两种方式:
            * 自动提交:
                * mysql就是自动提交的
                * 一条DML(增删改)语句会自动提交一次事务
            * 主动提交
                * Oracle诗句哭默认是手动提交的
                * 需要先开启事务,再提交
        * 修改事务的默认提交方式:
            * 查看事务的默认提交方式: select @@autocommit; 1代表自动提交,0代表手动提交
            * 修改默认提交的方式:set @@autocommit = 0;
              
2. 事务的四大特征
    1. 原子性
        是不可分割的最小操作单位,要么同时成功,要么同时失败
    2. 持久性
        如果一旦事务提交或回滚,将持久更新数据库表
    3. 隔离性
        多个事务之间,相互独立
    4. 一致性
        事务操作前后数据总量不变
3. 事务的隔离级别

函数

语句 释义 场景
limit 0,1 limit用于强制SELECT语句返回指定的记录数 初始记录行的偏移量是0而不是1,从第0条开始取一条数据 盲注
substr(str,pos,len) 将str从pos位置开始截取len长度的字符进行返回。注意这里的 pos位置是从1开始的
ascii(str) 返回ascii代码值
length(str) 返回str字符串的长度
if(a,b,c) a为条件,a为true,返回b,否则返回c,如 if(1>2,1,0) 返回0
ord(str) 返回ascii
group_concat() 将group by 产生的同一个分组中的值连接起来,返回一个字符串结果
concat() 将多个字符串连接成一个字符串
mid(str,pos,len) 截取字符串 与substr相同,从pos开始截取len个,pos从1开始
sleep() 睡眠延迟
select top number|percent column_name(s) from table_name;
top子句用于规定要返回的记录的数目。
select system_user()  查看系统用户
select current_user()  查询当前用户
select user()  查询用户
select version()  查询数据库版本
select database()  查询当前连接的数据库
select @@version_compile_os 查询当前操作系统
select @@datadir    查询读取数据库路径
select @@basedir    查询MYSQL安装路径
delete from 表名;
truncate table 表名; 清空表中的数据

查看支持的所有字符集

show character set;

MySQL_第1张图片

查看默认的字符集

show variables like '%char%';

MySQL_第2张图片

SELECT * FROM users WHERE id='$id' LIMIT 0,1

order by
用于根据指定的列对结果集进行排序
默认按照升序对记录进行排序
如果希望按照降序对记录进行排序,可以使用DESC关键字

union 联合查询
将多条查询语句的结果合并成一个结果

应用场景:
要查询的结果来自多个表,且表之间没有直接的连接关系,但查询的信息一致

特点:
要求多条查询语句的查询列数是一致的!
要求多条查询语句的查询的每一列的类型和顺序最好一致
union默认去重,如果使用union all可以包含重复项

benchmark

benchmark(count,expr)
性能测试函数
MySQL_第3张图片

加密函数

select md5()
sekect sha() 或者 select sha1()
select aes_encrypt()
select aes_decrypt()

MySQL_第4张图片MySQL_第5张图片

count(*) 将返回表格中所有存在的行的总数包括值为NULL的行
count(列名) 返回表格中除去null以外的所有行的总数

select 用法:https://blog.csdn.net/baidu_37964071/article/details/80463290

你可能感兴趣的:(笔记总结)