学习MySQL的四万字 笔记总结【全面整理+详细解释】

port=3306

设置mysql的安装目录,记得切换成自己的路径

basedir=D:\mysql\mysql2\mysql-8.0.27-winx64

设置mysql数据库的数据的存放目录

datadir=D:\mysql\mysql2\mysql-8.0.27-winx64\data

允许最大连接数

max_connections=200

允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统

max_connect_errors=10

服务端使用的字符集默认为UTF8

character-set-server=utf8

创建新表时将使用的默认存储引擎

default-storage-engine=INNODB

默认使用“mysql_native_password”插件认证

default_authentication_plugin=mysql_native_password

[mysql]

设置mysql客户端默认字符集

default-character-set=utf8

[client]

设置mysql客户端连接服务端时默认使用的端口

port=3306

default-character-set=utf8

  1. 启动管理员模式下的CMD,并将路径切换至MySQL下的bin目录,然后输入mysqld -install(安装mysql,这一步就是将MySQL安装到服务中)。

如果这里安装出现下面情况:

在这里插入图片描述

安装包你卸载了服务没删除,sc query mysql查看一下,sc delete mysql删除一下服务就可以了。

  1. 在输入mysqld --initialize-insecure --user=mysql ,进行初始化数据库,初始化后,我们前面在my.ini设置的data就会出现在目录中,data中包括一些初始后的mysql数据库。

  2. 启动MySQL,net start mysql(启动mysql服务),然后用命令mysql -u root -p(注意-p后面不要加空格,因为p是代表密码,空格算是密码一部分) 进入mysql管理页面。

  3. 进入mysql,第一件事情就是修改密码:update mysql.user set authentication_string=password(‘123456’) where user=‘root’ and Host = ‘localhost’;

注意MySQL8以上的版本,没有了password字段和passwrod()函数,所以不能使用上面的语句进行修改,而是使用alter语句进行修改:alter user ‘root’@‘localhost’ identified by ‘newpassword’;

  1. 输入 flush privileges; 刷新权限。

  2. 修改 my.ini 文件删除最后一句skip-grant-tables,可以使用#注释掉。

  3. 重启mysql即可正常使用,net stop mysql , net start mysql

1.6 SQLyog使用的 注意事项


连接数据库:(这里我连接云端的,一般的都在本地就好)

在这里插入图片描述

创建数据库时:字符集和数据库排序选择方面(推荐)

在这里插入图片描述

我们可以先查看一下数据库版本:

select version() //查看数据库版本

每一个sqlyog的执行操作,本质就是对应了一个sql,可以在软件的历史记录中查看

在这里插入图片描述

创建表: school -》table(表) -》右键创建表

在这里插入图片描述

查看表格,添加数据:student -》 open table(打开表) 直接修改数据就好。

在这里插入图片描述

这里还是要注意,这些sqlyog的操作,我们都可以在History(历史)中看到。

在这里插入图片描述

1.7 连接数据库 和 一些基本命令


命令行连接:

1. mysql -uroot -p --连接数据库。

2. update mysql.user set authentication_string=password(‘123456’) where user=‘root’ and Host = ‘localhost’; – 该语法的解释如下图:

在这里插入图片描述

3. flush privileges; – 刷新权限

  • 在Mysql中,所有的语句使用 ; 结尾!

1. show databases; --查看所有的数据库。

2. mysql> use mysql(数据库名) --切换数据库。

3. show tables; – 查看数据库中所有的表。

4. describe 表名; --显示数据库中表的所有信息。

5. create database 数据库名; --创建一个数据库。

6. exit; --退出连接。

7. mysql的注释:-- (sql语言本来的注释)单行注释,在sqlyog里面可以用#号注释(#注释本意上还是 – 注释)

8. mysql多行注释:/* */ 。

  • 三种程序猿。

在这里插入图片描述

2. 操作数据库

======================================================================

总体步骤:操作数据库 > 操作数据库中的表 > 操作数据库中表的数据

mysql的关键字不区分大小写!

2.1 操作数据库


1. 创建数据库

create database [if not exists] 数据库名;

– if not exists 在这意思就是如果不存在,就创建该数据库。

注意:[ ]内部的都是可选的。

2. 删除数据库

drop database [if exists] 数据库名;

– if exists 在这意思就是如果存在,就删除该数据库。

3. 使用数据库

use 数据库名; – 切换数据库

如果定义的表明或者字段名是一个特殊的字符,我们在使用时,可以使用 ` `(tab键上面的那个符号)来修饰。如下:

在这里插入图片描述

在这里插入图片描述

4. 查看数据库

show databases; – 查看所有数据库

2.2 数据库的数据类型(列类型)


数值:

  • tingint – 十分小的数据,它只是占了1个字节。

  • smallint – 较小的数据,它占了2个字节。

  • mediumint – 中等大小的数据 ,它占了3个字节。

  • int – 标准的整数,占了4个字节。

  • big – 较大的数据 ,它占8个字节。

  • float – 浮点数,单精度,它占4个字节。

  • double – 浮点数,双精度 ,它占8个字节。

  • decimal – 字符串形式的浮点数 (金融计算的时候通常使用它)

注意:常用的需要记住的int,float,double,decimal。

字符串

  • char – 字符串固定大小的范围:0~255(Ascii码)

  • varchar – 可变长字符串范围:0~65535 (常用的String),例如:常用的变量 String保存。

  • tinytext – 微型文本 范围:2^8 - 1 ,例如:小型博客文章

  • text – 文本串 范围:2^16 - 1 。(保存大文本)

时间日期

  • date – YYYY-MM-DD 日期格式

  • time – HH:mm:ss 时间格式

  • datatime – YYYY-MM-DD HH:mm:ss ,将上面两个格式加起来,它是最常用的。

  • timestamp – 时间戳,(1970.1.1,到现在的毫秒数。)时间戳也是最常用的。

  • year – 年份表示

null

  • 没有值,未知

  • 注意,不要使用NULL进行运算。(如果用NULL进行运算,结果始终为NULL)

2.3 数据库的字段属性


Unsigned

  • 无符号的整数。

  • 声明了该列不能声明为负数。

zerofill

  • 0填充的。

  • 意思就是不足的位数,使用0来填充。

自增:(auto incr?)

  • 通常理解为自增,意思就是自动在上一条记录的基础上+1(默认)。

  • 通常用来设计唯一的主键~index,必须是整数类型。

  • 可以自定义设置主键自增的起始值和步长。

在这里插入图片描述

非空,NULL ,Not Null

  • 假设设置为 not null(非空) ,如果不给它赋值就会报错!

  • NULL, 如果不填写值,默认就是null。

默认:(default)

  • 设置默认的值。

  • 意思就是如果不指定该列的值,则会有默认的值取代。

另外几个字段:

在这里插入图片描述

2.4 创建数据库表(命令行)


创建语句格式要记住:

– 注意点,使用英文(),表的名称和字段尽量使用``括起来。

– AUTO_INCREMENT自增。

– COMMENT注释最好每行都添加。

– DEFAULT NULL意思就是默认是NULL。

– PRIMARY KEY 主键,一般一个表只有一个唯一的主键

CREATE TABLE IF NOT EXISTS student (

id INT(4) NOT NULL AUTO_INCREMENT COMMENT ‘学号’,

name VARCHAR(30) NOT NULL DEFAULT ‘匿名’ COMMENT ‘姓名’,

pwd VARCHAR(30) NOT NULL DEFAULT ‘123456’ COMMENT ‘密码’,

sex VARCHAR(2) NOT NULL DEFAULT ‘女’ COMMENT ‘性别’,

birthday DATETIME DEFAULT NULL COMMENT ‘出生日期’,

address VARCHAR(100) DEFAULT NULL COMMENT ‘家庭住址’,

email VARCHAR(50) DEFAULT NULL COMMENT ‘邮箱’,

PRIMARY KEY (id) – 可以设置在上面的id中,但是为了更明显可以直接单独定义出来。

)ENGINE=INNODB DEFAULT CHARSET=utf8

– ENGINE=INNODB DEFAULT CHARSET=utf8 是来表的类型和字符集设置

格式:

CREATE TABLE [IF NOT EXISTS] 表名 (

字段名 列类型 [属性] [索引] [注释],

字段名 列类型 [属性] [索引] [注释],

字段名 列类型 [属性] [索引] [注释],

)[表的类型] [字符集设置] [注释]

常用表的命令:

像这些show create database/table ,都是反向操作获取创建表的命令行。

SHOW CREATE DATABASE school; – 查看创建数据库的语句

SHOW CREATE TABLE student; – 查看student数据表的定义语句

DESC student – 显示表的结构

2.5 数据表的类型


engine = INNODB; – 默认使用。

engine = MYISAM; – 早些年使用的。

– 在创建表的时候,这些是配合engine定义的。

| | MYISAM | INNODB |

| — | — | — |

| 事务支持 | 不支持 | 支持 |

| 数据行锁定 | 不支持 | 支持 |

| 外键约束 | 不支持 | 支持 |

| 全文索引 | 支持 | 不支持 |

| 表空间的大小 | 较小 | 较大,约为2倍的myisam |

常规使用操作

MYISAM和INNODB的优缺点:

  • MYISAM – 节约空间,速度较快。

  • INNODB – 安全性高,事务的处理,多表多用户操作。

所有的数据库文件,在物理空间存在的位置,都在我们创建mysql的data中。一个文件夹就对应一个数据库,因此存储的本质上还是文件的存储!

MySQL引擎在物理文件上的区别:

  • InnoDB ,在数据库表中只有一个*.frm文件。

在这里插入图片描述

  • MYISAM 对应文件:

***.frm – 表结构的定义文件。

*.MYD – 数据文件(data)。

*.MYI – 索引文件(index)。**

在这里插入图片描述

设置数据库表的字符集编码

CHARSET=utf8

  • 不设置的话,回事mysql默认的字符集编码~Latin1(不支持中文的!!!),因此要定义为utf8。

  • 当然,我们可以设置这个默认编码,就是在my.ini中配置默认的编码:character-set-server=uft8 。

character-set-server=uft8

2.6 修改和删除 表


修改表

  • 修改表名: ALTER TABLE 旧表名 RENAME AS 新表名;

  • 增加表的字段: ALTER TABLE 表名 ADD 字段名 [INT(11)] [列属性];

  • **修改表的字段(重命名,修改约束):

– 修改约束方式:ALTER TABLE 表名 MODIFY 字段 [要修改的列属性(类型等)];

– 重命名方式:ALTER TABLE 表名 CHANGE 旧字段 新字段 [要修改的列的属性(类型等)];**

  • 删除表的字段:ALTER TABLE 表名 DROP 字段;

– 修改表名: ALTER TABLE 旧表名 RENAME AS 新表名;

ALTER TABLE teacher RENAME AS teacher1;

– 增加表的字段: ALTER TABLE 表名 ADD 字段名 [INT(11)] [列属性];

ALTER TABLE teacher1 ADD age INT(11);

– 修改表的字段(重命名,修改约束):

– ALTER TABLE 表名 MODIFY 字段 [要修改的列属性(类型等)]; – 修改约束方式

– ALTER TABLE 表名 CHANGE 旧字段 新字段 [要修改的列的属性(类型等)]; – 重命名方式

ALTER TABLE teacher1 MODIFY age VARCHAR(11); – 修改约束方式

ALTER TABLE teacher1 CHANGE age age1 INT(11); – 重命名方式

– 删除表的字段

ALTER TABLE teacher1 DROP age

下面是change和modify的区别:

在这里插入图片描述

删除表

  • DROP TABLE [IF EXISTS] 表名;

– 删除表(如果表存在再删除)

DROP TABLE IF EXISTS teacher1;

所有的创建和删除操作尽量加上判断(if exists 或者 if not exists),以免报错。

3. MySQL 数据管理

===========================================================================

3.1 外键约束(不推荐!)


方式一:在创建表的时候,增加约束(代码操作)

几个单词需要记一下:

  • constraint 约束 , foreign key 外键 ,references 引用。

– 创建grade表

CREATE TABLE grade (

gradeid INT(10) NOT NULL AUTO_INCREMENT COMMENT ‘年级id’,

gradename VARCHAR(50) NOT NULL COMMENT ‘年级名称’,

PRIMARY KEY (gradeid)

)ENGINE=INNODB DEFAULT CHARSET=utf8

– 学生表的gradeid字段,要去引用年级表的gradeid

– 1. 定义外键key。

– 2. 给外键添加约束(执行引用)。

CREATE TABLE IF NOT EXISTS student (

id INT(4) NOT NULL AUTO_INCREMENT COMMENT ‘学号’,

name VARCHAR(30) NOT NULL DEFAULT ‘匿名’ COMMENT ‘姓名’,

pwd VARCHAR(30) NOT NULL DEFAULT ‘123456’ COMMENT ‘密码’,

sex VARCHAR(2) NOT NULL DEFAULT ‘女’ COMMENT ‘性别’,

birthday DATETIME DEFAULT NULL COMMENT ‘出生日期’,

gradeid INT(10) studentNOT NULL COMMENT ‘学生的年级’,

address VARCHAR(100) DEFAULT NULL COMMENT ‘家庭住址’,

email VARCHAR(50) DEFAULT NULL COMMENT ‘邮箱’,

PRIMARY KEY (id),

KEY FK_gradeid (gradeid),

CONSTRAINT FK_gradeid FOREIGN KEY (gradeid) REFERENCES grade (gradeid)

)ENGINE=INNODB DEFAULT CHARSET=utf8

注意:删除外键关系的表的时候,必须要先删除引用别人的表(从表),再删除被引用的表。否则报错如下:

在这里插入图片描述

方式二:创建表成功后,添加外键约束

格式:

  • alter table add constraint 约束名 foreign key (作为外键的列) references 那个表(哪个字段)

– 创建grade表

CREATE TABLE grade (

gradeid INT(10) NOT NULL AUTO_INCREMENT COMMENT ‘年级id’,

gradename VARCHAR(50) NOT NULL COMMENT ‘年级名称’,

PRIMARY KEY (gradeid)

)ENGINE=INNODB DEFAULT CHARSET=utf8

– 创建student表

CREATE TABLE IF NOT EXISTS student (

id INT(4) NOT NULL AUTO_INCREMENT COMMENT ‘学号’,

name VARCHAR(30) NOT NULL DEFAULT ‘匿名’ COMMENT ‘姓名’,

pwd VARCHAR(30) NOT NULL DEFAULT ‘123456’ COMMENT ‘密码’,

sex VARCHAR(2) NOT NULL DEFAULT ‘女’ COMMENT ‘性别’,

birthday DATETIME DEFAULT NULL COMMENT ‘出生日期’,

gradeid INT(10) NOT NULL COMMENT ‘学生的年级’,

address VARCHAR(100) DEFAULT NULL COMMENT ‘家庭住址’,

email VARCHAR(50) DEFAULT NULL COMMENT ‘邮箱’,

PRIMARY KEY (id)

)ENGINE=INNODB DEFAULT CHARSET=utf8

– 创建表的时候没有外键关系:

ALTER TABLE student ADD CONSTRAINT FK_gradeid FOREIGN KEY(gradeid) REFERENCES grade (gradeid)

**注意:

以上的操作都是物理外键,数据库级别的外键,我们不建议使用!因为,引用过多删除表的时候很难删除!因此,我们不建议使用(避免数据库过多造成的困扰,这里了解即可~) 。**

在这里插入图片描述

3.2 DML语言


数据库意义:数据存储,数据管理。

DML语言:数据操作语言。

  • insert into

  • update 表名 set 字段=‘value’

  • delete from

3.3 insert into 添加


格式:

  • **插入语句(添加):

INSERT INTO 表明 ([字段名1,字段名2 ,…]) VALUES (‘值1’,‘值2’,…) , (‘值1’,‘值2’,…) , …;**

– 插入语句(添加)

– insert into 表明 ([字段名1,字段名2 ,…]) values (‘值1’,‘值2’,…);

INSERT INTO grade (gradename) VALUES(‘高三三班’)

在这里插入图片描述

如果不写表的字段,它就会一一匹配。容易报错:does’t match (不匹配)。

在这里插入图片描述

在这里插入图片描述

3.4 update 表名 set 字段=‘value’ 修改


格式:

  • update 表名 set 字段1=‘new_value1’, 字段2=‘new_value2’ , … where 条件

– 格式:update 表名 set 字段=‘new_value’ where 条件

UPDATE student SET name=‘匿名’ WHERE id = 1;

– 如果不设置where条件,就会默认修改全部

UPDATE student SET name=‘匿名’;

– 修改多个属性(字段值),逗号隔开

UPDATE student SET name=‘张三’,email=‘123456@qq.com’ WHERE id >= 2;

where 运算符 ,常用的案例,如下表格:

在这里插入图片描述

注意:

  • new_value,不一定是一个具体的值,也可以是个变量,函数调用等。如下:

– CURRENT_TIME 获得当前时间

UPDATE student SET birthday=CURRENT_TIME WHERE name=‘张三’ AND sex=‘男’

在这里插入图片描述

3.5 delete from删除 ,truncate 清空


delete语法:

  • delete from 表名 where 条件;

注意!!!一定添加条件,不添加条件就是全部删除。

– 删除student表的全部数据,不过通过这种方式全部删除数据,我们不推荐!我们使用truncate来清空数据。

DELETE FROM student

– 删除id为1的数据

DELETE FROM student WHERE id = 1;

  • truncate,作用:完全清空一个数据库表,表的结构和索引约束不会变!

– 清空表的数据

TRUNCATE student

delete from 表名 和 truncate 表名 的区别

相同点:

  • 都能删除数据,都不会删除表结构。

不同点:

  • truncate – 重新设置,自增列,计时器会归零。

  • truncate – 不会影响事务。

例如:delete from 表名 删除所有数据后,就不会对自动递增重新设置。

在这里插入图片描述

在这里插入图片描述

4. DQL查询数据

========================================================================

4.1 DQL(Data Query Language:数据查询语言)


  • 所有的查询操作都用它 select 。

  • 简单的查询,复杂的查询它都能做到。

  • 在数据库中,它是最重要的,使用频率最高的。

4.2 指定查询字段


select 字段 from 表名 和 别名

– 查询全部 select * from 表名

– select 字段 from 表名

SELECT id,name FROM student

– 别名:as ,可以字段起别名,也可以给表名起别名

SELECT id AS 学号,name AS 学生名字 FROM student AS 学生

在这里插入图片描述

函数:concat(a,b)

– 函数 concat(a,b),将a拼接到b上面

SELECT CONCAT(‘姓名:’,coll) FROM test

– 函数执行后的结果也是可以其别名的

SELECT CONCAT(‘姓名:’,coll) AS 数字 FROM test

在这里插入图片描述

去重:distinct

作用:去除select 查询出来的结果中重复的数据,重复的数据只有一条。

– distinct 去重,需要注意的是要将distinct放到最前面

– select distinct 字段 [as ‘别名’] from 表名

SELECT DISTINCT coll AS ‘数字’ FROM test

select语句还可以做加减法,查看版本,查看步长,如下:

在这里插入图片描述

4.3 where 条件


· 作用:检索数据中符合条件的值。

逻辑运算符

在这里插入图片描述

模糊查询:比较运算符

在这里插入图片描述

  • like ,% ,_ 这三个符号的使用:

– like, %(代表0到任意个字符), _(后面有一个字符)

– 查询开头有王的

SELECT * FROM student WHERE name LIKE ‘王%’;

– 查询开头是王,几个 _符号,后面加几个字

SELECT * FROM student AS s WHERE name LIKE ‘王_’;

SELECT * FROM student WHERE name LIKE ‘王__’

– %xxx%,如下查询所有包含三的内容

SELECT * FROM student WHERE name LIKE ‘%三%’

在in的范围内查询内容:

– 在规定的范围in内查询内容

SELECT name,id FROM student WHERE id IN (3,4,5,6)

查询为null 或 not null 的用法:

– null:查询为null的内容

– 查询pwd为null和空字符串的数据

SELECT * FROM student WHERE pwd IS NULL OR pwd = ‘’;

– not null:查询不为null的内容

SELECT * FROM student WHERE pwd IS NOT NULL

4.4 联表查询


注意:

模棱两可,如果进行联表查询,两个表的字段名相同,一定要指定是那个表的,不要产生模棱两可的情况。

在这里插入图片描述

– inner join

SELECT s.id,s.name,r.math,r.English FROM student AS s

INNER JOIN result AS r

WHERE s.name = r.name

– right join

SELECT s.id,s.name,math,English FROM student s

RIGHT JOIN result r

ON s.name = r.name

– left join

SELECT s.id,s.name,math,English FROM student s

LEFT JOIN result r

ON s.name = r.name

| 操作 | 描述 |

| — | — |

| inner join | 如果表中至少有一个匹配,就返回行。 |

| left join | 会从左表中返回所有的值,即使右表中没有匹配, |

| right join | 会从右表中返回所有的值,即使左表中没有匹配, |

join on连接查询 和 where 等值查询的区别。

  • join on 是一个具体的语法。on后面跟判断条件

  • where 就是等值查询。

  • 结果两者还是相同的。

如果查询多个表中的join数据,要循环递进的查询,如下解释:

在这里插入图片描述

自连接 :

  • 自己的表和自己的表连接。

  • 核心:一张表拆分为两张一样的表即可。

– 把一张表,分成两个表操作,下面分成了父和子栏目。

SELECT a.categoryName AS ‘父栏目’,b.categoryName AS ‘子栏目’

FROM category AS a,category AS b

WHERE a.categoryid = b.pid

在这里插入图片描述

4.5 分页(limit) 和 排序(order by)


在这里插入图片描述

排序: order by 要排序的字段 [asc/desc] 。

SELECT s.id,s.name,math,english FROM student s

LEFT JOIN result r

ON s.name = r.name

ORDER BY id DESC – 逆序显示

分页:limit 查询起始下标 ,pageSize 。

在这里插入图片描述

4.6 子查询 和 嵌套查询


  • 本质:在where语句中嵌套一个子查询语句。

在这里插入图片描述在这里插入图片描述

子查询和嵌套查询本质上就是由里到外的一个运行代码过程。

4.7 分组(group by) 和 过滤(having)


group by 通过什么字段来分组。

SELECT name,SUM(math) AS 数学总分, AVG(english) AS 英语平均分

FROM result AS r

WHERE r.math >= 60

GROUP BY name

HAVING 数学总分 > 60

where和having的区别:

where:

  • where是一个约束声明,使用where来约束来自数据库的数据;

  • where是在结果返回之前起作用的;

  • where中不能使用聚合函数。

having:

  • having是一个过滤声明;

  • 在查询返回结果集以后,对查询结果进行的过滤操作;

  • 在having中可以使用聚合函数。

4.8 select 语法格式 总结


总体上,select查询语法格式为:

在这里插入图片描述

在这里插入图片描述

5. MySQL 函数

=========================================================================

函数这节最好依靠官方给的文档来操作。

官方:https://dev.mysql.com/doc/refman/8.0/en/built-in-function-reference.html

5.1 常用函数


数学常用函数:

– abs(): 取绝对值

SELECT ABS(-8)

– ceiling(): 向上取整,天花板

SELECT CEILING(4.1)

– floor():向下取整,地板

SELECT FLOOR(4.9)

– rand(): 返回一个0~1之间的随机数

SELECT RAND()

– sign(): 判断一个数的符号,(注意:0是0,负数返回-1,整数返回1)

SELECT SIGN(0)

SELECT SIGN(-10)

SELECT SIGN(10)

字符串常用函数:

– 字符串函数

– char_length(): 返回字符串长度

SELECT CHAR_LENGTH(“12356张三”)

– concat(“str1”,“str2”): 拼接字符串

SELECT CONCAT(“张三”,“您好啊”)

– insert(): 查询,替换

SELECT INSERT(‘李四,hello,world’,1,2,‘张三’)

– lower() ,upper(): 转大小写

SELECT LOWER(‘ASZXCF’)

SELECT UPPER(‘sdfsd’)

– instr(‘str’,‘s’): s在str中的索引位置

SELECT INSTR(‘张三123455’,‘2’)

– replace(‘str’,‘s’,‘S’): 替换出现的指定字符串

SELECT REPLACE(‘你好张三,欢迎来到北京’,‘张三’,‘李四’)

– substr(‘str’,‘1’,‘2’): 返回指定的子字符串

SELECT SUBSTR(‘你好张三,欢迎来到北京’,‘3’,‘6’) – 注意不是3到6,而是第三个开始后面的6个。

– reverse(‘str’): 反转字符串

SELECT REVERSE(‘你好张三,欢迎来到北京’)

在这里插入图片描述

时间和日期函数:

– 时间和日期函数

– current_date() 和 curdate(): 获取当前日期 (仅有年月日)

SELECT CURRENT_DATE()

SELECT CURDATE()

– now(): 获取当前时间,比较全(年月日时分秒)

SELECT NOW()

– localtime(): 获取本地时间

SELECT LOCALTIME()

– sysdate(): 获取系统时间

SELECT SYSDATE()

– 单独输出年月日时分秒

SELECT YEAR(NOW())

SELECT MONTH(NOW())

SELECT DAY(NOW())

SELECT HOUR(NOW())

SELECT MINUTE(NOW())

SELECT SECOND(NOW())

系统函数:

– 系统函数

– system_user() 和 user(): 客户端提供的用户名和主机名

SELECT SYSTEM_USER()

SELECT USER()

– version(): 查看mysql版本

SELECT VERSION()

5.2 聚合函数 (常用)


| 函数名称 | 描述 |

| — | — |

| count() | 计数 |

| sum() | 求和 |

| avg() | 平均值 |

| max() | 最大值 |

| min() | 最小值 |

| … | … |

count(): 想查询一个表中有多少个记录,就是用count()。

– 聚合函数

– count(指定列(字段)): 查看数据的数量,但会忽略所有的null值

SELECT COUNT(categoryName) FROM category

– count(*): 查看所有代码行,*就不会忽略null值

SELECT COUNT(*) FROM category

– count(l): 将一个代码行看为 1来查询。也不会忽略null值

SELECT COUNT(1) FROM category

在这里插入图片描述

求和,平均分,最大值,最小值:

– sum():求和

SELECT SUM(pid) AS 总和 FROM category

– avg():平均分

SELECT AVG(pid) AS 平均分 FROM category

– max():最大值

SELECT MAX(pid) AS 最大值 FROM category

– min():最小值

SELECT MIN(pid) AS 最小值 FROM category

其实,使用函数大多数情况都是后面跟着列表字段,来计算整个字段的函数值。

5.3 数据库级别的 MD5()加密函数


什么是MD5?

  • MD5是一种不可逆的加密算法,主要增强算法复杂度和不可逆性。

  • MD5 不可逆,具体的值的md5值是一样的。

  • MD5 破解网站的原理,背后有一个字典,MD5加密后的值。

– 铭文密码

INSERT INTO testmd5 VALUES (1,‘张三’,‘123456’),(2,‘李四’,‘123456’),(3,‘王五’,‘123456’)

– md5()函数,通过使用md5函数加密。

UPDATE testmd5 SET pwd=MD5(pwd) – 加密全部的密码

– 插入的时候,进行加密。

INSERT INTO testmd5 VALUES (4,‘老鬼’,MD5(‘123456’))

– 如何校验:将用户传递进来的密码,进行md5加密,然后比对加密的值。

SELECT * FROM testmd5 WHERE name = ‘老鬼’ AND pwd=MD5(‘123456’)

对于MD5加密,我们只需要知道加密用户的密码,然后校验用户传进来的密码进行比较,就像下面一样。

– 如何校验:将用户传递进来的密码,进行md5加密,然后比对加密的值。

SELECT * FROM testmd5 WHERE name = ‘老鬼’ AND pwd=MD5(‘123456’)

6. 事务

===================================================================

6.1 什么是事务?什么是ACID?


将一组sql放在一个批次中去执行~,要么都执行成功,要么都执行失败。

在这里插入图片描述

事务原则:

**ACID原则特性 :

原子性(Atomicity) ,一致性(Consistency) , 隔离性(Isolation) ,持久性(Durability) (脏读,幻读…)**

一个支持事务(Transaction)的数据库,必须要具备以上四种特性,否则在事务过程(Transaction processing) 当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。

原子性(Atomicity):

要么都成功,要么都失败。

在这里插入图片描述

一致性(Consistency):

事务前后的数据完整性要保证一致。

在这里插入图片描述

持久性(Durability):

**事务一旦提交则不可逆,被持久化到数据库中。

事务如果已经提交,就不可逆了。**

在这里插入图片描述

隔离性(Isolation)

事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,事务之间要相互隔离。

在这里插入图片描述

隔离所导致的一些问题:

脏读:

指一个事务读取了另外一个事务未提交的数据。

在这里插入图片描述

不可重复读:

在一个事务内读取表中的某一行数据,多次读取结果不同。(这个不一定是错误,只是某些场合不对)

在这里插入图片描述

虚读(幻读):

它是指在一个事务内读取到了别的事务插入的数据,导致前后读取数量总量不一致。

在这里插入图片描述

6.2 事务的 执行流程


SET autocommit 用来开启或关闭事务,默认是开启。

– 事务

– mysql是默认开启事务自动提交的

SET autocommit = 0 – 关闭事务

SET autocommit = 1 – 开启事务(设置为1,为默认开启)

事务执行的流程:

– 转账

CREATE DATABASE IF NOT EXISTS shop CHARACTER SET utf8 COLLATE utf8_general_ci

USE shop

CREATE TABLE account (

id INT(3) NOT NULL AUTO_INCREMENT,

name VARCHAR(30) NOT NULL,

money DECIMAL(9,2) NOT NULL,

PRIMARY KEY (id)

)ENGINE=INNODB DEFAULT CHARSET=utf8

– innodb是支持事务的,myisem好像有点版本不支持

INSERT INTO account (name,money) VALUES (‘A’,2000.00),(‘B’,100000.00)

– 模拟转账:事务

SET autocommit = 0 – 关闭自动提交

START TRANSACTION – 开启事务

UPDATE account SET money=money-500 WHERE name = ‘A’ – A减500

UPDATE account SET money=money+500 WHERE name = ‘B’ – B加500

COMMIT; – 提交事务,提交后就被持久化了,再回滚就无法回滚了。

ROLLBACK; – 如果出错,就执行回滚。

SET autocommit = 1; – 恢复默认值

在这里插入图片描述

了解保存点:

SAVEPOINT 保存点名 – 设置一个事务的保存点

ROLLBACK TO SAVEPOINT 保存点名 – 回滚到保存点

RELEASE SAVEPOINT 保存点名 – 删除撤销保存点

7. 索引

===================================================================

MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。

7.1 索引的分类


在一个表中,主键索引只能有一个,唯一索引可以有多个。

  • 主键索引 (primary key)
    自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

写在最后

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

最后祝愿各位身体健康,顺利拿到心仪的offer!

由于文章的篇幅有限,所以这次的蚂蚁金服和京东面试题答案整理在了PDF文档里

蚂蚁、京东Java岗4面:原理+索引+底层+分布式+优化等,已拿offer

蚂蚁、京东Java岗4面:原理+索引+底层+分布式+优化等,已拿offer

蚂蚁、京东Java岗4面:原理+索引+底层+分布式+优化等,已拿offer
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
– 模拟转账:事务

SET autocommit = 0 – 关闭自动提交

START TRANSACTION – 开启事务

UPDATE account SET money=money-500 WHERE name = ‘A’ – A减500

UPDATE account SET money=money+500 WHERE name = ‘B’ – B加500

COMMIT; – 提交事务,提交后就被持久化了,再回滚就无法回滚了。

ROLLBACK; – 如果出错,就执行回滚。

SET autocommit = 1; – 恢复默认值

在这里插入图片描述

了解保存点:

SAVEPOINT 保存点名 – 设置一个事务的保存点

ROLLBACK TO SAVEPOINT 保存点名 – 回滚到保存点

RELEASE SAVEPOINT 保存点名 – 删除撤销保存点

7. 索引

===================================================================

MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。

7.1 索引的分类


在一个表中,主键索引只能有一个,唯一索引可以有多个。

  • 主键索引 (primary key)
    自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-oHRbnEAR-1713640442026)]

[外链图片转存中…(img-zzbc5PWm-1713640442027)]

[外链图片转存中…(img-IUZIWzOY-1713640442027)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

写在最后

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

最后祝愿各位身体健康,顺利拿到心仪的offer!

由于文章的篇幅有限,所以这次的蚂蚁金服和京东面试题答案整理在了PDF文档里

[外链图片转存中…(img-F1ntpm9P-1713640442028)]

[外链图片转存中…(img-kQJjDC9V-1713640442028)]

[外链图片转存中…(img-tAZevnV5-1713640442028)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 11
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值