解决MySQL Got a packet bigger than 'max_allowed_packet' bytes

问题在一次性向mysql插入的数据过大,可在my.ini中修改max_allowed_packet的配置项

修改my.ini如下:

max_allowed_packet=16M

重启mysql:

电脑->右键管理->服务->mysql重启

mysql排序按照中文文字的首字母进行排序

例如:下面使用字段common_producer_herb_info_name按照首字母a-z进行排序

SELECT * FROM e_common_producer_product_grade_info ORDER BY  CONVERT(common_producer_herb_info_name USING gbk ) COLLATE gbk_chinese_ci ASC

mysql索引

1.适合创建索引情况
a.字表和父表之间的依赖关系字段, 即主键和外键
b.表中经常出现在where字句中的字段
c.经常出现在GROUP BY字句中的分组字段
 
2.创建索引
a.普通索引
创建表示添加
CREATE TABLE t_name(
INDEX|KEY index_name(c_name)
);
修改表时添加
ALTER TABLE t_name ADD INDEX|KEY index_name(c_name);
直接创建
CREATE INDEX|KEY ON t_name(c_name);
 
b.唯一索引
创建表示添加
CREATE TABLE t_name(
UNIQUE INDEX|KEY index_name(c_name)
);
修改表时添加
ALTER TABLE t_name ADD UNIQUE INDEX|KEY index_name(c_name);
直接创建
CREATE UNIQUE INDEX|KEY ON t_name(c_name);
 
c.全文索引
创建表示添加
CREATE TABLE t_name(
FULLTEXT INDEX|KEY index_name(c_name)
);
修改表时添加
ALTER TABLE t_name ADD FULLTEXT INDEX|KEY index_name(c_name);
直接创建
CREATE FULLTEXT INDEX|KEY ON t_name(c_name);
 
d.多列索引
创建表示添加
CREATE TABLE t_name(
INDEX|KEY index_name(c_name1, c_name2)
);
修改表时添加
ALTER TABLE t_name ADD INDEX|KEY index_name(c_name1, c_name2);
直接创建
CREATE INDEX|KEY ON t_name(c_name1, c_name2);
 
3.删除索引
DROP INDEX index_name ON t_name;
 
4.查看索引
SHOW CREATE TABLE t_name;
 
mysql多表查询
1.内连接查询
a.自然内连接=笛卡尔积-不等值条件记录-重复字段
SELECT field1, field2 FROM t1 INNER JOIN t2 ON condition INNER JOIN t3 ON condition
b.等值内连接=笛卡尔积-不等值条件记录
SELECT field1, field2 FROM t1 INNER JOIN t2 ON condition INNER JOIN t3 ON condition
c.不等值内连接=笛卡尔积-等值条件记录
SELECT field1, field2 FROM t1 INNER JOIN t2 ON condition INNER JOIN t3 ON condition
 
2.外连接查询
a.左外连接=笛卡尔积-不等值条件记录+左表未匹配记录
SELECT field1, field2 FROM t1 LEFT OUTER JOIN t2 ON condition
b.右外连接=笛卡尔积-不等值条件记录+右表未匹配记录
SELECT field1, field2 FROM t1 RIGHT OUTER JOIN t2 ON condition
c.全外连接=笛卡尔积-不等值条件记录+左表未匹配记录+右表未匹配记录
SELECT field1, field2 FROM t1 FULL OUTER JOIN t2 ON condition
例如:原料出库和成品出库的查询过程中使用了左连接和统计分组
代码如下所示:
/**
     * 根据基地和时间段获取原料出库列表
     * @param $common_producer_info_id
     * @param int $wms_check_begin_at
     * @param int $wms_check_end_at
     * @return array
     */
    public static function getWmsMaterialOutSumList($common_producer_info_id, $wms_check_begin_at=0, $wms_check_end_at=0){
        $wms_check_end_at = !empty($wms_check_end_at) ? $wms_check_end_at : time();
        //注意,一个出库单可以出库多个入库单的部分药材,即出库单不记录入库单号,只有出库详情才记录入库单号
        //分组时不应该使用入库单号,而应该使用出库单号,因为一个入库单可以分多次出库
        $sql = "SELECT
			modet.wms_stock_detail_info_relation_good_in_sheet_number in_sheet_number,
			mo.common_producer_info_id producer_id,
			mo.common_producer_info_name producer_name,
			mo.common_producer_herb_info_id info_id,
			mo.common_producer_herb_info_name info_name,
			mo.common_producer_herb_grade_info_id grade_id,
			mo.common_producer_herb_grade_name grade_name,
			SUM(
				IFNULL(
					modet.wms_material_out_sheet_detail_out_number,
					0
				)
			) AS sum_out_package_number,
			SUM(
				IFNULL(
					modet.wms_material_out_sheet_detail_out_weight,
					0
				)
			) AS sum_out_weight,
			SUM(
				IFNULL(
					modet.wms_material_out_sheet_detail_storage_loss_weight,
					0
				)
			) AS sum_out_loss_weight
			from {{%wms_material_out_sheet_detail}} modet
			LEFT JOIN {{%wms_material_out_sheet}} mo ON mo.id = modet.wms_material_out_sheet_id
		WHERE
			modet.is_del = 0
			AND mo.is_del = 0
			AND mo.wms_material_out_sheet_status = 1
			AND mo.common_producer_info_id = :common_producer_info_id
			AND mo.wms_material_out_sheet_outgoing_date >= :wms_check_begin_at
			AND mo.wms_material_out_sheet_outgoing_date <= :wms_check_end_at
		GROUP BY
			mo.common_producer_herb_info_id,
			mo.common_producer_herb_grade_info_id,
			modet.wms_material_out_sheet_number,
			modet.wms_stock_detail_info_relation_good_in_sheet_number";

        $list = Yii::$app->db->createCommand($sql)
            ->bindValue(':common_producer_info_id', $common_producer_info_id)
            ->bindValue(':wms_check_begin_at', $wms_check_begin_at)
            ->bindValue(':wms_check_end_at', $wms_check_end_at)->queryAll();
        return $list;
    }
/**
     * 获取成品出库相关信息
     * @param $common_producer_info_id
     * @param int $wms_check_begin_at
     * @param int $wms_check_end_at
     * @return array
     */
    public static function getWmsProductOutSumList($common_producer_info_id, $wms_check_begin_at=0, $wms_check_end_at=0){
        $wms_check_end_at = !empty($wms_check_end_at) ? $wms_check_end_at : time();
        //注意:成品出库详情没有成品出库ID的关联字段,只能使用成品出库单号关联
        //分组时不应该使用入库单号,而应该使用出库单号,因为一个入库单可以分多次出库
        $sql = "SELECT
            po.wms_product_in_sheet_number in_sheet_number,
            po.common_producer_info_id producer_id,
            po.common_producer_info_name producer_name,
            po.common_producer_herb_info_id_product info_id,
            po.common_producer_herb_info_name_product info_name,
            po.common_producer_herb_grade_info_id_product grade_id,
            po.common_producer_herb_grade_name_product grade_name,
            SUM(
                IFNULL(
                    podet.wms_product_out_detail_info_out_number,
                    0
                )
            ) AS sum_out_package_number,
            SUM(
                IFNULL(
                    podet.wms_product_out_detail_info_out_weight,
                    0
                )
            ) AS sum_out_weight,
            SUM(
                IFNULL(
                    podet.wms_product_out_detail_info_storage_loss_weight,
                    0
                )
            ) AS sum_out_loss_weight
            FROM {{%wms_product_out_detail_info}} podet
            LEFT JOIN {{%wms_product_out_sheet}} po ON po.wms_product_out_sheet_number = podet.wms_product_out_sheet_number
        WHERE
            podet.is_del = 0
            AND po.is_del = 0
        AND po.wms_product_out_sheet_status = 1
        AND po.common_producer_info_id = :common_producer_info_id
        AND po.wms_product_out_sheet_product_out_date >= :wms_check_begin_at
        AND po.wms_product_out_sheet_product_out_date <= :wms_check_end_at
        GROUP BY
            po.common_producer_herb_info_id_product,
            po.common_producer_herb_grade_info_id_product,
            po.wms_product_out_sheet_number,
            podet.wms_product_in_sheet_number";
        $list = Yii::$app->db->createCommand($sql)
            ->bindValue(':common_producer_info_id', $common_producer_info_id)
            ->bindValue(':wms_check_begin_at', $wms_check_begin_at)
            ->bindValue(':wms_check_end_at', $wms_check_end_at)->queryAll();
        return $list;
    }

  

 

 
3.子查询
a.单行单列子查询(用于where语句中)
例:
SELECT * FROM t1 WHERE f1 >(SELECT f2 FROM t2 WHERE f3='a');
b.单行多列子查询(用于where语句中)
例:
SELECT * FROM t1 WHERE (f1,f3) =(SELECT f1,f2 FROM t2 WHERE f3='a');
c.多行单列子查询(用于where语句中)
(IN, NOT IN, =ANY, >ANY, >=ANY, <ANY, <=ANY, >ALL, >=ALL, <ALL, <=ALL, EXISTS, NOT EXISTS)
例:
SELECT * FROM t1 WHERE f1 IN (SELECT f1 FROM t2);
d,多行多列子查询(用于from语句中, 作为临时表)
例:
SELECT * FROM t1 INNER JOIN (SELECT f1, COUNT(), AVG(f2)) t2 ON condition;
 
4.合并查询
a.去重合并查询
SELECT f1, f2, fn FROM t1 UNION SELECT f1, f2, fn FROM t2 UNION SELECT f1, f2, fn FROM t3
b.不去重合并查询
SELECT f1, f2, fn FROM t1 UNION ALL SELECT f1, f2, fn FROM t2 UNION ALL SELECT f1, f2, fn FROM t3
 
注意:
mysql统计函数对于NULL值得处理
COUNT(*)包含NULL的数量, COUNT(field)忽略NULL值得数量, COUNT(NULL)为0
SUM(field), AVG(field), MAX(field), MIN(field)如果有一条记录中field的值为NULL,则结果为NULL
GROUP BY将NULL作为新行
解决方法为将NULL值处理为0,使用IFNULL(field, 0)
例如:获取成品出库与成品入库的差额即为库存
SELECT
	vms.info_name AS info_name,
	vms.grade_name AS grade_name,
	(
		vms.sum_in_weight - vms.sum_out_weight
	) AS weight,
	(
		vms.sum_in_price - vms.sum_out_price
	) AS price
FROM
	(
		SELECT
			pi.common_producer_herb_info_name_product info_name,
			pi.common_producer_herb_grade_name_product grade_name,
			SUM(
				IFNULL(
					pi.wms_product_in_sheet_in_weight,
					0
				)
			) AS sum_in_weight,
			SUM(
				IFNULL(
					pi.wms_product_in_sheet_unit_price,
					0
				)
			) AS sum_in_price,
			SUM(
				IFNULL(
					po.wms_product_out_sheet_out_weight,
					0
				)
			) AS sum_out_weight,
			SUM(
				IFNULL(
					po.wms_product_out_sheet_total_price,
					0
				)
			) AS sum_out_price
		FROM
			e_wms_product_in_sheet AS pi
		LEFT JOIN e_wms_product_out_sheet AS po ON pi.common_producer_herb_info_id_product = po.common_producer_herb_info_id_product
		AND pi.common_producer_herb_grade_info_id_product = po.common_producer_herb_grade_info_id_product
		AND po.is_del = 0
		WHERE
			pi.is_del = 0
		GROUP BY
			pi.common_producer_herb_info_id_product,
			pi.common_producer_herb_grade_info_id_product
	) vms

mysql 常用函数

1.字符串函数
lower(str)
upper(str)
trim(str)
ltrim(str)
rtrim(str)
 
left(str, n)
right(str, n)
substring(str, n, m)
 
lpad(str, n, pad)
rpad(str, n, pad)
repeat(str, n)
replace(str, old, new)
insert(str, n, m, insstr)
 
cancat(str1, str2, str3,)
strcmp(str1, str2)
 
2.数值函数
abs(x)
ceil(x)
floor(x)
round(x,y)
truncate(x,y)
mod(x,y)
rand()
 
3.日期函数
curdate()
curtime()
now()
unix_timestamp(date)
from_unixtime()
 
year(date)
week(date)
 
hour(time)
minute(time)
 
4.系统信息函数
version()
database()
user()
last_insert_id()
 
mysql运算符
1.算术运算符
+
-
*
/
%
 
2.比较运算符
>
<
=
!=(<>)
>=
<=
is null, is not null
between and, not between and
in, not in
like, not like
regexp
 
3.逻辑运算符
not, !
&&, and
||, or
xor
 
4.位运算符
~
&
|
^
<<
>>
 
mysql事务
1.事务的性质(ACID)
a.原子性(Automicity)
事务中所有的操作只能是完全提交或者完全回滚
b.一致性(Consistency)
事务在完成时,数据表必须从一种状态变更为另外一种状态
c.隔离性(Isolation)
事务中的操作语句所做的修改必须与其他事务所做膝盖相隔离
d.持久性(Durability)
事务完成后,所做的修改对数据是永久的
 
2.事务控制语句
SET AUTOCOMMIT = 0
START TRANSACTION | BEGIN
COMMIT
ROLLBACK
 
3.事务隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED
SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ
SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE
 
4.锁机制
a.锁的类型
b.锁粒度
 
mysql存储过程与函数
1.为什么使用存储过程和函数
区别:
存储过程没有返回值,函数必须有返回值
优点:
a.允许标准组件式编程,提高了sql语句的重用性,共享性和可移植性
b.执行速度快,减少网络流量
c.本身是一种安全机制
 
2.存储过程和函数的创建
a.存储过程的创建
CREATE PROCEDURE p_name(
IN|OUT|INOUT param_name1 type,
IN|OUT|INOUT param_name2 type
) LANGUAGE SQL
|DETERMINISTIC
|NOT DETERMINISTIC
|CONTAINS SQL
|NO SQL
|READS SQL DATA
|MODIFIES SQL DATA
|SQL SECURITY DEFINER
|SQL SECURITY INVOKER
|COMMIT 'string'
b.函数的创建
CREATE FUNCTION f_name(
param_name1 type,
param_name2 type
) LANGUAGE SQL
|DETERMINISTIC
|NOT DETERMINISTIC
|CONTAINS SQL
|NO SQL
|READS SQL DATA
|MODIFIES SQL DATA
|SQL SECURITY DEFINER
|SQL SECURITY INVOKER
|COMMIT 'string'
例:
DELIMITER $
CREATE FUNCTION f_employee(empo INT(11)) RETURNS DOUBLE(10,2)
COMMIT '查询雇员工资'
BEGIN
RETURN (SELECT sal FROM t_employee WHERE t_employee.empno=empno);
END
$
DELIMITER ;
 
3.存储过程和函数的删除
DROP PROCEDURE p_name
DROP FUNCTION f_name
 
4.存储过程和函数的修改
a.存储过程的修改
ALTER PROCEDURE p_name(
IN|OUT|INOUT param_name1 type,
IN|OUT|INOUT param_name2 type
) LANGUAGE SQL
|DETERMINISTIC
|NOT DETERMINISTIC
|CONTAINS SQL
|NO SQL
|READS SQL DATA
|MODIFIES SQL DATA
|SQL SECURITY DEFINER
|SQL SECURITY INVOKER
|COMMIT 'string'
b.函数的修改
ALTER FUNCTION f_name(
param_name1 type,
param_name2 type
) LANGUAGE SQL
|DETERMINISTIC
|NOT DETERMINISTIC
|CONTAINS SQL
|NO SQL
|READS SQL DATA
|MODIFIES SQL DATA
|SQL SECURITY DEFINER
|SQL SECURITY INVOKER
|COMMIT 'string'
 
5.存储过程和函数的查询
SHOW CREATE PROCEDURE p_name
SHOW CREATE FUNCTON f_name
 
mysql触发器的操作
1.为什么使用触发器
能加强数据表中数据的完整性约束和业务规则
 
2.触发器的创建
CREATE TRIGGER t_name
BEFORE|AFTER INSERT|DELATE|UPDATE
ON table_name FOR EACH ROW
trigger_sql
例:
DELIMITER $
CREATE TRIGGER tri_diarytime2 AFTER INSERT ON t_dept for each row
BEGIN
INSERT INTO t_diary VALUES(NULL, `t_dept`, now())
INSERT INTO t_diary VALUES(NULL, `t_dept`, now())
END
$
DELIMITER ;
 
3.触发器的删除
DROP TRIGGER t_name
 
4.触发器的查看
SHOW TRIGGERS
 
mysql视图操作
1.为什么使用视图
原因:
a.实现查询的简化
b.提高安全性
特点:
a.是不同的表的在逻辑意义上的抽象
b.视图本身的建立和删除和修改不影响基本表
c.视图内容的添加,删除,修改影响基本表
d.视图来自多表时,不允许添加和删除数据
 
2.创建视图
create view v_name as [select语句]
a.封装使用常量
b.封装使用聚合函数
c.封装使用排序语句
d.封装使用多表查询语句
 
3.删除视图
drop view v_name1, v_name2
 
4.修改视图
create or replace view v_ name as [select语句]
alter view v_name as [select语句]
 
5.查看视图
show table status from db_name 查看视图详细信息
show create view v_nmae 查看视图定义信息
desc v_name 查看视图定义信息
 
6.利用视图操作基本表
和操作数据表的方法一样
 
mysql中if语句的使用
, wms_product_in_sheet_in_weight,
 ORDER BY id ASC;
第十 mysql导出数据库
生产环境
mysqldump -hrm-2ze8mpi5i65429l1qo.mysql.rds.aliyuncs.com -uchgg_erp_prod -pChggERPProd2017 -P3306 chgg_erp_prod >e:/中国汉广集团/生产环境数据/chgg_erp_prod.sql
 
mysqldump -hrm-2ze8mpi5i65429l1qo.mysql.rds.aliyuncs.com -uchgg_dev -pchgg_dev -P3306 chgg_erp_dev >~/Documents/hanguang/workdata/chgg_erp_dev.sql
 
mysql -hrm-2ze8mpi5i65429l1qo.mysql.rds.aliyuncs.com -uchgg_dev -pchgg_dev -P3306 chgg_erp_dev < ~/Documents/hanguang/workdata/chgg_erp_prod.sql
 
本地
mysql -hlocalhost -uroot -p123456 -P3306 chgg_erp_local < ~/Documents/hanguang/workdata/chgg_erp_prod.sql
 
在d:/mysql/bin中运行上述脚本,即可导出mysql形成sql文件,sql文件需要删除一行DTID。则能使用navicate导入sql文件到数据库

mysql从入门到精通的更多相关文章

  1. Mysql从入门到精通整理

    目录 mysql基础 mysql进阶 mysql高级 mysql优化 正文 数据库是信息化产业的最基础的软件之一,各种管理系统,网站,在线游戏,背后基本都会有数据库的支持. 回到顶部 mysql基础 ...

  2. 《mysql从入门到精通》提高

    第一 游标的使用 delimiter $$ DROP PROCEDURE IF EXISTS product_in_sheet_handler; CREATE PROCEDURE product_in ...

  3. MySQL数据库应用 从入门到精通 学习笔记

    以下内容是学习<MySQL数据库应用 从入门到精通>过程中总结的一些内容提要,供以后自己复现使用. 一:数据库查看所有数据库: SHOW DATABASES创建数据库: CREATE DA ...

  4. 《MySQL数据库从入门到精通》 高级运维人才的必备书籍

    众所周知,每年就业市场都会迎来千万量级的高校毕业生,然而企业招工难和毕业生就业难的矛盾却一直没有得到很好地解决.究其原因,主要矛盾还是在于传统的学历教育与企业实际需求相脱节.为了杜绝高校毕业生求职时常 ...

  5. 【MySQL】从入门到精通8-SQL数据库编程

    上期:[MySQL]从入门到精通7-设计多对多数据库 第零章:Mac用户看这里: mac终端写MySQL和windows基本相同,除了配置环境变量和启动有些许不同以外. 先配置环境变量,在终端输入vi ...

  6. 【MySQL】从入门到精通9-数据库的备份(完结)

    上期:[MySQL]从入门到精通8-SQL数据库编程 第一章:数据的导出 回到我们的Workbench. 选择Data Export. 选择需要导出的数据库. 注意,如果选择"Export ...

  7. 【MySQL】从入门到精通7-设计多对多数据库

    上期:[MySQL]从入门到精通6-MySQL数据类型与官方文档 第一章:理解 和一对多不一样,多对多意思是,一个数据可以被不同的数据关联. 如果是一对多,我们还可以用外键来达成. 但是现在我们是多对 ...

  8. 【MySQL】从入门到精通6-MySQL数据类型与官方文档

    上期:[MySQL]从入门到精通5-一对多-外键 这个是官方文档链接,是世界上最全面的MySQL教学了,所有问题都可以在这里找到解决方法. https://dev.mysql.com/doc/ htt ...

  9. Hibernate从入门到精通(三)Hibernate配置文件

    在上次的博文Hibernate从入门到精通(二)Hibernate实例演示我们已经通过一个实例的演示对Hibernate的基本使用有了一个简单的认识,这里我们在此简单回顾一下Hibernate框架的使 ...

随机推荐

  1. P1678 烦恼的高考志愿(二分)

    emmmm,我感觉我在解题的过程中还是有点吃亏的,因为,我知道是二分,只是大概知道怎么分,没有管这道到底是需要怎样的二分.然后在题上卡了很久. 思路:要找到填报学校的录取线x和自己的分数y的绝对值最小 ...

  2. ORA-08104

    https://blog.csdn.net/daiqiulong2 create index idx_p_merchant_detail_id on D_ORDER_DETAIL (merchant_ ...

  3. python3 生成器和生成器表达式

    ''' 生成器:函数中有yield就是生成器函数 生成器本质是一个迭代器 yield后面的值会作为返回值返回. ''' def func(): print("apple") pri ...

  4. python3 迭代器

    ''' 迭代:重复的过程,并且每次迭代的结果都是下次迭代的初始值 可迭代的 Iterable 迭代器 Iterator iter(数据) == 数据.__iter__() 将数据转换为迭代器 next ...

  5. [转]C#中基于GDI+(Graphics)图像处理系列之前言

    直接给出原文链接吧: C#中基于GDI+(Graphics)图像处理系列之前言 链接:https://pan.baidu.com/s/1zm5TCOHqkqEfiLZuqO0UMA 提取码:qz0h

  6. linux内存源码分析 - 内存池

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 内存池是用于预先申请一些内存用于备用,当系统内存不足无法从伙伴系统和slab中获取内存时,会从内存池中获取预留的 ...

  7. 常用的一些markdown格式

    现在工作中,大家都习惯使用markdown写文档.按照其语法来,直接出样式,确实很方便. mac上我使用了macdown工具,只要支持markdown的差不多都一样. 自己经常习惯用的几个语法规则,记 ...

  8. Java网络编程中异步编程的理解

    目录 前言 一.异步,同步,阻塞和非阻塞的理解 二.异步编程从用户层面和框架层面不同角度的理解 用户角度的理解 框架角度的理解 三.为什么使用异步 四.理解这些能在实际中的应用 六.困惑 参考文章 前 ...

  9. 【原创】Innodb中mysql如何快速删除2T的大表

    小漫画 来,先来看小漫画陶冶一下情操 OK,这里就说了.假设,你有一个表erp,如果你直接进行下面的命令 drop table erp 这个时候所有的mysql的相关进程都会停止,直到drop结束,m ...

  10. nginx负载均衡精简配置实例

    [root@localhost ~]# vim nginx.conf user nginx; worker_processes ; error_log /var/log/nginx/error.log ...