MySQL 相关
MySQL相关知识
一、表类型分析(MyISAM和InnoDB的区别)
1.存储结构
MyISAM:每个MyISAM在磁盘上存储成三个文件,每一个文件的名字均以表名开始。扩展名支出文件类型。.frm文件存储表定义,.MYD(mydata)文件存储表的数据,.MYI(myindex)文件存储表的索引
InnoDB:所有的表都存储在一个数据文件中(也有可能是多个文件,或者是独立的表文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2G
2.存储空间
MyISAM:可以被压缩,存储空间较小。支持三种不同的存储格式:静态表、动态表、压缩表
InnoDB:需要更多的内存和存储,会在主内存中建立其专用的缓冲池用来高速缓冲数据和索引,但是不支持全文索引
3.事务支持(事务的四大特性:原子性,一致性,隔离性,持久性)
MyISAM:强调的是性能,每次查询均具有原子性,其执行速度比InnoDB类型更快,但是不提供事务支持
InnoDB:提供事务支持,外部键等高级数据库功能,是具有事务(commit)、回滚(rollback)和崩溃修复功能(crash recovery capabilities)的事务安全(transcation-safe)型表
4.CURD增删改查操作(create,update,read,delete)
MyISAM:如果执行大量的select操作,MyISAM是更好的选择,因为不支持行级锁,但是在增删的时候效率就会差好多,因为MyISAM支持表级锁。相反的是InnoDB支持行级锁但是不支持表级锁,所以删除插入的时候只需要锁定行就行,效率比较MyISAM高。
InnoDB:如果执行大量的insert和update,处于对于性能的考虑,应该使用InnoDB。
Delete从性能上来看InnoDB更优秀,但是delete from table的时候,InnoDB不会重新建立表,而是一行一行的删除,所以在InnoDB表上如果要清空保存有大量数据的表,最好使用truncate table命令
5.外键
MyISAM:不支持
InnoDB:支持
二、数据库的特点
1.数据结构化,具有完整性:防止数据库中存在不符合语义的数据及不正确的数据
2.数据的共享性高、冗余度低、易扩展
3.数据独立性高
4.数据有DBMS统一管理和控制
三、数据库的优化
1.选取最适合的字段属性,尽可能减少定义字段的长度,把字段设置为NOT NULL ,但是省份这些可选的字段,尽量设置成EUNM枚举类型字段
2.使用联合(union)来代替手动创建的临时表
3.使用事务处理,保证数据的完整性和安全性
4.合理使用查询语句,尽量避免全表扫描
5.建立索引
6.使用外键
7.https://blog.csdn.net/u014649204/article/details/24126871
四、SQL注入原理及如何防止SQL注入攻击
1.SQL注入原理
将SQL命令扎入到web表单然后提交到所在页面请求(查询字符串),从而达到欺骗服务器执行恶意的SQL命令语句。它是利用现有的应用程序,将SQL语句插入到数据库中执行,所以执行的时候并非按照设计者原先意图的SQL语句进行执行查询。
2.SQL注入攻击产生的原因
程序并没有非常细致的过滤用户输入的数据,从而导致非法数据进入系统。SQL注入可以分为平台层注入和代码注入,平台层注入主要是由不安全的数据库配置和系统的漏洞造成的,代码注入主要是因为程序员卫队输入数据进行细致安全的检测。使得SQL注入攻击通过嵌入的方式放在了合法的HTTP提交请求中从而达到攻击者的某种意图。
3.基本步骤
基本步骤:
一、找到注入点;
二、判断当前表的字段;
三、用联合语句查看哪几位是有效位;
四、查看当前数据库中有哪些表;
五、查看表中有哪些属性;
六、查看表中具体的数据信息。