存档

‘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 标签:

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之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之多表join

2012年12月25日 1 条评论

最近因为做数据分析,需要用到多表查询,网上查询,用法如下:

select a.name,b.id,c.describe
from a
left join b on a.id=b.id
left join c on a.id=c.id;

意思就是,要多次join的话,要写多个join和join on的条件

参考:

http://www.5idev.com/p-php_mysql_join_multi_table.shtml
http://blog.chiefer.cn/mysql/107   mysql中left join,right join,inner join,outer join的用法详解

分类: mysql, 杂七杂八 标签:

mariadb中使用federated引擎

2012年12月24日 没有评论

federated引擎是mysql的一个特殊的引擎,类似于oracle的dblink的功能,能够访问远程数据库上的表,而不用本地存储数据

默认是未启用的,

MariaDB [(none)]> show engines;
+——————–+———+————————————————————+————–+——+————+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+——————–+———+————————————————————+————–+——+————+
| CSV | YES | CSV storage engine | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| Aria | YES | Crash-safe tables with MyISAM heritage | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
+——————–+———+————————————————————+————–+——+————+

阅读全文…

分类: mysql 标签: ,

mysql中groupby的默认排序

2012年12月24日 没有评论

最近用了mysql的group by 功能,发现默认是用group的字段asc排序的,后来网上查了下,如果结果集比较大的话,排序会有性能影响,可以用group by null,这样可以不排序,提高性能

参考:

http://fred.oracle1.com/weblog/2010/09/08/mysql%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%9619-group-by-%E6%93%8D%E4%BD%9C%E7%9A%84%E4%BC%98%E5%8C%96/

分类: mysql 标签: