热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql43

今天我们说了一个pymysql比如写一个登陆验证:写sql语句的时候,%传值的时候,需要加引号:sqlselect*f

今天我们说了一个pymysql

比如写一个登陆验证:
写sql语句的时候,% 传值的时候,需要加引号:
  sql="select* from t4 where name = '%s' and pwd = '%s' " %(username,pwd)

 

上面的sql语句带来的风险是:
 列一:

username = zekai ' #

select * from t4 where name = 'zekai' #' and pwd = ' '

 

例二:

username = dbsahvbdsha ' or 1=1 #

select * from t4 where name = 'dbsahvbdsha ' or 1=1

 

以上俩个例子出现的问题我们称之为sql注入:为什么会出现这样的问题

因为太过于相信用户的输入,导致我们在接受用户输入参数的时候,并没有对他进行转义

 

那么如何解决sql注入:
1.自己手工对用户输入的值进行转义

2.使用execute()自动进行过滤

sql = "select * from t4 where name = %s and pwd = %s"

cursor.execute(sql,(username,pwd))

#插入多条

data=[

('hduqiw' , 'djajie'),

('deuyfcj' , 'dequcj'),

('dguyajc' , 'dqwd')

]

cursor.executemany(sql,data) 

 

try:
   cursor.execute(sql,('lxxx' , '123'))

那么删除和更新的时候,需要实物提交

  conn.commit()

except Exception as e:
  conn.rollback()

 

cursor.lastrowid: 最后一行的行数

 

 

第二个说了一个事务:一组操作,要么成功要么失败

特性:
  原子性:一组操作要么都成功,要么都失败

  一致性(Consistency):指事务发生前和发生后,数据的总额依然匹配

  隔离性(Isolation):简单点说,某个事务的操作对于其他事务不可见的

  持久性(Durability):当事务完成后,其影响应该保留下来,不能撤销,

            只能通过“另开起一个事务“来抵消之前的错误

 

应用的场景:

  思考:

    我去银行给朋友汇款,

    我卡上有1000元,

    朋友卡上有500元,

    我给朋友转账100元(不需要手续费)

    如果,网线断了,我的钱刚扣,但是朋友的钱没加,怎么办?    

  

create table t11 (
id int auto_increment primary key,
name varchar(32) not null default '',
money int not null default 0
)engine=Innodb charset=utf8;

insert into t11 (name,money) values ('zekai', 1000), ('eagon', 500);

解决方法:

  开启事务(start  transaction)

  (执行sql操作)

   commit :提交上面的sql ,让其生效

   rollback :回滚

   show full tables;显示全部类型

 

 

  

下面这些了解:

视图:

产生的原因:
如果有一个SQL语句频繁的会被使用到,比如说:
select * from t4 where id>12 and id <24;

搞一个映射,或者取一个别名
select * from t4 where id>12 and id <24 &#61;&#61;&#61; > v1
视图:

select * from v1;

创建视图:

create view v1 as select * from t4 where id>12 and id <24;

修改视图:
alter view v1 as sql语句;

删除视图:
drop view v1;


问题:
如果原生的表数据发生了变化, 那视图会不会发生变化? 也会变化

视图中的数据会不会发生修改? 不会发生修改

应用场景:

MySQL: (DBA)
生成视图View

程序:
调用 select * from v1;



函数:

不要轻易使用

在程序中, 用代码计算, 计算好了, 再传给SQL语句执行


存储过程:

将一大堆 SQL 语句进行封装, 类似于函数, 结果就是存储过程

MySQL服务端:
DBA (写)


a. 简单的存储过程:
delimiter //
create procedure p1()
BEGIN
select * from t11;
END //
delimiter ;

程序:
call p1();

b. 传参数: (in)
delimiter //
create procedure p2(
in n1 int,
in n2 int
)
BEGIN
select * from t11 where id > n1;
END //
delimiter ;

程序:
call p2(12, 2)

c. 传入参数: (out)

delimiter //
create procedure p3(
in n1 int,
out n2 int
)
BEGIN
select * from t11 where id > n1;
set n2 &#61; 1;
END //
delimiter ;


set &#64;v2&#61;123212;
call p3(12, &#64;v2);

select &#64;v2;


触发器:

向用户表中添加一条数据的同时, 在日志表中也添加一条记录

delimiter //
CREATE TRIGGER t1 BEFORE INSERT ON t7 FOR EACH ROW
BEGIN
insert into t11 (name, money) values (&#39;xxx&#39;, 1234);
END //
delimiter ;

 

 

 

 

 

 

 

 

 

 

 

 

转:https://www.cnblogs.com/zahngyu/p/11040111.html



推荐阅读
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 在HTML布局中,即使将 `top: 0%` 和 `left: 0%` 设置为元素的定位属性,浏览器中仍然会出现空白填充。这个问题通常与默认的浏览器样式、盒模型或父元素的定位方式有关。为了消除这些空白,可以考虑重置浏览器的默认样式,确保父元素的定位方式正确,并检查是否有其他CSS规则影响了元素的位置。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 本文详细介绍了在 Oracle 数据库中使用 MyBatis 实现增删改查操作的方法。针对查询操作,文章解释了如何通过创建字段映射来处理数据库字段风格与 Java 对象之间的差异,确保查询结果能够正确映射到持久层对象。此外,还探讨了插入、更新和删除操作的具体实现及其最佳实践,帮助开发者高效地管理和操作 Oracle 数据库中的数据。 ... [详细]
  • 在关系型数据库中,数据约束是指在向数据表中插入数据时必须遵循的限制条件。在MySQL和MariaDB中,常见的数据约束包括主键约束、唯一键约束、外键约束以及非空约束等。这些约束确保了数据的完整性和一致性,是数据库管理中的重要组成部分。通过合理设置和使用这些约束,可以有效防止数据冗余和错误,提升数据库的可靠性和性能。 ... [详细]
  • 如何有效防御网站中的SQL注入攻击
    本期文章将深入探讨网站如何有效防御SQL注入攻击。我们将从技术层面详细解析防范措施,并结合实际案例进行阐述,旨在帮助读者全面了解并掌握有效的防护策略。希望本文能为您的网络安全提供有益参考。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • 触发器的稳态数量分析及其应用价值
    本文对数据库中的SQL触发器进行了稳态数量的详细分析,探讨了其在实际应用中的重要价值。通过研究触发器在不同场景下的表现,揭示了其在数据完整性和业务逻辑自动化方面的关键作用。此外,还介绍了如何在Ubuntu 22.04环境下配置和使用触发器,以及在Tomcat和SQLite等平台上的具体实现方法。 ... [详细]
  • 在将Excel数据导入MySQL数据库的过程中,如何确保不会生成重复记录?本文介绍了一种方法,通过PHP脚本检查数据库中是否存在相同的“Code”字段值,从而避免重复记录的产生。该方法不仅提高了数据导入的准确性,还增强了系统的健壮性。 ... [详细]
  • MyISAM和InnoDB是MySQL中最为广泛使用的两种存储引擎,每种引擎都有其独特的优势和适用场景。MyISAM引擎以其简单的结构和高效的读取速度著称,适用于以读操作为主、对事务支持要求不高的应用。而InnoDB引擎则以其强大的事务处理能力和行级锁定机制,在需要高并发写操作和数据完整性的场景下表现出色。选择合适的存储引擎应综合考虑业务需求、性能要求和数据一致性等因素。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 提升Android开发效率:Clean Code的最佳实践与应用
    在Android开发中,提高代码质量和开发效率是至关重要的。本文介绍了如何通过Clean Code的最佳实践来优化Android应用的开发流程。以SQLite数据库操作为例,详细探讨了如何编写高效、可维护的SQL查询语句,并将其结果封装为Java对象。通过遵循这些最佳实践,开发者可以显著提升代码的可读性和可维护性,从而加快开发速度并减少错误。 ... [详细]
author-avatar
M-G思维_891
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有