本文共 3311 字,大约阅读时间需要 11 分钟。
InnoDB:默认引擎,稳定,支持事务
MyIsam:不支持事务,快,不稳定mysql是服务器端
用java语言操作mysql是客户端本地 : mysql -u用户名 -p密码
服务器端 : mysql -u用户名 -p密码 -h 服务器ip地址 -P 端口号3306查询所有数据:show databases;
删除数据库:drop database db_name; 使用数据库:use db_name; 创建数据库:create database db_bame character set utf8mb4;创建表:create table table_name(…);
删除表:drop table table_name; 查询所有表:show tables; 修改表结构:alter table table_name add clumom 字段名 类型数值类型:int,float,decimal(对应BigDecimal)
字符串类型:varchar(size),text 日期类型:datetime添加单条数据:insert into table_name(字段名) values(…)
添加多行数据:insert into table_name(字段名…) value(…),(…) 修改数据:update 表名 set 字段名=值 where…delete from 表名 where…
全列查询:select * from 表名
指定列查询:select 列名 from 表名;(企业级开发正确使用姿势)
表达式查询:select math+10 from 表名;(企业级开发禁止使用)
别名查询:select uname as username from 表名;
聚合查询:count()、sum()、avg()、max()、min()
group by:select role,max(salary),min(salary),avg(salary) from emp group by role; having:select role,max(salary),min(salary),avg(salary) from emp group by role having avg(salary)<1500;去重:distinct (必须放到列最前面)
select distinct 列名 from 表名排序:order by 成绩 desc / asc
where查询:
常见运算符:between and ,like “_喜欢%”,and,or,not分页查询:limit 3, 3(查询 3 条数据,跳过前 3 条)
多表查询:
内联查询:inner join(企业规定:禁止 3 张表以上的连表查询) select a.*, b.* from a inner join b on a.id=b.aid 外联查询: 左联查询:left join 右联查询:right join 子查询:select * from stu where classid in (select classid from student where username=“星星”)表的约束
非空约束:not null 唯一约束:unique 主键约束:primary key 外键约束:foreign key 默认值:default物理外键不用,用逻辑外键
一对一
一对多 多对多(防止数据冗余)
第一范式(1NF):列不可再分【保证原子性】 第二范式(2NF)【消除了部分依赖】确保表中的每列都和主键相关 第三范式(3NF)【消除传递依赖】确保每列都和主键列直接相关,而不是间接相关(MySQL 高效最主要的手段)
查看一个表的所有索引
show index from 表名;普通索引
create index 索引名 on 表名(字段)主键索引
无需显式创建唯一索引
create unique index 索引名 on 表名(字段)组合索引
create index 索引名 on 表名(字段A,字段B)删除索引
drop index [索引名] on [表名]1.生产服务器,不要直接执行添加索引的操作(创建索引的过程非常耗时,且数据量越大,创建的时间越长)
2.对于多读(查询的)场景适合使用索引,而对于添加、删除比较多的场景,那么索引就不适用 3.避免使用查询的时候,不触发索引查询,比如在列上进行赋值运算1.当对一个列(已经设置索引的列),进行赋值查询的时候
2.避免使用 like 查询,当使用模糊查询的时候有可能不触发索引,比如当使用 like '%xxx%‘ 不会触发索引的,使用 like ‘xxx%’ 是可以触发索引的 3.当使用的是组合索引的时候,一定要遵顼最左匹配原则 4.尽量避免使用 or 查询,有可能导致索引不生效 5.不要使用 != <> 都会导致索引不生效 6.如果是字符串查询,一定要加上单引号,否则就会导致索引失效1.在查询比较多的关键列上加索引
2.开启慢查询日志,找到执行比较慢的 SQL,针对性的进行优化 3.能使用主键索引的时候,经常使用主键索引 4.分表(垂直分割)分库(水平分割) 5.提高数据库的硬件配置,更换一个读写性能更好的硬盘,更换一个更好更大的内存1.主键索引不需要显示从创建
2.主键索引不能删除,而普通索引可以 3.主键索引查询更快,而普通索引因为有回表查询,索引性能没有主键索引性能高1.修改配置文件
修改配置文件 my.cnf,在 [mysqld] 下的下方加入:[mysqld]
slow_query_log = ON slow_query_log_file = /usr/local/mysql/data/slow_query.log long_query_time = 1
2.重启MySQL服务
service mysqld restart
(MySQL 稳定的使用)
1.隔离性:并发事务执行时,隔离问题
2.原子性:要么全部成功,要么全部失败 3.持久性:事务执行完成之后,结果要一直保存下来 4.一致性:事务执行前后,数据要保证是正确的脏读:事务 A 读取到了事务 B 未提交的数据,事务 B 回滚了,读取到了不存在的数据
不可重复读:事务 A 使用相同的查询条件,读取到了不一样的结果,因为这个过程中,事务 B 修改了数据 幻读:事务 A 将数据修改之后,事务 B 又添加了一条数据,导致事务 A 执行的结果和预期的不一致。不可重复读的侧重点描述的是修改操作,而幻读描述的添加或删除
需要解决问题:脏度,不可重读读,幻读
1.读未提交:都不解决 2.读已提交:解决脏度 3.可重复读:解决脏度,不可重读读(默认隔离级别) 4.串行化:全部解决(缺点:性能不高)1.MVCC,也就是版本号的方法,处理时看版本号,如果版本号不一致,说明中途已经进行了修改,说明是幻读
2.gap 间隙锁,事务A在操作的时候加锁,B进不来,只能等A操作完成后B再操作1.创建一个 DataScource 对象(准备阶段)
2.创建一个 Connect 对象(连接到数据库服务器) 3.使用 PrepareStatement 对象拼接 SQL 语句 4.执行 SQL(相当于敲击回车) 5.查询结果 6.管理连接,释放资源(退出控制台)转载地址:http://xixvi.baihongyu.com/