![](https://img-blog.csdnimg.cn/202102242055396.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
MySQL
MySQL 学习笔记
知之为知
记录学习内容
展开
-
MySQL基础知识
流程控制函数:#IF(test,t,f)如果test真返回t,否则返回fselect if(1=1,"hello","world") from dual;#IFNULL(arg1,arg2)如果arg1非空返回arg1,否则返回arg2select ifnull("hello","world") from dual;#NULLIF(arg1,arg2)如果arg1=arg2返回null,否则返回arg1select nullif("hello","hello") from dual;se原创 2022-04-01 19:56:32 · 537 阅读 · 0 评论 -
SQL优化
理论知识大SQL1. 结果集很大的SQL语句, 日常业务逻辑查询数据量很少超过万行, 某些定时统计任务可能需要大结果集, 但也不应该有百万行的查询.慢SQL1. 从执行时间来看, 在低负载时, 超过2秒就算慢SQL, 在高负载时, 超过5秒算慢SQL2. 从扫描行数来看, 不管低负载, 高负载, 超过百万行就算慢SQL慢SQL原因: 没有命中合适的索引1. 没有给查询条件加索引2. 加了索引, 但是实际执行过程中, MYSQL引擎没有使用该索引索引:这里只讨论B+Tree数据结构的原创 2022-03-31 10:14:20 · 444 阅读 · 0 评论 -
BasicDao
DBUtil+Druid任然存在不足:如果再进行一次封装->BasicDao作为实现所有数据库常用的基础查询操作1.所有数据库操作的基础类public class BasicDao<T> { private QueryRunner queryRunner = new QueryRunner(); //获取一条记录 public T getOne(String sql, Class<T> clazz, Object... params) {原创 2021-10-01 18:54:07 · 282 阅读 · 0 评论 -
Apache DBUtils
为什么需要DBUtils:关闭connection后resultSet结果集无法使用,且resultSet结果集不方便使用commons-dbutils是Apache提供的一个开源JDBC工具类库,他是对JDBC的封装使用DBUtil能极大简化JDBC编码工作量1.QueryRunner类:封装了SQL的执行,是线程安全的,可是实现CRUD、批处理QueryRunner queryRunner = QueryRunner(DataSource ds)打开一个连接->执行查询sql->使原创 2021-10-01 18:53:09 · 192 阅读 · 0 评论 -
数据库连接池
1.传统获取Connection的弊端:(1).使用DriverManager获取连接,每次向数据库建立连接的时候都要将Connection加载到内存中,再验证IP地址、用户名、密码(0.05s~1s)频繁的这样操作容易造成MySQL崩溃(连接不能复用)(2).传统获取连接的方式不能控制创建的连接数量,如果连接过多,也可能导致内存泄漏(不能控制连接数量)(3).数据库连接每次使用完后应该close,如果未能关闭连接,将导致内存泄漏(不好控制连接)2.数据库连接池:JDBC的数据库连接池通过实现j原创 2021-10-01 18:50:56 · 82 阅读 · 0 评论 -
JDBC事务与批处理
1.事务当一个Connectioin对象创建时,默认情况下是自动提交,即每次执行一条SQL成功时都会自动commit,不能回滚取消自动提交:connection.setAutoCommit(false);所有SQL执行成功后提交事务:connection.commit();catch到执行异常时回滚:connection.rollback();也可设置回滚点:Savepoint savepoint = connection.setSavepoint("savepoint");connectio原创 2021-10-01 18:45:55 · 170 阅读 · 0 评论 -
JDBC原理
JDBC(Java Database Connectivity)是Java提供一套用于数据库操作的接口API,Java程序员只需要面向这套接口编程即可。不同的数据库厂商,需要针对这套接口提供不同实现java制定接口规范,不同数据库厂商提供自己的数据库操作实现类(即使用的驱动包)JDBC编写步骤:1.获取Driver2.获取Connection3.执行SQL4.释放资源public class JDBCTest { @Test public void test1() thr原创 2021-09-30 11:22:51 · 86 阅读 · 0 评论 -
MySQL优化
1.数据库表设计3NF(范式):首先符合1NF,才能满足2NF,进一步满足3NF1NF:表的列具有原子性,不可再分解,只要数据库是关系型数据库就自动满足1NF2NF:表中的记录是唯一的,通常设置主键来实现3NF:表中数据不要有冗余数据,表的数据能够被推倒出来的就不应该单独设计一个字段 反范式:有时候为了查询便捷可以接受数据冗余#存储引擎的选择SHOW ENGINES;InnoDB:Supports transactions, row-level locking, and foreign k原创 2021-09-28 20:14:14 · 62 阅读 · 0 评论 -
MySQL用户/权限管理
#1.用户管理SELECT * FROM mysql.user;#创建用户(创建用户时如果不指定host,则默认为%,表示所有的IP都可以连接)CREATE USER 'test_user'@'localhost' IDENTIFIED BY '123456';#修改密码为'654321'ALTER USER 'test_user'@'localhost' IDENTIFIED BY '654321';#删除用户DROP USER 'test_user'@'localhost';#2.权限原创 2021-09-27 20:13:29 · 39 阅读 · 0 评论 -
MySQL事务
事务用于保证数据的一致性,InnoDB支持事务 MyISAM不支持事务MySQL命令行的默认设置下,不开始事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作#开始一个事务:BEGIN 或 START TRANSACTION 或 SET AUTOCOMMIT=0#SAVEPOINT 一个事务中可以有多个 SAVEPOINTSAVEPOINT savepoint; // 声明一个 savepointROLLBACK TO savepoint; // 回滚到savep原创 2021-09-27 17:01:39 · 53 阅读 · 0 评论 -
MySQL索引
索引分单列索引和组合索引虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE,建立索引会占用磁盘空间参考https://www.cnblogs.com/bypp/p/7755307.html1.索引分类:(1).主键索引: primary key :主键索引,加速查找+约束(不为空且唯一) primary key(id,name):组合主键索引(2).唯一索引: unique:唯一索引,加速查找+约束 (唯一) unique(id,原创 2021-09-27 17:00:28 · 51 阅读 · 0 评论 -
MySQL约束
约束:确保数据库中的数据满足条件,约束包括:NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK#NOT NULL :字段不允许为NULL #UNIQUE: 不可重复,可以有多个NULL CREATE TABLE t6( id INT NOT NULL , `name` VARCHAR(32) UNIQUE);INSERT INTO t6 VALUES (NULL,'小明'),(1,'张三'),(2,'张三'),(3,NULL),(4,NUL原创 2021-09-26 22:40:52 · 35 阅读 · 0 评论 -
MySQL内连接、外连接
INNER JOIN(内连接 可以省略 INNER 使用 JOIN)LEFT JOIN(左连接 左外连接)RIGHT JOIN(右连接 右外连接)CREATE TABLE stu( id INT, `name` VARCHAR(32));INSERT INTO stu VALUES (1,'小明'),(2,'张三'),(3,'李四');CREATE TABLE exam( id INT, grade INT);INSERT INTO ex原创 2021-09-26 22:39:45 · 87 阅读 · 0 评论 -
MySQL的数据类型
1.数值类型(1)整型:bit(M) M范围1~64、tinyint[1字节]、smallint[2字节]、mediumint[3字节]、int[4字节]、bigint[8字节]#bit类型,如果一个值只有0,1可以考虑使用bit(1)节约空间CREATE TABLE t0( id bit(8));INSERT INTO t0 VALUES (255);select * from t0 where id = 255;#tinyint有符号范围-128~127 无符号范围0~255原创 2021-09-26 22:37:18 · 34 阅读 · 0 评论 -
MySQL函数
#1.统计函数CREATE TABLE t5( `name` VARCHAR(20));INSERT INTO t5 VALUES ('tom');INSERT INTO t5 VALUES (NULL);#COUNT(*) COUNT(列)返回非NULL的SELECT COUNT(*) FROM t5;#2SELECT COUNT(1) FROM t5;#2SELECT COUNT(`name`) FROM t5;#1#SUM(列)求和SELECT SUM(math) FR原创 2021-09-26 13:59:45 · 48 阅读 · 0 评论 -
MySQL的CRUD
CRUD: create、read、update、delete#插入INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );#更新UPDATE table_name SET field = new-value1 [WHERE Clause]#删除DELETE FROM table_n原创 2021-09-26 11:40:35 · 55 阅读 · 0 评论 -
MySQL数据库/表的操作
#查看数据版本、查看数据库默认字符集select VERSION();show variables like 'character%'#显示数据库SHOW DATABASES;#创建数据库,CHARSET指定数据库采用的字符集,默认utf8mb3(即utf8),COLLATE指定数据库字符集校对规则,默认utf8_general_ci(不区分大小写),utf8_bin(区分大小写)#MySQL数据库的"utf8"并不是真正概念里的 UTF-8,UTF-8编码是应该能支持4字节的字符CREA原创 2021-09-26 11:38:25 · 97 阅读 · 0 评论 -
CentOS 8.0安装MySQL8
https://dev.mysql.com/downloads/mysql/1.下载rpmhttps://dev.mysql.com/downloads/repo/yum/ 获取rpmmkdir /usr/local/mysql cd /usr/local/mysqlwget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpmyum localinstall mysql80-community-relea原创 2021-09-26 11:35:54 · 54 阅读 · 0 评论