一、知识点归纳以及自己最有收获的内容
1、知识点归纳
第14章 MySQL数据库系统
1、MySQL
MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB公司开发,目前属于 Oracle 公司。
- 特点
1、MySQL 是开源的,目前隶属于 Oracle 旗下产品。
2、MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
3、MySQL 使用标准的 SQL 数据语言形式。
4、MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。
5、MySQL 对PHP有很好的支持,PHP 是目前最流行的 Web 开发语言。
6、MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。
7、MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
2、关系型数据库指的是使用关系模型(二维表格模型)来组织数据的数据库。
- 关系型数据库的优势:
1、采用二维表结构非常贴近正常开发逻辑(关系型数据模型相对层次型数据模型和网状型数据模型等其他模型来说更容易理解);
2、支持通用的SQL(结构化查询语言)语句;
3、丰富的完整性大大减少了数据冗余和数据不一致的问题。并且全部由表结构组成,文件格式一致;
4、可以用SQL句子多个表之间做非常繁杂的查询;
5、关系型数据库提供对事务的支持,能保证系统中事务的正确执行,同时提供事务的恢复、回滚、并发控制和死锁问题的解决。
6、数据存储在磁盘中,安全可靠。
- 关系型数据库存在的不足:
1、高并发读写能力差:网站类用户的并发性访问非常高,而一台数据库的最大连接数有限,且硬盘 I/O 有限,不能满足很多人同时连接。
2、海量数据情况下读写效率低:对大数据量的表进行读写操作时,需要等待较长的时间等待响应。
3、可扩展性不足:不像web server和app server那样简单的添加硬件和服务节点来拓展性能和负荷工作能力。
4、数据模型灵活度低:关系型数据库的数据模型定义严格,无法快速容纳新的数据类型(需要提前知道需要存储什么样类型的数据)。
3、非关系型数据库又被称为 NoSQL(Not Only SQL ),意为不仅仅是 SQL。通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定,常用于存储非结构化的数据。
二、实践内容与截图
实践1:安装MySQL
- MySQL初始化成功
实践2:c语言MySQL实践
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql/mysql.h>
#define MYSQL_HOST "localhost"
#define MYSQL_USER "root"
#define MYSQL_PASSWD "toor"
#define DB_NAME "db"
#define TABLE_NAME "students"
/*
* 测试的数据表结构很简单, number, grade, sex, score 四个字段, 代表学号、年级、性别、分数
*/
/* 连接mysql */
void mysqldb_connect(MYSQL *mysql)
{
if(!mysql_real_connect(mysql, MYSQL_HOST, MYSQL_USER, MYSQL_PASSWD, DB_NAME, 0, NULL, 0)) {
printf("\nFailed to connect:%s\n", mysql_error(mysql));
} else {
printf("\nConnect sucessfully!\n");
}
}
/* 插入数据 */
void mysqldb_insert(MYSQL *mysql, int number, int grade, char *sex, int score)
{
int t;
char *head = "INSERT INTO ";
char query[120];
char field[48] = "number, grade, sex, score";
char *left = "(";
char *right = ") ";
char *values = "VALUES";
char message[100] = {0};
sprintf(message, "%d, %d, \"%s\", %d", number, grade, sex, score);
/* 拼接sql命令 */
sprintf(query, "%s%s%s%s%s%s%s%s%s", head, TABLE_NAME, left, field, right, values, left, message, right);
printf("%s\n", query);
t = mysql_real_query(mysql, query, strlen(query));
if (t) {
printf("Failed to query: %s\n", mysql_error(mysql));
}
else {
printf("\nInsert sucessfully!\n");
}
}
/* 删除数据 */
void mysqldb_delete(MYSQL *mysql, char *field_name, int number)
{
int t;
char *head = "DELETE FROM ";
char query[120];
sprintf(query, "%s%s where %s =%d", head, TABLE_NAME, field_name, number);
printf("%s\n", query);
t = mysql_real_query(mysql, query, strlen(query));
if (t) {
printf("\nFailed to query: %s\n", mysql_error(mysql));
} else {
printf("\nDelete data sucessfully!\n");
}
}
/* 更新数据 */
void mysqldb_update(MYSQL *mysql, char *field_name, int score)
{
int t;
char *head = "UPDATE ";
char query[100];
sprintf(query, "%s%s SET %s=%d", head, TABLE_NAME, field_name, score);
printf("%s\n", query);
t = mysql_real_query(mysql, query, strlen(query));
if (t) {
printf("Failed to update: %s\n", mysql_error(mysql));
return;
}
printf("\nUpdate data sucessfully!\n");
}
/* 查询数据 */
void mysqldb_query(MYSQL *mysql)
{
int t;
char *head = "SELECT * FROM ";
char query[50] = {0};
MYSQL_RES *res;
MYSQL_ROW row;
sprintf(query, "%s%s", head, TABLE_NAME);
t = mysql_real_query(mysql, query, strlen(query));
if (t) {
printf("Failed to query: %s\n", mysql_error(mysql));
return;
} else {
printf("\nQuery successfully!\n");
}
res = mysql_store_result(mysql);
while (row = mysql_fetch_row(res)) {
for(t = 0; t < mysql_num_fields(res); t++) {
printf("%s\t", row[t]);
}
printf("\n");
}
mysql_free_result(res);
}
/* 断开mysql连接 */
void close_connection(MYSQL *mysql)
{
mysql_close(mysql);
}
int main(int argc, char *argv[])
{
// 准备一组数据
int number = 1;
int grade = 1;
char sex[] = "male";
int score = 100;
// 初始化mysql
MYSQL *mysql = mysql_init(NULL);
if (!mysql) {
printf("\nMysql init failed.\n");
}
// 连接MYSQL
mysqldb_connect(mysql);
// 插入数据
mysqldb_insert(mysql, number, grade, sex, score);
// 更新数据
mysqldb_update(mysql, "score", 99);
// 查询数据
mysqldb_query(mysql);
// 删除数据
mysqldb_delete(mysql, "number", number);
// 断开连接
close_connection(mysql);
return 0;
}