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

MySql01

MySql

1 数据库 database

DBA:数据库管理人员
​
数据库中存储各种类型的数据,能够保证数据的持久化
​
为了提高数据的可读性,能够让DBA可视化进行操作各种类型的数据,从而出现了数据库
​
数据库分类:
1. 基于存储位置1.1 基于磁盘存储:使用IO,真正的保证数据的持久化 Mysql、SqlServer、Oracle、Sqlite弊端:性能低1.2 基于内存存储: 性能高 可能会丢失数据    Redis Mongodb
​
2. 基于关系划分2.1 关系型数据库: 数据库和数据库之间  表和表之间 数据和数据之间有关系存在mysql oracle  sqlserver sqlite..2.2 非关系型数据库 :NoSql     not only sql 不仅仅是sqlRedis、Mongodb
​
Mysql是基于磁盘存储的关系型数据库
实际上,Mysql就是一个软件(DBMS)

2 DBMS

DBMS:database management system  数据库管理系统
数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过DBMS访问数据库中的数据,数据库管理员也通过DBMS进行数据库的维护工作。它可以支持多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据库。大部分DBMS提供数据定义语言DDL(Data Definition Language)和数据操作语言DML(Data Manipulation Language),供用户定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作。

Mysql,Oracle,SqlServer都是一个个的DMBS,是不同厂商研发的程序

Mysql软件里面的组成

  • 很多数据库

      • 字段

      • 类型

      • 记录

      • 索引

      • 触发器

      • 存储函数

3 Mysql

Mysql是一个开源免费的DBMS,体积小,速度快,总体拥有成本低
​
安装mysql:选择server only然后一直下一步,输入密码后即可mysql的端口号是:3306

4 相关指令

配置环境变量:

C:\Program Files\MySQL\MySQL Server 8.0\bin

127.0.0.1(localhost) 代表本机

255.255.255.255 广播地址

-- 登录mysql服务器 如果连接的是本机的mysql服务器 -hip可以省略
mysql -hip -uroot -p密码
mysql -uroot -proot
​
-- 查询所有的数据库
show databases;
​
-- 选择要操作的数据库
use 数据库名称;
​
-- 查询当前正在操作的数据库
select database();
​
-- 查询指定的数据库中所有的table
show tables;
​
-- 展示指定表的结构
desc 表名;
​
-- 查询表里面的所有数据
select * from 表名;

5 SQL

--  Structured Query Language 结构化查询语言
-- 使用一系列sql语句实现库/表的创建/更新,以及对表数据的增删改查
1. DDL 数据定义语言CREATE   创建库/表DROP     删除库/表ALTER    更新表结构      TRUNCATE  清空表数据
​
2. DML 数据操作语言INSERT  新增UPDATE  修改DELETE  删除
​
3. DQL 数据查询语言SELECT  查询
​
4. DCL  数据控制语言BEGINCOMMITROLLBACK

6 DDL

6.1 操作数据库

1. 操作数据库
​
-- 创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名; -- 数据库一旦创建成功,不能修改名称
show databases;
​
-- 删除数据库
DROP DATABASE 数据库名;
drop database mydb;
​
-- 查询创建指定的数据库完整信息
SHOW CREATE DATABASE 数据库名;

6.2 操作表

数据库中表名和列名都是小写字母,多个单词用 _ 隔开

-- 创建表
CREATE TABLE [IF NOT EXISTS] 表名(列名1 数据类型 [约束],列名2 数据类型 [约束],...列名n 数据类型 [约束]
);
​
create table student(id int,name varchar(20),age tinyint,score double,birthday date,create_time datetime,update_time datetime
);
​
-- 删除表
DROP TABLE 表名;
​
-- 更新表结构
​
-- 新增列
ALTER TABLE 表名 ADD 列名 数据类型;
alter table student add student_image varchar(100);
​
-- 删除指定的列
ALTER TABLE 表名 DROP 列名
alter table student drop student_image;
​
-- 修改指定列的列名和数据类型
ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型
alter table student change score student_score int;
​
-- 修改指定列的数据类型
ALTER TABLE 表名 MODIFY 列名 数据类型
alter table student modify student_score int;
​
-- 修改表名
ALTER TABLE 表名 RENAME 新表名
alter table student rename student_info;
​
-- 清空表数据
TRUNCATE TABLE 表名;
流程:先DROP 再CREATE  性能高

一个表对应java中一个类

表里面的列就是类的属性

表中列的数据类型就是类的属性的数据类型

表里面的一行记录就是类的一个对象

7 数据类型

java中的数据类型分为基本数据类型(四类八种)和引用数据类型

7.1 整数类型

java:byte  short  int long
Mysql:
-- m:限定查询的时候列的宽度
tinyint(m): -->  byte       -128-127
tinyint(m) unsigned  --> 0-255   "年龄"
​
-- 常用的2个整数类型
int(m)  -->   java中的int/Integer   "id"
bigint(m) -->  java的long/Long   "id"  "时间的毫秒数"
​
zerofill:以0填充
int(5) zerofill :   123456   00100
​

7.2 浮点类型

java:floatdouble
​
Mysql:
-- m: 限定小数的总长度
-- n: 限定小数点之后的数字个数
​
float(m,n) -->java的float/Float
double(m,n) -->java的double/Double
decimal(m,n) -->java的BigDecimal   "常用"  单价  余额  工资

7.3 字符串类型

java:charString
MySql:
-- m:限定字符串的最大的字符个数char(m)  --> 定长的字符串  "手机号码"varchar(m) -->可变长  "常用"textlongtext
​
char(3)和varchar(3)的区别?
char(3)  'ab'  存储的内存还是3个字符的内存
varchar(3) 'ab'  就是存储的指定的字符个数的内存

7.4 日期时间类型

java:java.util.Date   年月日 时分秒java.time.LocalDate  年月日java.time.LocalTime  时分秒java.time.LocalDateTime  年月日时分秒
​
Mysql:date  ---> java.time.LocalDate    "生日"time: ---> java.time.LocalTime    "时间"datetime --->java.util.Date   java.time.LocalDateTime  "常用"timestamp--->java.util.Date   java.time.LocalDateTime

8 DML

8.1 INSERT

-- 指定表新增1行或者多行记录
​
-- 语法1:
-- 对表中所有列进行赋值(在开发中不常用)
INSERT INTO 表名 VALUES (数据1,...数据n)
insert into student values(3,'大古',20,100,'1978-01-01','2021-01-01 12:12:12',null);
​
-- 语法2:
-- 指定列新增记录(只需要对一部分列赋值)
INSERT INTO 表名(列名1,...列名n) VALUES(数据1,...数据n);
insert into student(id,name) values(6,'迪迦');
​
-- values:一次可以新增多行
INSERT INTO 表名(列名1,...列名n) VALUES(数据1,...数据n),(数据1,...数据n)...,((数据1,...数据n));
insert into student (id,name,score) values(8,'盖亚',89),(9,'德凯',97),(10,'赛罗',99);

8.2 DELETE

​
-- 语法1:
DELETE FROM 表名; -- 会删除表中所有的数据,遍历的删除每一行数据 性能低  可以回滚数据
​
-- 语法2(在一定的条件下删除):
DELETE FROM 表名  WHERE 条件1 OR/AND 条件n
delete from student where age > 40;
delete from student where id = 5;

8.3 UPDATE

-- 语法1:UPDATE 表名 SET 列名1=新数据1,...,列名n=新数据n
-- 语法2:(在满足指定条件下修改)UPDATE 表名 SET 列名1=新数据1,...,列名n=新数据n WHERE 条件1 OR/AND 条件nupdate student set age = 20,score = 99 where id = 4;

9 可视化客户端

sqlyog

navicat

10 约束

"限制"
对列的数据进行限制的。新增/修改的数据需要满足约束
1. 行级约束1.1 非空约束  NOT NULL1.2 唯一性约束 UNIQUE1.3 默认约束   DEFAULT以上3个行级约束可以在一张表中使用多次,对多个列的数据进行修饰1.4 主键约束  PRIMARY KEY在一张表中只能使用1次
2. 表级约束2.1 主键约束2.2 外键约束  FOREIGN KEY在一张表中,可以使用多次外键约束,维护多张表的关系

10.1 NOT NULL

-- 使用NOT NULL修饰的列,这列的数据就不能为null
-- NOT NULL可以在表中使用多次
​
create table test(id int not null,name VARCHAR(20) NOT NULL,age int
)
​
insert into test (id,name) values(1,'雷欧'),(2,'雷欧的弟弟')
​
-- 修改test表中的age列不能是null
alter table test modify age int NOT NULL

10.2 UNIQUE

-- 唯一性约束 列的数据要保证唯一(排除默认值NULL)
create table test(id int not null UNIQUE,name VARCHAR(20) NOT NULL,age int
)

10.3 DEFAULT

给列默认值

create table test(id int not null UNIQUE,name VARCHAR(20) UNIQUE,age int DEFAULT 18
)

10.4 PRIMARY KEY

表设计,理论上遵循设计的3大范式
第一范式: 保证列的原子性。列的不可再分原则。 "收货地址"
第二范式: 在遵循第一范式的前提下,保证行记录的唯一性。  -->主键约束
第三范式: 尽可能减少列,减少数据的冗余  

一张表里面,只能使用1次PRIMARY KEY
使用PRIMARY KEY修饰的列,称之为"主键列",要求列的数据是非空+唯一
一般都使用id来表示主键列

10.4.1 数值类型+自增
create table test(id int PRIMARY KEY auto_increment, -- 主键约束 自动递增name VARCHAR(20) UNIQUE,age int DEFAULT 18
)

10.4.2 字符串类型
create table test(id VARCHAR(100) PRIMARY KEY,name VARCHAR(20) UNIQUE,age int DEFAULT 18
)
-- 保证id的唯一性
-- java程序解决(时间戳,UUID,雪花算法)
-- mysql也可以维护  UUID_SHORT()insert into test (id,name) values(UUID_SHORT(),'雷欧'),(UUID_SHORT(),'雷欧的弟弟')
10.4.3 联合主键

就是让两个或者多个列成为主键列,使用一个主键约束

create table test(id int,name VARCHAR(20),age int,PRIMARY KEY(name,age)
)

一般用在多表关系中的中间表

11 多表设计

一张表只表示一个事物,事物和事物之间是有关系的,表和表之间也有关系

  • 一对一

  • 一对多

  • 多对多

http://www.dtcms.com/a/389374.html

相关文章:

  • 2025版基于springboot的旅游门票预定系统
  • 3. Linux 计划任务管理
  • EasyCVR在智慧城市中场景中的核心应用与实践方案
  • LeetCode 刷题【84. 柱状图中最大的矩形】
  • CPP网络编程基础知识
  • 临床AI产品化全流程研究:环境聆听、在环校验与可追溯系统的多技术融合实践(上)
  • 【k8s】web服务优雅关闭用户连接
  • 设计模式的七大原则总述
  • C/C++柔性数组
  • 从 LiveData 到 Flow:Android 状态管理的现代化演进
  • 34、模型微调技术实战 - LoRA参数高效微调全流程
  • ASP.NET Core 中基于角色的授权
  • C++ 在 Windows 下实现最基础的 WebSocket 服务端与客户端
  • 并发、分布式和实时设计方法
  • C语言第15讲
  • windows 下使用 bat 批处理运行 Chrome 无头模式刷一波访问量
  • 项目名称:基于Qt框架的跨平台天气预报应用程序​​
  • 王自如重操旧业拆箱iPhone:苹果新机发售旧机发热是惯例……
  • 鸿蒙Next Core File Kit:文件管理的高效安全之道
  • Java-128 深入浅出 MySQL MyCat 分布式数据库中间件详解:架构、功能与应用场景
  • gozero使用gRPC-gateway生成http网关
  • Go语言100个实战案例-项目实战篇:股票行情数据爬虫
  • Python开发最新 PyCharm 2025使用(附详细教程)
  • 【session基础】
  • 客户流失预警中uplift建模案例、入门学习(二)
  • SSH远程管理工具
  • 4644电源芯片的介绍和使用
  • MIPI D-PHY布线规则
  • 《深入理解Java虚拟机》第四章节读书笔记:虚拟机性能监控、故障处理工具
  • ​​[硬件电路-251]:电源相关常见的专业术语