MySQL总结
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
数据库连接池在初始化时将创建一定数量的数据库连接放到池中,其数量由最小数据库连接数决定。
无论这些连接是否被使用,连接池始终保持有这么多的连接数量。
连接池的最大连接数量决定了连接池占有的最大连接数,当应用程序向连接池请求的连接数超过最大数,请求将加入等待队列。