mysql记录操作

1 概览

MySQL数据操作: DML

在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括

  1. 使用INSERT实现数据的插入
  2. UPDATE实现数据的更新
  3. 使用DELETE实现数据的删除
  4. 使用SELECT查询数据。

2 插入数据

#1. 插入完整数据(顺序插入)
    语法一:
    INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n);

    语法二:
    INSERT INTO 表名 VALUES (值1,值2,值3…值n);

#2. 指定字段插入数据
    语法:
    INSERT INTO 表名(字段1,字段2,字段3…) VALUES (值1,值2,值3…);

#3. 插入多条记录
    语法:
    INSERT INTO 表名 VALUES
        (值1,值2,值3…值n),
        (值1,值2,值3…值n),
        (值1,值2,值3…值n);
        
#4. 插入查询结果
    语法:
    INSERT INTO 表名(字段1,字段2,字段3…字段n) 
                    SELECT (字段1,字段2,字段3…字段n) FROM 表2
                    WHERE …;

3 更新数据

#语法:
    UPDATE 表名 SET
        字段1=值1,
        字段2=值2,
        WHERE CONDITION;

#示例:
    UPDATE mysql.user SET password=password(‘123’) 
        where user=’root’ and host=’localhost’;

4 删除数据

#语法:
    DELETE FROM 表名 
        WHERE CONITION;

#示例:
    DELETE FROM mysql.user 
        WHERE password=’’;

5 查询数据

1.单表查询

单表查询(https://www.cnblogs.com/Eva-J/articles/9688313.html) 

2.联表查询

多表查询(https://www.cnblogs.com/Eva-J/articles/9688383.html) 

6 视图

#1、什么是视图
视图就是通过查询得到一张虚拟表,然后保存下来,下次用的直接使用即可

#2、为什么要用视图
如果要频繁使用一张虚拟表,可以不用重复查询

#3、如何用视图

create view teacher2course as
select * from teacher inner join course
on teacher.tid = course.teacher_id;

drop view teacher2course;

#强调
1、在硬盘中,视图只有表结构文件,没有表数据文件
2、视图通常是用于插叙,尽量不要修改视图中的数据

7 触发器

  在满足对某张表数据的增、删、改的情况下,自动触发的功能称之为触发器 

  为何要用触发器?

  答: 触发器专门针对我们对某一张表数据增insert、删delete、改update的行为,这类行为一旦执行就会触发触发器的执行,即自动运行另外一段sql代码

#语法:
delimiter //
create trigger trigger名     after/before   insert/delete/update   on 表名 for each row
begin
    sql代码。。。
END //
delimiter ;

# 解释:
#after  事件执行之后触发   before 事件执行之前触发
#触发事件 insert delete update操作,触发触发器执行
#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
);

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 ;


#当使用update语句的时候,当修改原表数据的时候相对于修改数据后表的数据来说原表中修改的那条数据就是OLD对象,
#而修改数据后表被修改的那条数据就是NEW对象
 
#往表cmd中插入记录,触发触发器,根据IF的条件决定是否插入错误日志
INSERT INTO cmd (
    USER,
    priv,
    cmd,
    sub_time,
    success
)
VALUES
    ('egon','0755','ls -l /etc',NOW(),'yes'),
    ('egon','0755','cat /etc/passwd',NOW(),'no'),
    ('egon','0755','useradd xxx',NOW(),'no'),
    ('egon','0755','ps aux',NOW(),'yes');

drop trigger tri_after_insert_cmd;
示例

8 事务  

  开启一个事务可以包含一些sql语句,这些sql语句要么同时成功,要么一个都别想成功,称之为事务的原子性

  开启事务之后,只要没有执行commit操作,都没有真正存储到硬盘,在commin提交事务之前,可以用 rollback 操作回滚数据。

# 语法:

delimiter //
create procedure p4(
    out status int
)
BEGIN
    1. 声明如果出现异常则执行{
        set status = 1;
        rollback;
    }
       
    开始事务
        -- 由秦兵账户减去100
        -- 方少伟账户加90
        -- 张根账户加10
        commit;
    结束
    set status = 2;
      
END //
delimiter ;
create table user(
id int primary key auto_increment,
name char(32),
balance int
);

insert into user(name,balance)
values
('wsb',1000),
('egon',1000),
('ysb',1000);

try:
    update user set balance=900 where name='wsb';    #买支付100元
    update user set balance=1010 where name='egon'; #中介拿走10元
    update user set balance=1090 where name='ysb';   #卖家拿到90元
except 异常:
    rollback;
else:        # 正确的话执行
    commit;
示例

 

 

转载于:https://www.cnblogs.com/timetellu/p/10716770.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值