你们谁懂mysql分析函数,我想学习,有没详细的教程

21分钟 MySQL 入门教程
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了MySQL 入门教程,通过简单的介绍基本上可以让你21分钟就可以了解下mysql
21分钟 MySQL 入门教程
MySQL的相关概念介绍
MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成, 如图所示的一个表格:
表头(header): 每一列的名称;
列(row): 具有相同数据类型的数据的集合;
行(col): 每一行用来描述某个人/物的具体信息;
值(value): 行的具体信息, 每个值必须与该列的数据类型相同;
键(key): 表中用来识别某个特定的人\物的方法, 键的值在当前列中具有唯一性。
Windows下MySQL的配置
以 MySQL 5.1 免安装版为例, 下载 mysql-noinstall-5.1.69-win32.zip ( 官方下载页:
1. 将下载的 mysql-noinstall-5.1.69-win32.zip 解压至需要安装的位置, 如: C:\Program F
2. 在安装文件夹下找到 my-small.ini 配置文件, 将其重命名为 my.ini , 打开进行编辑, 在 [client] 与 [mysqld] 下均添加一行: default-character-set = gbk
3. 打开 Windows 环境变量设置, 新建变量名 MYSQL_HOME , 变量值为 MySQL 安装目录路径, 这里为 C:\Program Files\mysql-5.1.69-win32
4. 在 环境变量 的 Path 变量中添加 ;%MYSQL_HOME%\
5. 安装 MySQL 服务, 打开Windows命令提示符, 执行命令: mysqld --install MySQL --defaults-file="my.ini" 提示"Service successfully installed."表示成功;
MySQL服务的启动、停止与卸载
在 Windows 命令提示符下运行:
启动: net start MySQL
停止: net stop MySQL
卸载: sc delete MySQL
MySQL脚本的基本组成
与常规的脚本语言类似, MySQL 也具有一套对字符、单词以及特殊符号的使用规定, MySQL 通过执行 SQL 脚本来完成对数据库的操作, 该脚本由一条或多条MySQL语句(SQL语句 + 扩展语句)组成, 保存时脚本文件后缀名一般为 .sql。在控制台下, MySQL 客户端也可以对语句进行单句的执行而不用保存为.sql文件。
标识符用来命名一些对象, 如数据库、表、列、变量等, 以便在脚本中的其他地方引用。MySQL标识符命名规则稍微有点繁琐, 这里我们使用万能命名规则: 标识符由字母、数字或下划线(_)组成, 且第一个字符必须是字母或下划线。
对于标识符是否区分大小写取决于当前的操作系统, Windows下是不敏感的, 但对于大多数 linux\unix 系统来说, 这些标识符大小写是敏感的。
MySQL的关键字众多, 这里不一一列出, 在学习中学习。 这些关键字有自己特定的含义, 尽量避免作为标识符。
MySQL语句是组成MySQL脚本的基本单位, 每条语句能完成特定的操作, 他是由 SQL 标准语句 + MySQL 扩展语句组成。
MySQL函数用来实现数据库操作的一些高级功能, 这些函数大致分为以下几类: 字符串函数、数学函数、日期时间函数、搜索函数、加密函数、信息函数。
MySQL中的数据类型
MySQL有三大类数据类型, 分别为数字、日期\时间、字符串, 这三大类中又更细致的划分了许多子类型:
整数: tinyint、smallint、mediumint、int、bigint
浮点数: float、double、real、decimal
日期和时间: date、time、datetime、timestamp、year
字符串类型
字符串: char、varchar
文本: tinytext、text、mediumtext、longtext
二进制(可用来存储图片、音乐等): tinyblob、blob、mediumblob、longblob
这里不能详细对这些类型进行介绍了, 篇幅可能会很长, 详细介绍参见: 《》
使用MySQL数据库
登录到MySQL
当 MySQL 服务已经运行时, 我们可以通过MySQL自带的客户端工具登录到MySQL数据库中, 首先打开命令提示符, 输入以下格式的命名:
mysql -h 主机名 -u 用户名 -p
-h : 该命令用于指定客户端所要登录的MySQL主机名, 登录当前机器该参数可以省略;
-u : 所要登录的用户名;
-p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。
以登录刚刚安装在本机的MySQL数据库为例, 在命令行下输入 mysql -u root -p 按回车确认, 如果安装正确且MySQL正在运行, 会得到以下响应:
Enter password:
若密码存在, 输入密码登录, 不存在则直接按回车登录, 按照本文中的安装方法, 默认 root 账号是无密码的。登录成功后你将会看到 Welecome to the MySQL monitor... 的提示语。
然后命令提示符会一直以 mysql& 加一个闪烁的光标等待命令的输入, 输入 exit 或 quit 退出登录。
创建一个数据库
使用 create database 语句可完成对数据库的创建, 创建命令的格式如下:
create database 数据库名 [其他选项];
例如我们需要创建一个名为 samp_db 的数据库, 在命令行下执行以下命令:
create database samp_
为了便于在命令提示符下显示中文, 在创建时通过 character set gbk 将数据库字符编码指定为 gbk。创建成功时会得到 Query OK, 1 row affected(0.02 sec) 的响应。
注意: MySQL语句以分号(;)作为语句的结束, 若在语句结尾不添加分号时, 命令提示符会以 -& 提示你继续输入(有个别特例, 但加分号是一定不会错的);
提示: 可以使用 命令查看已经创建了哪些数据库。
选择所要操作的数据库
要对一个数据库进行操作, 必须先选择该数据库, 否则会提示错误:
ERROR ): No database selected
两种方式对数据库进行使用的选择:
一: 在登录数据库时指定, 命令: mysql -D 所选择的数据库名 -h 主机名 -u 用户名 -p
例如登录时选择刚刚创建的数据库: mysql -D samp_db -u root -p
二: 在登录后使用 use 语句指定, 命令: use 数据库名;
use 语句可以不加分号, 执行 use samp_db 来选择刚刚创建的数据库, 选择成功后会提示: Database changed
创建数据库表
使用 create table 语句可完成对表的创建, create table 的常见形式:
create table 表名称(列声明);
以创建 students 表为例, 表中将存放 学号(id)、姓名(name)、性别(sex)、年龄(age)、联系电话(tel) 这些内容:
create table students
id int unsigned not null auto_increment primary key,
name char(8) not null,
sex char(4) not null,
age tinyint unsigned not null,
tel char(13) null default "-"
对于一些较长的语句在命令提示符下可能容易输错, 因此我们可以通过任何文本编辑器将语句输入好后保存为 createtable.sql 的文件中, 通过命令提示符下的文件重定向执行执行该脚本。
打开命令提示符, 输入: mysql -D samp_db -u root -p & createtable.sql
(提示: 1.如果连接远程主机请加上 -h 指令; 2. createtable.sql 文件若不在当前工作目录下需指定文件的完整路径。)
create table tablename(columns) 为创建数据库表的命令, 列的名称以及该列的数据类型将在括号内完成;
括号内声明了5列内容, id、name、sex、age、tel为每列的名称, 后面跟的是数据类型描述, 列与列的描述之间用逗号(,)隔开;
以 "id int unsigned not null auto_increment primary key" 行进行介绍:
"id" 为列的名称;
"int" 指定该列的类型为 int(取值范围为 -88607), 在后面我们又用 "unsigned" 加以修饰, 表示该类型为无符号型, 此时该列的取值范围为 0到;
"not null" 说明该列的值不能为空, 必须要填, 如果不指定该属性, 默认可为空;
"auto_increment" 需在整数列中使用, 其作用是在插入数据时若该列为 NULL, MySQL将自动产生一个比现存值更大的唯一标识符值。在每张表中仅能有一个这样的值且所在列必须为索引列。
"primary key" 表示该列是表的主键, 本列的值必须唯一, MySQL将自动索引该列。
下面的 char(8) 表示存储的字符长度为8, tinyint的取值范围为 -127到128, default 属性指定当该列值为空时的默认值。
更多的数据类型请参阅 《》
提示: 1. 使用 命令可查看已创建了表的名称; 2. 使用 describe 表名; 命令可查看已创建的表的详细信息。
操作MySQL数据库
向表中插入数据
insert 语句可以用来将一行或多行数据插到数据库表中, 使用的一般形式如下:
insert [into] 表名 [(列名1, 列名2, 列名3, ...)] values (值1, 值2, 值3, ...);
其中 [] 内的内容是可选的, 例如, 要给 samp_db 数据库中的 students 表插入一条记录, 执行语句:
insert into students values(NULL, "王刚", "男", 20, "");
按回车键确认后若提示 Query Ok, 1 row affected (0.05 sec) 表示数据插入成功。 若插入失败请检查是否已选择需要操作的数据库。
有时我们只需要插入部分数据, 或者不按照列的顺序进行插入, 可以使用这样的形式进行插入:
insert into students (name, sex, age) values("孙丽华", "女", 21);
查询表中的数据
select 语句常用来根据一定的查询规则到数据库中获取数据, 其基本的用法为:
select 列名称 from 表名称 [查询条件];
例如要查询 students 表中所有学生的名字和年龄, 输入语句 select name, 执行结果如下:
mysql& select name,
+--------+-----+
| name | age |
+--------+-----+
| 王刚 | 20 |
| 孙丽华 | 21 |
| 王永恒 | 23 |
| 郑俊杰 | 19 |
| 陈芳 | 22 |
| 张伟朋 | 21 |
+--------+-----+
6 rows in set (0.00 sec)
也可以使用通配符 * 查询表中所有的内容, 语句: select *
按特定条件查询:
where 关键词用于指定查询条件, 用法形式为: select 列名称 from 表名称 where 条件;
以查询所有性别为女的信息为例, 输入查询语句: select * from students where sex="女";
where 子句不仅仅支持 "where 列名 = 值" 这种名等于值的查询形式, 对一般的比较运算的运算符都是支持的, 例如 =、&、&、&=、&、!= 以及一些扩展运算符 is [not] null、in、like 等等。 还可以对查询条件使用 or 和 and 进行组合查询, 以后还会学到更加高级的条件查询方式, 这里不再多做介绍。
查询年龄在21岁以上的所有人信息: select * from students where age & 21;
查询名字中带有 "王" 字的所有人信息: select * from students where name like "%王%";
查询id小于5且年龄大于20的所有人信息: select * from students where id&5 and age&20;
更新表中的数据
update 语句可用来修改表中的数据, 基本的使用形式为:
update 表名称 set 列名称=新值 where 更新条件;
将id为5的手机号改为默认的"-": update students set tel=default where id=5;
将所有人的年龄增加1: update students set age=age+1;
将手机号为
的姓名改为 "张伟鹏", 年龄改为 19: update students set name="张伟鹏", age=19 where tel="";
删除表中的数据
delete 语句用于删除表中的数据, 基本用法为:
delete from 表名称 where 删除条件;
删除id为2的行: delete from students where id=2;
删除所有年龄小于21岁的数据: delete from students where age&20;
删除表中的所有数据:
创建后表的修改
alter table 语句用于创建后对表的修改, 基础用法如下:
基本形式: alter table 表名 add 列名 列数据类型 [after 插入位置];
在表的最后追加列 address: alter table students add address char(60);
在名为 age 的列后插入列 birthday: alter table students add bir
基本形式: alter table 表名 change 列名称 列新名称 新数据类型;
将表 tel 列改名为 telphone: alter table students change tel telphone char(13) default "-";
将 name 列的数据类型改为 char(16): alter table students change name name char(16)
基本形式: alter table 表名 drop 列名称;
删除 birthday 列: alter table st
基本形式: alter table 表名 rename 新表名;
重命名 students 表为 workmates: alter table stude
删除整张表
基本形式: drop table 表名;
示例: 删除 workmates 表:
删除整个数据库
基本形式: drop database 数据库名;
示例: 删除 samp_db 数据库: drop database samp_
修改 root 用户密码
按照本文的安装方式, root 用户默认是没有密码的, 重设 root 密码的方式也较多, 这里仅介绍一种较常用的方式。
使用 mysqladmin 方式:
打开命令提示符界面, 执行命令: mysqladmin -u root -p password 新密码
执行后提示输入旧密码完成密码修改, 当旧密码为空时直接按回车键确认即可。
可视化管理工具 MySQL Workbench
尽管我们可以在命令提示符下通过一行行的输入或者通过重定向文件来执行mysql语句, 但该方式效率较低, 由于没有执行前的语法自动检查, 输入失误造成的一些错误的可能性会大大增加, 这时不妨试试一些可视化的MySQL数据库管理工具, MySQL Workbench 就是 MySQL 官方 为 MySQL 提供的一款可视化管理工具, 你可以在里面通过可视化的方式直接管理数据库中的内容, 并且 MySQL Workbench 的 SQL 脚本编辑器支持语法高亮以及输入时的语法检查, 当然, 它的功能强大, 绝不仅限于这两点。
MySQL Workbench官方介绍:
MySQL Workbench 下载页:
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具博客访问: 279090
博文数量: 111
博客积分: 6010
博客等级: 准将
技术积分: 1225
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Mysql/postgreSQL
MySQL是一个真正的多用户、多线程SQL数据库服务器。SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言。MySQL是以一个客户机/服务器结构的实现,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成。
SQL是一种标准化的语言,它使得存储、更新和存取信息更容易。例如,你能用SQL语言为一个网站检索产品信息及存储顾客信息,同时MySQL也足够快和灵活以允许你存储记录文件和图像。
MySQL&主要目标是快速、健壮和易用。最初是因为我们需要这样一个SQL服务器,它能处理与任何可不昂贵硬件平台上提供数据库的厂家在一个数量级上的大型数据库,但速度更快,MySQL就开发出来。自1996年以来,我们一直都在使用MySQL,其环境有超过&40&个数据库,包含&10,000个表,其中500多个表超过7百万行,这大约有100&个吉字节(GB)的关键应用数据。
MySQL建立的基础是业已用在高要求的生产环境多年的一套实用例程。尽管MySQL仍在开发中,但它已经提供一个丰富和极其有用的功能集。
MySQL的官方发音是“My Ess Que Ell”(不是&MY-SEQUEL&)。
下表描述MySQL一些重要的特征:
使用核心线程的完全多线程。这意味着它能很容易地利用多CPU(如果有)。
C&、C++、&Eiffel&、&Java、&Perl、&PHP、Python、和&TCL&&API。见。
可运行在不同的平台上,见。
多种列类型:1、&2、&3、4、和&8&字节长度的有符号/无符号整数、FLOAT、DOUBLE、CHAR、VARCHAR、TEXT、BLOB、DATE、TIME、DATETIME、TIMESTAMP、YEAR、SET和ENUM类型。 见。
利用一个优化的一遍扫描多重联结(one-sweep multi-join)非常快速地进行联结(join)。
在查询的SELECT和WHERE部分支持全部运算符和函数,例如:mysql> SELECT CONCAT(first_name, " ", last_name) FROM tbl_name
WHERE income/dependents > 10000 AND age > 30;
通过一个高度优化的类库实现SQL函数库并且像他们能达到的一样快速,通常在查询初始化后不应该有任何内存分配。
全面支持SQL的GROUP BY和ORDER BY子句,支持聚合函数( COUNT()、COUNT(DISTINCT)、AVG()、STD()、SUM()、 MAX()和MIN() )。
支持ANSI SQL的LEFT OUTER JOIN和ODBC语法。
你可以在同一查询中混用来自不同数据库的表。(与版本&3.22一样&)。
一个非常灵活且安全的权限和口令系统,并且它允许基于主机的认证。口令是安全的,因为当与一个服务器连接时,所有的口令传送被加密。
ODBC for Windiws 95。所有的&ODBC&2&.&5&函数和其他许多函数。例如,你可以用Access连接你的&MySQL服务器。见。
具备索引压缩的快速B树磁盘表。
每个表允许有16个索引。每个索引可以由1~16个列或列的一部分组成。最大索引长度是&256&个字节(在编译MySQL时,它可以改变)。一个索引可以使用一个CHAR或VARCHAR字段的前缀。
定长和变长记录。
用作临时表的内存散列表。
大数据库处理。我们正在对某些包含&50,000,000&个记录的数据库使用MySQL。
所有列都有缺省值,你可以用INSERT插入一个表列的子集,那些没用明确给定值的列设置为他们的缺省值。
为了可移植性使用&GNU&&Automake&,&Autoconf&和libtool。
用C和C++编写,并用大量不同的编译器测试。
一个非常快速的基于线程的内存分配系统。
没有内存漏洞。用一个商用内存漏洞监测程序测试过(purify)。
包括myisamchk,一个检查、优化和修复数据库表的快速实用程序,详见。
全面支持ISO-8859-1&&Latin1&字符集。例如,斯堪的纳维亚的字符 @ringaccent{a}, @"a and @"o&在表和列名字被允许。
所有数据以&ISO-8859-1&&Latin1&格式保存。所有正常的字符串比较是忽略大小写的。
根据&ISO-8859-1&&Latin1&字符集进行排序(目前瑞典语的方式)。通过在源代码中增加排序顺序数组可以改变它。为了理解一个更高级的排序例子,看一看捷克语的排序代码。MySQL支持可在编译时指定的很多不同的字符集。
表和列的别名符合&SQL92&标准。
DELETE、INSERT、REPLACE和UPDATE 返回有多少行被改变(受影响)。
函数名不会与表或列名冲突。例如ABS是一个有效的列名字。对函数调用的唯一限制是函数名与随后的“(”不能有空格。详见。
所有MySQL程序可以用选项--help或-?获得联机帮助。
服务器能为客户提供多种语言的出错消息,详见。
客户端使用TCP/IP&连接或Unix套接字(socket)或NT下的命名管道连接MySQL。
MySQL特有的SHOW命令可用来检索数据库、表和索引的信息,EXPLAIN命令可用来确定优化器如何解决一个查询。
1,使用c语言操作mysql之前,先在mysql里头创建一个数据库,一个表,在表里头添加数据如下:创建数据库,库名为cusemysql:mysql>creat创建表,表名为:mysql>mysql>create table children(childno int not null unique,fname varchar(20),age int);添加一点数据哦:mysql>insert into children values(5,"花儿",10);对拉,为了方便起见,把表的大致样子给大家看看childno & & & & fname&& & & age1 & & & & & & && 小星 & && 92 & & & & & & && 大量 & && 152 ,下面进行具体的操作插入:insert & & 好的,我们现编辑一段c代码,取名为insert.c ////////////////////////////////////*& insert.c */#include #include #include "/usr/local/mysql/include/mysql/mysql.h"& /*注意哦,上面必须是mysql.h的绝对地址,一般在mysql下的include目录下,仔细看看你的在哪里?*/int main(int argc, char *argv[]) {MYSQL my_mysql_init(&my_connection); /*mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0) == NULL)*/if (mysql_real_connect(&my_connection, "localhost", "root", "","cusemysql",0,NULL,CLIENT_FOUND_ROWS)) {&&& printf("Connection success\n");&&& res = mysql_query(&my_connection, "insert into children values(10,'Ann',5)");&&& if (!res) &&& {&&&&&&& printf("Inserted %lu rows\n",(unsigned long)mysql_affected_rows(&my_connection));/*里头的函数返回受表中影响的行数*/&&& } &&& else &&& {&&& //分别打印出错误代码及详细信息&&&&&&& fprintf(stderr, "Insert error %d: %s\n",mysql_errno(&my_connection),mysql_error(&my_connection));&&& }&&& mysql_close(&my_connection);} else {&&& fprintf(stderr, "Connection failed\n");&&& if (mysql_errno(&my_connection)) &&& {&&&&&&& fprintf(stderr, "Connection error %d: %s\n",mysql_errno(&my_connection),mysql_error(&my_connection));&&&&&&& }}&&& return EXIT_SUCCESS;}/////////////////////////////////////////////代码写完了,要编译哦#gcc -o insert insert.c -L /usr/local/mysql/lib/mysql/*.a -lzok,现在我们执行看看#./insertConnection SuccessInserted 1 rowsyear,果然可以,呵呵不信到mysql下看看表children中是否多了刚才插入的那一行数据注:也许你会问上面gcc的命令参数是什么意思阿,其实,我也不太清楚,呵呵大概是要把mysql下的某个特定库包含进来,可是我不知道具体是个什么库,所以用*.a全部包含进来拉其实只要包含mysqlclient.a就可以,你试试看更新:update我们只要把上面的代码中的res = mysql_query(&my_connection, "insert into children values(10,'Ann',5)");换成res = mysql_query(&my_connection, "update children set age=20 where childno<5 ");即可上面语句实现的功能是,把编号小于5的所有孩子的年龄全部改成20岁检索:select看代码之前,最好是先看蓝色字体的部分[介绍了代码中用到的一些函数的作用]///////////////////////////////////////////////////*& select.c */#include #include #include "/usr/local/mysql/include/mysql/mysql.h"int main(int argc, char *argv[]) {MYSQL my_MYSQL_RES *res_MYSQL_ROWmysql_init(&my_connection); /*mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0) == NULL)*/if (mysql_real_connect(&my_connection, "localhost", "root", "","cusemysql",0,NULL,CLIENT_FOUND_ROWS)) {&&& printf("Connection success\n");&&& res = mysql_query(&my_connection, "select childno,fname,age from& children where age<20");&&& if (res) &&& {&&&&&&& printf("SELECT error:%s\n",mysql_error(&my_connection));&&& } &&& else &&& {&&&&&& res_ptr=mysql_store_result(&my_connection);&&&&&& if(res_ptr)&&&&&& {&&&&&&&&&&&&& printf("Retrieved %lu Rows\n",(unsigned long)mysql_num_rows(res_ptr));&&&&&&&&&&&&& while((sqlrow=mysql_fetch_row(res_ptr)))&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&& printf("Fetched data...\n");&&&&&&&&&&&&& }&&&&&&&&&&&&& if (mysql_errno(&my_connection))&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&& fprintf(stderr,"Retrive error:%s\n",mysql_error(&my_connection));&&&&&&&&&&&&& }&&&&&& }&&&&&& mysql_free_result(res_ptr);&&&&&& }&&& mysql_close(&my_connection);} else {&&& fprintf(stderr, "Connection failed\n");&&& if (mysql_errno(&my_connection)) &&& {&&&&&&& fprintf(stderr, "Connection error %d: %s\n",&&&&&&& mysql_errno(&my_connection),&&&&&&& mysql_error(&my_connection));&&&&&&& }}&&& return EXIT_SUCCESS;}//////////////////////////////////////////////////面语句实现的功能是:检索出年龄小于20岁的小孩的信息,不过没有对信息进行任何处理哦下次我们对数据进行一定的处理这里介绍上面用到的几个函数:
可以从SELECT语句(或其他返回数据的语句)中检索完所有数据,在单一调用中,使用mysql_store_result:MYSQL_RES *mysql_store_result(MYSQL *connection);必须在mysql_query检索数据后才能调用这个函数,以在结果集中存储该数据。这个函数从服务器中检索所有数据并立即将它存储在客户机中。它返回一个指向以前我们从未遇到过的结构(结果集结构)的指针。如果语句失败,则返回NULL。使用等价的PostgreSQL时,应该知道返回NULL意味着已经发生了错误,并且这与未检索到数据的情况不同。即使,返回值不是NULL,也不意味着当前有数据要处理。如果未返回NULL,则可以调用mysql_num_rows并且检索实际返回的行数,它当然可能是0。my_ulonglong mysql_num_rows(MYSQL_RES *result);它从mysql_store_result取得返回的结果结构,并且在该结果集中返回行数,行数可能为0。如果mysql_store_result成功,则mysql_num_rows也总是成功的。这
种mysql_store_result和mysql_num_rows的组合是检索数据的一种简便并且直接的方法。一旦
mysql_store_result成功返回,则所有查询数据都已经存储在客户机上并且我们知道可以从结果结构中检索它,而不用担心会发生数据库或网络
错误,因为对于程序所有数据都是本地的。还可以立即发现返回的行数,它可以使编码更简便。如前所述,它将所有结果立即地发送回客户机。对于大结果集,它可
能耗费大量的服务器、网络和客户机资源。由于这些原因,使用更大的数据集时,最好仅检索需要的数据。不久,我们将讨论如何使用
mysql_use_result函数来完成该操作。一旦检索了数据,则可以使用mysql_fetch_row来检索它,并且使用mysql_data_seek、mysql_row_seek、mysql_row_tell操作结果集。在开始检索数据阶段之前,让我们先讨论一下这些函数。MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);这个函数采用从存储结果中获取的结果结构,并且从中检索单一行,在行结构中返回分配给您的数据。当没有更多数据或者发生错误时,返回NULL。稍后,我们将回来处理这一行中的数据。void mysql_data_seek(MYSQL_RES *result, my_ulonglong offset);这个函数允许您进入结果集,设置将由下一个获取操作返回的行。offset是行号,它必须在从0到结果集中的行数减 1 的范围内。传递0将导致在下一次调用mysql_fetch_row时返回第一行。MYSQL_ROW_OFFEST mysql_row_tell(MYSQL_RES *result);这个函数返回一个偏移值,它表示结果集中的当前位置。它不是行号,不能将它用于mysql_data_seek。但是,可将它用于:MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET offset);它移动结果集中的当前位置,并返回以前的位置。有时,这一对函数对于在结果集中的已知点之间跳转很有用。请注意,不要将row tell和row seek使用的偏移值与data_seek使用的行号混淆。这些是不可交换的,结果将是您所希望看到的。void mysql_free_result(MYSQL_RES *result);完成结果集时, 必须总是调用这个函数,以允许MySQL库整理分配给它的对象。检索并处理[比较全面哦,呵呵]:select & & 下面是详细的代码:///////////////////*& select1.c */#include #include #include #include "/usr/local/mysql/include/mysql/mysql.h"&int main(int argc, char *argv[]) {MYSQL my_MYSQL_RES *res_&& /*指向检索的结果存放地址的指针*/MYSQL_ROW&&&& /*返回的记录信息*/MYSQL_FIELD *&&&&& /*字段结构指针*/char aszflds[25][25]; /*用来存放各字段名*/&&&&&&&&&&&& /*执行查询操作后的返回标志*/int i,j,k;mysql_init(&my_connection); /*mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0) == NULL)*/if (mysql_real_connect(&my_connection, "localhost", "root", "","cusemysql",0,NULL,CLIENT_FOUND_ROWS)) {&&& printf("Connection success\n");&&& res = mysql_query(&my_connection, "select childno,fname,age from children where age<20");&&& if (res) &&& {&&&&&&& printf("SELECT error:%s\n",mysql_error(&my_connection));&&& } &&& else &&& {&&&&&& res_ptr=mysql_store_result(&my_connection);&&&&&& if(res_ptr)&&&&&& {&&&&&&&&&&&&& printf("Retrieved %lu Rows\n",(unsigned long)mysql_num_rows(res_ptr));&&&&&&&&&&&&& /*取得各字段名*/&&&&&&&&&&&&& for(i=0;fd=mysql_fetch_field(res_ptr);i++)&&&&&&&&&&&&&&&&&&&& strcpy(aszflds[i],fd->name);&&&&&&&&&&&&& /*输出各条记录*/&&&&&&&&&&&&& printf("下面是检索出的各条记录信息:\n");&&&&&&&&&&&&& j=mysql_num_fields(res_ptr);&&&&&&&&&&&&& for(i=0;i<j;i++)&&&&&&&&&&&&& printf("%s\t",aszflds[i]);&&&&&&&&&&&&& printf("\n");&&&&&&&&&&&&& while((sqlrow=mysql_fetch_row(res_ptr)))&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&& for(i=0;i<j;i++)&&&&&&&&&&&&&&&&&&&& printf("%s\t",sqlrow[i]);&&&&&&&&&&&&&&&&&&&& printf("\n");&&&&&&&&&&&&& }&&&&&&&&&&&&& if (mysql_errno(&my_connection))&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&& fprintf(stderr,"Retrive error:s\n",mysql_error(&my_connection));&&&&&&&&&&&&& }&&&&&& }&&&&&& mysql_free_result(res_ptr);&&&&&& }&&& mysql_close(&my_connection);} else {&&& fprintf(stderr, "Connection failed\n");&&& if (mysql_errno(&my_connection)) &&& {&&&&&&& fprintf(stderr, "Connection error %d: %s\n",&&&&&&& mysql_errno(&my_connection),&&&&&&& mysql_error(&my_connection));&&&&&&& }}&&& return EXIT_SUCCESS;}//////////////////////////////////////主要要注意的几个地方是:1,mysql.h的路径,必须确定它的绝对路径哦(这句话是错误的,只要在编译是把对应库编译进去即可,具体操作方法请查询本博客)2,注意你的数据库的用户名和密码是否正确3,在编译的时候必须包含这个库文件mysqlclient.a[记不太清楚,不过你可以直接包含它所在的目录下的所有库,肯定就没有问题,各方意见:一.编译方法有点不规范。正确的应该是这样:1.在程序开头包含头文件应这样写:#include 2.编译应这样写:$ gcc -o mysql mysql.c `mysql_config --cflags --libs`
有很多朋友虽然安装好了mysql但却不知如何使用它。在这篇文章中我们就从连接MYSQL、修改密码、增加用户等方面来学习一些MYSQL的常用命令。&& 一、连接MYSQL。&& 格式:&mysql&-h主机地址&-u用户名&-p用户密码&& 1、例1:连接到本机上的MYSQL。&& 首先在打开DOS窗口,然后进入目录&mysqlbin,再键入命令mysql&-uroot&-p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql>&& 2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:&& mysql&-h110.110.110.110&-uroot&-pabcd123&& (注:u与root可以不用加空格,其它也一样)&& 3、退出MYSQL命令:&exit&(回车)&& 二、修改密码。&& 格式:mysqladmin&-u用户名&-p旧密码&password&新密码&& 1、例1:给root加个密码ab12。首先在DOS下进入目录mysqlbin,然后键入以下命令&& mysqladmin&-uroot&-password&ab12&& 注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。&& 2、例2:再将root的密码改为djg345。&& mysqladmin&-uroot&-pab12&password&djg345&& 三、增加新用户。(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)&& 格式:grant&select&on&数据库.*&to&用户名@登录主机&identified&by&"密码"&& 例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL,然后键入以下命令:&& grant&select,insert,update,delete&on&*.*&to&test1@"%"&Identified&by&"abc";&& 但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见例2。&& 例2、
增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作
(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据
库,只能通过MYSQL主机上的web页来访问了。&& grant&select,insert,update,delete&on&mydb.*&to&test2@localhost&identified&by&"abc";&& 如果你不想test2有密码,可以再打一个命令将密码消掉。&& grant&select,insert,update,delete&on&mydb.*&to&test2@localhost&identified&by&"";&& (下篇)&& 在上篇我们讲了登录、增加用户、密码更改等问题。下篇我们来看看MYSQL中有关数据库方面的操作。注意:你必须首先登录到MYSQL中,以下操作都是在MYSQL的提示符下进行的,而且每个命令以分号结束。&& 一、操作技巧&& 1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。&& 2、你可以使用光标上下键调出以前的命令。但以前我用过的一个MYSQL旧版本不支持。我现在用的是mysql-3.23.27-beta-win。&& 二、显示命令&& 1、显示数据库列表。&& show&&& 刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。&& 2、显示库中的数据表:&& use&mysql;&//打开库,学过FOXBASE的一定不会陌生吧&& show&&& 3、显示数据表的结构:&& describe&表名;&& 4、建库:&& create&database&库名;&& 5、建表:&& use&库名;&& create&table&表名&(字段设定列表);&& 6、删库和删表:&& drop&database&库名;&& drop&table&表名;&& 7、将表中记录清空:&& delete&from&表名;&& 8、显示表中的记录:&& select&*&from&表名;&& 三、一个建库和建表以及插入数据的实例&& drop&database&if&exists&&//如果存在SCHOOL则删除&& create&database&&//建立库SCHOOL&& use&&//打开库SCHOOL&& create&table&teacher&//建立表TEACHER&& (&& id&int(3)&auto_increment&not&null&primary&key,&& name&char(10)&not&null,&& address&varchar(50)&default&'深圳',&& year&date&& );&//建表结束&& //以下为插入字段&& insert&into&teacher&values('','glchengang','深圳一中','');&& insert&into&teacher&values('','jack','深圳一中','');&& 注:
在建表中(1)将ID设为长度为3的数字字段:int(3)并让它每个记录自动加一:auto_increment并不能为空:not&null而且让他
成为主字段primary&key(2)将NAME设为长度为10的字符字段(3)将ADDRESS设为长度50的字符字段,而且缺省值为深圳。
varchar和char有什么区别呢,只有等以后的文章再说了。&(4)将YEAR设为日期字段。&& 如果你在mysql提示符键入上面的命令也可以,但不方便调试。你可以将以上命令原样写入一个文本文件中假设为school.sql,然后复制到c:下,并在DOS状态进入目录mysqlbin,然后键入以下命令:&& mysql&-uroot&-p密码&<&c:school.sql& 如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将//的注释去掉即可使用)。& 四、将文本数据转到数据库中& 1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用n来代替.& 例:& 3&rose&深圳二中&& 4&mike&深圳一中&& 2、数据传入命令&load&data&local&infile&"文件名"&into&table&表名;& 注意:你最好将文件复制到mysqlbin目录下,并且要先用use命令打表所在的库&。& 五、备份数据库:(命令在DOS的mysqlbin目录下执行)& mysqldump&--opt&school>school.bbb&& 注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。&& 后
记:其实MYSQL的对数据库的操作与其它的SQL类数据库大同小异,您最好找本将SQL的书看看。我在这里只介绍一些基本的,其实我也就只懂这些了,呵
呵。最好的MYSQL教程还是“晏子“译的“MYSQL中文参考手册“不仅免费每个相关网站都有下载,而且它是最权威的。可惜不是象"PHP4中文手册"
那样是chm的格式,在查找函数命令的时候不太方便。&
阅读(5770) | 评论(0) | 转发(3) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信