DML对表的数据增删改
对表数据的增删改
增加
insert into 表名 values(值,值,值);
insert into 表(列,列..) values(值,值..)<br>
删除
delete from 表 [where 条件]<br>
修改
update 表 set 列 =值, 列 =值 [where 条件]<br>
delete和truncate的区别<br>
delete 删除表中的数据,表结构还在; 删除后的数据可以找回,一条一条的删除.<br>
truncate 删除是把表直接drop掉,然后再创建一个同样的新表。删除的数据不能找回。执行速 度比delete快
注意事项
工作里面的删除 物理删除: 真正的删除了, 数据不在, 使用delete就属于物理删除<br> 逻辑删除: 没有真正的删除, 数据还在. 搞一个标记, 其实逻辑删除是更新 eg: status 1 启用 0 禁用
事务
概念
逻辑上的一组操作,组成这组操作的单元要么全部成功,要么全部失败<br>
事务管理
mysql默认开启事务
一条sql语句就是一个事务
手动开启事务
方式一
rollback;回滚 <br>
commit;提交 <br>
start transaction;开启事务
方式二
查看MYSQL中事务是否自动提交 ,show variables like '%commit%'<br>
设置自动提交的参数为OFF ,set autocommit = 0;-- 0:OFF 1:ON1<br>
回滚点
概念
在某些成功的操作完成之后,后续的操作有可能成功有可能失败,但是不管成功还是失败,前面操作 都已经成功,可以在当前成功的位置设置一个回滚点。可以供后续失败操作返回到该位置,而不是返回 所有操作,这个点称之为回滚点。 <br>
回滚点的操作语句 <br>
设置回滚点:savepoint 名字<br>
回到回滚点:rollback to 名字<br>
总结<br>
设置回滚点可以让我们在失败的时候回到回滚点,而不是回到事务开启的时候
应用场景
插入大量的数据的时候. 1亿条数据 需要插入很久. 要求: 1亿条数据是一个整体,要么全部插入成功的 要么都不插入成功<br>
事务的特性
原子性A
事务是一组不可分割的工作单位,事务中的操作要么全部成功,要么全部失败<br>
隔离性I
多个并发事务之间数据要相互隔离,不会相互影响,事务之间互不干扰<br>
持久性D
一旦事务提交之后,对数据库的数据改变是永久性的,接下来即使数据库发生故障,也不会受影响<br>
事务的隔离级别
不考虑隔离级别会现3中情况
不可重复读
在一个事务中多次读取数据内容不一致,而我们要求读取的结果一致。一般由update更新导致的<br>
幻读
在一个事务中多次读取数据的数量不相同,而我们要求读取的数量相同。insert和delete导致的
隔离级别
读未提交 read uncommitted
会出现脏读、不可重复读和幻读
设置隔离级别读已提交解决脏读、但不能解决不可重复读和幻读
读已提交 read committed
会出现不可重复读和幻读
设置隔离级别为可重复读解决可重复读,但不能解决幻读
备份和还原
备份
备份数据库
mysqldump -u root - p 密码 数据库名 >路径<br>
备份表
mysqldump - u root - p 密码 数据库名 表名 >路径
还原
登录数据库 mysql -u root - p 密码<br>source 文件路径<br>
开启binlog日志
常见函数
if(expr1,expr2,expr3):expr1为true就返回 expr2, 否则返回expr3<br>除了0和null之外都返回1,否者否则返回0 ---弱语言类型<br>
ifnull(expr1,expr2) : expr1不为null,就返回它。否则就返回expr2(聚合函数忽略空值可以用)<br>
concat(str1, str2, ...) : 连接起来
concat_ws(separator, str1, str2, ...)
upper(str)<br>
lower(str)
trim(str) 移除两侧空格
substr()
current_date()<br>
current_time()
now()
#2的3次方select pow(2,3)<br>
#随机函数select rand()
#向下取整select floor(3.14)
#向上取整select ceil(3.1)