资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

mysql怎么插入存储 mysql怎么创建存储过程

mysql存储过程实现数据查询与插入

INSERT into total_score_tmpD(

“只有客户发展了,才有我们的生存与发展!”这是创新互联公司的服务宗旨!把网站当作互联网产品,产品思维更注重全局思维、需求分析和迭代思维,在网站建设中就是为了建设一个不仅审美在线,而且实用性极高的网站。创新互联对成都做网站、成都网站建设、成都外贸网站建设、网站制作、网站开发、网页设计、网站优化、网络推广、探索永无止境。

DepartmentNameEnd, StaffId,

StaffName,

CountPerHour,

SkillScoreDisCount ,

DealCount ,

ValueCount,

ValueCountDisCount

)

SELECT DepartmentName, StaffId,

StaffName,

3600/(Select DealAvgSeconds from deal_name_type where DealId='121300')*AVG(DealAvgSeconds/WaitSeconds) ,

Round(3600/(Select DealAvgSeconds from deal_name_type where DealId='121300')*avg(DealAvgSeconds/WaitSeconds)/(select Max(SunValue) From total_score_tmp33)*(select CAST(OptionValue as decimal) from sys_info WHERE OptionName='工作技能权重'),2),

count(StaffId),

Sum(DealValue),

Round(Sum(DealValue)/(select Max(SunValue) From total_score_tmp44)*(select CAST(OptionValue as decimal) from sys_info WHERE OptionName='工作效益权重'),2)

From deal_record

where DepartmentName like concat(DepartmentName2,'%') and DealDateTime BETWEEN STARTDealDateTime and endDealDateTime

group by StaffId;

insert into total_score_tmpc(DepartmentName , StaffId,

StaffName,

ClientNum ,

EvaluateScore ,

EvaluateScoreDisCount)

SELECT DepartmentName, StaffId,

StaffName,

count(StaffId),

Sum(EvaluatePrice),

Round((Sum(EvaluatePrice)/(select Max(SunValue) From total_score_tmp22))*(select CAST(OptionValue as decimal) from sys_info WHERE OptionName='服务评价权重'),2)

From evaluate_record

where DepartmentName like concat(DepartmentName2,'%') and EvaluateDateTime BETWEEN STARTDealDateTime and endDealDateTime

group by StaffId;

怎样在mysql中插入大量的数据

方法一,从已有大数据表中检索大量数据插入到目标表里;

方法二,编写存储过程,利用循环向数据表中插入大量的固定或有规律变化或随机变化的虚拟数据;

方法三,通过应用程序端编程向目标表插入大量的数据,手法与方法二类似。

mysql 怎么样快速地插入

MySQL如何快速插入大量数据

这几天尝试了使用不同的存储引擎大量插入MySQL表数据,主要试验了MyISAM存储引擎和InnoDB。

下面是实验过程:

一、InnoDB存储引擎。

创建数据库和表

Sql代码

CREATE DATABASE ecommerce;

CREATE TABLE employees (

id INT NOT NULL,

fname VARCHAR(30),

lname VARCHAR(30),

birth TIMESTAMP,

hired DATE NOT NULL DEFAULT '1970-01-01',

separated DATE NOT NULL DEFAULT '9999-12-31',

job_code INT NOT NULL,

store_id INT NOT NULL

)

partition BY RANGE (store_id) (

partition p0 VALUES LESS THAN (10000),

partition p1 VALUES LESS THAN (50000),

partition p2 VALUES LESS THAN (100000),

partition p3 VALUES LESS THAN (150000),

Partition p4 VALUES LESS THAN MAXVALUE

);

创建存储过程

Sql代码

use ecommerce;

CREATE PROCEDURE BatchInsert(IN init INT, IN loop_time INT)

BEGIN

DECLARE Var INT;

DECLARE ID INT;

SET Var = 0;

SET ID = init;

WHILE Var loop_time DO

insert into employees(id,fname,lname,birth,hired,separated,job_code,store_id) values(ID,CONCAT('chen',ID),CONCAT('haixiang',ID),Now(),Now(),Now(),1,ID);

SET ID = ID + 1;

SET Var = Var + 1;

END WHILE;

END;

调用存储过程插入数据

Sql代码

CALL BatchInsert(30036,200000)

用时:3h 37min 8sec

二、MyISAM存储引擎

创建表

Sql代码

use ecommerce;

CREATE TABLE ecommerce.customer (

id INT NOT NULL,

email VARCHAR(64) NOT NULL,

name VARCHAR(32) NOT NULL,

password VARCHAR(32) NOT NULL,

phone VARCHAR(13),

birth DATE,

sex INT(1),

avatar BLOB,

address VARCHAR(64),

regtime DATETIME,

lastip VARCHAR(15),

modifytime TIMESTAMP NOT NULL,

PRIMARY KEY (id)

)ENGINE = MyISAM ROW_FORMAT = DEFAULT

partition BY RANGE (id) (

partition p0 VALUES LESS THAN (100000),

partition p1 VALUES LESS THAN (500000),

partition p2 VALUES LESS THAN (1000000),

partition p3 VALUES LESS THAN (1500000),

partition p4 VALUES LESS THAN (2000000),

Partition p5 VALUES LESS THAN MAXVALUE

);

创建存储过程

Sql代码

use ecommerce;

DROP PROCEDURE IF EXISTS ecommerce.BatchInsertCustomer;

CREATE PROCEDURE BatchInsertCustomer(IN start INT,IN loop_time INT)

BEGIN

DECLARE Var INT;

DECLARE ID INT;

SET Var = 0;

SET ID= start;

WHILE Var loop_time

DO

insert into customer(ID,email,name,password,phone,birth,sex,avatar,address,regtime,lastip,modifytime)

values(ID,CONCAT(ID,'@sina.com'),CONCAT('name_',rand(ID)*10000 mod 200),123456,13800000000,adddate('1995-01-01',(rand(ID)*36520) mod 3652),Var%2,';fm=52gp=0.jpg','北京市海淀区',adddate('1995-01-01',(rand(ID)*36520) mod 3652),'8.8.8.8',adddate('1995-01-01',(rand(ID)

*36520) mod 3652));

SET Var = Var + 1;

SET ID= ID + 1;

END WHILE;

END;

调用存储过程插入数据

Sql代码

ALTER TABLE customer DISABLE KEYS;

CALL BatchInsertCustomer(1,2000000);

ALTER TABLE customer ENABLE KEYS;

用时:8min 50sec

通过以上对比发现对于插入大量数据时可以使用MyISAM存储引擎,如果再需要修改MySQL存储

引擎可以使用命令:

Sql代码

ALTER TABLE t ENGINE = MYISAM;

请问在mysql中怎么存储图片呢?

背景

MySQL 一直以来都有 TEXT、BLOB 等类型用来存储图片、视频等大对象信息。比如一张图片,随便一张都 5M 以上。视频也是,随便一部视频就是 2G 以上。

假设用 MySQL 来存放电影视频等信息,一部是 2G,那么存储 1000 部就是 2TB,2TB 也就是 1000 条记录而已,但是对数据库性能来说,不仅仅是看记录数量,更主要的还得看占用磁盘空间大小。空间大了,所有以前的经验啥的都失效了。

所以一般来说存放这类信息,也就是存储他们的存放路径,至于文件本身存放在哪里,那这就不是数据库考虑的范畴了。数据库只关心怎么来的快,怎么来的小。

举例

虽然不推荐 MySQL 这样做,但是也得知道 MySQL 该怎么做才行,做到心里有数。比如下面一张微信图片,大概 5M 的样子。

root@ytt:/var/lib/mysql-files# ls -sihl 微信图片_20190711095019.jpg274501 5.4M -rw-r--r-- 1 root root 5.4M Jul 11 07:17 微信图片_20190711095019.jpg

拷贝 100 份这样的图片来测试

root@ytt:/var/lib/mysql-files# for i in `seq 1 100`; do cp 微信图片_20190711095019.jpg "$i".jpg;done;

root@ytt:/var/lib/mysql-files# ls

100.jpg   17.jpg  25.jpg  33.jpg  41.jpg  4.jpg   58.jpg  66.jpg  74.jpg  82.jpg  90.jpg  99.jpg  f8.tsv

10.jpg    18.jpg  26.jpg  34.jpg  42.jpg  50.jpg  59.jpg  67.jpg  75.jpg  83.jpg  91.jpg  9.jpg   微信图片_20190711095019.jpg

1111.jpg  19.jpg  27.jpg  35.jpg  43.jpg  51.jpg  5.jpg   68.jpg  76.jpg  84.jpg  92.jpg  f1.tsv

11.jpg    1.jpg   28.jpg  36.jpg  44.jpg  52.jpg  60.jpg  69.jpg  77.jpg  85.jpg  93.jpg  f2.tsv

12.jpg    20.jpg  29.jpg  37.jpg  45.jpg  53.jpg  61.jpg  6.jpg   78.jpg  86.jpg  94.jpg  f3.tsv

13.jpg    21.jpg  2.jpg   38.jpg  46.jpg  54.jpg  62.jpg  70.jpg  79.jpg  87.jpg  95.jpg  f4.tsv

14.jpg    22.jpg  30.jpg  39.jpg  47.jpg  55.jpg  63.jpg  71.jpg  7.jpg   88.jpg  96.jpg  f5.tsv

15.jpg    23.jpg  31.jpg  3.jpg   48.jpg  56.jpg  64.jpg  72.jpg  80.jpg  89.jpg  97.jpg  f6.tsv

16.jpg    24.jpg  32.jpg  40.jpg  49.jpg  57.jpg  65.jpg  73.jpg  81.jpg  8.jpg   98.jpg  f7.tsv

我们建三张表,分别用 LONGBLOB、LONGTEXT 和 VARCHAR 来存储这些图片信息

mysql show create table tt_image1G

*************************** 1. row ***************************

Table: tt_image1

Create Table: CREATE TABLE `tt_image1` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`image_file` longblob,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

1 row in set (0.00 sec)

mysql show create table tt_image2G

*************************** 1. row ***************************

Table: tt_image2

Create Table: CREATE TABLE `tt_image2` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`image_file` longtext,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

1 row in set (0.00 sec)

mysql show create table tt_image3G

*************************** 1. row ***************************

Table: tt_image3

Create Table: CREATE TABLE `tt_image3` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`image_file` varchar(100) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

1 row in set (0.00 sec)

我们来给三张表插入 100 张图片(插入前,建议把 max_allowed_packet 设置到最大)

tt_image1

root@ytt:/var/lib/mysql-files# for i in `seq 1 100`;

do mysql -S /var/run/mysqld/mysqld.sock -e "insert into ytt.tt_image1(image_file)

values (load_file('/var/lib/mysql-files/$i.jpg'))";done;

tt_image2

root@ytt:/var/lib/mysql-files# for i in `seq 1 100`;

do mysql -S /var/run/mysqld/mysqld.sock -e "insert into ytt.tt_image2(image_file)

values (hex(load_file('/var/lib/mysql-files/$i.jpg')))";done;

tt_image3

root@ytt:/var/lib/mysql-files# aa='begin;';for i in `seq 1 100`;

do aa=$aa"insert into ytt.tt_image3(image_file) values

('/var/lib/mysql-files/$i.jpg');";

done;aa=$aa'commit;';mysql -S /var/run/mysqld/mysqld.sock -e "`echo $aa`";

检查下三张表记录数

mysql select 'tt_image1' as name ,count(*) from tt_image1 union allselect 'tt_image2',count(*) from tt_image2 union all select 'tt_image3', count(*) from tt_image3;+-----------+----------+| name      | count(*) |+-----------+----------+| tt_image1 |      100 || tt_image2 |      100 || tt_image3 |      100 |+-----------+----------+3 rows in set (0.00 sec)

看下文件大小,可以看到实际大小排名,LONGTEXT 字段存储的最大,LONGBLOB 字段缩小到一半,最小的是存储图片路径的表 tt_image3。所以这里从存储空间来看,存放路径最占优势。

root@ytt:/var/lib/mysql/ytt# ls -silhS tt_image*274603 1.1G -rw-r----- 1 mysql mysql 1.1G Jul 11 07:27 tt_image2.ibd274602 545M -rw-r----- 1 mysql mysql 544M Jul 11 07:26 tt_image1.ibd274605  80K -rw-r----- 1 mysql mysql 112K Jul 11 07:27 tt_image3.ibd

那么怎么把图片取出来呢?

tt_image3 肯定是最容易的

mysql select * from tt_image3;+----+----------------------------+| id | image_file                 |+----+----------------------------+|  1 | /var/lib/mysql-files/1.jpg |+----+----------------------------+...100 rows in set (0.00 sec)

tt_image1 直接导出来二进制文件即可,下面我写了个存储过程,导出所有图片。

mysql DELIMITER $$mysql USE `ytt`$$mysql DROP PROCEDURE IF EXISTS `sp_get_image`$$mysql CREATE DEFINER=`ytt`@`localhost` PROCEDURE `sp_get_image`()mysql BEGIN      DECLARE i,cnt INT DEFAULT 0;      SELECT COUNT(*) FROM tt_image1 WHERE 1 INTO cnt;      WHILE i cnt DO        SET @stmt = CONCAT('select image_file from tt_image1  limit ',i,',1 into dumpfile ''/var/lib/mysql-files/image',i,'.jpg''');        PREPARE s1 FROM @stmt;        EXECUTE s1;        DROP PREPARE s1;      SET i = i + 1;      END WHILE;      END$$mysql DELIMITER ;mysql call sp_get_image;

tt_image2 类似,把 select 语句里 image_file 变为 unhex(image_file) 即可。

总结

这里我举了个用 MySQL 来存放图片的例子,总的来说有以下三点:

占用磁盘空间大(这样会带来各种各样的功能与性能问题,比如备份,写入,读取操作等)

使用不易

还是推荐用文件路径来代替实际的文件内容存放

mysql存储过程怎样批量插入数据

一下代码运行通过:

delimiter $$;

create procedure lucia_proc16(count int)

begin

DECLARE name_proc VARCHAR(20) CHARACTER SET utf8;

DECLARE sex_proc VARCHAR(4) CHARACTER SET utf8;

DECLARE age_proc INT(10);

DECLARE class_proc VARCHAR(20) CHARACTER SET utf8;

DECLARE Addr_proc VARCHAR(50) CHARACTER SET utf8;

DECLARE i INT;

set i = 1;

set sex_proc = '女';

set age_proc = 20;

set class_proc = '山治班';

set Addr_proc = '北京市朝阳区';

while icount do

set name_proc = CONCAT('露西亚',i);

insert into students(Name,Sex,age,class,Addr)values(name_proc,sex_proc,age_proc,class_proc,Addr_proc);

set i = i+1;

end while;

end

$$;

delimiter;

代码功能:

传入一个行数,控制插入多少条数据

运行效果:

Mysql存储过程的插入语句怎么写?

CREATE DEFINER = CURRENT_USER PROCEDURE `NewProc`(IN `username` varchar,IN `passwords` varchar)

BEGIN

INSERT INTO test_user (Username,Passwords) VALUES (username, passwords);

END;


网站名称:mysql怎么插入存储 mysql怎么创建存储过程
URL链接:http://cdkjz.cn/article/hjdhoi.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220