mysql插入用户表的新建用户方式失败,如何修改严格模式,使它插入成功?
1.通过设置sql mode, 可以完成不同严格程度的数据校验,有效地保障数据准备性。
2 通过设置sql model 为宽松模式,来保证大多数sql符合标准的sql语法,这样应用在不同数据库之间进行迁移时,即使插入的数据是错误的,也不会报错。
做法如下:
在my.cnf添加如下配置
[mysqld]
sql_mode=‘ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,PIPES_AS_CONCAT,ANSI_QUOTES’
MySQL5.6和MySQL5.7默认的sql_mode模式参数是不一样的,5.6的mode是NO_ENGINE_SUBSTITUTION,其实表示的是一个空值,相当于没有什么模式设置,可以理解为宽松模式。5.7的mode是STRICT_TRANS_TABLES,也就是严格模式。
2.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’;
3.truncate与delete有什么区别?
1.truncate
删除表中的内容,不删除表结构,释放空间;
2.delete
删除内容,不删除表结构,但不释放空间
区别
3.1内存空间
truncate删除数据后重新写数据会从1开始,而delete删除数据后只会从删除前的最后一行续写;内存空间上,truncate省空间
3.2处理速度
因为,truncate是直接从1开始,即全部清空开始,而delete需要先得到当前行数,从而进行续写;所以truncate删除速度比delete快;
3.3语句类型
delete属于DML语句,而truncate和drop都属于DDL语句,这造成了它们在事务中的不同现象:
delete在事务中,因为属于DML语句,所以可以进行回滚和提交操作(由操作者) truncate和drop则属于DDL语句,在事务中,执行后会自动commit,所以不可以回滚;
3.4语法
delete from 表名 (where…可写可不写,写的话进行选择性删除,不选清空表中数据)
truncate 表名(删除表中的数据,无法回滚的)
delete可以在后续加上where进行针对行的删除 truncate和drop后面只能加上表名,直接删除表,无法where
注意:并且drop和truncate不能够激活触发器,因为该操作不记录各行删除;
drop table 表名 删除表,内容连带结构一起删除;
3.存储过程
MySQL 5.0 版本开始支持存储过程。
存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。 存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。 存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。
优点
存储过程可封装,并隐藏复杂的商业逻辑。
存储过程可以回传值,并可以接受参数。
存储过程无法使用 SELECT 指令来运行,因为它是子程序,与查看 表,数据表或用户定义函数不同。
存储过程可以用在数据检验,强制实行商业逻辑等。
创建存储过程
DELIMITER $
CREATE PROCEDURE tesa2()
BEGIN
#声明变量类型
DECLARE un VARCHAR(32) DEFAULT '';
#赋值
SET un='abc';
#将查询结果赋值给un
SELECT username INTO un FROM student WHERE stuid=1;
#查询un变量,返回
SELECT un;
END $
DELIMITER ;
#调用
CALL tesa2()
创建存储过程 变量作用域
#创建存储过程 变量作用域
DELIMITER $
CREATE PROCEDURE tesa3()
BEGIN
BEGIN
#声明变量类型
DECLARE un VARCHAR(32) DEFAULT '';
#赋值
SET un='abc';
#将查询结果赋值给un
SELECT username INTO un FROM student WHERE stuid=1;
#查询un变量,返回
SELECT un;
END;
BEGIN
#声明变量类型
DECLARE un VARCHAR(32) DEFAULT '';
#赋值
SET un='abc';
#将查询结果赋值给un
SELECT username INTO un FROM student WHERE stuid=2;
#查询un变量,返回
SELECT un;
END;
END $
DELIMITER ;
#调用
CALL tesa3()
B+树的存储过程:
B+树是B-树的变体,也是一种多路搜索树:
1.其定义基本与B-树同,除了:
2.非叶子结点的子树指针与关键字个数相同;
3.非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树
4.B-树是开区间;
5.为所有叶子结点增加一个链指针;
6.所有关键字都在叶子结点出现;
如:(M=3)