mysql 更新插入
mysql 更新插入删除--》DML
-
插入语句
- insert insert into 表名(字段) values(值);
- insert insert into 表名 values(值);
- insert into表名 set 列名 = 值,列名=值。。。
- 支持插入多行 insert insert into 表名 values(值),(值),(值),(值);
-
更新语句 修改单表的记录 (sql92)
- update 表名 set 列 = 新值 。。。 where 筛选条件
- 多表更新(sql99语法)
- update 表1 别名 inner|left|right| join 表2 别名 on 连接条件 set 列 = 值 where 筛选条件;
-
删除
- 单表删除
- delete from 表明 where 筛选条件;(删除一条或多条数据)删除后再插入,从断点处开始
- 多表删除
- truncate table 表名 (删除整张表)效率高 删除后再插入,从1处开始
- 单表删除
DDL
- 库的管理
- 创建 create create database if not exists a
- 修改alter
- 删除drop
- 表的管理
- 常见约束
- 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 一般主键或唯一
- 插入数据时先插入主表,再插入从表
- 删除数据的售后,先删除从表,再删除主表
- 列级约束:
- create table 表名(
-
-
- 标识列
-
AUTO_INCREMENT 主键自增
-
- 标识列
-
TCL
- 事务控制语言 Transaction Control Language
- 事务:
- 一个或一组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不支持事务
- 事务的ACID属性
- 原子性 Atumicity: 原子性是指事务时一个不可分割的工作单元,事务中的操作要么都发生,要么都不发生
- 一致性 Consistency: 事务必须使数据库从一个一执行状态转换到另一个一致性状态
- 隔离性 lsolation:事务的隔离性是指一个书屋的执行不能被其他事务干扰,事务内部的操作以及实用的数据对并发的其他事务都是隔离的,并发执行的各个事务之间不能互相干扰
- 持久性 Durability :持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响
- 事务的创建
- 隐式事务:事务没有明显的开启和结束 比如insert ,update,delete
- 显示事务:事务具有明显的开启和结束 先设置自动提交的功能 查看事务的状态 show variables like ‘autocommit’;开启事务 set autocommit = 0;
- 开启事务步骤
- set autocommit = 0
- start transaction ; 可选的
- 编写事务中的sql语句 select insert update delete 。。。
- 结束事务
- commit 提交事务
- rollback 回滚事务
- DDL和DCL语句回自动提交
- 用户会话正常结束
- 系统异常终了
- 对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采用必要的隔离机制,就会导致各种并发问题:
- 脏读:对于事务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 串行 确保事务可以从一个表种读取相同的行,这个事务持续期间禁止其他事务对表进行操作,所有并发问题都会避免,但是效率低下。
-
savepoint : 节点名:设置保存点 ID=1的数据删除了而id=6的数据没有删除,设置保存点,进行定点的回滚。
- 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;
- set autocommit = 0;

浙公网安备 33010602011771号