这篇博客的目的是记录一些容易被忽略的MySQL的知识点,以及部分pymysql模块的注意点。
这两个是我们接触最多的sql语言,除此之外还有数据控制语言(DCL)和事务控制语言(TCL),对于事务来说,DDL语句是立刻执行、无法回滚(rollback)的,DML只有提交(commi)了才会生效。
现在有一个sql脚本,里面的部分建表语句我们已经执行过了该怎么办呢?
# 可以使用以下语句忽略已经建好的表
create table `tablename` if not exists (fields) ;
# 若是已经存在,会有一条warning
show warnings;
不过这样的语句在pymysql
模块中会抛错。
在我们实际项目中很可能会遇到很多的重复数据,那么我们如何处理这些重复数据呢?
忽略:
insert ignore into `tablename` values(...);
替换:
raplace into ...;
"""
这样做实际上会有两条记录受影响
1: 先删除原有数据
2:再插入后来的数据
"""
更新:
insert into t1 (a,b,c) values (1,2,3) on duplicate key update c=c+1;
# 等同于
update t1 set c=c+1 where a=1;
# 如果b也是唯一的
update t1 set c=c+1 where a=1 or b=2 limit 1;
无法在赋与权限的同时创建用户了!
# 8.0之前:
grant 权限们 on 数据库名.表名 to 用户名@主机名 identified by '密码';
# 8.0后 无法一步完成了
create user 用户名@主机名 identified by '密码';
grant 权限们 on 数据库名.表名 to 用户名@主机名 with grant option;
以后将取消float(M,D)
以及double(M,D)
语法。
以后将取消浮点型的auto_incremen
设置。
不推荐使用zerofill
。
补充:rlike
等同于regexp
原文:https://www.cnblogs.com/Du704/p/11673234.html