来源
表单输入或者url传参
常见攻击方式
';
和--
SELECT * FROM adv where title='zhangsan';DROP TABLE article--'
引号和分号是为了隔离前面的sql语句,后面的--代表注释。因为最后一个'
可能会影响删表,所以使用注释不影响执行删表。注意:最后一个引号来自代码封装:原语句可能如下的写法:
$sql = "SELECT * FROM adv where title='".$_GET['title']."'";
#这句php代码因为title本身是被引号的
';'
+or
+ --
SELECT * FROM adv where title='zhangsan' or DROP TABLE article--'
注意:在PHP中的 mysql_query() 是不允许执行多个SQL语句的,但是还是可以通过or and 等语句来执行。
预防sql注入
safe_mode = on
;主键:
唯一标识一条记录,不能有重复的,不允许为空,一个表只有一个主键,用于保证数据的唯一,完整性。
外键:
表的外键是另一表的主键, 外键可以有重复的, 可以是空值,一个表可以有多个主键,用来和其他表建立关系。
索引:
分主键索引(唯一,不允许空、重复),唯一索引(唯一,可空),普通索引(可空,重复),多个索引,用于加快查询。
NULL 是一个特殊的值,在数据库中表示未知或不可用的值。它表示某个字段没有有效值,或者在查询中没有找到匹配的值。
特性:
第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;
第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余
索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。
缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。
数据库存储过程是一种数据库应用程序,它使用一组特定的SQL语句来操作数据库中的数据。存储过程可以用来提高数据库的性能,提供可重复使用的功能,以及提高数据库的安全性。
优点:
1.可以提高数据库的性能:存储过程可以提高数据库的性能,因为它可以将一组SQL语句封装为一个单独的过程,而不是每次执行SQL语句时都要重新编译它们。
2.可重复使用:存储过程可以被多次使用,这样可以节省开发时间,减少重复代码。
3.提高安全性:存储过程可以提高数据库的安全性,因为它可以限制用户对数据库的访问,同时也可以防止用户误操作数据库。
数据库视图是一种特殊的虚拟表,它的内容来自一个或多个表,可以把多个表的数据组合在一起,以便简化查询。
游标是一种用于遍历数据集的特殊对象,它可以用来查询特定的行,更新特定的行,或者删除特定的行。它可以用来检索数据库中的数据,并在过程中控制行的处理方式,一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。
视图的优点:
(1) 视图能够简化用户的操作
(2) 视图使用户能以多种角度看待同一数据;
(3) 视图为数据库提供了一定程度的逻辑独立性;
(4) 视图能够对机密数据提供安全保护。