MySQL的总结

操作数据库
create database [if not exists] 数据库名
drop database [if exists] 数据库名
use 数据库名
show databases : 查看所有数据库

创建数据库
Create table [if not exists] 表名(
字段名 类型 【属性】 【索引】 【注释】,
字段名 类型 【属性】 【索引】 【注释】
)ENGINE=INNODB DEFAULT CHARSET=utf8

修改和删除表字段
修改表名:alter table 旧表名 rename as 新表名
增加表字段:alter table 表名 add 字段名 列属性
修改表字段:alter table 表名 modify 字段名 列属性[]
删除表字段:alter table 表名 drop 字段名
删除表:drop table if exists 表名

MySQL数据管理
insert into 表名【字段1,字段2】 values 【值1,值2】
update 表名 set 字段1=值1,字段2=值2 where 【条件】
delete from 表名 where 【条件】 (TRUNCATE:自增列计数器归零,不影响事务)

去重 distinct

模糊查询:Like %(0到任意字符) _ (一个字符)

联表查询:Inner join / left join / right join on 【两表共有的属性】

分页:limit 起始值,页面大小

排序:Order by 【字段名】 ASC/DESC

子查询:使用子查询代替要联表,查询过程有内向外

分组和过滤: Group by 字段名 Having 平均分>80

常用函数
Select Now();当前时间
Select CURDATE();当前日期
Select COUNT();计数
Select SUM/AVG/MAX/MIN();

MD5加密:pwd = MD5(pwd)

事务原则:ACID
A 原子性:要么都成功,要么都失败。
C 一致性:事务前后数据保持一致。
I 隔离性:事务间互不干扰。
D 持久性:一旦提交不可逆,持久化到数据库。

隔离导致问题
脏读:一个事务读取了另一个事务未提交的数据。
不可重复读:一个事务内多次读取某一行数据不同。
幻读:一个事务内读取到别的事务插入的数据,导致前后读取不一。

关闭自动提交:SET autocommit = 0;
开启事务:START TRANSACTION
回滚:ROLLBACK
提交事务:COMMIT

索引
主键索引:唯一标识,不可重复,仅有一列。
唯一索引:避免重复列,可以多个,每个列都可为唯一索引。
常规索引:默认的,index,key关键字来设置。
全文索引:快速定位数据,特定引擎才有,MYISAM

CREATE INDEX 索引名 ON 表(字段)
CREATE INDEX id_app_user_name ON app_user(‘name’)

索引原则
不是越多越好,小数据量不需要,索引加在常用查询的字段上。

MySQL备份:mysqldump

三大范式
第一范式(1NF):保证每一列不可再分。
第二范式(2NF):满足第一范式,每张表只描述一件事。
第三范式(3NF):满足第一第二范式,表中各列均与主键直接相关,不可间接。

JDBC

加载驱动 Class.forName(“com.mysql.jdbc.Driver”)
用户信息和Url:url = “jdbc:mysql://localhost:3306/jdbcStudy?userUnicode=true&characterEncoding=utf8&userSSL=true”
获取数据库连接:DriverManager.getConnection(url,username,password)
执行SQL的对象:statement = connection.createStatement();
编写sql语句。
执行sql:statement.executeQuery(sql) 、executeUpdate(sql)
释放连接。
PrepareStatement:
防止SQL注入问题,利用 ?占位符代替参数。
conn.prepareStatement(sql):预编译sql,但不执行。
手动给占位符参数赋值,开始执行sql,st.executeUpdate()

数据库连接池
DBCP、C3P0、Druid
最小连接数:10 最大连接数:15 等待超时:100ms
数据库连接池在初始化时将创建一定数量的数据库连接放到池中,其数量由最小数据库连接数决定。
无论这些连接是否被使用,连接池始终保持有这么多的连接数量。
连接池的最大连接数量决定了连接池占有的最大连接数,当应用程序向连接池请求的连接数超过最大数,请求将加入等待队列。