• day21_mysql


    今日内容

    零、 复习昨日

    第一阶段: Java基础知识(会编程,懂编程)

    第二阶段: Web开发(前端,后端,数据库)

    一、MySQL

    一、引言


    javaweb开发

    二、数据库


    2.1 概念

    ​ 数据库是“按照数据结构来组织、存储和管理数据的仓库。是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。

    2.2 数据库的分类

    • 网状结构数据库:美国通用电气公司IDS(Integrated Data Store),以节点形式存储和访问。
    • 层次结构数据库:IBM公司IMS(Information Management System)定向有序的树状结构实现存储和访问。
    • 关系结构数据库:Oracle、DB2、MySQL、SQL Server,MariaDB以表格(Table)存储,多表间建立关联关系,通过分类、合并、连接、选取等运算实现访问。
    • 非关系型数据库:ElastecSearch、MongoDB、Redis,多数使用哈希表,表中以键值(key-value)的方式实现特定的键和一个指针指向的特定数据。

    关系型和非关系型的区别: 主要是指 表和表之间的关系

    三、数据库管理系统


    3.1 概念

    数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据。


    RDBMS 关系数据库管理系统(Relational DataBase Management System,RDBMS)

    3.2 常见数据库管理系统

    • Oracle:被认为是业界目前比较成功的关系型数据库管理系统。Oracle数据库可以运行在UNIX、Windows等主流操作系统平台,完全支持所有的工业标准,并获得最高级别的ISO标准安全性认证。
    • DB2:IBM公司的产品,DB2数据库系统采用多进程多线索体系结构,其功能足以满足大中公司的需要,并可灵活地服务于中小型电子商务解决方案。
    • SQL Server:Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点。
    • SQLLite:应用在手机端的数据库。
    • MySQL
    • MariaDB

    四、MySQL


    4.1 简介

    ​ MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS(Relational Database Management System,关系数据库管理系统) 应用软件之一。

    4.2 访问与下载

    官方网站:https://www.mysql.com/

    下载地址:https://dev.mysql.com/downloads/mysql/

    目前安装的版本: 5.7+ , 8.0+

    版本选择
    image-20230314192923095
    下载页面
    image-20230314192930024

    4.3 安装

    两种安装方案,详见安装文档

    4.4 使用

    • 启动mysql
      • 命令net start mysql
      • 任务管理器启动(ctrl+shift+esc)–服务 --mysql(mysql57)
    • 登录mysql
      • mysql -uroot -pxxxxx
    • 退出mysql
      • exit

    五、SQL语言

    ​ SQL(Structured Query Language)结构化查询语言,用于存取数据、更新、查询和管理关系数据库系统的程序设计语言。

    SQL语言有标准,ISO定制了SQL99标准

    • DDL(Data Definition Language) 数据定义语言,定义数据库,表,列等
    • DML(Data Manipulation Language) 数据操作语言,操作内部数据(增,删除,修改)
    • DQL(Data Query Language) 数据查询语言,对数据的查询
    • DCL(Data Control Language) 数据控制语言,定义数据的访问控制和安全

    六、DDL

    mysql是RDBMS: 是关系型数据库管理系统,它管理很多个数据库

    库: 一个项目一个数据库,数据库内有很多表

    表: 一个分类一个表,表内有很多列

    列:一个列代表一个特性(属性/字段)

    行:一行代表一个具体实例

    image-20230504165304438

    6.1 数据库操作

    查看MySQL中所有数据库

    mysql> SHOW DATABASES; #显示当前MySQL中包含的所有数据库
    
    • 1
    数据库名称描述
    information_schema信息数据库,其中保存着关于所有数据库的信息(元数据)。
    元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。
    mysql核心数据库,主要负责存储数据库的用户、权限设置、关键字等,
    以及需要使用的控制和管理信息,不可以删除。
    performance_schema性能优化的数据库,MySQL 5.5版本中新增的一个性能优化的引擎。
    sys系统数据库,MySQL5.7版本中新增的可以快速的了解元数据信息的系统库
    便于发现数据库的多样信息,解决性能瓶颈问题。

    创建自定义数据库[重点]

    mysql> CREATE DATABASE mydb1; #创建mydb数据库
    mysql> CREATE DATABASE mydb2 CHARACTER SET gbk; #创建数据库并设置编码格式为gbk
    mysql> CREATE DATABASE IF NOT EXISTS mydb4; #如果mydb4数据库不存在,则创建;如果存在,则不创建。
    
    • 1
    • 2
    • 3

    查看数据库创建信息

    mysql> SHOW CREATE DATABASE mydb2; #查看创建数据库时的基本信息
    
    • 1

    修改数据库

    mysql> ALTER DATABASE mydb2 CHARACTER SET gbk; #修改数据库的字符集
    
    • 1

    ps: 数据库一旦创建不能修改名字,只能修改编码格式,但是我们在安装mysql时已经确定了数据格式为UTF-8,所以不需要动!!

    删除数据库

    mysql> DROP DATABASE mydb1; #删除数据库mydb1
    
    • 1

    查看当前所使用的数据库

    mysql> select database(); #查看当前使用的数据库
    
    • 1

    使用数据库

    mysql> USE mydb1; #使用mydb1数据库
    
    • 1

    总结: 关于数据库的操作,重点记住

    • 建库 create database 库名;
    • 删库 drop database 库名;
    • 涉及的单词很重要

    6.2 数据表操作

    查询当前库下的所有表

    mysql> show tables;
    
    • 1

    创建数据表[重点]


    CREATE TABLE 表名(

    列名 数据类型(长度) [约束],

    列名 数据类型(长度) [约束],

    ​ …

    列名 数据类型 [约束] //最后一列的末尾不加逗号

    )[charset=utf8] //可根据需要指定表的字符编码集

    列名数据类型说明
    subject_idINT课程编号
    subject_nameVARCHAR(20)课程名称
    subject_hoursINT课程时长
    CREATE TABLE subject(
      subject_id int,
      subject_name varchar(20),
      subject_hours int
    );
    # 注释
    -- 注释
    -- int后长度可以不要,因为默认长度11
    -- char,varchar必须加长度
    -- varchar,var是单词variable变量的意思,即varchar是指可变长度字符串
    -- char(10),存储10个字符串,假如存储的是abc,那么所占空间还是10个,'abc       '
    -- varchar(10),假如存储的是abc,那么所占空间会改变个,'abc'
    -- 字符串取值范围0-255
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    mysql> -- 创建表
    mysql> -- 创建学生表(stu),列: id 数字类型,name 字符串类型,性别 字符型,score 浮点型 ,birthday 日期类型
    mysql> create table stu(  -- 创建表
        -> id int,  -- id是列名,int是数据类型,长度是11,默认可以不写
        -> name varchar(20), -- name是列名,varchar是可变长字符类型
        -> sex char(1), -- sex性别,char定长字符串
        -> score double(10,2),-- score 是列名,double浮点型,10是总长度,2其中小数点个数
        -> birthday date -- birthday是列名,date是日期类型,不需要长度
        -> );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    idnamesexscorebirthday
    数据类型解释长度
    int整形11,固定,可以省略
    double浮点型(x,y) 总长x位,其中包含y位小数
    char定长字符0-255,声明(10)的字符,即使字符不够,也会占用10位
    varchar可变长字符0-255,声明(10)的字符,会根据实际存储缩放
    date日期没有长度,年月日
    datatime日期时间没有长度,年月日时分秒
    timestamp时间戳没有长度,年月日时分秒

    练习

     -- 创建教师表(teacher),教师id(tid),教师名字(tname),所教科目(subject),年龄(age),工资(salary),入职时间(hiredate)
    mysql> create table teacher(
        -> tid int,
        -> tname varchar(20),
        -> subject varchar(20),
        -> age int,
        -> salary double(10,2),
        -> hiredate date
        -> );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    查看表结构

    # 查看表结构
    desc stu;
    
    • 1
    • 2

    向现有表中添加列

    #在课程表基础上添加gradeId 列
    ALTER TABLE subject ADD gradeId int;
    
    • 1
    • 2

    删除表中的列

    #删除课程表中 gradeId 列
    ALTER TABLE subject DROP gradeId;
    
    • 1
    • 2

    修改列名

    #修改课程表中 subjectHours 列为 classHours
    ALTER TABLE subject CHANGE subjectHours classHours int ;
    
    • 1
    • 2

    修改表名

    #修改课程表的subject 为 sub
    ALTER TABLE subject rename sub;
    
    • 1
    • 2

    删除学生表

    #删除学生表
    DROP TABLE subject;
    
    • 1
    • 2
    DDL语句: 增加create,查询show,更新alter,删除drop
    -- 库操作
    show databases;
    create database 名字;
    drop database 名字;
    alter database 名字 xxxx
    -- 表操作
    show tables;
    create table 名字 (列名 数据类型,列名 数据类型,...)
    alter table 名字 xxx
    drop table 名字
    
    -- 以上命令,熟悉即可
    -- 最重要的是 创建表 语句和图形化操作
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    七、客户端工具


    7.1 Navicate

    Navicat是一套快速、可靠并价格相宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设。它的设计符合数据库管理员、开发人员及中小企业的需要。Navicat 是以直觉化的图形用户界面而建的,让你可以以安全并且简单的方式创建、组织、访问并共用信息。

    7.2 SQLyog

    MySQL可能是世界上最流行的开源数据库引擎,但是使用基于文本的工具和配置文件可能很难进行管理。SQLyog提供了完整的图形界面,即使初学者也可以轻松使用MySQL的强大功能。其拥有广泛的预定义工具和查询、友好的视觉界面、类似 Excel 的查询结果编辑界面等优点。

    八、DML[重点]

    DML 数据操作语言,其实对表中的数据进行

    8.1 插入

    插入,就是向数据库表中插入数据,语法

    insert into 表名 (字段1,字段2,...) values (1,2,...);
    
    insert into 表名 values (1,2,...);
    
    • 1
    • 2
    • 3
    -- 注释
    # 注释
    /*
    * 多行注释
    */
    CREATE TABLE `stu` (
      `sid` int(11) DEFAULT NULL,
      `sname` varchar(10) DEFAULT NULL,
      `age` int(11) DEFAULT NULL,
      `score` double(5,2) DEFAULT NULL,
      `birthday` date DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    -- ================= 插入 =================
    /*
     insert into 表名 (字段1,字段2,...) values (值1,值2,...);
    注意事项:
    1) 数字直接写
    2) 字符串用单引号
    3) 日期用单引号,格式yyyy-MM-dd
    4) 可以单独向部分字段插入数据
    5) 插入的字段顺序和原表没有关系,
       但是值顺序要和插入字段顺序一致
    6) 当插入表中全部字段时,可以省略字段,直接写值
       此时字段顺序和原表一模一样
    7) 可以同时插入多行数据
    */
    -- 向表的全部字段插入数据
    insert into stu (sid,sname,age,score,birthday)
    values (1,'彩云',20,98.2,'2020-01-01');
    -- 插入部分字段
    insert into stu (sid,sname,age)
    values (2,'贝贝',20);
    -- 字段顺序和原表没关系
    insert into stu (age,sname,sid)
    values (18,'老邢',3);
    -- 给全部列插入值,省略字段
    insert into stu values (4,"骚磊",20,99.9,'2020-01-01');
    -- 同时插入多行
    insert into stu (age,sname,sid) values 
    (18,'博哥',5),
    (19,'阳哥',6),
    (20,'万哥',7),
    (21,'邱哥',8)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    8.2 更新

    语法

    update 表名 set 字段 =[, 字段2 =2, ... ] [where 字段 =];
    -- [, 字段2 = 值2, ... ] 是指,可选的,可以同时修改多个列的值
    -- [where 字段 = 值] 是指,可选的,加上是指过滤,只更新符合条件的数据
    --                            不加,就是更新全表数据, 不推荐!!
    
    • 1
    • 2
    • 3
    • 4
    /*
     update 表名 set 字段 = 值;
     update 表名 set 字段 = 值 , 字段2 = 值2 ;
     update 表名 set 字段 = 值 , 字段2 = 值2 where 字段 = 值;
     推荐使用带条件的.条件有很多 = > < >= 等等
    */
    -- 更新学生的id为2的成绩为100
    update stu set score = 100 where sid = 2;
    -- 同时更新多个字段
    update stu set score = 100, birthday = '1970-01-01' where sid = 3;
    
    -- 同时更新多条数据
    update stu set score = 100 where sid >= 5;
    -- 不加条件,更新全部数据
    -- 不推荐使用,将来工作中数据表中的数据100w以上
    update stu set score = 0;
    
    -- 字段是可以做运算
    -- 更新贝贝的年龄+2岁
    update stu set age = age + 2 where sname = '贝贝';
    update stu set age = age + 100;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    8.3 删除

    语法

    delete from 表名;  -- 删除全表数据
    delete from 表名 where 字段 =; -- 只删除符合条件的数据
    
    • 1
    • 2
    -- 删除id为8的学生数据
    delete from stu where sid = 8;
    
    delete from stu where sid >= 5;
    -- 删除全部[慎用]
    delete from stu;
    /*
     一般实际开发中,都是逻辑删除,其实是没有进行物理删除
    执行都是更新.
     在设计表时,会设计一个状态字段,例如status
      status = 1 活跃
    	status = 2 不活跃
    	status = 3 僵尸号
    	status = 1 用户 2 vip用户 3 注销用户
    */
    /*
    删除数据固然容易,但是实际生产环境中是不会真的删数据的
    设计表时,会单独多设计一个字段叫做状态字段(status)
    例如 status=1 正常数据 status=2 已删除数据
    即用户点击的删除数据,其实真正执行的是更新,将字段更新成2
    将来查询数据时,只查询状态=1
    
    这就是逻辑删除
    */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    8.4 delete和truncate的区别[面试问]

    -- 删除全部[慎用]
    delete from stu;
    -- 删除全表
    truncate table stu;
    
    • 1
    • 2
    • 3
    • 4
    deletetruncate
    语句类型DMLDDL
    原理逐条删除数据删除表结构和数据,重建表
    空间删除数据在内存中有删除后碎片很干净,没有空间碎片
    效率
    恢复可以恢复数据不能恢复
    自增不影响自增顺序影响,从1开始
    create  alter  drop  show
    insert  update  delete  select
    ------
    insert into 表名
    update 表名 set
    delete from 表名
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    vue三种mock数据进行开发
    react-router-dom V5版本 路由搭建
    【统计学习方法】学习笔记——支持向量机(上)
    java.sql.SQLException: Cannot set createTime: incompatible types
    Java核心知识体系:AOP原理和切面应用
    jquery动态生成html代码绑定事件
    ssm网络课程平台的设计与搭建
    什么样的人最适合做软件测试---喜欢找人帮忙办事的人
    ssrf漏洞--补充部分
    合并两个有序的线性表
  • 原文地址:https://blog.csdn.net/weixin_39641494/article/details/134426990