MySQL经典入门

这篇博客介绍了MySQL数据库的基础知识,包括数据库的概念、特点,以及MySQL的安装和使用。详细讲解了SQL的DDL、DML、DQL和DCL操作,并通过实例展示了如何创建、查询、修改和删除数据库及表。还涵盖了数据类型、约束、数据库设计、备份和还原、多表查询以及事务处理等内容,是学习MySQL的入门指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL数据库相关知识

数据库的基本概念

  1. 数据库的英文单词 : DataBase 简称 : DB

  2. 什么是数据库?

    1. 用于存储和管理数据的仓库
  3. 数据库的特点

    1. 持久化存储数据的,其实数据库就是一个文件管理系统
    2. 方便存储和管理数据
    3. 使用了统一的方式操作数据库 – SQL
  4. 常见的数据库软件

    1. MySQL : 开源免费的数据库,小型的数据库,已经被Oracle收购了,MySQL6.x版本也开始收费
    2. Oracle : 收费的大型数据库,Oracle公司的产品,Oracle收购SUN公司,收购MySQL.
    3. DB2 : IBM公司的数据库产品,收费的,常用在银行系统中
    4. SQLServer : Microsoft 公司收费的中型的数据库,C#,.net等语言常使用
    5. SyBase : 已经淡出历史舞台,提供了一个非常专业的建模工具PowerDesigner
    6. SQLLite: 嵌入式的小型数据库,应用在手机端.

MySQL数据库软件

  1. MySQL数据库安装

SQL

  1. 什么是SQL?
    概念: Structured Query Language : 结构化查询语言
    其实就是定义了操作所有关系型数据库的规则,每一种数据库操作的方式存在不一样的地方,称为方言.
  2. SQL通用语法
    1. SQL语句可以以单行或者多行书写,以分号结尾.
    2. 可使用空格和缩进来增强语句的可读性.
    3. MySQL 数据库的SQL语句不区分大小写,关键字建议使用大写.
    4. 三种注释
      1. 单行注释 : – 注释内容 或 # 注释内容
      2. 多行注释 : /* 注释内容 */
  3. SQL分类:
    1. DDL(操作数据库,表) : create , drop , alter 等
    2. DML(增删改表中的数据):insert ,delete ,update 等
    3. DQL(查询表中的数据) : select ,where
    4. DCL(授权) : grant , revoke 等

DDL : 操作数据库,表

  1. 操作数据库 : CRUD
    1. C(Create) : 创建
      1. 创建db1数据库,判断是否存在,并指定字符集为gbk/utf-8
        • create db1 if not exists character set gbk/utf-8;
    2. R(Retrieve) : 查询
      1. 查询素有数据库的名称
        • show databases;
      2. 查询某个数据库的字符集 : 查询某个数据库的创建语句
        • show create database 数据库名称.
    3. U(Update) : 修改
      1. 修改数据库的字符集 : alter 数据库 character set utf8/gbk;
    4. D(Delete) : 删除
      1.判断数据库,存在再进行删除 : drop database if exists 数据库名称
    5. 使用数据库
      1. use database 数据库名称.
  2. 操作表 : CRUD
    1. C(Create) : 创建
      1. 语法 :
        create table 表名(
        列名1 数据类型1,
        列名2 数据类型2,

        列名n 数据类型n
        )
        create table tab1 like tab2;
      2. 数据类型
        1. int : 整数类型
        2. double : 小数类型
        3. date : 日期,只包含年月日, yyyy-MM-dd
        4. datetime : 日期,包含年月日时分秒 yyyy-MM-dd HH-mm-ss
        5. timestamp: 包含年月日时分秒 yyyy-MM-dd HH-mm-ss, 如果将来不给这个字段赋值,或者赋值为null,则默认使用当前的系统时间来自动填充.
        6. varchar : 字符串类型(20)
      3. 创建表
        create table student(
        name varchar(20),
        age int,
        gender varchar(10),
        birthday timestamp,
        score double(4,1)
        );
    2. R(Retrieve) : 查询
      • 查询某个数据库中所有的表名称
        • show tables
      • 查询表结构
        • desc 表名
    3. U(Update) : 修改
      1. 修改表名
        alter table 表名 rename to 新的表名
      2. 修改表的字符集
        alter table 表名 character set 字符集名称;
      3. 添加一列
        alter table 表名 add 列名 数据类型
      4. 修改列名称 类型
        alter table 表名 change 列名 新列名 新数据类型
        alter table 表名 modify 列名 新数据类型
      5. 删除列
        alter table 表名 drop 列名
    4. D(Delete) : 删除
      1. drop table 表名
      2. drop table if exists 表名;

DML 增删改表

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

DQL : 查询表中的记录

  1. 语法 :

     select 
    		字段列表
     from 
     		表名列表 
     where
    	    条件列表 
     group by
      		 分组字段 
     having
       		分组之后的条件 
     order by
      		 排序
     limit
      		 分页限定
    
  2. 基础查询

    1. 多个字段的查询
       select 
      		name,	-- 姓名
      		age		-- 年龄
       from 
       		student; -- 学生表
      
    2. 去除重复
      	select distinct address from student;
      
    3. 计算列
      	select name, math, english, math+ ifnull(english,0) from student;
      
    4. 起别名
      select name, math, english, math+ ifnull(english,0) 总分 from student;
  3. 条件查询

    1. where子语句后跟条件
    2. 运算符
        1. > , < , <= , >= , = <>
        2. between ... and
        3. in (集合)
        4. like
        	1. 占位符 :   _: 单个占位符   % :  多个任意占位符
        5. is null
        6. and 或 &&
        7. or 或 ||
        8. not 或 !
        9. 默认 : sex char(1) default '男';
      
  4. 排序查询

    1. 语法 : order by 子句
      * order by 排序字段1,排序字段2
    2. 排序方式 :
      * ASC : 升序,默认的
      * DESC : 降序
    3. 注意 : 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件.
  5. 聚合函数 : 将一列数据作为一个整体,进行纵向的计算.

    • count : 计算个数 – select count(id) from student.
    • max ; 计算最大值
    • min : 计算最小值
    • sum : 计算和 – select sum(math) from student.
    • avg : 计算平均值
      • 注意 : 聚合函数得计算,排除null值
      • 解决方案 :
        1. 选择不包含非空的列进行计算
        2. IFNULL函数
  6. 分组查询 :

    1. 语法 : group by 分组字段 ;
      1. 示例 : select sex, avg(math) ,count(id) personNum from student where math > 75 having personNum > 2 ;
    2. 注意 :
      1. 分组之后查询的字段 : 分组字段,聚合函数
      2. where 和 having 的区别?
        1. where 在分组之前进行限定,如果不满足条件,则不参与分组,having在分组之后进行限定,如果不满足结果,则不会被查询出来.
        2. where 后边不能跟聚合函数,having可以进行聚合函数的判断.
  7. 分页查询

    1. 语法 : limit 开始的索引,每页查询的条数
    2. 公式 : 开始的索引 = (当前的页码数 - 1 ) * 每页显示的条数

约束

  1. 概念 : 对表中的数据进行限定,保证数据的正确性,有效性和完整性.
  2. 分类 :
    1. 主键约束 : primary key
      1. 注意
        1. 含义 : 非空且唯一
        2. 一张表只有一个字段为主键
        3. 主键就是表中记录的唯一标识
      2. 创建 : id varchar(10) primary key.
      3. 删除主键 : alter table drop primary key
      4. 自动增长 : auto_increment
      5. 联合主键 : primary key (uid,rid);
    2. 非空约束 : not null
      • 创建时添加约束 : name varchar(20) not null, – name列的值不能为空
      • 创建后添加约束 : alter table stu modify name varchar(20) not null, – name列的值不能为空
      • 删除约束 : alter table stu modify name varchar(20) – 修改name列的值可以为空
    3. 唯一约束 : unique
      • 添加约束: phone varchar(20) unique – 表示手机号不能重复
      • 注意 : null值在手机号码列是可以重复的.
      • 删除约束 : alter table stu drop index phone;
    4. 外键约束 : foreign key
      1. 在创建表时,可以添加外键
        • 语法
          create table 表名(

          外键列
          constraint 外键名称 foreign key (外键列名称) reference 主表名称(主表列名称)
          );
      2. 删除外键 : alter table stu foreign key 外键名称
      3. 添加外键 alter table stu add constraint stu_clas_fk foreign key (clas_id) reference class(id);
      4. 级联操作 :
        • 语法 : 添加外键时 添加级联更新和级联删除
        • alter table stu add constraint stu_clas_fk foreign key (clas_id) reference class(id) on update casecade on delete casecade;

数据库的设计

  1. 多表之间的关系
    1. 分类
      1. 一对一 :
        • 如 : 人和身份证
        • 分析 : 一个人只有一个身份证,一个身份证只能对应一个人
      2. 一对多(多对一) :
        • 如 : 部门和员工
        • 分析 : 一个部们有多个员工,一个员工只能对应一个部门
      3. 多对多
        • 如 : 学生和课程
        • 分析 : 一个学生可以选择很多门课程,一个课程也可以被很多学生选择.
    2. 实现关系 :
      1. 一对多(多对一) :
        • 如 : 部门和员工
        • 实现方式 : 在多的一方建立外键,指向一的一方的主键.
      2. 多对多
        • 如 : 学生和课程
        • 实现方式 : 多对多关系实现需要借助第三张中间表,中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键.
      3. 一对一
        • 如 : 人和身份证
        • 实现方式 : 一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键.
  2. 数据库设计的范式
    • 概念 : 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
    • 分类 :
      1. 第一范式(1NF).: 每一列都是不可分割的原子数据项
      2. 第二范式(2NF) : 在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)
        • 几个概念 :
          • 函数依赖 : A – > B , 如果通过A属性(属性组)的值,可以确定唯一B属性的值,则称B依赖于A.
            例如 : 学号 --> 姓名 (学号,课程名称) --> 分数
          • 完全函数依赖 : A–>B , 如果A是一个属性组,则B属性值确定需要A属性组中的所有属性值.
            例如:(学号,课程名称) --> 分数
          • 部分函数依赖 : 如果A是一个属性组,则B属性值确定需要A属性组中的某一个属性值.
          • 传递函数依赖 : A–>B , B–>C, A属性的值确定B属性的值,B属性的值能确定C属性的值.
            例如 : 学号 --> 系名 --> 系主任
          • 码 : 如果在一张表中,一个属性或属性组,被其它所有属性所完全依赖,则称这个属性(属性组)为该表的码.
            例如 : 表中的码为 : (学号,课程名称)
            • 主属性 : 码属性组中的所有属性
            • 非主属性 : 除过码属性组的属性
      3. 第三范式(3NF) : 在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

数据库的备份和还原

  1. 命令行 :
    • 语法 : mysqldump -u用户名 -p密码 数据库名 > 保存的路径
    • source 保存的路径.

多表查询

  1. 查询语法 :
    select
    	列名列表
    from
    	表名列表
    where ...
    
  2. 笛卡尔积 ;
    • 有两个集合A,B. 取这两个集合的所有组成情况
    • 要完成多表查询,需要消除无用的数据
  3. 多表查询的分类 :
    1. 内连接查询 :
      1. 隐式内连接 : 使用where条件消除无用的数据
        如 : 查询员工表的名称,性别,部门表的名称 
           select 
        		t1.name,		-- 员工表的姓名
        		t1.gender,		-- 员工表的性别
        		t2.name		-- 部门表的名称
        	from
        		emp t1,
        		dept t2
        	where 
        		t1.dept_id = t2.id;
        
      2. 显式内连接
        1. 语法 : select 字段列表 from 表名1 [ inner ] join 表名2 on 条件.
      3. 内连接查询注意事项:
        1. 从哪些表中查询数据
        2. 条件是什么
        3. 查询哪些字段
    2. 外连接查询 :
      1. 左外连接 :
      1. 语法 : select 字段列表 from 表1 left [ outer ] join 表2 on 条件 ;
      2. 查询的是左表所有数据以及其交集部分
      2. 右外连接 :
      1. 语法 : select 字段列表 from 表1 right [ outer ] join 表2 on 条件 ;
      2. 查询的是右表所有数据以及其交集部分
    3. 子查询 :
      • 概念 : 查询中嵌套查询,称嵌套查询为子查询
      • 如 : 查询工资最高的员工信息
        select * from emp where salary = (select max(salary) from emp);
      • 子查询不同情况
        1. 子查询的结果是单行,单列的
          • 子查询可以作为条件,使用运算符去判断. 运算符 : > < =;
        2. 子查询的结果是多行单列的 :
          • 子查询可以作为条件,使用运算符in来判断
        3. 子查询的结果是多行多列的 :
          • 子查询可以作为一张虚拟表参与查询
    4. 编写SQL思路
      1. 首先确定查询的内容在哪个表
      2. 查询的条件
      3. 需要使用哪种查询方式
      4. 编写sql

事务

  1. 事务的基本介绍
    1. 概念 :
      • 如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败
    2. 操作 :
      1. 开启事务 : start transaction;
      2. 回滚 : rollback;
      3. 提交 : commit;
    3. MySQL数据库中事务默认自动提交
      1. 自动提交 :
        • mysql就是自动提交的
        • 一条DML(增删改)语句会自动提交一次事务
      2. 手动提交
        • Oracle 数据库默认是手动提交事务
        • 需要先开启事务,再提交
      3. 修改事务的默认提交方式 :
        • 查看事务的默认提交方式 : select @@autocommit ; – 1 代表自动提交. – 0 代表手动提交
        • 修改默认提交方式 : set @@autocommit = 0 ;
  2. 事务的四大特征 :
    1. 原子性 : 是不可分割的最小操作单位,要么同时成功,要么同时失败.
    2. 持久性 : 当事务提交或回滚后,数据库会持久化保存数据
    3. 隔离性 : 多个事务之间,相互独立
    4. 一致性 : 事务操作前后,数据总量不变
  3. 事务的隔离级别 :
    • 概念 : 多个事务之间隔离的,相互独立的,但是如果多个事务操作同一批数据,则会引发一些问题.
    • 存在问题 :
      1. 脏读 : 一个事务,读取到另一个 事务中没有提交的数据
      2. 不可重复读(虚读) : 在同一个事务中,两次读取到的数据不一样
      3. 幻读 : 一个事务操作(DML)数据表中的所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改
    • 隔离级别 :
      1. read uncommitted : 读未提交
        • 产生的问题 : 脏读,不可重复读,幻读
      2. read commited : 读已提交 (Oracle默认)
        • 产生的问题 : 不可重复读,幻读
      3. repeatable read : 可重复读 (MySQL默认)
        • 产生的问题 : 幻读
      4. serializable : 串行化
        • 可以解决所有的问题
      • 注意 : 隔离级别从小到大安全性越来越高,但是效率越来越低
      • 数据库查询隔离级别 :
        • select @@tx isolation
      • 数据库设置隔离级别 :
        • set global transaction isolation level 级别字符串.

DCL

  1. DCL : 管理用户,授权
    1. 管理用户
      1. 添加用户
        • 语法 : create user ‘用户名’ @‘主机名’ identified by ‘密码’;
      2. 修改用户
        • 语法 : update user set password = passwword(‘新密码’) where user = ‘用户名’;
      3. 删除用户
        • 语法 : drop user ‘用户名’ @‘主机名’;
      4. 查询用户
    2. 权限
      1. 查询权限
        • 语法 : show grants for ‘用户名’@‘主机名’;
      2. 授予权限
        • 语法 : grant 权限列表 on 数据库名.表名 to ‘用户名’@‘主机名’;
        • 授予全部权限,全部表 : grant all on . to ‘用户名’@‘主机名’;
      3. 撤销权限
        • 语法 : revoke 权限列表 on 数据库名.表名 from ‘用户名’@‘主机名’;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值