mysql第八章_第八章 MySQL

理解数据库

安装

1

一般Linux 发行版都有预编译包,没有的话可以安装社区标准包。注意在正规使用场合不要使用debug包,应为额外的调试支持会降低软件的性能

2

为了开发MySQL应用程序,需要安装MySQL服务器和MySQL开发库

mysql 在安装时会创建 "root", 该用户是MySQL服务器守护进程运行时所使用的默认用户名

3

检查MySQL服务器是否正在运行

ps -el | grep mysqld

仅仅出现

4 S 123 8482 1 0 80 0 - 293861 - ? 00:00:00 mysqld

表明只有守护进程

同时出现

4 S 123 8482 1 0 80 0 - 293861 - ? 00:00:00 mysqld

0 S 0 10237 10203 0 80 0 - 9056 - pts/18 00:00:00 mysql

表明后台有一个MySQL服务器正在运行

4 ubuntu 下安装tips如果安装过程中不设置密码,安装完成后需要登录root用户启用

sudo su

mysql -u root mysql

## sudo mysql -u root mysql

要想创建拥有权限的用户,这里

如果看到welcome to the MySQL monitor 和mysql>提示符,那么表明服务器正在运行了

mysql 4个自带数据库的理解

安装后配置

常用命令行

bash$ mysql -u root mysql ## command -u user database

bash$ mysql -u root

bash$ mysql -? ## 关于server更多消息

bash$ mysql -? | grep "Default options" -C 3 ##找到配置文件—— /etc/mysql/my.cnf

bash$ mysqladmin -u root version ##确认服务器是否在运行,以及更多消息

bash$ mysqladmin variables ##查看是否支持Innodb和数据存放位置datadir,通过修改配置文件支持不同的存储引擎(InnoDB,MyISAM,memory,CSV)

mysql> select database(); ##查看当前正在使用的database,也可用 status

mysql> show databases; ## 显示所有database

可以在/etc/mysql/my.cnf 配置文件中来改变存储引擎和修改MySQL 数据存储位置。

修改安装后的安全漏洞MySQL root 和Linux root没有任何关系。(这是一个tips)

安装时未设置root密码的,任何人可以免密登录数据库

$ mysqladmin -u root password "newpassword" #会引发问题

明文秘密会留在shell历史记录中,并且当命令正在执行中,其他恩可以以使用ps看到密码,或者通过命令历史记录重现密码。应当再次使用MySQL控制台修改

$ mysql -u root

mysql > set password=password('your password');

mysql> set password=password(''); ##再次删除密码删除除了root意外的用户,删除从localhost以外任何主机的登录

mysql> delete from user where user!='root';

mysql> delete from user where host!='localhost';

mysql> select user,host,authentication_string from user; #检查

如此一来只有一个仅能从localhost连接的登录。

MySQL管理

mysqladmin,mysqldump(将部分或整个数据库导出到一个单独文件中),mysqlimport(批量导入数据),mysqlshow(了解数据库组成)

使用C语言访问MySQL初始化一个连接句柄

实际进行连接

初始化连接句柄

MYSQLmysql_init(MYSQL); MYSQL * mysql_real_connect(MYSQL* connection, const char * server_host, const char * sql_user_name, const char * sql_password, const char * db_name, unsigned int port_number, const char * unix_socket_name, unsigned int flags);

设置连接选项

int mysql_options(MYSQLconnection,enum option_to_set,const char argument); 成功返回0,必须用在 mysql_init() 之后,mysql_real_connect()之前

关闭连接

void mysql_close(MYSQL* connection);

如何编译使用了MySQL的c 源文件

错误处理

mysql_real_connect() 函数接受连接句柄connection的地址作为参数,当调用失败时返回NULL,所以不要返回值赋值给连接句柄,否则连接句柄被覆盖而无法看到错误码。

重要的两个函数:

unsigned int mysql_errno(MYSQL* connection);

char* mysql_error(MYSQL * connection);

实例程序

#include#include

#include "mysql.h"

int main(){

MYSQL my_connection;

mysql_init(&my_connection);

if(mysql_real_connect(&my_connection,"localhost","hans","I do not know","foo",0,NULL,0)){

printf("connection success\n");

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;

}

执行sql语句

重要函数

int mysql_query(MYSQL* connection, const char* query);

//不返回值的操作,影响的行数myulonglong mysql_affected_rows(MYSQL* connection);

实例代码

#include#include

#include "mysql.h"

int main(int argc, char* argv[]){

MYSQL my_connection;

int res;

mysql_init(&my_connection);

if(mysql_real_connect(&my_connection,"localhost","hans","hk123456","foo",0,NULL,0)){

printf("Connection success\n");

res=mysql_query(&my_connection,"INSERT INTO children(fname,age) VALUES('Ann',3)");

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;

}

返回数据的语句一次提取所有数据

接口,mysql_store_result()一次提取一行数据

接口,mysql_use_result()

更多函数有待探索

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值