SQL注入攻击是通过操作输入来修改SQL语句,用以达到执行代码对WEB服务器进行攻击的方法。
使用ORM框架
使用正则表达式^[a-zA-Z0-9]+$对输入进行验证,只能是数字和字母
使用占位符?进行站位,使注入失效
是指搜索系统自动按照用户输入关键词的同义词进行模糊检索,从而得出较多的检索结果。
select * from student where sname like '%张%'
1、条件删除
delete是带where的可以按条件删除,但truncate是删除整张表
2、事务回滚
delete是数据库操作语言,操作时会放到rollback segment中,可以被回滚,而truncate是数据定义语言,操作时不会进行存储,不能进行回滚
3、清理速度
少量数据下速度差距不大
大量数据下
delete要回滚,还要记录日志,所以速度较慢,但也相对安全
truncate不需要支持回滚,所以速度较快
4、高水位重置
随着不断地进行表记录的DML操作,会不断提高表的高水位线(HWM),delete操作之后虽然表的数据删除了,但是并没有降低表的高水位,随着DML操作数据库容量也只会上升,不会下降。所以如果使用delete,就算将表中的数据减少了很多,在查询时还是很和delete操作前速度一样。
而truncate操作会重置高水位线,数据库容量也会被重置,之后再进行DML操作速度也会有提升。
表级锁:MySQL中锁定力度最大的一种锁,对当前操作的整张表加锁,实现简单,资源消耗也少,加锁速度快,不会出现死锁,出发锁冲突的概率最高,并发度最低,MyISAM和InnoDB引擎都支持
行级锁:MySQL中锁定力度最小的一种锁,并发度最小,但加锁开销也大,加锁慢,会出现死锁
内联查询:
也成为内连接,它仅返回两个表中匹配成功的记录,换句话说,只有在表A中的行与表B中的行在指定的连接列上匹配时,这条记录才会出现在结果集中。内联查询不包含任何一个表中不匹配的行。例如,假设有两个表:员工表(Employees)和部门表(Departments)。员工表中有员工ID和姓名,部门表中有部门ID和部门名称。当执行“SELECT * FROM Employees INNER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID”这样的内联查询时,结果集将包含所有在两个表中都存在的员工及其部门信息。
外联查询:
外联查询包括左外连接(Left Outer Join)、右外连接(Right Outer Join)和全外连接(Full Outer Join)。
左外连接(Left Outer Join):
左外连接返回左表(A)的所有记录,即使右表(B)中没有匹配的记录。如果右表中有匹配的记录,则结果集中会显示左表的记录以及右表中匹配到的记录。例如,执行“SELECT * FROM Employees LEFT OUTER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID”时,即使某些员工没有分配部门,他们也会出现在查询结果中,其部门信息为NULL。
右外连接(Right Outer Join):
右外连接与左外连接相反,它返回右表(B)的所有记录,即使左表(A)中没有匹配的记录。如果左表中有匹配的记录,则结果集中会显示右表的记录以及左表中匹配到的记录。例如,“SELECT * FROM Employees RIGHT OUTER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID”将返回所有部门,即使某些部门没有员工。
全外连接(Full Outer Join): 全外连接结合了左外连接和右外连接的特点,返回两个表中所有的记录。如果一方有匹配的记录,则结果集中会显示匹配的记录;如果没有匹配,则显示NULL。例如,“SELECT * FROM Employees FULL OUTER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID”将返回所有员工及其部门信息,以及所有部门,即使某些部门没有员工或者某些员工没有分配部门。
select (*|指定字段) from 左表 left join 从表 on 匹配条件;
可以配合where语句、order by语句、逻辑语句等一起使用
MySQL 5.5 版本之前,MyISAM 引擎是 MySQL 的默认存储引擎,但是,MyISAM 不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复;
MySQL 5.5 版本之后,MySQL 引入了 InnoDB(事务型数据库引擎),MySQL 5.5 版本后默认的存储引擎为 InnoDB;
事务:MyISAM不支持事务;InnoDB是事务型引擎,可以使用Commit和Rollback
并发:MyISAM只支持表级锁,而InnoDB支持行级锁,和表级锁,默认为行级锁。
外键:MyISAM不允许创建外键,而InnoDB支持外键
备份:InnoDB支持在线热备份
崩溃恢复:MyISAM崩溃后发生损坏的概率比InnoDB高很多,而且恢复的速度也慢很多。
1、关键字不同
b树每一个关键字有且只出现一次,且所有关键字按照从小到大的顺序进行排列。
而b+树有n棵子树的非叶节点,有n个关键字,关键字会存储重复。非叶节点只保存关键字,仅包含子树的最大或者最小的关键字,只用来索引,关键字从小到大排列。
2、存储内容不同
b树每个节点除了存储关键字,还存储数据。
b+树所有叶子节点存储内容包含全部的关键字信息,以及指向关键字记录的指针。
3、查找不同
b树查找相当于二分查找,可以在非叶节点结束,且若经常访问的元素离根节点较近,则访问更加迅速。
而b+树的查找路径是由根到叶子节点,每次查找路径长度比较稳定。
#{}:是占位符
可以防止sql注入
动态获取id的时候获取的是"?"
默认值为arg0,arg1或param1,param2
${}:是拼接符
不能防止sql注入
动态获取id的时候获取的是1
默认值为param1,param2