当前位置: 首页 > news >正文

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标准

  • 经验:通常执行对数据库的“增删改查”,简称C(Create)R(Read)U(Update)D(Delete)。
  • 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中包含的所有数据库
数据库名称描述
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数据库不存在,则创建;如果存在,则不创建。

查看数据库创建信息

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

修改数据库

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

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

删除数据库

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

查看当前所使用的数据库

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

使用数据库

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

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

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

6.2 数据表操作

查询当前库下的所有表

mysql> show tables;

创建数据表[重点]


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
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是日期类型,不需要长度-> );
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-> );

查看表结构

# 查看表结构
desc stu;

向现有表中添加列

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

删除表中的列

#删除课程表中 gradeId 列
ALTER TABLE subject DROP gradeId;
  • 注意:删除列时,每次只能删除一列

修改列名

#修改课程表中 subjectHours 列为 classHours
ALTER TABLE subject CHANGE subjectHours classHours int ;
  • 注意:修改列名时,在给定列新名称时,要指定列的类型和约束

修改表名

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

删除学生表

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

七、客户端工具


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,...);
-- 注释
# 注释
/*
* 多行注释
*/
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)

8.2 更新

语法

update 表名 set 字段 =[, 字段2 =2, ... ] [where 字段 =];
-- [, 字段2 = 值2, ... ] 是指,可选的,可以同时修改多个列的值
-- [where 字段 = 值] 是指,可选的,加上是指过滤,只更新符合条件的数据
--                            不加,就是更新全表数据, 不推荐!!
/*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;

8.3 删除

语法

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

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

-- 删除全部[慎用]
delete from stu;
-- 删除全表
truncate table stu;
deletetruncate
语句类型DMLDDL
原理逐条删除数据删除表结构和数据,重建表
空间删除数据在内存中有删除后碎片很干净,没有空间碎片
效率
恢复可以恢复数据不能恢复
自增不影响自增顺序影响,从1开始
create  alter  drop  show
insert  update  delete  select
------
insert into 表名
update 表名 set
delete from 表名

相关文章:

  • Linux内核分析(十四)--内存管理之malloc、free 实现原理
  • 深入了解HTTP与HTTPS关键差异与底层原理
  • 通过Python设置及读取PDF属性,轻松管理PDF文档
  • 阿里云国际站:应用实时监控服务
  • 使用Filebeat+Kafka+Logstash+Elasticsearch构建日志分析系统
  • spring-boot-starter-data-redis2.X连接redis7
  • 【Linux网络】1分钟使用shell脚本完成DNS主从解析服务器部署(适用于centos主机)
  • vue做的一个一点就转的转盘(音乐磁盘),点击停止时会在几秒内缓慢停止,再次点击按钮可以再次旋转,
  • 适用于WPF的设计模式
  • Redis 连接不上 WRONGPASS invalid username-password pair
  • java使用geotools导出shp文件
  • Java进阶API第二章
  • java8 : Collectors.groupingBy(分组)
  • 文件包含学习笔记总结
  • 【ceph】ceph集群删除pool报错: “EPERM: pool deletion is disabled“
  • 11111111
  • const let
  • HTTP 简介
  • laravel5.5 视图共享数据
  • Linux各目录及每个目录的详细介绍
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • OSS Web直传 (文件图片)
  • python docx文档转html页面
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • 翻译--Thinking in React
  • 分享几个不错的工具
  • 搞机器学习要哪些技能
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 微服务入门【系列视频课程】
  • 温故知新之javascript面向对象
  • 学习HTTP相关知识笔记
  • 自制字幕遮挡器
  • kubernetes资源对象--ingress
  • linux 淘宝开源监控工具tsar
  • ​一些不规范的GTID使用场景
  • (09)Hive——CTE 公共表达式
  • (2022 CVPR) Unbiased Teacher v2
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (TOJ2804)Even? Odd?
  • (ZT)薛涌:谈贫说富
  • (ZT)一个美国文科博士的YardLife
  • (二)c52学习之旅-简单了解单片机
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (学习日记)2024.01.19
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)Windows2003安全设置/维护
  • (转载)(官方)UE4--图像编程----着色器开发
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .net 发送邮件
  • .NET 命令行参数包含应用程序路径吗?
  • .NET 指南:抽象化实现的基类