SQL基础06

时间:2020-05-08 19:31:28   收藏:0   阅读:39

昨日内容回顾

pymysql补充

# 1.针对增删改 pymysql需要二次确认才能真正的操作数据
import pymysql
?
?
conn = pymysql.connect(
   host = ‘127.0.0.1‘,
   port = 3306,
   user = ‘root‘,
   passwd = ‘123456‘,
   db = ‘day48‘,
   charset = ‘utf8‘,
   autocommit = True
)
cursor = conn.cursor(pymysql.cursors.DictCursor)
?
# 增
sql = ‘insert into user(name,password) values(%s,%s)‘
# rows = cursor.execute(sql,(‘jackson‘,123))
rows = cursor.executemany(sql,[(‘xxx‘,123),(‘ooo‘,123),(‘yyy‘,123)])
print(rows)
# conn.commit() # 确认

# 修改
# sql = ‘update user set name="jasonNB" where id=1‘
# rows = cursor.execute(sql)
# print(rows)
# conn.commit() # 确认

# 删除
sql = ‘delete from user where id=7‘
rows = cursor.execute(sql)
print(rows)
conn.commit()  # 确认

# 查
# sql = ‘select * from user‘
# cursor.execute(sql)
# print(cursor.fetchall())
?
"""
增删改查中
  删改增它们的操作设计到数据的修改
  需要二次确认
"""
?
?
# 还可以一次性插入N多条数据
rows = cursor.executemany(sql,[(‘xxx‘,123),(‘ooo‘,123)])









今日内容概要

今日内容基本都是了解知识点,作为一名开发人员你在工作中基本用不到

 

今日内容详细

视图(了解)

 

 

 

 

触发器(了解)

在满足对表数据进行增、删、改的情况下,自动触发的功能

使用触发器可以帮助我们实现监控、日志...

触发器可以在六种情况下自动触发 增前 增后 删前删后 改前改后

 

 

基本语法结构

create trigger 触发器的名字  before/after insert/update/delete on 表名
for each row
begin
    sql语句
end

# 具体使用 针对触发器的名字 我们通常需要做到见名知意
# 针对增
create trigger tri_before_insert_t1  before insert on t1
for each row
begin
    sql语句
end
create trigger tri_after_insert_t1  after insert on t1
for each row
begin
    sql语句
end
"""针对删除和修改 书写格式一致"""

ps:修改MySQL默认的语句结束符  只作用于当前窗口
    delimiter $$  将默认的结束符号由;改为$$
    delimiter ;
    
# 案例
CREATE TABLE cmd (
    id INT PRIMARY KEY auto_increment,
    USER CHAR (32),
    priv CHAR (10),
    cmd CHAR (64),
    sub_time datetime, #提交时间
    success enum (yes, no) #0代表执行失败
);

CREATE TABLE errlog (
    id INT PRIMARY KEY auto_increment,
    err_cmd CHAR (64),
    err_time datetime
);
"""
当cmd表中的记录succes字段是no那么就触发触发器的执行去errlog表中插入数据
NEW指代的就是一条条数据对象
"""
delimiter $$
create trigger tri_after_insert_cmd after insert on cmd 
for each row
begin
    if NEW.success = no then
        insert into errlog(err_cmd,err_time) values(NEW.cmd,NEW.sub_time);
    end if;
end $$
delimiter ;

# 朝cmd表插入数据
INSERT INTO cmd (
    USER,
    priv,
    cmd,
    sub_time,
    success
)
VALUES
    (jason,0755,ls -l /etc,NOW(),yes),
    (jason,0755,cat /etc/passwd,NOW(),no),
    (jason,0755,useradd xxx,NOW(),no),
    (jason,0755,ps aux,NOW(),yes);

# 删除触发器
drop trigger tri_after_insert_cmd;

 

 

 

事务

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原文:https://www.cnblogs.com/lucky-cat233/p/12852535.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!