严格模式,导致mysql插入用户表的方式新建用户失败,那么如何修改严格模式,让他插入成功
解决方法:修改配置文件
把
sql-mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
改成
sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
然后重启mysql服务:service mysql restart。
但是为了数据库的安全,mysql默认是禁止用insert来创建用户的,那么我们也应该避免用插入的方式来创建用户。正确的创建用户的方式是:create mysql.user ‘userName’@‘ip’ identified by ‘password’;。userName:新建用户的账号;ip:指定新建用户登录数据库的IP,如果不做登录IP限制,则用%表示;password:新建用户的密码。
grant all on . to ‘yinke’ @ ‘%’ identified by 'yinke123 ';尝试将all改成select权限,并且将.改成指定数据库
将权限all改成select权限
grant select on testdb.* to ‘iap’@‘%’;
grant select on .# 这里的.也类似,表示指定数据库下的指定数据表
grant select on ‘yinke’ identified by ‘yinke123’;
truncate与delete有什么区别
1.truncate
删除表中的内容,不删除表结构,释放空间;
2.delete
删除内容,不删除表结构,但不释放空间
区别:
①内存空间
truncate删除数据后重新写数据会从1开始,而delete删除数据后只会从删除前的最后一行续写;内存空间上,truncate省空间
②处理速度
因为,truncate是直接从1开始,即全部清空开始,而delete需要先得到当前行数,从而进行续写;所以truncate删除速度比delete快;
③语句类型
delete属于DML语句,而truncate和drop都属于DDL语句,这造成了它们在事务中的不同现象:
1.delete在事务中,因为属于DML语句,所以可以进行回滚和提交操作(由操作者)
2.truncate和drop则属于DDL语句,在事务中,执行后会自动commit,所以不可以回滚;
④delete from 表名 (where…可写可不写,写的话进行选择性删除,不选清空表中数据)
truncate 表名(删除表中的数据,无法回滚的)
1.delete可以在后续加上where进行针对行的删除
2.truncate和drop后面只能加上表名,直接删除表,无法where
注意:并且drop和truncate不能够激活触发器,因为该操作不记录各行删除;
drop table 表名
删除表,内容连带结构一起删除;