mysql 更新插入

mysql 更新插入删除--》DML

  1. 插入语句

    • insert   insert into  表名(字段) values(值);
    • insert   insert into  表名 values(值);   
    • insert into表名 set 列名 = 值,列名=值。。。
    • 支持插入多行 insert   insert into  表名 values(值),(值),(值),(值);
  2. 更新语句 修改单表的记录 (sql92)

    • update 表名 set 列 = 新值 。。。 where 筛选条件
    • 多表更新(sql99语法) 
      • update 表1 别名 inner|left|right| join 表2 别名 on 连接条件 set  列 = 值 where 筛选条件;
  3. 删除 

    • 单表删除
      • delete  from 表明 where 筛选条件;(删除一条或多条数据)删除后再插入,从断点处开始
    • 多表删除
      • truncate table 表名 (删除整张表)效率高  删除后再插入,从1处开始

DDL

  1. 库的管理
    • 创建 create    create database if not exists a
    • 修改alter    
    • 删除drop      
  2. 表的管理
  3. 常见约束
    • create table 表名(
      •  字段名 字段类型 约束)
    • 六大约束
      • NOT NULL   非空约束
      • DEFALUT     默认值约束
      • PRIMARY KEY 主键,保障字段唯一性,并且非空
      • UNIQUE 唯一性,用于保证该字段的值唯一性,可以为空
      • CHECK  mysql中不支持,检查约束
      • FOREIGN KEY 外键 ,用于限制两个表的关系,用于保证该字段的值必须来自与主表的关联列的值
    • 添加约束的时机
      • 创建表时
      • 修改表时
      • 在插入数据之前
    • 约束的添加分类
      • 列级约束:
        • 六大约束语法上都支持 ,但外键约束没有效果
      • create table stuinfo(
        id int primary key,
        stuname varchar(20) not null ,
        sex char(1) check ( sex='男' or sex = '女' ),
        seat int unique,
        age int default 18,
        majorid int REFERENCES major(id)
        );

        create table major (
        id int primary key ,
        majorName varchar(20)
        );
      • 表级约束:
        •   constraint 约束名 约束类型(字段名)
        • drop table if exists stuinfo;
          create table stuinfo(
          id int,
          stuname varchar(20),
          gender char(1),
          seat int,
          age int,
          majorid int,
          CONSTRAINT pk PRIMARY KEY(id), #主键
          CONSTRAINT uq UNIQUE(seat), #唯一
          CONSTRAINT ck CHECK ( gender='bog'or gender='girl'),#检查
          CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)#外键
          );
        • drop table if exists stuinfo;
          create table stuinfo(
          id int,
          stuname varchar(20),
          gender char(1),
          seat int,
          age int,
          majorid int,
          PRIMARY KEY(id), #主键
          UNIQUE(seat), #唯一
          CHECK ( gender='bog'or gender='girl'),#检查
          FOREIGN KEY(majorid) REFERENCES major(id)#外键
          ); 简化
      • 通用写法
        • create table if not exists stuinfo(
          id int primary key ,
          stuname varchar(20) not null ,
          sex char(1),
          age int default 18,
          seat int unique ,
          majorid int,
          CONSTRAINT fk_stuinfo_major FOREIGN KEY (majorid) REFERENCES major(id)
          )
      • 主键和唯一的对比:
        •                保证唯一性    是否允许为空     一个表中可以有多少个           是否允许组合        不推荐
        • 主键    √                       ×                            1               √      primary key(id,stuname)只有两个键一起重复的时候才会报错 
        • 唯一    √                       √                           多个                                             √           unique(seat,seat1)
      • 显示索引
        • show index from stuinfo
        • 表级操作:
          • 添加alter table a add constraint fk foreign key(id) referens fid;
          • 删除alter table a modify column bb int; alter table a drop column aa;
        • 外键:
          • 要求在从表设置外键关系
          • 从表的外键列的类型和主表的关联的类型要求一致或兼容,名称无要求
          • 从表的关联列必须时一个key 一般主键或唯一
          • 插入数据时先插入主表,再插入从表
          • 删除数据的售后,先删除从表,再删除主表
      • 标识列
        • AUTO_INCREMENT  主键自增

TCL

 

  1. 事务控制语言  Transaction Control  Language   
  2. 事务:
    • 一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行
    • a 1000                         a给b转帐100 ,a-100 b+100 两条sql update 语句组成一个执行单元,必须全部执行
    • b 1000
    • 如果事务 执行单元中,某条执行sql语句一旦执行失败或者产生错误,整个单元就会回滚,所有影响的数据将会返回到以前的状态
    • 在mysql中的数据用各种不同的技术存储在文件的内存中
    • 通过show engines 来查看mysql支持的存储引擎
    • 在mysql中用的最多的存储引擎有 innodb,myisam,memory等,innodb支持事务,而myisam和memory不支持事务
  3. 事务的ACID属性
    1. 原子性 Atumicity: 原子性是指事务时一个不可分割的工作单元,事务中的操作要么都发生,要么都不发生
    2. 一致性 Consistency: 事务必须使数据库从一个一执行状态转换到另一个一致性状态
    3. 隔离性 lsolation:事务的隔离性是指一个书屋的执行不能被其他事务干扰,事务内部的操作以及实用的数据对并发的其他事务都是隔离的,并发执行的各个事务之间不能互相干扰
    4. 持久性 Durability :持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响
  4. 事务的创建
    1. 隐式事务:事务没有明显的开启和结束 比如insert ,update,delete
    2. 显示事务:事务具有明显的开启和结束 先设置自动提交的功能    查看事务的状态  show variables like ‘autocommit’;开启事务 set autocommit  = 0;
    • 开启事务步骤
      • set autocommit = 0
      • start transaction ;   可选的
      • 编写事务中的sql语句    select insert update delete 。。。
      • 结束事务
        1. commit  提交事务
        2. rollback 回滚事务
        3. DDL和DCL语句回自动提交
        4. 用户会话正常结束
        5. 系统异常终了
      • 对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采用必要的隔离机制,就会导致各种并发问题:
        • 脏读:对于事务t1,t2 t1读取了已经被t2更新但还没有提交的字段,之后t2回滚,t1读取的内容就是临时且无效的  (更新)
        • 不可重复读:对于两个事务a,b ,a 读取了一个字段,而b恰好更新了这个字段,那么a再次读取这个字段的时候,该值时不同的
        • 幻读: 对于两个事务t1,t2 ,t1从一个表中读取一个字段,然后t2在该表中插入了一些新的数据,如果t1再次都的时候就会多出几行 (插入)
        • 数据库事务的隔离性:数据系统必须具有隔离并发运行各个事务的能力,使它们不会互相影响,避免各种并发问题
        • orcale 支持2种事务隔离级别,READ COMMITED ,SERIALIZABLE  默认事务隔离级别是 读已提交 READ COMMITED
        • mysql 支持4种事务隔离级别,mysql 默认的事务级别是 可重复读 REPEATABLE READ 
        • 查看隔离级别    select @@tx_isolation
        • 设置隔离级别   set transaction isolation level read committed
        • 设置数据库全局隔离级别  set global transcation isolation level read committed;
        • 隔离级别 描述
          读未提交 READ UNCOMMITTED 允许事务读取未被其他事务提交的变更,会出现幻读,脏读和不可重复读
          读已提交 READ COMMITTED 只允许事务读取已经被提交的变更,可以避免脏读,会出现重复读和幻读
          可重复读 REPEATABLE READ 确保可以多次从一个字段种过去相同的值,避免脏读和不可重读,幻读依然存在
          SERIALLABLE 串行 确保事务可以从一个表种读取相同的行,这个事务持续期间禁止其他事务对表进行操作,所有并发问题都会避免,但是效率低下。
  5. savepoint : 节点名:设置保存点    ID=1的数据删除了而id=6的数据没有删除,设置保存点,进行定点的回滚。

    1.  set autocommit = 0;
      delete from db01.tab1 where id = 1;
      savepoint a;
      delete from db01.tab1 where id = 6;
      rollback to a;
      select * from db01.tab1;
      commit;

 

posted @ 2021-09-14 09:31  一只小白菜。  阅读(515)  评论(0)    收藏  举报