存档

文章标签 ‘mysql’

mysql授权中的*问题

2014年6月16日 没有评论

grant all privileges on `db`.* to user@’host’ identified by ‘pass’;

grant all privileges on `db`.`*` to user@’host’ identified by ‘pass’;

上面两句你能看出来有什么区别吗

下面这句多了个反引号

结果授权怎么都不对

最后看到这里,去掉反引,重新授权OK

具体原因不明。。。好蛋疼

Technorati :
Del.icio.us :
Zooomr :
Flickr :

分类: mysql 标签:

Hive的case when和mysql的case when的区别

2014年3月20日 没有评论

最近在用hive,因为需要用到case when语法,就网上查了下资资料

hive用法:

select

case col_name

when value then other other_value

else col_name

end as other_col_name

mysql的用法:

select

case

when col_name=xxx then value

else col_name

end as col_name_xxx

from table_name;

参考:

http://yaoyinjie.blog.51cto.com/3189782/920688

https://dev.mysql.com/doc/refman/5.0/en/case.html

分类: 杂七杂八 标签: ,

mysql记录显示之潜规则

2013年5月8日 没有评论

今天因为项目需要,要将数据结果存储到表中

表结构如下:

CREATE TABLE `table_test` (
`date` datetime NOT NULL,
`id` int(11) NOT NULL,
`num` int(11) NOT NULL,
PRIMARY KEY (`date`,`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

插入数据:

insert into `table_test` values
(‘2013-01-09 00:00:00′,’23084′,’5818’),
(‘2013-01-09 00:00:00′,’23093′,’3071’),
(‘2013-01-09 00:00:00′,’310′,’1588’),
(‘2013-01-09 00:00:00′,’23095′,’1035’),
(‘2013-01-09 00:00:00′,’348′,’657’),
(‘2013-01-09 00:00:00′,’13065′,’560’);

其中结果是按照date和id字段排序的.

阅读全文…

分类: mysql 标签:

perl DBI获取mysql中sql语句返回的字段名

2013年4月9日 5 条评论

最近用perl的dbi来处理mysql,有时候需要返回结果的字段名,但是网上查了没有结果

后来在国外的网站上查到了这个代码:

my $columns = get_columns($dbh, $table);

print @$columns;

sub get_columns {
my $dbh = shift;
my $table = shift;

#SQL statement always gauranteed to return 0 rows,
#but ALWAYS returns the column names. Basicaly a
#portable “DESC $table”
my $statement = qq{
SELECT *
FROM $table
WHERE 1 = 0
};

my $sth = $dbh->prepare($statement);
$sth->execute;

#Get the column names for the $table
return $sth->FETCH(‘NAME_lc’);
}

查了下cpan上的DBI的说明,发现了:

NAME_lc

Type: array-ref, read-only

Like /NAME but always returns lowercase names.

说明了NAME_lc是自带的一个属性。并且是只读的数组引用

DBI相关的信息太多,不一一挖掘…

参考

http://www.perlmonks.org/?node_id=52123

分类: mysql, perl, 技术 标签: ,

mysql 中load按照字段来load(转)

2013年4月7日 没有评论

最近要预先load后期需要修改格式的数据,所以遇到load的数据和数据库中的字段对不上的问题,网上查了:

数据库表字段定义:
CREATE TABLE `TABLE_NAME` (
`f1` varchar(25) default NULL,
`f2` varchar(20) default NULL,
`f3` double(15,0) default -1,
`f4` varchar(20) default NULL,
`f5` double(15,3) default NULL
);

源文件内容:【文件名:example_data1.txt】
cat;red;2.0;tree

load data infile ‘D:\\my_program\\Tek_sig\\example_data1.txt’
into table TABLE_NAME
FIELDS TERMINATED BY ‘;’
LINES TERMINATED BY ‘\n’
(f1,f2,f3,f4)

可以参照:

http://bbs.csdn.net/topics/360090118

分类: mysql 标签:

mysql的union all及order by

2013年2月5日 没有评论

今天用了下mysql的union all,将两个结果集合并

合并后有个问题就是结果集要按照列排序

我先是每个结果集内部都来个order by 然后再union all,结果提示用法错误

后来去掉前面一个结果集的order,保留最后一个order by,结果运行正常,并且是按照需要的字段排序好了

看来这个 union all+order by 原来是这么个用法

及最后的order by 就是对整个结果集进行排序

分类: 杂七杂八 标签:

mysql之group by分组取最后一条记录

2013年1月29日 没有评论

表结构:

CREATE TABLE `info` (
`recordID` int(10) DEFAULT NULL,
`userid` int(10) DEFAULT NULL,
`school` varchar(200) DEFAULT NULL,
`time` int(10) DEFAULT NULL
)

INSERT INTO `info` VALUES (‘1’, ‘1001’, ‘A1’, ‘1315486001’);
INSERT INTO `info` VALUES (‘2’, ‘1002’, ‘B1’, ‘1315486008’);
INSERT INTO `info` VALUES (‘3’, ‘1001’, ‘A2’, ‘1315487000’);
INSERT INTO `info` VALUES (‘4’, ‘1003’, ‘C1’, ‘1315487099’);
INSERT INTO `info` VALUES (‘5’, ‘1003’, ‘C2’, ‘1315488014’);
INSERT INTO `info` VALUES (‘7’, ‘1005’, ‘A2’, ‘1315489016’);
INSERT INTO `info` VALUES (‘8’, ‘1003’, ‘D1’, ‘1315489050’);
INSERT INTO `info` VALUES (’10’, ‘1005’, ‘B1’, ‘1315490099’);
INSERT INTO `info` VALUES (’11’, ‘1002’, ‘A2’, ‘1315490099’);
INSERT INTO `info` VALUES (’15’, ‘1009’, ‘E2’, ‘1315492090’);
INSERT INTO `info` VALUES (’16’, ‘1009’, ‘E1’, ‘1315493011’);

select * from (select * from info order by recordid desc) i group by userid;

+———-+——–+——–+————+
| recordID | userid | school | time |
+———-+——–+——–+————+
| 3 | 1001 | A2 | 1315487000 |
| 11 | 1002 | A2 | 1315490099 |
| 8 | 1003 | D1 | 1315489050 |
| 10 | 1005 | B1 | 1315490099 |
| 16 | 1009 | E1 | 1315493011 |
+———-+——–+——–+————+

这个就是取每个id的最大的recordid的那条记录

结果。。。

在mariadb10.0中,运行以上查询得不到想要的结果,但是在mysql官方的5.5.28上,就是可以得到想要的结果的

莫名其妙。难道是mariadb10.0还么GA,亦或是这个就是mariadb与mysql的某些源码上优化导致的不同??

但是后来在mariadb上运行:

alter table info order by recordid desc;

后,在运行:

select * from info group by userid;

结果:

+———-+——–+——–+————+
| recordID | userid | school | time |
+———-+——–+——–+————+
| 3 | 1001 | A2 | 1315487000 |
| 11 | 1002 | A2 | 1315490099 |
| 8 | 1003 | D1 | 1315489050 |
| 10 | 1005 | B1 | 1315490099 |
| 16 | 1009 | E1 | 1315493011 |
+———-+——–+——–+————+

这个难道是因为mariadb的临时表没给排序的吗??好奇怪的

参考:

http://www.sunql.com/648.html

分类: mysql 标签:

mysql的in类的子查询的优化

2013年1月29日 没有评论

最近做数据统计,有时候要做

select id from tb_name where id in (select id from tb_name2);

这样的子查询

发现速度相当慢,

show processlist看的话,基本发现状态是coping to tmp table,

服务器的cpu占用也很高

后来网上查了下,说是这个查询很慢,建议使用join这样的查询来优化

后来试了下,果然,同样的查询,join很快就搞定了

对比时间 join 0.52s vs in 4min 10.24s…差距还是很大的

参考:

忘记了

分类: mysql 标签:

mysqldump的single-transaction选项

2013年1月29日 没有评论

原文 http://dev.mysql.com/doc/refman/5.6/en/mysqldump.html#option_mysqldump_single-transaction

一直误解了,原来是这个意思

分类: mysql 标签:

mysql报Cannot load from mysql.proc错误

2013年1月28日 1 条评论

今天用navicat操作mysql的时候报:

Cannot load from mysql.proc

后来网上查到了:

http://webcheatsheet.com/sql/Fix_Cannot_load_from_mysql.proc._The_table_is_probably_corrupted.php

说是运行

mysql_upgrade.exe -uroot -p –force
结果运行了,后来继续操作,提示:

cannot proceed because system tables used by event scheduler

重启了mysql下,就好了
同时网上也查到:
http://forum.logzilla.pro/index.php?topic=191.0
说是:
SET GLOBAL event_scheduler = 1;就好了
参考:
http://webcheatsheet.com/sql/Fix_Cannot_load_from_mysql.proc._The_table_is_probably_corrupted.php
http://forum.logzilla.pro/index.php?topic=191.0
分类: 杂七杂八 标签: