一、学习任务
自学教材第14章,提交学习笔记(10分),评分标准如下
1. 知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容 (4分)
“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”
核心是要求GPT:“请你以苏格拉底的方式对我进行提问” 然后GPT就会给你提问,如果不知道问题的答案,可以反问AI:“你的理解(回答)是什么?”
如果你觉得差不多了,可以先问问GPT:“针对我XXX知识点,我理解了吗?” GPT会给出它的判断,如果你也觉得自己想清楚了,可以最后问GPT:“我的回答结束了,请对我的回答进行评价总结”,让它帮你总结一下。
2. 问题与解决思路,遇到问题最先使用chatgpt等AI工具解决,并提供过程截图(3分)
3. 实践过程截图,代码链接(2分)
4. 其他(知识的结构化,知识的完整性等,提交markdown文档,使用openeuler系统等)(1分)
二、知识总结
14.1MySQL简介
MySQL是一个关系数据库系统,数据以表的形式存储,表由行和列组成,并与其他表关联。关系数据库系统使用SQL(结构化查询语言)进行查询和管理数据,而MySQL是一种开源数据库管理系统。MySQL在服务器和客户端组成的架构中,用户通过输入SQL命令与服务器交互,进行数据库的创建、删除、存储和检索。MySQL和PHP已成为许多数据管理和在线商务网站的主干网络。
14.2安装MySQL
Ubuntu Linux
安装命令:sudo apt-get install mysql-server
配置安全性:运行 mysql_secure_installation
,按默认值设置密码等。
Slackware Linux
Slackware预装MySQL,但需要配置。
配置包括设置my.cnf
、安装所需数据库、设置系统权限、使rc.mysqld可执行等步骤。
Slackware 14.2使用MariaDB
Slackware 14.2替代MySQL为MariaDB,基本相同,使用mysqld作为守护进程名。
配置步骤包括设置系统权限、使rc.mysqld可执行等。MySQL与编程语言结合
演示如何将MySQL与C编程相结合,以及如何与PHP集成,在动态Web页面中创建和管理数据库。
14.3使用MYSQL
14.3.1 连接到 MySQL 服务器
- 运行MySQL客户机程序,输入命令
mysql
连接到默认本地主机上的MySQL服务器。 - 使用命令
mysql -u root -p
指定root用户,并输入密码以连接到MySQL服务器。 - 连接成功后,会显示
mysql>
提示符,表示已进入MySQL shell。
14.3.2 显示数据库
- 使用
SHOW DATABASES;
命令显示当前MySQL中的数据库。
mysql> SHOW DATABASES; +------ |Database +--------- information_schema mysql performance_schema test 4 rows in set(0.01 sec)
14.3.3 新建数据库
- 使用
CREATE DATABASE testdb;
命令创建名为testdb的新数据库。 - 使用
SHOW DATABASES;
命令查看新建数据库。
14.3.4 删除数据库
- 使用
DROP DATABASE testdb;
命令删除名为testdb的数据库。 - 使用
SHOW DATABASES;
命令确认数据库已删除。
14.3.5 选择数据库
- 使用
USE dbname;
命令选择特定的数据库,例如USE cs360;
。
14.3.6 创建表
- 使用
CREATE TABLE tableName (columnName columnType columnAttribute,...);
命令创建表。 - 使用
SHOW TABLES;
命令查看当前数据库中的表。 - 使用
DESCRIBE tableName;
或DESC tableName;
命令显示表格格式和列属性。
CREATE TABLE [IF NOT EXISTS] tableName (
columnName columnType columnAttribute,...
PRIMARY KEY(columnName)
FOREIGN KEY(columnNmae)REFERENCES tableName(columnNmae)
)
mysq1>CREATE TABLE students ( student_1d INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name CHAR(20) score INT);
14.3.7 删除表
- 使用
DROP TABLE tableName;
命令删除表。 - 使用
SHOW TABLES;
命令确认表已删除。
14.3.8 MySQL 中的数据类型
- 数值类型:INT、TINYINT、SMALLINT、FLOAT等。
- 字符串类型:CHAR(size)、VARCHAR(size)、TEXT等。
- 日期和时间类型:DATE、TIME等。
14.3.9 插入行
- 使用
INSERT INTO tableName VALUES(value1, value2, ...);
命令插入行。 - 可以使用
SOURCE filename;
命令执行包含多个插入命令的脚本文件。
14.3.10 删除行
- 使用
DELETE FROM tableName WHERE condition;
命令删除满足条件的行。 - 使用
DELETE FROM tableName;
命令删除表中所有行。
14.3.11 更新表
- 使用
UPDATE tableName SET col1=value1, col2=value2, ... WHERE condition;
命令更新表中的记录。 - 使用
SELECT * FROM tableName;
命令查看更新后的表
14.3.12 修改表
- 使用
ALTER TABLE
命令修改表,可添加、删除或修改表中的列,并添加或删除约束条件。- 修改表名:
ALTER TABLE table_name RENAME TO new_name;
- 添加列:
ALTER TABLE table_name ADD column_name datatype;
- 删除列:
ALTER TABLE table_name DROP column_name datatype;
- 修改列数据类型:
ALTER TABLE table_name ALTER COLUMN column_name datatype;
- 修改表名:
-- 添加名为grade的列
ALTER TABLE students ADD grade CHAR(2);
-- 更新grade列的值
UPDATE students SET grade = 'A' WHERE name = 'Walton';
-- 通过UPDATE命令分配字母等级
UPDATE students SET grade = 'A' WHERE name = 'Walton';
-- 使用WHERE条件根据分数范围分配字母等级
UPDATE students SET grade = 'A' WHERE score > 80;
-- 使用分数范围更新字母等级
UPDATE students SET grade = 'B' WHERE score >= 70 AND score < 80;
UPDATE students SET grade = 'C' WHERE score >= 60 AND score < 70;
UPDATE students SET grade = 'D' WHERE score < 60;
14.3.13 关联表
- 使用主键-外键约束条件定义表关系,包括一对一、一对多、多对多关系。
-- 创建关联表email
CREATE TABLE email (
id INT PRIMARY KEY AUTO_INCREMENT,
student_id INT UNIQUE NOT NULL,
email CHAR(40),
FOREIGN KEY(student_id) REFERENCES students(student_id)
);
-- 插入学生电子邮箱地址
INSERT INTO email VALUES (NULL, 2002, '[email protected]');
-- 查询关联表内容
SELECT a.name, b.email FROM students a, email b WHERE a.student_id = b.student_id;
14.3.14 连接操作
- 使用连接操作在多个表中检索数据,包括INNER JOIN、LEFT JOIN、RIGHT JOIN和OUTER JOIN。
-- INNER JOIN
SELECT * FROM students JOIN email ON students.student_id = email.student_id;
-- LEFT JOIN
SELECT * FROM students LEFT JOIN book_order ON students.student_id = book_order.student_id;
-- RIGHT JOIN
SELECT * FROM students RIGHT JOIN book_order ON students.student_id = book_order.student_id;
14.3.15 MySQL数据库关系图
- 使用实体关系图(ERD)或增强/扩展ERD描述表之间的关系,箭头表示连接外键与主键。
14.3.16 MySQL脚本
- 使用MySQL脚本文件执行数据库操作,可以通过SOURCE命令或批处理模式运行。
-- 创建名为do.sql的脚本文件,包含数据库和表的创建、插入和更新操作
-- 在MySQL中执行脚本文件 mysql> source do.sql; mysql> source do.sql;
# 或者使用批处理模式:mysql -u root -p < do.sql
14.4 C 语言 MySQL 编程
14.4.1 使用C语言构建MySQL客户机程序
思考以下C 程序,它可以打印 libmysqlclient 库版本。
//client.c file #include <stdio.h> #include <my_global.h> #include <mysql.h> int main(int argc,char *argc[]) { printf("MySQL client version is:8s\n",mysql_get_client_info()); }
若要编译程序,可输入
gcc client.c-I/usr/include/mysql/-1mysqlclient
注意, -I 选项将包含文件路径指定为/ustr/include/mysql,-1选项指定mysqlclient 库。 然后,运行 a.out。它会打印MySQt client version is :version_number, e.g.5.5.53
14.4.2 使 用C 语言连接到 MySQL 服务器
下面的C程序 C14.2 显示如何连接到 MySQL 服务器。
//c14.2.c file:connect to MySQL server #include <stdio.h> #include <stdlib.h> #include <my_global.h> #include <mysql.h> int main(int argc,char *argv[]) { //1.define a connection object MYSQL con; //2.Initialize the connection object if( mysql_init(&con))(//return object address printf("Connection handle initialized\n"); )else{ printf("Connection handle initialization failed\n"); exit(1); } //3.Connect to MySQL server on localhost if (mysql_real_connect(&con,"localhost","root","root_password", "cs360",3306,NULL,0)){ printf("Connection to remote MySQL server OK\n"); } else { printf("Connection to remote MySQL failed\n") exit(1); } //4.Close the connection when done mysql_close(&con); )
该项目包含4个步骤。
( 1 ) 将MYSQL对象 con定义为连接句柄。它的作用类似于网络编程中的套接字。几乎 所有的 MySQLCAPI 函数都需要这个对象指针作为参数。
(2)调用mysql_init(&con)来初始化 con 对象,这是规定操作。它会返回初始化对象的 地址。大多数其他 MySQLAPI函数会返回0,表示成功,返回非0,表示错误。如果出现错 误,函数
unsigned int mysql_errno( &con) 返回错误编号。
constant char *mysql_error( &co n) 返回描述错误的字符串。
(3)调用mysql_real_connect(), 以连接到远程服务器。
它可以用于连接到互联网上的任何MySQL服务器,前提是用户可以访问该MySQL服务 器。为简单起见,我们假设MySQL客户机和服务器位于同一台本地主机上。连接到服务器 之后,客户机程序就可以开始访问数据库了,下面将显示数据库。
(4)客户机程序要在退出之前关闭连接。
14.4.3 使用C语言构建MySQL数据库
本节将介绍如何在C语言程序中创建MySQL数据库。
//C14.1.c:build MySQL database in C #include <stdio.h> #include <stdlib.h> #include <my_global.h> #include <mysql.h> MYSQL *coni void error() //connection object pointer { printf("errno =8d 8s\n",mysql_errno(con),mysql_error(con)); mysql_close(con); exit(1); } int main(int arge,char *argv[]) con =mysql_init(NULL);//will allocate and initialize it if(con ==NULL) error(); printf("connect to mySQL server on localhost using database cs360\n"); if(mysql_real_connect(con,"localhost","root",NULL, "cs360",0,NULL,0)==NULL) error(); printf("connection to server OK\n"); printf("drop students table if exists\n"); if(mysql_query(con,"DROP TABLE IF EXISTS students")) error(); printf("create students tables in cs360\n"); if(mysql_query(con,"CREATE TABLE students(IdINT NOT NULL PRIMARY KEY AUTO_INCREMENT,name CHAR(20)NOT NULL,Score INT)")) error(); printf("insert student records into students table\n"); if(mysql_query(con,"INSERT INTO students VALUES(1001,'Baker',50)")) error(); if(mysql_query(con,"INSERT INTO students VALUES(1002,'Miller’,65)")) error(); if(mysql_query(con,"INSERT INTO students VALUES(2001,'Miller',75)")) error(); if(mysql_query(con,"INSERT INTO students VALUES(2002,'Smith',85)")) error(); printf("all done\n"); mysql_close(con); }
连接到MySQL服务器后,程序使用mysql_query()函数对数据库进行操作。mysqL_ queryO 函数的第二个参数与普通MySQL 命令完全相同。它可以用于简单的 MySQL 命令, 但如果参数包含二进制值或null 字节,则不能用于命令。要执行可能包含二进制数据的命 令,程序必须使用mysql_real_query() 函数,如下一个程序所示。
//C14.2 Program:build MySQL database with mysql_real_query() #include <stdio.h> #include <stdlib.h> #include <string.h> #include <my_global.h> #include <mysql.h> ]akeiller",th","on","; int score[]= { 65, 50, 75, 95, 85): MYSQL *coni void error() ( printf("errno=8d 8s\n",mysql_errno(con),mysql_error(con)); ose(con) } int main(int argc,char *argv[]) ( int i; r=b4_]iit(NULL);SLceaoe it con if(con ==NULL) error(); printf("connect to mySQl server on localhost using database cs360\n"); if(mysql_real_connect(con,"localhost","root",NULL, "cs360",0,NULL,0)==NULL) error(); printf("connected to server OK\n"); printf("drop students table if exists\n"); if(mysql_query(con,"DROP TABLE IF EXISTS students")) error(); printf("create students tables in cs360\n"); if(mysql_query(con,"CREATE TABLE students(IdINT NOT NULL PRIMARY KEY AUTO_INCREMENT,name CHAR(20)NOT NULL,score INT)")) error(); printf("insert student records into students table\n"); for(i=0;i<N;i++){ printf("id=%8d name=810s,score=84d\n",id[i],name[i],score[i]); sprintf(buf,"INSERT INTO students VALUES(%d,1%s',%d);", id[i],name[i],score[i]); 1E(mysql_real_query(con,buf,strlen(buf))) error(); } printf("all done\n"); mysql_close(con); }
14.4.4 使用C语言检索MySQL查询结果
MySQL查询会返回结果,例如 SELECT,DESCRIBE等。结果是一组列和行。MySQ L CAPI 提供了两种从 MySQL服务器获取结果集的方法: 一次性获取所有行或逐行获取。函数 mysql_store_result() 用于一次性从 MySQL服务器获取一组行并将其存储在本地内 存中。它的用法是MYSQLRES *mysql_store_result(MYSQL *mysql);
函数mysql_use_result() 用于启动逐行结果集检索。
MYSQL_RES *mysql_use_regult(MYSQL *mysq1);
每次使用返回结果的 MySQL 语句调用 mysql_query()或 mysql_real_query)之后,可调 用其中一个函数来检索结果集。这两个函数都会返回用MYSQL_RES 类型的对象表示的结 果集。其他 API 函数使用返回的结果集对象来获取列和行集。当不再需要结果集时,使用 mysql_free_result()函数来释放结果对象资源。
三、苏格拉底问答
四、实验代码
标签:printf,12,students,mysql,笔记,20211303,MySQL,include,con From: https://www.cnblogs.com/liTCabcAbc/p/17872887.html