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 多表设计
一张表只表示一个事物,事物和事物之间是有关系的,表和表之间也有关系
一对一
一对多
多对多