一、下载
1、进入官网:http://www.mysql.com/
3、拉到下面
4、点开
5、点开红字“这里下载服务器”左边的
6、拉到下面
7、点击你需要的,建议点第一个。
8、拉到下面
9、点击开始下载 mysql-5.7.10-win32.zip。
10、点开 4 中红字标示“这里下载编程所需的头文件及链接库”左边的
11、找到并点开
12、拉到页面中间位置
13、以下同 7、8、9,建议点第三个,开始下载 mysql-connector-c-6.1.6-win32.zip。
注意版本要一致:要么都是 32-bit,要么都是 64-bit。
二、精简
1、mysql-5.7.10-win32.zip 中仅保留 bin 和 share 两个子目录,其他子目录及文件全部删除。
2、mysql-5.7.10-win32\bin 目录下仅保留 mysqld.exe、mysqladmin.exe和 mysql.exe 三个文件,其他子目录及文件全部删除。
3、mysql-5.7.10-win32\share 目录下仅保留 charsets 和 english 两个子目录,其他子目录及文件全部删除。
4、mysql-connector-c-6.1.6-win32.zip 中仅保留 include 和 lib 两个子目录,其他子目录及文件全部删除。
5、mysql-connector-c-6.1.6-win32\lib 目录下保留 libmysql.dll 和 libmysql.lib 两个文件,其他子目录及文件全部删除。
精简后的目录结构如下:
mysql-5.7.10-win32
| -- bin
| |-- mysql.exe
| |-- mysqladmin.exe
| |-- mysqld.exe
| -- share
|-- charsets
| |-- *.*
|-- english
|-- *.*
mysql-connector-c-6.1.6-win32
|-- include
| |-- mysql
| | |-- *.*
| |-- *.*
| -- lib
|-- libmysql.dll
|-- libmysql.lib
三、安装
1、解压 mysql-5.7.10-win32.zip 和 mysql-connector-c-6.1.6-win32.zip 中所有子目录和文件到同一个目录下,路径中不要出现汉字。我的是 E:\Program Files\mysql。
2、以管理员权限启动 cmd,并进入到 mysql\bin 目录。
3、初始化:mysqld --initialize-insecure --user=root
4、安装服务:mysqld install
5、启动服务:net start mysql
6、设置密码:mysqladmin -u root password 密码
7、建议把服务里 MySQL 的启动类型从自动设为手动,把第5步做个批处理文件。需要的时候右键 .bat 文件以管理员身份运行。
四、卸载
1、停止服务:net stop mysql
2、移除服务:mysqld remove
3、删掉 mysql 目录
五、GNU C语言(MinGW64)编程
1、将 mysql\lib 目录下的 libmysql.dll 拷贝到 C 语言项目目录下。
2、在源程序里包含头文件 mysql.h,编译参数-I后加上头文件目录、源程序列表里加上 libmysql.lib 库的完整路径:
gcc -Imysql的完整路径\include -o 目标程序 源代码.c mysql的完整路径\lib\libmysql.lib
示例如下:
/* 编译: * 拷贝 E:\Program Files\MySQL\lib\libmysql.dll 到源程序目录 * gcc -IE:\Program Files\MySQL\include -o TestMySQL TestMySQL.c E:\Program Files\MySQL\lib\libmysql.lib */ #include <string.h> #include <stdio.h> #include "mysql.h" int main() { char szHost[] = "localhost"; char szUser[] = "root"; char szPasswd[] = "root"; char szDB[] = "study1"; char szTable[] = "T_Pet"; char szQuery[1024]; // SQL语句,单条记录最大8000字节 MYSQL mysql, *pmysql; // 数据库连接的对象及其指针 MYSQL_RES *res; // 结果集 MYSQL_ROW row; // 结果集中的一行数据 unsigned int nFields; // 结果集中的字段数 unsigned int nRows; // 结果集中的行数 unsigned int i, j; // 初始化MYSQL对象 mysql_init(&mysql); // 连接服务器 pmysql = mysql_real_connect(&mysql, szHost, szUser, szPasswd, NULL, 0, NULL, 0); if(pmysql == NULL) { printf("Couldn't connect to host. (%s)\n", mysql_error(&mysql)); return 1; } // 创建库 sprintf(szQuery, "create database if not exists %s", szDB); if(mysql_real_query(pmysql, szQuery, strlen(szQuery)) != 0) { printf("Create databse failed. (%s)\n", mysql_error(pmysql)); return 1; } // 选择库 if(mysql_select_db(pmysql, szDB) != 0) { printf("Select databse failed. (%s)\n", mysql_error(pmysql)); return 1; } // 创建表 sprintf(szQuery, "create table if not exists %s (ID int primary key not NULL auto_increment, \ Name varchar(20), \ Owner varchar(20), \ Species varchar(20) not NULL, \ Sex char(2) not NULL default 'f', \ Birthday date not NULL, Deathday date) \ engine=MYISAM default charset=UTF8", szTable); // engine=InnoDB 时每次 auto_increment 会跳加 8,原因不明。 if(mysql_real_query(pmysql, szQuery, strlen(szQuery)) != 0) { printf("Create table failed. (%s)\n", mysql_error(pmysql)); return 1; } // 插入数据 sprintf(szQuery, "load data LOCAL INFILE 'pet.txt' into table %s fields \ terminated by '\\t' lines terminated by '\\r\\n' \ (Name, Owner, Species, Sex, Birthday, Deathday)", szTable); if(mysql_real_query(pmysql, szQuery, strlen(szQuery)) != 0) { printf("Load data failed. (%s)\n", mysql_error(pmysql)); return 1; } // 查询表头 sprintf(szQuery, "select COLUMN_NAME from information_schema.COLUMNS where table_name = '%s' \ and table_schema = '%s'", szTable, szDB); if(mysql_real_query(pmysql, szQuery, strlen(szQuery)) != 0) { printf("Query failed. (%s)\n", mysql_error(pmysql)); return 1; } res = mysql_store_result(pmysql); if(res == NULL) { printf("Couldn't get result. (%s)\n", mysql_error(pmysql)); return 1; } while((row = mysql_fetch_row(res)) != NULL) printf("%-20s", row[0]); printf("\n"); // 查询全表数据 sprintf(szQuery, "select * from %s", szTable); if(mysql_real_query(pmysql, szQuery, strlen(szQuery)) != 0) { printf("Query failed. (%s)\n", mysql_error(pmysql)); return 1; } res = mysql_store_result(pmysql); if (res == NULL) { printf("Couldn't get result. (%s)\n", mysql_error(pmysql)); return 1; } nRows = mysql_num_rows(res); nFields = mysql_num_fields(res); for(i=0; i<nRows; i++) { row = mysql_fetch_row(res); for(j=0; j<nFields; j++) printf("%-20s", row[j] ? row[j] : ""); printf("\n"); } // 清理 mysql_free_result(res); mysql_close(pmysql); return 0; }
pet.txt 是抄来的(中间分隔符不是空格,是 Tab)
Fluffy Harold cat f 1993-02-04 Claws Gwen cat m 1994-03-17 Buffy Harold dog f 1989-05-13 Fang Benny dog m 1990-08-27 Bowser Diane dog m 1979-08-31 1995-07-29 Chirpy Gwen bird f 1998-09-11 Whistler Gwen bird f 1997-12-09 Slim Benny snake m 1996-04-29
本文仅在 mysql_5.7.10-win32 + mysql-connector-c-6.1.6-win32 和 MinGW_w64-i686-5.3.0-release-posix-dwarf-rt_v4-rev0 下测试通过。