韩老师Java第22章课程笔记

本文介绍了MySQL的安装和配置,包括字符集与校对规则。详细讲解了数据库的创建、备份与恢复,以及数据表的管理。讨论了各种数据类型,如数值、字符串、日期等,并涉及CRUD操作的细节。此外,还涵盖了函数的使用、存储引擎的选择、事务处理和视图的应用,以及用户授权与权限管理。

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

本博文源于韩顺平老师java学习,包括mysql安装和配置,数据库、表、mysql数据类型、cruc、函数、内连接、外连接、约束索引事务等。内容笔记算是完整

1.MySQL安装和配置

2. 数据库

在这里插入图片描述

2.1 SQL语句分类

  • DDL;数据定义语句
  • DML:数据操作语句
  • DQL:数据查询语句
  • DCL:数据控制语句

2.2 创建数据库

  1. CHARACTER SET:指定数据库采用的字符集,如果不指定字符集,默认utf-8,
  2. COLLATE:指定数据库字符集的1校对规则(常用的utf8-bin)不区分大小写1,utf8-general_ci不区分大小写注意默认是utf8_general_ci

2.3 备份恢复数据库

  1. 备份数据库
    mysqldump -u 用户名 -p -B 数据库1 数据库2 > 文件名.sql
  2. 恢复数据库

Source 文件名.sql

3. 表

4.Mysql数据类型

4.1 数值型基本使用

  1. FLOAT/DOUBLE 单精度与双精度
  2. DECIMAL[M,D] 可以支持更加精确的小数位。M是小数位数(精度)的总数,D是小数点,后面的位数。如果d是0,则值没有小数点或分数部分,M最大65,d最大是30,如果D被省略,默认是0,如果M被省略,默认是10
use hsp_db01;
create table t06(num1 float,num2 double,num3 decimal(30,20));
insert into t06 values(88.12345678912345,88.12345678913245,88.12345678912345);
select * from t06;

在这里插入图片描述

4.2 字符串基本使用

char(size):固定长度字符串,最大255字符
varchar(size)可变长度字符串,最大65532字节(utf8编码最大21844字符 1-3个字节记录大小)

4.3 字符串使用细节

4.3.1 细节1

char(4) 这个4表示字符数(最大255),不是字节数,不管是中文还是字母都是放四个,按字符计算
varchar(4)这个4表示字符数,不管是字母还是中文都以定义好的表的编码来存放数据。
不管是中文还是英文字母,都是最多存放4个,是按照字符来存放的

4.3.2 细节2

char(4)是定长(固定1的大小),就是说,即使你,插入“aa”,也会占用分配的4个字符的空间
varchar(4)是变长的大小,就是说,如果你插入了"aa",实际占用空间大小并不是4个字符,而是按照实际占用空间来分配

4.3.3 细节3

如果数据是定长,推荐使用cha,比如md5的密码,邮编,手机号,身份证号码等
如果一个字段的长度是不确定,我们使用varchar,比如留言、文章

4.3.4 细节4

在存放文本时,也可以使用Text数据类型,可以将Text列视为VARCHAR列,注意Text不能有默认值,大小0-2^16字节,如果希望存放更多1字符,可以选择MEDIUMTEXT 0-2的24 或者LONGTEXT 0-2的32

4.4 日期类型基本使用

日期类型基本使用

  1. date
  2. datetime
  3. timestamp

日期类型细节说明

4.5 修改表

添加列

  • alter table tablename add column datatype

修改列

  • alter table tablename modify column datatype

删除列

  • alter table tablename dtop column

5.CRUC

5.1 插入表细节

  • 插入的数据应与字段的数据类型相同
  • 数据的长度应在列1的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中
  • 在values中列出的数据位置必须与被加入的列的排列位置相对应
  • 字符和日期类型数据应包含在单引号中
  • 列可以插入空值,前提是该字段允许为空
  • insert into tab_name(列名…) values (),(),() 形式添加多条记录
  • 如果是给表中的所有字段添加数据,可以不写前面的字段名称
  • 默认值的使用,当不给某个字段值时,如果有默认值就会添加默认值,否则报错,如果我们希望指定某个列的默认值,可以在创建表时指定

5.2 更新语句细节

  • UPDATE语法可以用新值更新原有表行中的各列
  • SET子句指示要修改哪些列和要给予哪些值
  • where子句指定应更新哪些行,如没有where子句,则更新所有的行记录
  • 如果要修改多个字段,可以通过 set 字段1=值1,字段2=值2

5.3 delete语句细节

  • 如果不使用where子句,将删除表中所有数据
  • DELETE语句不能删除某一列的值(可使用update设为null或者’')
  • 使用delete语句仅仅删除记录,不删除表本身,如要删除表,使用drop table ,drop table 表名.

5.4 select语句

5.4.1 使用order by子句排序查询结果

select column1 from table order by column
  • order by指定排序的列,排序的列既可以是表中的列名1,也可以是select语句后1指定的列名
  • asc升序(默认),desc 降序
  • order by 子句应位于select语句的结尾.

6. 函数

6.1 字符串相关函数

函数含义
charset(str)返回字串字符集
concat(string2 [,…])连接字串
INSTR(string,substring)返回substring在string中出现的位置,没有返回0
UCASE(string2)转换成大写
LCASE(string2)转换成小写
LEFT(string2,length)从string2中的左边起取length个字符
LENGTH(string)string长度
REPLACE(str,search_str,replace_str)从str中用replace_str替换search_str
STRCMP(string1,string2)逐字符比较两字串大小
SUBSTRING(str,position[,length])从str的position开始,取length长度个字符
LTRIM(string2) RTRIM(string2) trim去除前端空格或后端空格

6.2 数学相关函数

函数名含义
abs(num)绝对值
bin(decimal_number)十进制转二进制
ceukubg(number)向上取整,得到比num2大的最小整数
CONV(number2,from_base,to_base)进制转换
FLOOR(number)向下取整,得到比num2小的最大整数
format(number,decimal_places)保留小数位数
hex(decimalNumber)转十六进制
LEAST(number,number2)求最小值
MOD(numerator,denominator)求余
rand(seed)rand[0到1之间

6.3 时间日期相关函数

函数名含义
CURRENT_date()当前日期
CURRENT_TIME()当前时间
current_timestamp()当前时间戳
date(datetime)返回datetime的日期部分
date_add(date,interval d_value d_type)在data2中加上日期或时间
date_sub(date2,interval d_value d_type)在data2上减去一个时间
datediff(date1,date2)两个日期差(结果是天)
timediff(date1,date2)两个时间差(多少小时1多少分钟多少秒)
now()当前时间
yearmonth

6.4 加密和系统函数

函数名含义
user()查询用户
database()数据库名称
md5(str)为字符串算出一个md5 32的字符串
password(str)从原文密码str计算并返回密码字符串。

6.5 mysql语句加强

  • 按雇员的id号升序取出,每页显示3条记录,请分别显示第1页,第2页,第3页。
  • 基本语法: select … limit start,rows 表示从start+1 行开始取,取出rows行,start从0开始计算
  • 公式: select * from emp order by empno limit 每页显示记录数* (第几页-1) ,每页显示记录数.

7. 内连接

8. 外连接

外连接就是没有记录显示为空用的

9.约束

9.1 check

  • 用于强制行数据必须满足的条件,假定在sal列上定义了check的约束,并要求sal列值在1000-2000之间如果不再1000-2000之间就会提示出错。

9.2 自增长

  • 一般来说自增长是和primary key配合使用的
  • 自增长也可以单独使用(但是需要配合一个unique)
  • 自增长修饰的字段为整数型的
  • 自增长默认从1开始,你也可以通过如下命令修改alter

10.索引

10.1 索引类型

  • 主键索引,主键自动为主索引
  • 唯一索引
  • 普通索引
  • 全文索引

10.2 索引细节

  1. 较频繁的作为查询条件字段应该创建索引
  2. 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
  3. 更新非常频繁的字段不适合创建索引
  4. 不会出现在where子句中字段不该创建索引

11.事务

事务用于保证数据一致性,它由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败,如:转账。

  • start transaction --开始一个事务
  • savepoint 保存点名,设置保存点
  • rollback to 保存点名,回退事务
  • rollback 回退全部事务
  • commit 提交事务,所有操作生效,不能回退

11.1 事务管理

11.1.1 回退事务与提交事务

  • 在介绍回退事务前,先介绍一个保存点,保存点是事物中的点。用于取消部分事务,当结束事务时,会自动删除该事务所定义的所有保存点,当执行回退事务时,通过指定保存点可以回退到指定的点
  • 使用commit语句可以提交事务,当执行了commit语句子后,会确认事务的变化,结束事务,删除保存点,释放锁,数据生效。当使用commit语句结束事务子后,其他会话将可以查看到事务变化1后的新数据

11.1.2 事务细节

  1. 如果不开始事务,默认情况下,dml操作是自动提交的,不能回滚
  2. 如果开始一个事务,你没有创建保存点,你可以执行rollback,默认就是回退到你事务开始的状态。
  3. 你也可以在这个事务中,创建多个保存点.
  4. 你可以在事务没有提交前,选择回退到哪个保存点。
  5. mysql的事务机制需要innodb的存储引擎还可以使用myisam不好使
  6. 开始一个事务start transaction,set autocommit=off

11.2 savepoint

11.3 rollback

11.4 commit

11.5 隔离级别

11.5.1 简要介绍

  • 脏读:当一个事务读取另一个事务尚未提交的修改时,产生脏读。
  • 不可重复读:同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生不可重复读。
  • 幻读:同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时产生幻读。

11.5.2 隔离级别种类

隔离级别脏读不可重复读幻读加锁读
读未提交VVV不加锁
读已提交xVV不加锁
可重复读xxx不加锁
可串行化xxx加锁

11.5.3 设置查看隔离级别

  1. 查看当前会话隔离级别
 select @@tx_isolation;
  1. 查看系统当前隔离级别
  select @@global.tx_isolation;
  1. 设置当前会话隔离级别
 set session transaction isolation level repeatable read;
  1. 设置当前隔离级别
set global transaction isolation level repeatable read;
  1. mysql默认事务隔离级别是repeatble read,一般情况下,没有特殊要求,没有必要修改,因为级别可以满足1绝大部分项目需求

11.5.4 全局修改隔离级别

在my.ini配置文件,最后加上

transaction-isolation = REPEATABLE-READ

11.6 ACID

  • 原子性:原子性是指事务是一个不可分割1的工作单位,事务中的操作要么都发生,要么都不发生。
  • 一致性;事务必须使数据库从一个一致性状态转换到另外一个一致性状态。
  • 隔离性;事务的隔离性是多个用户并访问数据库时i,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
  • 持久性;持久性是指一个事务一旦被提交,它对数据库中1数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其他有任何1影响。

12. 表类型和存储引擎

12.1 基本介绍

  1. MySQL的表类型由存储引擎决定,主要包括MYISAM、innoDB、Memory等
  2. MySQL数据表主要支持六种类型,分别是CSV、Memory、ARCHIVE、MRG_MYISAM、MYISAM、InnoBDB
  3. 这六种又分为两类,一类是“事务安全型”,比如innoDB;其余都属于第二类,称为非事务安全型

12.2 三种存储引擎介绍

  1. MyISAM不支持事务,也不支持外键,但其访问速度快,对事务完整性没有要求
  2. InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是比起MyISAM存储引擎,InnodB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
  3. MEMORY存储引擎使用存在内存中的内容来创建表。每个MEMORY表只实际对应一个磁盘文件。MEMORY类型的表访问非常得快,因为它的数据是放在内存中并且默认使用HASH索引。但是一旦MySQL服务关闭,表中数据就会丢失掉,表的结构还在。

12.3 修改存储引擎

alter table 表名 engine = innodb;

13.视图

13.1 视图应用场景

不同人对数据表有不同的权限。

13.2 视图细节

  1. 创建视图后,到数据库去看,对应视图只有一个视图结构文件
  2. 视图的数据变化会影响到基表,基表1的数据变化也会影响到视图
  3. 视图可以再使用视图。数据仍然来自视图

13.3 视图的基本使用

  1. create view 视图名 as select 语句
  2. alter view 视图名 as select 语句
  3. show create view 视图名
  4. drop view 视图名1,视图名2

13.4 视图最佳实践

  1. 安全。一些数据表有着重要的信息。有些字段是保密的,不能让用户直接看到。这时就可以创建一个视图,在这张视图中只保留一部分字段。这样,用户就可以查询自己需要的字段,不能查看保密的字段。
  2. 性能。关系数据库的数据常常会分表存储,使用外键建立这些表之间关系。这时,数据库查询通常会用到的连接。这样做不但麻烦,效率相对也比较低,如果建立一个视图1,将相关的表和字段组合在一起,就可以避免使用join查询数据。
  3. 灵活。如果系统中有一张旧的表,这张表由于1设计的问题1,即将被废弃。然而,很多应用1都是基于这张表,不易修改。这是就可以建立一张视图,视图中的数据直接映射到新建的表。这样,就可少做很多1改动,也达到了升级数据表的目的。

13.2 视图的总结

  1. 视图是根据基表来创建的,视图是虚拟的表
  2. 视图也有列,数据来自基表
  3. 通过视图可以修改基表的数据
  4. 基表的改变,也会影响到视图的数据。

14 mysql用户

14.1 授权用户

grant select on ....
grant select,delete,create on...
grant all on...

特别说明

*.* 代表 本系统 中的所有数据库的所有对象(,视图,存储过程).*:表示某个数据库中的所有数据对象(表,视图,存储过程等)

3.identified by 可以省略,也可以写出

  • 如果用户存在,就是修改用户密码
  • 如果该用户不存在,就是创建用户

14.2 回收用户授权

revoke 权限列表 on.对象名 from 用户名@登录位置

14.3 权限生效指令

如果权限没有生效,可以执行下面指令:

FLUSH PRIVILEGES;

14.4 细节说明

  1. 在创建用户的时候,如果不指定Host,则为%,%表示所有IP都有连接权限create user xxx;
  2. 你也可以这样指定 create user 'xxx'@'192.168.1.%' 表示xxx用户在192.168.1.*的ip可以登陆mysql
  3. 在删除用户的时候,如果host不是%,需要明确指定’用户’@‘host值’
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值