数据库知识点

1.事务:

        原子性、一致性、隔离性、持久性

2.基础语法

        1.DDL:数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象的定义。常用的语句关键字主要包括 create、drop、alter等。 

             create(创建) 
                create table 表名 <create table p (pno char(6), pname char(30) primary key (pno));>
                primary key<主键>    
                foreign key() references 表名(字段)<关联外键> 
             drop(删除) 
                 drop table 表名  
             alter(修改)  
                 alter table 表名 <alter table s add c char(5);>
                 add 添加字段
                 modify 修改字段
                 drop 删除字段
                 change 改变字段名称 <alter table s change a a1 int(5);>
                 change 和 modify 都可以修改表的定义,不同的是 change 后面需要写两次列名,不方便。但是change 的优点是可以修改列名称,modify 则不能。
                rename 修改表名

        2.DML:数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字主要包括 insert、delete、udpate 和select 等。(增添改查)
            insert 插入语句 <insert into 表名(字段1,字段2,字段3,......) values ('值1','值2','值3',......)>
                也可以不指定字段,但是values后面的顺序要和表的字段顺序和个数一致,对于含可空字段 非空但是含有默认值的字段 自增字段,可以不用在insert后的字段列表中出现
            delete 删除语句 <delete from 表名 where 条件>
            update 修改语句 <update 表名 set 字段名 = '新值' where 字段名 = '旧值'>
            select 查询语句

        3.DCL:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括 grant、revoke 等。

            1.可以为不存在的数据库授权。
            2.如果grant命令标识的用户不存在,它将被创建。
            3.表级grant只支持如下权限类型:alter、create、createview、delete、drop、grant、index、insert、references、select、show view、update.
            4.列级grant只支持以下权限类型:insert、select、update.
            5.在grant命令中引用数据库名和主机名时,支持_和%通配符。因为_字符在Mysql数据库名中也是合法字符,所以如果在grant中用到,需要用反斜线进行转义。

3.存储引擎

        1.MyISAM:不支持事务, 不支持外键约束, 只支持全文索引,数据文件和索引文件是分开保存的, 访问速度快,对事物完整性没有要求, 适合查询、插入为主的应用场景,表级锁定形式,数据在更新时锁定整个表,数据库在读写过程中相互阻塞:串行操作,按照顺序操作,每次在读或写的时候会把全表锁起来
                会在数据写入的过程阻塞用户数据的读取(读或写无法同时进行)
                也会在数据读取的过程中阻塞用户的数据写入
                特性:数据单独写入或读取,速度过程较快且占用资源相对少
            支持3种不同的存储格式
                静态(固定长度)表:静态表是默认的存储格式。静态表中的字段都是非可变字段,这样每个记录都是固定长度的,这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多。
                动态表:动态表包含可变字段(varchar) 记录不是固定长度的,这样存储的优点是占用空间较少,但是频繁的更新、删除记录会产生碎片,需要定期执行 OPTIMIZE TABLE 语句或 myisamchk -r 命令来改善性能,并且出现故障的时候恢复相对比较困难。
                压缩表:压缩表由 myisamchk 工具创建,占据非常小的空间,因为每条记录都是被单独压缩的,所以只有非常小的访问开支。
            适用场景
                公司业务不需要事务的支持
                单方面读取或写入数据比较多的业务
                使用读写并发访问相对较低的业务
                数据修改相对较少的业务
                对数据业务一致性要求不是非常高的业务
                服务器硬件资源相对比较差

        2.InnoDB: 支持事务, 支持4个事务隔离级别
                MySQL 从5.5.5版本开始,默认的存储引擎为 InnoDB 5.5以前是 MySIAM
                读写阻塞与事务隔离级别相关
                能非常高效的缓存索引和数据
                表与主键以簇的方式存储
                支持分区、表空间,类似 oracle 数据库
                支持外键约束,5.5 前不支持全文索引,5.5 后支持全文索引
                适合对硬件资源要求还是比较高的场合
                行级锁定,但是全表扫描仍然会是表级锁定(select )update table set a=1 where user like '%lic%';
                InnoDB中不保存表的行数,如执行select count(*) from table时,InnoDB需要扫描一遍整个表来计算有多少行,但是MySIAM知识需要简单的读出保存好的行数即可,需要注意的是,当 count(*) 语句包含where条件时,MySIAM也需要扫描整个表
                对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM 表中可以和其他字段一起建立组合索引
                清空整个表时,InnoDB 是一行一行的删除,效率非常慢。MyISAM 则会重建表(truncate)
            适用场景
                业务需要事务的支持
                行级锁定对高并发有很好的适应能力,但需要确保查询时通过索引来完成
                业务数据更新较为频繁的场景,如论坛、微博等
                业务数据一致性要求较高,例如银行业务
                硬件设备内存较大,利用 InnoDB 较好的缓存能力来提高内存利用率,减少磁盘 IO 的压力

4.企业选择存储引擎的依据

        MyISAM(表级锁):开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低
        InnoDB(行级锁):开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高            
        如何选择搜索引擎
            1. 支持的字段和数据类型
                所有引擎都支持通用的数据类型
                但不是所有的引擎都支持其它的字段类型,如二进制对象
            2. 锁定类型
                表锁定:MyISAM支持
                行锁定:InnoDB
            3. 索引的支持
                建立索引在搜索和恢复数据库中的数据时能显著提高性能
                不同的存储引擎提供不同的制作索引的技术
                有些存储引擎根本不支持索引
            4. 事务处理的支持
                提高在向表中更新和插入信息期间的可靠性
                可根据企业业务是否要支持事务选择存储引擎
        总的来说,业务场景如果并发量大,建议使用 InnoDB;如果单独写入、插入或者读取操作较多,建议使用 MyISAM。    

5.存储引擎的查看与修改

        1.查看系统支持的存储引擎
            show engines;
        2.查看表使用的存储引擎
            1. show table status from 库名 where name = '表名'
            2. use 库名
               show create table 表名
        3.修改存储引擎
               use 库名
               alter table 表名 engine = MyISAM;

6.MySQL 死锁及解决方案

          锁类型
            MySQL常用存储引擎的锁机制    
                MyISAM:表级锁定
                InnoDB:行级锁定
          锁特点
                表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低
                行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高
          各种锁的使用场景
                表级锁更适合于以查询为主,只有少量按索引条件更新数据的应用,如Web应用
                行级锁则更适合于有大量按索引条件并发更新数据,同时又有并发查询的应用,如一些在线事务处理系统。
          产生死锁的原因
            所谓死锁<DeadLock>:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。表级锁不会产生死锁.所以解决死锁主要还是针对于最常用的InnoDB。
            死锁的关键在于:两个或以上Session加锁的顺序不一致
            那么对应的解决死锁的问题的关键就是 让不同的session加锁有次序

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值