MySQL和SQL的增删查改

1. 数据库

  1. 概念
    • DataBase(简称DB
    • 用于存储和管理数据的仓库
  2. 特点
    • 持久化存储数据的文件系统
    • 方便存储和管理数据
    • 使用了统一的方式操作数据库:SQL
  3. 常见的数据库软件
    • MySQL
    • Oracle
    • SQL Server
    • DB2

2. MySQL

  1. 安装
  2. 卸载
    1. 在MySQL的安装目录下找到my.ini文件
    2. 打开此文件,复制其中的datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"(为第步做准备)
    3. 在应用程序中卸载MySQL
    4. 删除第2步中C:/ProgramData目录下的MySQL文件夹即可完全卸载
  3. 配置
    • MySQL服务启动
      1. cmd输入services.msc,打开服务窗口,然后即可启动/停止/更改启动方式(自动/手动),如下图

        image.png

      2. 以管理员方式打开cmd:

        1. 输入net start mysql:启动mysql服务
        2. 输入net stop mysql:关闭mysql服务
    • MySQL登录
      • cmd:
        1. mysql -uroot -p密码
        2. mysql -h*ip* -uroot -p密码
        3. mysql --host=*ip* --user=root --password=连接目标的密码
    • MySQL退出
      • cmd:
        1. exit
        2. quit
    • MySQL目录结构
      1. 配置文件:my.ini
      2. MySQL安装目录:basedir="..."(my.ini文件中)
      3. MySQL数据目录:datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
      4. 数据库:MySQL安装目录下的data文件夹下的文件夹
      5. 表:数据库文件夹下的文件
      6. 数据:表中的数据

3. SQL

  1. 概念
    • Structured Query Language:结构化查询语言
    • 定义了操作所有的关系型数据库的规则,但是每一种具体的数据库的操作方式存在不同点
  2. SQL通用语法
    • 每一条SQL语句可以单行或多行书写,以分号结尾
    • 可以使用空格或缩进以增强代码的可读性
    • MySQL数据库的SQl语句不区分大小写,但是关键字建议用大写
    • 注释
      1. 单行注释:# 注释内容(MySQL特有)或-- 注释内容
      2. 多行注释:/* 注释内容 */
  3. SQL分类
    1. DDL(Data Definition Language):数据定义语言
      • 定义数据库对象:数据库,表,列等
      • 关键字:CREATEDROPALTER
    2. DML(Data Manipulation Language):数据操作语言
      • 对数据库中表的数据进行增删改
      • 关键字:INSERTDELETEUPDATE
    3. DQL(Data Query Language):数据查询语言
      • 对数据库中表的数据(记录)进行查询
      • 关键字:SELECTWHERE
    4. DCL(Data Control Language):数据控制语言
      • 定义数据库的访问权限,安全级别和创建用户
      • 关键字:GRANTREVOKE

1. DDL:操作数据库和表

  • CRUD
    • C:Creat(创建)
    • R:Retrieve(查询)
    • U:Update(修改)
    • D:Delete(删除)
  1. 操作数据库:CRUD
    • C
      1. 创建数据库:CREATE database 数据库名称;
      2. 先判断数据库是否存在,不存在则创建:CREATE database if not exists 数据库名称;
      3. 创建数据库,并同时指定字符集:CREATE database 数据库名称 character set 字符集;
    • R
      1. 查询所有数据库的名称:SHOW databases;
      2. 查询某个数据库的字符集,即查询某个数据库的创建语句:SHOW CREATE database 数据库名称;
    • U
      1. 修改数据库的字符集:ALTER database 数据库名称 character set 新字符集;
    • D
      1. 删除数据库:DROP database 数据库名称;
      2. 先判断数据库是否存在,存在则删除:CREATE database if exists 数据库名称;
    • 使用数据库
      1. 使用数据库:USE 数据库名称;
      2. 查询当前使用的数据库名称:SELECT database();
  2. 操作表:CRUD
    • C
      1. 语法:
        CREATE table 表名(
            列名1 数据类型1,
            列名2 数据类型2,
            ...
            列名n 数据类型n
        );
        复制代码

        注意:最后一列不需要加逗号

      2. 数据类型
        • int:整数类型
        • double(共有几位,小数点后保留几位):小数类型,
        • date:日期,只包含年月日,yyyy-MM-dd
        • datetime:日期,包含年月日时分秒,yyyy-MM-dd HH:mm:ss
        • timestamp:时间戳类型,包含年月日时分秒,yyyy-MM-dd HH:mm:ss
          • 如果不为此字段赋值或赋值为null,则默认使用当前系统时间自动赋值
        • varchar(最大字符数):字符串类型
      3. 复制表:CREATE table 表名 like 被复制的表名;
    • R
      1. 查询某个数据库中所有表的名称:SHOW tables;
      2. 查询某个表的结构:desc 表名;
    • U
      1. 修改表名:ALTER table 表名 rename to 新表名;
      2. 修改表的字符集:ALTER table 表名 character set 字符集;
      3. 添加一列:ALTER table 表名 add 列名 数据类型;
      4. 修改列名称和数据类型
        • 只修改数据类型:ALTER table 表名 modify 列名 新数据类型;
        • 修改列名和数据类型:ALTER table 表名 change 列名 新列名 新数据类型;
      5. 删除列:ALTER table 表名 DROP 列名;
    • D
      1. 删除表:DROP table 表名;
      2. 先判断表是否存在,存在则删除:DROP table if exists 表名;

2. DML:增删改表中的数据

  1. 添加数据insert into 表名(列名1,列名2,...,列名n) values(值1,值2,...,值n);
    • 列名和值需要一一对应
    • 如果表名后不定义列名,则默认为所有列添加值:insert into 表名 values(值1,值2,...,值n);
    • 除了数字类型的列,其他类型需要使用引号(单引号或双引号)包含
  2. 删除数据delete from 表名 where 条件;
    • 如果不加where 条件,则删除表中所有数据
    • 删除表中所有数据
      1. delete from 表名;不推荐使用,有n条记录就会执行n此删除操作,效率较低
      2. truncate table 表名;推荐使用,先删除表,再创建一张同样的空表,效率较高
  3. 修改数据update 表名 set 列名1=值1, 列名2=值2,...,列名n=值n where 条件;
    • 如果不加where 条件,那么会修改表中每一行的数据

3. DQL:查询表中的记录

  1. 语法
    select
        字段列表
    from
        表名列表
    where
        条件列表
    group by
        分组字段
    having
        分组后的条件列表
    order by
        排序依据
    limit
        分页限定
    复制代码
  2. 基础查询
    1. 多个字段的查询
      • 查询多个字段:select 字段1,字段2,... from 表名;
      • 查询所有字段:select * from 表名;
    2. 查询结果去重
      • 在需要去重的字段前加distinct
    3. 计算列
      • 可以使用四则运算计算一些数据类型为数值型的列的值
      • 可以使用ifnull(表达式1,表达式2)将表达式1中值为null的数据替换为表达式2
    4. 起别名
      • as,也可以省略
  3. 条件查询
    1. where子句后跟条件
    2. 运算符
      • >、>=、<、<=、=、<>(!=)
      • between...and...(包括左右边界)
      • in(集合)
      • like:模糊查询
        • 占位符
          • _:单个任意字符
          • %:多个任意字符
      • is null
      • and(&&)
      • or(||)
      • not(!)
  4. 排序查询order by 排序依据1 排序方式1, 排序依据2 排序方式2,...
    • 排序方式
      • asc:升序(默认)
      • desc:降序
    • 只有当排序依据1相同时,才会判断排序依据2
  5. 聚合函数:将一列数据作为一个整体,进行纵向的计算
    1. count(计数字段):计算个数
      • 一般选择非空的字段进行计数,如:主键
      • count(*):只要行内至少有一个字段不为空就计数
    2. max:计算最大值
    3. min:计算最小值
    4. sum:计算和
    5. avg:计算平均值
    • 聚合函数的计算不考虑null
      • 解决方案
        1. 选择值都不为null的字段进行计算
        2. 使用ifnull(表达式1,表达式2)将表达式1中值为null的数据替换为表达式2
  6. 分组查询group by 分组字段;
    1. 分组之后查询单个字段并无意义,建议分组后查询分组字段或聚合函数
    2. where与having的区别
      1. where:在分组前进行条件限定,如果不满足条件,则不进行分组
      2. having:在分组后进行条件限定,如果不满足条件,则不会被查询
      3. 因为where还未进行分组,所以where后不能使用聚合函数,having之后可以使用聚合函数
      • 示例代码:SELECT sex , AVG(math),COUNT(id) count FROM student WHERE math > 70 GROUP BY sex HAVING count > 2;
  7. 分页查询limit 开始的索引, 每页查询的条数
    1. 开始的索引 = (当前的页码 – 1)* 每页显示的条数
    2. limit是MySQL所独有的子句
  8. 多表查询
    1. 内连接查询
      1. 隐式内连接:使用where条件消除无用数据
        • select 字段列表 from 表名列表 where 条件列表
      2. 显式内连接:使用on条件消除无用数据
        • `select 字段列表 from 表名1 [inner] join 表名2 on 条件列表
      • 先写表名列表,再写条件列表,最后写字段列表 `
    2. 外连接查询
      1. 左外连接:select 字段列表 from 表名1 left [outer] join 表名2 on 条件列表
        • 查询的数据为左表所有数据以及满足条件的交集部分
      2. 右外连接:select 字段列表 from 表名1 right [outer] join 表名2 on 条件列表
        • 查询的数据为右表所有数据以及满足条件的交集部分
    3. 子查询
      1. 概念:查询中嵌套查询,称嵌套查询为子查询
      2. 分类
        1. 子查询的结果为单行单列
          • 子查询作为条件,使用运算符(>,>=,<,<=,=,!=)判断
        2. 子查询结果为多行单列
          • 子查询作为条件,使用运算符in判断
        3. 子查询结果为多行多列
          • 子查询作为一张虚拟表参与查询

4. DCL:管理用户以及权限管理

  1. 管理用户
    1. 查询用户:
      USE mysql;
      SELECT * FROM USER;
      复制代码
    2. 创建用户:CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
    3. 删除用户:DROP USER '用户名'@'主机名';
    4. 修改用户密码:
      1. UPDATE USER SET PASSWORD = PASSWORD('新密码') WHERE USER = '用户名';
      2. SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');
  2. 权限管理
    1. 查询权限:SHOW GRANTS FOR '用户名'@'主机名';
    2. 授予权限:grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
      • 授予所有权限,在任意数据库的任意表:GRANT ALL ON *.* TO '用户名'@'主机名';
    3. 撤销权限:revoke 权限列表 on 数据库名.表名 from 用户名.主机名;
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享