SQL语句,先排重,再归总

Publish: April 30, 2014 Category: MySQL 1 Comment

表里有一两个字段,数据如下:

Field1 Field2

  A   234
  B   110
  C   110
  A   221
  A   234
  C   110
  B   99

做以下功能:对Field1归总后,再对Field2排重

意思是:先对Field1做group by,然后再根据结果对Field2做排重

说明:

1、不做排重的结果为: 

A 3
B 2
C 2

2、再做排重后的结果应为:

A 2
B 2
C 1


解决方法:

1、先取出排重后的数据:
select distinct Field1, Field2 from Table
2、再把步骤1里的结果当成临时表,再归总:
select Field1, count(*) from (select distinct Field1, Field2 from Table) group by Field1

MySQL主从同步机制及同步中的问题处理

Publish: September 29, 2013 Category: MySQL 45 Comments

MySQL主从配置的搭建
具体步骤:
1. 安装MySQL。首先要在两台服务器上安装MySQL,完成之后应该确认能否两台服务器能否互相访问。 这是因为缺省的my.cnf设置有
bind-address = 127.0.0.1,这条语句应该被注释掉。
2. 创建账号。数据库中缺省的帐户的host值是localhost,所以应该创建一个可以远端访问的帐号。比如:root@’%’ or root@10.x.x.x
3. 配置主Server。
在主服务器(数据库源)上的my.cnf配置[mysqld]之后加入如下条目:

log_bin = /var/log/mysql/mysql-bin.log
server-id = 1 //1代表主数据库(源) 2代表辅数据库(目的)
binlog_do_db = testmirror //要做同步的数据库名字,可以是多个数据库,之间用分号分割。

阅读剩余部分...

mysql C api 使用

Publish: March 5, 2013 Category: MySQL,C/C++ 26 Comments

1. 使用 mysql_api 库,在这里:  

    https://github.com/kyosold/Carrots/tree/master/mysql_api


2. 自己写:

#include "mysql.h"

int mysql_exec(char *host, int port, char *user, char *pass, char *db, char *subject, int subject_len)
{
    MYSQL mysql, *sock;
    MYSQL_RES* res = NULL;
    MYSQL_FIELD *mfd = NULL;
    MYSQL_ROW   row;
    char sql[5 * 4096] = {0};
    mysql_init(&mysql);
    if (!(sock = mysql_real_connect(&mysql, host, user, pass, db, port, NULL, 0))) {
        printf("connect mysql fail\n");
        return 1;
    }
    // select 
    snprintf(sql, sizeof(sql), "select * from table");
    if (mysql_query(sock, sql)) {
        mysql_close(sock);
        printf("query mysql fail:%s\n", mysql_error(sock));
        return 1;
    }
    if (!(res = mysql_store_result(sock))) {
        mysql_close(sock);
        printf("could not get result from %s\n", mysql_error(sock));
        return 1;
    }
    if (row = mysql_fetch_row(res)) {
        printf("field_0:%s\n", row[0]);
        printf("field_1:%s\n", row[1]);
        printf("field_2:%s\n", row[2]);
        printf("field_3:%s\n", row[3]);
        printf("field_4:%s\n", row[4]);
    } else {
        mysql_free_result(res);
        mysql_close(sock);
        printf("is null data\n");
        return 1;
    }
    mysql_free_result(res);
    // insert 
    char mysql_subject[subject_len + 1];
    mysql_real_escape_string(sock, mysql_subject, subject, subject_len);
    snprintf(sql, sizeof(sql), "insert into table (id, subject) values (11, '%s');", mysql_subject);
    if (mysql_query(sock, sql)) {
        mysql_close(sock);
        printf("insert mysql fail:%s\n", mysql_error(sock));
        return 1;
    }
    mysql_close(sock);
    return 0;
}



mysql 添加授权

Publish: November 26, 2012 Category: MySQL 15 Comments

# 用户名: auth
# 密 码: abc
# 授权给: 203.81.18.67

grant all privileges on *.* to auth@'203.81.18.67' identified by 'abc';
flush privileges;