Java Date7.13 Mysql语法

Mysql重点

数据类型

1.整型TINYINT(1个字节)、SMALLINT(2字节)、MEDIUMINT(3字节)、INT(4字节)、BIGINT(8字节)

2.实数类型:包括FLOAT、DOUBLE、DECIMAL。

FLOAT、DOUBLE、DECIMAL的区别

DECIMAL可以用于存储比BIGINT还大的整型,能存储精确的小数。 而FLOAT和DOUBLE是有取值范围的,并支持使用标准的浮点进行近似计算。 计算时FLOAT和DOUBLE相比DECIMAL效率更高一些,DECIMAL你可以理解成是用字符串进行处理

CHAR和VARCHAR的区别

Char的取值:0-255

Varchar的取值:0-65535

Char是定长字符串,空间换时间

Varchar不定长 时间换空间动态计算数据的实际长度

Varchar性能没有char好,但是节约空间

Char(32)和varchar(32)括号里面的长度是字节还是字符

Mysql5.0版本之前是字节。之后改为字符

用什么类型存储金额

不能用FLOAT和DOUBLE要用定点数DECIMAL长整型存储到金额的最小单位

超长的文本博客文章怎么存储

严禁使用varchar存储超过5000就是超长文本应该改用BLOB或者TEST类型

应该把超长文本的字段从当前表中拆除去,单独用一张表存储与主表做外连接防止出现超长文本影响查询效率

二进制文件怎么存储 图片。视频,音频

数据库用BINARY类型可以存储,但是性能很差

正确方案:二进制数据存储在文件中,以文件形式存储到磁盘中,然后再数据库创建一个字段,存储文件路径

VARCHAR(M)M为0~65535之间的整数   时间换空间,但是通常不会给超过5000,超过了用TEST或者BLOB

Mysql的整型支持无符号,使用关键字UNSIGVED

Age tinyint age-字段取值范围是-128-127

Age tinyint usigned-age字段的取值范围0-255

约束

  1. 非空约束 NOT NULL
  2. 检查约束 CHECK(mysql不支持)
  3. 唯一约束 UNIQUE
  4. 主键约束 PRIMARY  KEY
  5. 外键约束 FOREIGN KEY

SQL分类-语法整理(DDL|DML|DQL|DCL

数据定义语言DDL(Data Ddefinition Language)

CREATE,DROP,ALTER SHOW

主要为以上操作 即对逻辑结构等有操作的,其中包括表结构,视图和索引。

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

SELECT,FROM,WHERE,GROUP BY,ORDER BY

这个较为好理解 即查询操作,以select关键字。各种简单查询,连接查询等 都属于DQL。

数据操纵语言DML(Data Manipulation Language)

INSERT,UPDATE,DELETE

主要为以上操作 即对数据进行操作的,对应上面所说的查询操作 DQL与DML共同构建了多数初级程序员常用的增删改查操作。而查询是较为特殊的一种 被划分到DQL中。

数据控制功能DCL(Data Control Language)

GRANT,REVOKE,COMMIT,ROLLBACK

主要为以上操作 即对数据库安全性完整性等有操作的,可以简单的理解为权限

控制等。

事务控制功能TCL(Transaction Control Language)

Commit  Rollback

用于操作事务。以及提交和回滚操作

排序:DQL\DML\TCL\DDL\DCL

连表查询的方式

关系类型和三范式、反三范式

数据库表关系:一对一、一对多、多对多

三范式:以时间换空间(增加关系减少或者消灭冗余数据)

反(打破)三范式以空间换时间(允许适量的冗余数据,减少关系)

第一范式:每个列都不可以再拆分。

第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。

第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。

在设计数据库结构的时候,要尽量遵守三范式,如果不遵守,必须有足够的理由。比如性能。事实上我们经常会为了性能而妥协数据库的设计

事务四大特性和四种隔离级别

四大特性

1.原子性(Atomicity):事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;

2. 一致性(Consistency )执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;

3. 隔离性(Isolation ):并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;

4. 持久性(Durability ): 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。

四种隔离级别

1.READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。

2.READ-COMMITTED(读取已提交): 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。

3.REPEATABLE-READ(可重复读): 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。

4.SERIALIZABLE(可串行化): 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。

锁的种类

1.行级锁 行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。行级锁分为共享锁 和 排他锁。

特点:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

2.表级锁 表级锁是MySQL中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少,被大部分MySQL引擎支持。最常使用的MYISAM与INNODB都支持表级锁定。表级锁定分为表共享读锁(共享锁)与表独占写锁(排他锁)。

特点:开销小,加锁快;不会出现死锁;锁定粒度大,发出锁冲突的概率最高,并发度最低。

3.页级锁 页级锁是MySQL中锁定粒度介于行级锁和表级锁中间的一种锁。表级锁速度快,但冲突多,行级冲突少,但速度慢。所以取了折衷的页级,一次锁定相邻的一组记录

特点:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般

死锁、如何防止死锁

1.死锁-- 死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现

2.如何防止死锁

1. 我们程序员如何从代码逻辑层面避免死锁的出现

A.尽量让所有的事务获取资源的顺序保持一致

B. 可以在事务中一次性锁定所有需要的资源

C.提供锁的粒度, 行锁提升为表锁 (不建议使用, 会严重影响数据库的并发性能)

 D.使用乐观锁

2. MySQL数据库自带死锁检测和快速失败机制,当某个事务进入锁等待的时候, MySQL会检测是否会产生死锁 -- 如果产生了死锁, MySQL会立即结束当前事务, 并释放当前事务内占用的所有资源上的锁

索引(非常重要)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值