欢迎投稿

今日深度:

mysql数据库操作(一),mysql数据库操作

mysql数据库操作(一),mysql数据库操作


1、mysql常识

本文前面主要是对《mysql_5.5中文参考手册》部分内容的整理。
说明:登录mysql后,可以看到mysql> 的提示符,可以输入相关命令;输入命令后,需要以“;”号结束,否则会一直等待,少数的命令不需要“;”号,如QUIT;系统默认“;”号结束处才是一条命令的结束,才真正开始执行;多个短命令,可以放在一起,中间用“;”号隔开;我们也可借助外部工具,如navicat来管理数据为库,在navicat中单个查询命令也可以以“;”号结束,但在复杂查寻的内部,则不能有“;”号;可以将多条命令写在一个sql文件中,不同的命令之间用“;”号隔开,否则会出错,如下所示

CREATE TABLE person (id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,name CHAR(60) NOT NULL,PRIMARY KEY (id));
create table shirt (id smallint unsigned not null auto_increment,style enum('t-shirt','polo','dress') not null,color enum('red','blue','orange','white','black') not null,owner smallint unsigned not null references person(id),primary key (id));

insert into person values (null,'Antonio Paz');
select @last:=last_insert_id();
insert into shirt values (null,'polo','blue',@last),(null,'dress','white',@last),(null,'t-shirt','blue',@last);

insert into person values (null,'Lilliana Angelovska');
select @last:=last_insert_id();
insert into shirt values (NULL, 'dress', 'orange', @last),(NULL, 'polo', 'red', @last),(NULL, 'dress', 'blue', @last),(NULL, 't-shirt', 'white', @last);
select * from person;
select s.* from person p,shirt s where p.name like 'Lilliana%' and s.owner=p.id and s.color !='white';

然后使用source命令批量执行。

mysql中命令不区分大小写,但创建数据库的时候要注意大小写,大写的数据库名称,查询的时候用小写查不出来,同时也要与linux shell和python相区别,它们的编程是区分大小写的;
使用navicat将txt文本load进数据库出现乱码,首先查看txt文件是否是utf-8格式;然后在navicat中设置数据库属性,字符集选utf8mb4 – UTF-8 Unicode或utf8 – UTF-8 Unicode,排序规则选utf8mb4_general_ci或utf8_general_ci;


mysql状态表:

提示符 含义
mysql> 准备好接受新的命令
-> 等待多选命令的下一行
‘> 等待下一行,等待以单引号“’”开始的字符串的结束
“> 等待下一行,等待以双引号“””号开始的字符串的结束
`> 等待下一行,等待以反斜点“`”号开始的字符串的结束
/*> 等待下一行,等待以/*号开始的注释的结束

2、mysql基本操作汇总

操作 代码 解释
mysql连接 mysql -h 主机名 -u mysql用户名 -p 连接mysql通常需要提供用户名和密码,如果登录服务器之外的其他机器,还需要指定主机名称,运行后会提示输入密码,登录mysql后,会出现mysql>; windows下直接在命令行客户端输入密码则可以登录mysql的shell
查看版本信息 SELECT VERSION(); 当前mysql版本信息
查看用户信息 SELECT USER();
断开mysql连接 QUIT linux下也可以按ctrl+D键断开连接
取消正在输入的语句 \c 回到mysql>命令等待状态
查看日期 SELECT CURRENT_DATE; mysql中日期是以2017-11-07为标准形式的,mysql有好一些对日期进行格式化及日期计算的函数
计算器 比如SELECT (4+1)*5; 可以得到结果25
查看mysql中的数据库 SHOW DATABASES; 显示一列已存在的数据库名称
找出当前选择了哪个数据库 SELECT DATABASE();
选择某数据库 USE 数据库名称; 之后就可以对数据进行相关操作
创建数据库 CREATE 数据库名称; 注意数据库名称是区分大小写的,后续访问要与之相同;数据只要创建一次就行,刚创建的数据库是空的
显示数据库表 SHOW TABLES;
创建数据库表 CREATE TABLE PET (name VARCHAR(20),ower VARCHAR(20),species VARCHAR(20),sex CHAR(1),birth DATE,death DATE); VARCHAR是可变字长,可以是1~65535中的任何一个,如果后面发现之前的设置不合理,可以使用ALTER TABLE来更改
查看数据库表的结构信息 DESCRIBE PET;
将数据装入数据库表 LOAD DATA LOCAL INFILE ‘/path/pet.txt’ INTO TABLE PET; 如果是在window下,使用“\r\n”作为行结束符的,应该使用LOAD DATA LOCAL INFILE ‘/path/pet.txt’ INTO TABLE PET LINES TERMINATED BY ‘\r\n’;同时要注意txt文本的编码格式,有可能开关会多出一些字符
插入数据到数据库表 INSERT INTO PET VALUES (“Buffy”,”Harold”,”dog”,”f”,”1989-05-13 “,null); 在插入数据时,都需要用”“号,但是空值时不能用”“号,直接用null或\N都可以

操作 代码 解释
数据库中检索信息 SELECT what_to_select FROM which_table WHERE conditions_to_satisfy; 可以获取整个表,也可以只获取一部分字段,可以作用WHERE来筛选符合特定要求的数据,还可以用AND和OR对多个条件组合,可以用GROUP BY按某些字段分组,可以用ORDER BY按某字段排序;更复杂的条件需要逻辑运算的,通过()号将一部分运算结果作为一整体,另一部分运算结果用()作为一个整体,中间通过逻辑运算符连接;我们也查询到的列进行重命名
按条件查询 select * from STUDENT HAVING STU_AGE in(11,12); HAVING具有与where相同的效果,但是where是在获得查询结果前进行筛选,而HAVING是在获取查询结果后在结果中筛选,因而可以用在更复杂的情景中,比如HAVING可以order by 、group by等关键词之后,而where则在这些关键词之前
查询一个字段对应的多个值 select * from STUDENT where STU_AGE in(11,12); IN关键字可以判断某个字段的值是否在指定的集合中。如果字段的值在集合中,则满足查询条件,该纪录将被查询出来。如果不在集合中,则不满足查询条件。
按范围查询 用between 值1 and 值2,或大于and小于 虽然几乎所有的数据库都支持 BETWEEN … AND 运算符,但不同的数据库对 BETWEEN … AND 处理方式是有差异的。在 MySQL 中,BETWEEN 包含了 value1 和 value2 边界值,如上面选取 uid 在 2 到 5 之间的用户数据例子。而有的数据库则不包含 value1 和 value2 边界值(类似于大于 and 小于),也有数据库包含 value1 而不包含 value2(类似于 大于等于 and小于)。所以在使用 BETWEEN … AND 的时候,请检查你的数据库是如何处理 BETWEEN 边界值的。
查询唯一值 SELECT DISTINCT what_to_select FROM which_table WHERE conditions_to_satisfy; 选出符合条件的记录并去重,其实通过group by 也能达到 去重的目的,有的时候更方便更好控制结果按自己想要的方式呈现
从某一行开始查询 select * from table_name limit 第几行,行数; 第几行是从0开始的,即0代表第一行
读取最后几行 select * from table_name order by id desc limit 第几行,行数;
排序 SELECT name, species, birth FROM pet ORDER BY species, birth DESC; DESC表示按降序排序结果, order by 多个条件时,先按第一个条件排再按第二个条件排
复合查询 SELECT * FROM (SELECT name, species, birth FROM pet)AS TABLE1 ORDER BY species, birth DESC; DESC表示按降序排序结果, order by 多个条件时,先按第一个条件排再按第二个条件排
删除表中数据 DELETE FROM which_table;
修改数据 UPDATE pet SET DEATH=”1999-09-12” WHERE NAME=”Claws”;
UPDATE temp_id_area SET SF = CONCAT(split(SF,’市’,1),’市’) WHERE LOCATE(‘市’,SF);
UPDATE temp_id_area SET SF = CONCAT(split(SF,’地区’,1),’地区’) WHERE LOCATE(‘地区’,SF);
UPDATE temp_id_area SET SF = CONCAT(split(SF,’自治区’,1),’自治区’) WHERE LOCATE(‘自治区’,SF);
UPDATE temp_id_area SET SF = CONCAT(split(SF,’省’,1),’省’) WHERE LOCATE(‘省’,SF);
UPDATE temp_id_area SET SFBM = SUBSTR(SSBM,1,2);
时间与日期 SELECT CURRENT_DATE;或SELECT CURDATE(); 获取当前日期
获取日期的年、月、日 SELECT YEAR(CURDATE());
SELECT MONTH(CURRENT_DATE);
SELECT DAY(CURRENT_DATE);
CURRENT_DATE也可以换成其他日期格式的数据;也可以用取模的方式来间接获取月份,如SELECT MOD(CURDATE(),12);但注意,此时的范围是0-11,因而如果是12月份要加1
加上时间隔 SELECT DATE_ADD(CURDATE(),INTERVAL 1 MONTH); 假如当前日期是2017-11-07,得到的结果将是2017-12-07
null操作 使用IS NULL或IS NOT NULL来作为判断; mysql中null表示空,没有值,null不能与用算术比较符操作;
在GROUP BY中,两个null视为相同;执行ORDER BY ,null排在最前面,加上DESC则排在最后面
标准SQL模式匹配 使用LIKE或NOT LIKE,而不能使用=或!= mysql提供标准的SQL模式匹配,以及基于像linux实用程序vi,grep,sed的正则表达式模式匹配,在mysql中模式默认忽略大小写
“_” 匹配任何单个字符
“%” 匹配任意数目字符,包括零字符
扩展正则表达式 REGEXP或NOT REGEXP或RLIKE或NOT RLIKE 为了定位一个模式,以便匹配被测试值的开始或结束,以”^”在模型的开头,表示匹配以某模式开始的记录;以”$”在模式的结尾,表示匹配以某模式结束的记录;要想使用regexp来强制区分大小写需要使其中一个字符转换为二进制字符
‘.’ 匹配任意单个的字符
“[XXX]” 匹配在方括号内的任意字符,如”[abc]”匹配”a”或”b”或”c”;”[a-z]”匹配任何字母,因为mysql不区分大小写;”[0-9]”匹配任何数字
“*” 匹配一个或任意多个出现在它前面的字符,如”x*”匹配任意数量的x,”[0-9]*”匹配任何数量数字,”.*”匹配任何数量的任意字符
要想找出以“b”开头的名字 SELECT * FROM PET WHERE name LIKE ‘b%’; SELECT * FROM PET WHERE name REGEXP ‘^b’;
要想找出以“b”开头的名字,只要小写b开头的 SELECT * FROM PET WHERE name REGEXP BINARY ‘^b’;
要想找出以“fy”结尾的名字 SELECT * FROM PET WHERE name LIKE ‘%fy’; SELECT * FROM PET WHERE name REGEXP ‘fy$’;
要想找出包含“w”的名字 SELECT * FROM PET WHERE name LIKE ‘%w%’; SELECT * FROM PET WHERE name REGEXP ‘W’;
要想找出正好包含5个字符的名字,使用“_”模式字符 SELECT * FROM PET WHERE name LIKE ‘_____’; SELECT * FROM PET WHERE name REGEXP ‘^…..$’; 或者用.{5}代替5个点
计数 SELECT COUNT(*) FROM PET ;
SELECT COUNT(*) FROM PET GROUP BY SEX ;
使用计数如果不需要检索整个表,应该用where来限定范围提高效率
最大值 MAX() (请注意,MIN和MAX函数会忽略NULL值)
最小值 MIN() (请注意,MIN和MAX函数会忽略NULL值)
平均值 AVG()
求和 SUM() 以上几个都需要配合group by使用
使用一个以上的表 SELECT pet.name,event.remark FROM pet,event where pet.name =event.name AND event.type=’little’; FROM子句列出两个表,因为查询需要从两个表提取信息。当从多个表组合(联结)信息时,你需要指定一个表中的记录怎样能匹配其它表的记录。这很简单,因为它们都有一个name列。查询使用WHERE子句基于name值来匹配2个表中的记录。因为name列出现在两个表中,当引用列时,你一定要指定哪个表。把表名附在列名前即可以实现
一个表的记录与同一个表的其它记录进行比较 SELECT p1.*,p2.* FROM pet as p1,pet as p2 WHERE p1.species = p2.species AND p1.sex = ‘f’ AND p2.sex = ‘m’;
批量运行 mysql> source filename ; filename 中的多条sql语句末尾一定要加上“;”号,否则出错

mysq NULL值替换
将mysql数据库中的NULL值替换为空
UPDATE qrt_order_info SET order_num=” WHERE order_num=”NULL”;
原本在数据库的NULL是被当成字符串了,不同的语言,表示空的方法都不一样,mysql中是”\N”;所有可以在加载数据前,对NULL作替换,这样一次性导入后就自动为空,而不需要像上面那样去数据库里UPDATE了。
mysql内NULL判断的是空,就是没有任何值,此时用navicat查看的时候可以看淡灰色的”(Null)”字样;有时会在数据库记录的某一栏看不到任务记录,此时未必是NULL,有可能是空字符,”,只不过字符串里没任何内容,此时要用where xx=”;

MySQL数据导出

数据表导出:
在navicat中直接导出已存在的数据表,导出格式很多,最常用的导出格式是.sql,.excel;
查询结果导出:
navicat中查询结果也是可以直接导出的,不用再复制粘贴了。

linux下查询结果可通过如下方式导出:
在已连接数据库情况下,select * from edu_iclass_areas into outfile test.xls #这里需要绝对路径
使用命令导出:
window下
1.导出整个数据库
mysqldump -u 用户名 -p 数据库名 > 导出的文件名

mysqldump -u dbuser -p dbname > dbname.sql

2.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名

mysqldump -u dbuser -p dbname users> dbname_users.sql

3.导出一个数据库结构

mysqldump -u dbuser -p -d --add-drop-table dbname >d:/dbname_db.sql
-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table

linux下
一、导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径):
1、导出数据和表结构:
mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql

#/usr/local/mysql/bin/   mysqldump -uroot -p abc > abc.sql

敲回车后会提示输入密码
2、只导出表结构
mysqldump -u用户名 -p密码 -d 数据库名 > 数据库名.sql

#/usr/local/mysql/bin/   mysqldump -uroot -p -d abc > abc.sql

注:/usr/local/mysql/bin/ —> mysql的data目录

MySQL数据导入

关于批量导入数据到mysql数据库,首先可以从数据库导出批量文件,有多种格式,如excel,txt或sql;对于txt文件后期可以利用load导入其他数据库,但出要先创建数据库,如下面的命令所示,在navicat中使用load,文件名中不能有中文;对于sql文件,它导出得到的是包含一系列insert 语句的文件,有的会包含类似下面的完整命令,此时直接在navicat中运行该.sql文件即可;如果是在mysql的shell里直接运行的话,可用source *.sql

DROP TABLE IF EXISTS `temp_integrated`;
CREATE TABLE `temp_integrated` (
  `cust_code` varchar(32) NOT NULL COMMENT 'xx',
  `cust_name` varchar(32) DEFAULT NULL COMMENT 'xx',
  `id_card_no` varchar(32) DEFAULT NULL COMMENT 'xx',
  `province` varchar(32) DEFAULT NULL COMMENT 'xx',
  `cust_add` varchar(32) DEFAULT NULL COMMENT 'xx',
  `county` varchar(32) DEFAULT NULL COMMENT 'xx'
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO temp_integrated VALUES ('xxx', 'xx','xx', 'xx', 'xx', 'xx');

跨数据库操作
在表的前面加上数据进行限定,如select * from 库.表 where …….

关于数据乱码
在R读入mysql数据库出现中文乱码,首先确保mysql数据库中字符集编码格式为utf-8;然后再本地电脑上的数据源设置中(控制面板–管理工具–数据源–配置–detail)设置好对应mysql数据库连接的字符集编码为utf-8,然后在R中channel_temp=odbcConnect(“数据库连接的名称”,uid =”xx” ,pwd =”xx”,DBMSencoding=”UTF-8”),指定编码,则不会出现乱码。

如何判断mysql数据库中是否存在某张表
方法1、 DROP TABLE IF EXISTS tablename;
方法2、 做一个sql查询,比如:select * from tablename/select count(*) from tablename,如果返回值为空,则表不存在。
方法3、 查询:SHOW TABLES LIKE table1,判断返回值。如:
if(mysql_num_rows(mysql_query(“SHOW TABLES LIKE ‘”.$table.”’”)==1)
{
echo “Table exists”;
}
else
{
echo “Table does not exist”;
}
方法4、 CREATE TABLE IF NOT EXISTS yourdb.yourtable (…)

mysql判断数据库是否存在
(1) 判断数据库存在, 则删除:
drop database if exists db_name;
(2) 如果单纯显示是否存在数据库, 则可用:
show databases like ‘db_name’;

mysql中的函数

函数名 用途 举例 解释
abs(N) 返回N的绝对值 select ABS(-32); 32
sign(N) 返回参数的符号(为-1、0或1) select SIGN(-32);
select SIGN(0);
-1
0
mod(N,M) 取模运算,返回N被M除的余数(同%操作符) select MOD(234, 10); 4
floor(N) 返回不大于N的最大整数值 select FLOOR(-1.23); -2
ceiling(N) 返回不小于N的最小整数值 select CEILING(1.23); 2
round(N, D) 返回N的四舍五入值,保留D位小数(D的默认值为0) select ROUND(-1.23); -1
exp(N) 返回值e的N次方(自然对数的底) select EXP(2); 7.389056
log(N) 返回N的自然对数 select LOG(2); 0.693147
pow(X,Y)或power(X,Y) 返回值X的Y次幂 select POW(2,2); 4
sqrt(N) 返回非负数N的平方根 select SQRT(4); 2
pi() 返回圆周率 select PI(); 3.141593
cos(N) 返回N的余弦值 select COS(PI()); -1.000000
sin(N) 返回N的正弦值 select SIN(PI()); 0.000000
tan(N) 返回N的正切值 select TAN(PI()+1); 1.557408
acos(N) 返回N反余弦(N是余弦值,在-1到1的范围,否则返回NULL) select ACOS(1);
asin(N 返回N反正弦值 select ASIN(0.2); 0.201358
atan(N) 返回N的反正切值 select ATAN(2); 1.107149
atan2(X,Y) 返回2个变量X和Y的反正切(类似Y/X的反正切,符号决定象限) select ATAN(-2,2); -0.785398
cot(N) 返回X的余切 select COT(12); -1.57267341
RAND() 返回在范围0到1.0内的随机浮点值(可以使用数字N作为初始值) select RAND(); 0.5925
degrees(N) 把N从弧度变换为角度并返回 select DEGREES(PI()); 180.000000
radians(N) 把N从角度变换为弧度并返回 select RADIANS(90); 1.570796
truncate(N,D) 保留数字N的D位小数并返回 select TRUNCATE(1.223,1); 1.2
least(X,Y,…) 返回最小值(如果返回值被用在整数(实数或大小敏感字串)上下文或所有参数都是整数(实数或大小敏感字串)则他们作为整数(实数或大小敏感字串)比较,否则按忽略大小写的字符串被比较) select LEAST(2,0); 0
greatest(X,Y,…) 返回最大值(其余同LEAST()) select GREATEST(2,0);
select GREATEST(“B”,”A”,”C”);
2
”C”
STD 估算总体方差,根号内除以n,对应excel函数:STDEVP select STD(字段名) from 数据表;
STDDEV_SAMP 即估算样本方差,根号内除以(n-1),对应excel函数:STDEV select STD(字段名) from 数据表;

mysql中自定义函数

mysql中可以通过自定义函数来完成一些功能。
新建一个函数:
语法结构:

Create function function_name(参数列表)returns返回值类型
函数体

函数名,应该合法的标识符,并且不应该与已有的关键字冲突。
一个函数应该属于某个数据库,可以使用db_name.funciton_name的形式执行当前函数所属数据库,否则为当前数据库。
参数部分,由参数名和参数类型组成。
返回值类类型
函数体由多条可用的mysql语句,流程控制,变量声明等语句构成。
多条语句应该使用begin end语句块包含。在给变量赋值时一定要使用set ……
注意,一定要有return返回值语句。

#下面的程序自定义了一个分割字符串的函数,参数f_string为待分割的字符串,f_delimiter参数为定义的分割字符,参数f_order为从分割好的字符串数组中取第几个值;
#mysql中默认的命令分隔符为;号,当遇到;号时就要执行命令,这里自定义了$$为命令分隔符,这样后面的不同命令之间就可以使用$$分隔,与;不同的是,它不需立即执行,可以等到所有的命令读取完毕后再由mysql解释器一次性执行
DELIMITER $$   
DROP function IF EXISTS `func_splitString` $$   
CREATE FUNCTION `func_splitString`   
( f_string varchar(1000),f_delimiter varchar(5),f_order int)   
RETURNS varchar(255) CHARSET utf8   
BEGIN   
declare result varchar(255) default '';   
set result = reverse(substring_index(reverse(substring_index(f_string,f_delimiter,f_order)),f_delimiter,1));  
return result;   
END$$   

上面函数的使用方法,先运行该函数,这样函数就会存在mysql所在计算机的内存中,这样其他命令就可以像调用内置函数一样调用该函数,如下:

SELECT func_splitString('a,b,c',',','2')

将得到结果b

MySQL存储过程的创建

语法:

CREATE PROCEDURE  过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 ...] 过程体

DELIMITER //
  CREATE PROCEDURE myproc(OUT s int)
    BEGIN
      SELECT COUNT(*) INTO s FROM students;
    END
    //
DELIMITER ;

分隔符:

MySQL默认以”;”为分隔符,如果没有声明分割符,则编译器会把存储过程当成SQL语句进行处理,因此编译过程会报错,所以要事先用“DELIMITER //”声明当前段分隔符,让编译器把两个”//”之间的内容当做存储过程的代码,不会执行这些代码;“DELIMITER ;”的意为把分隔符还原。

参数:

存储过程根据需要可能会有输入、输出、输入输出参数,如果有多个参数用”,”分割开。MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT:
IN参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
OUT:该值可在存储过程内部被改变,并可返回
INOUT:调用时指定,并且可被改变和返回

过程体:

过程体的开始与结束使用BEGIN与END进行标识。
条件语句

IF-THEN-ELSE语句:

#条件语句IF-THEN-ELSE
DROP PROCEDURE IF EXISTS proc3;
DELIMITER //
CREATE PROCEDURE proc3(IN parameter int)
  BEGIN
    DECLARE var int;
    SET var=parameter+1;
    IF var=0 THEN
      INSERT INTO t VALUES (17);
    END IF ;
    IF parameter=0 THEN
      UPDATE t SET s1=s1+1;
    ELSE
      UPDATE t SET s1=s1+2;
    END IF ;
  END ;
  //
DELIMITER ;

下面是一个往表格中插入行的例子

#条件语句IF-THEN-ELSE
DROP PROCEDURE IF EXISTS proc3;
DELIMITER //
CREATE PROCEDURE proc3(IN date_string varchar(32))
  BEGIN
    IF MONTH(date_string)=12 THEN
      INSERT INTO temp_month_interval VALUES(
            CONCAT(year(CURDATE()),'11','01'),CONCAT(year(CURDATE()),'11','30'),CONCAT(year(CURDATE()),'11','01'),CONCAT(year(CURDATE()),'11','30'),
            CONCAT(year(CURDATE()),'10','01'),CONCAT(year(CURDATE()),'10','31'),CONCAT(year(CURDATE()),'10','01'),CONCAT(year(CURDATE()),'10','31'),
            CONCAT(year(CURDATE()),'09','01'),CONCAT(year(CURDATE()),'09','30'),CONCAT(year(CURDATE()),'09','01'),CONCAT(year(CURDATE()),'09','30'),
            CONCAT(year(CURDATE()),'08','01'),CONCAT(year(CURDATE()),'08','31'),CONCAT(year(CURDATE()),'08','01'),CONCAT(year(CURDATE()),'08','31'),
            CONCAT(year(CURDATE()),'07','01'),CONCAT(year(CURDATE()),'07','31'),CONCAT(year(CURDATE()),'07','01'),CONCAT(year(CURDATE()),'07','31'),
            CONCAT(year(CURDATE()),'06','01'),CONCAT(year(CURDATE()),'06','30'),CONCAT(year(CURDATE()),'06','01'),CONCAT(year(CURDATE()),'06','30'));
    ELSE
      INSERT INTO temp_month_interval VALUES(
            CONCAT(year(CURDATE()),'11','01'),CONCAT(year(CURDATE()),'11','30'),CONCAT(year(CURDATE()),'11','01'),CONCAT(year(CURDATE()),'11','30'),
            CONCAT(year(CURDATE()),'10','01'),CONCAT(year(CURDATE()),'10','31'),CONCAT(year(CURDATE()),'10','01'),CONCAT(year(CURDATE()),'10','31'),
            CONCAT(year(CURDATE()),'09','01'),CONCAT(year(CURDATE()),'09','30'),CONCAT(year(CURDATE()),'09','01'),CONCAT(year(CURDATE()),'09','30'),
            CONCAT(year(CURDATE()),'08','01'),CONCAT(year(CURDATE()),'08','31'),CONCAT(year(CURDATE()),'08','01'),CONCAT(year(CURDATE()),'08','31'),
            CONCAT(year(CURDATE()),'07','01'),CONCAT(year(CURDATE()),'07','31'),CONCAT(year(CURDATE()),'07','01'),CONCAT(year(CURDATE()),'07','31'),
            CONCAT(year(CURDATE()),'06','01'),CONCAT(year(CURDATE()),'06','30'),CONCAT(year(CURDATE()),'06','01'),CONCAT(year(CURDATE()),'06','30'));
    END IF ;
  END ;
  //
DELIMITER ;

调用过程:

call proc3(CURDATE())

这样表里的数据就得到更新。
存储过程的更详细信息可查阅该文

MySql赋值操作符”=”与”:=”

“:=” 是真正意义上的赋值操作,左边的变量设置为右边的值。
www.2cto.com
“=” 则只在两种情况下作为赋值用,第一种就是在SET语句里面,SET var = value;
另一种是在UPDATE语句里面的那个SET,如update table_name set column_name where….。

除了方面这两种情况外”=”则作为比较操作符使用。

MySQL性能提升

1、能先用where 缩减查询范围先缩减

此条对运行速度影响最大

2、先想清楚要实现的功能,尽量在查询一个表的时候完成

多生成一些新的字段都没关系,对性能影响不大,但反复查询就很影响性能

3、少自己创建函数

调用自己创建的函数速度很慢

版权声明:本文为博主原创文章,未经博主允许不得转载。

www.htsjk.Com true http://www.htsjk.com/shujukunews/10070.html NewsArticle mysql数据库操作(一),mysql数据库操作 1、mysql常识 本文前面主要是对《mysql_5.5中文参考手册》部分内容的整理。 说明:登录mysql后,可以看到mysql 的提示符,可以输入相关命令;输入命...
评论暂时关闭