2023-2024-1 20211327 信息安全系统设计与实现 学习笔记12
学习笔记12
- MySQL 介绍与 linux 安装
- 使用 MySQL
- C语言 MySQL 编程
- PHP MySQL 编程
- 实践过程
MySQL 介绍与安装
介绍
MySQL(发音为"My S-Q-L",或称为"My Sequel")是一个开源的关系型数据库管理系统(RDBMS)。它是由瑞典公司MySQL AB开发,并且现在属于Oracle公司管理。MySQL广泛用于Web应用程序的后端数据存储,是许多流行网站和应用程序的首选数据库之一。
以下是MySQL的一些重要特点和特性:
-
开源性质: MySQL是开源软件,用户可以自由获取、使用和修改它的源代码。这使得它成为一个受欢迎的数据库系统,许多开发者和组织都选择使用MySQL来满足他们的数据库需求。
-
关系型数据库管理系统: MySQL是一个关系型数据库管理系统,遵循SQL(Structured Query Language)标准。这意味着它支持使用SQL语言进行数据库的创建、查询、更新和删除等操作。
-
跨平台支持: MySQL可以在多种操作系统上运行,包括Linux、Windows、macOS等。这使得开发者能够在不同的环境中使用MySQL来构建应用程序。
-
高性能: MySQL被设计为高性能的数据库系统,具有快速的查询处理能力。它支持索引、缓存等机制,以提高数据库的检索和存储效率。
-
可扩展性: MySQL支持垂直和水平的扩展。垂直扩展通过增加单个服务器的处理能力,而水平扩展则通过增加多个服务器来分担负载。
-
事务支持: MySQL支持事务处理,确保数据库操作的原子性、一致性、隔离性和持久性(ACID属性)。这对于处理复杂的业务逻辑和确保数据完整性非常重要。
-
存储引擎: MySQL支持多种存储引擎,例如InnoDB、MyISAM等。每种存储引擎都有其独特的特性,可以根据应用程序的需求进行选择。
-
安全性: MySQL提供了各种安全功能,包括用户认证、访问控制、加密传输等,以确保数据库中的数据得到保护。
-
活跃的社区和支持: 由于其开源性质,MySQL拥有一个庞大且活跃的社区。用户可以在社区中获取支持、解决问题,也可以参与到MySQL的开发和改进中。
在Linux系统下安装MySQL的步骤
1.更新系统:
在安装任何软件之前,请确保系统已更新到最新版本:
sudo apt update
sudo apt upgrade
2.安装MySQL服务器:
对于基于Debian的系统(如Ubuntu),您可以使用以下命令安装MySQL服务器:
sudo apt install mysql-server
在安装过程中,系统会提示设置MySQL root用户的密码。
3.启动MySQL服务:
安装完成后,启动MySQL服务:
sudo service mysql start
4:设置MySQL安全性:
运行以下命令,按照提示执行安全性设置:
sudo mysql_secure_installation
这将包括更改root用户密码、删除匿名用户、禁用root用户远程登录等步骤。
5:检查MySQL状态:
检查MySQL服务是否正在运行:
sudo service mysql status
6:登录MySQL:
使用以下命令登录MySQL服务器:
mysql -u root -p
输入在安装过程中设置的root密码。
使用 MySQL
连接到MySQL服务器
使用以下命令连接到MySQL服务器,输入密码:
mysql -u 用户名 -p
显示数据库
SHOW DATABASES
新建数据库
CREATE DATABASE 新数据库名;
删除数据库
DROP DATABASE 数据库名
选择数据库
USE 数据库名
创建表
CREATE TABLE 表名 (
列1 数据类型,
列2 数据类型,
...
);
删除表
DROP TABLE 表名
MySQL中的数据类型
- 整数类型: INT, TINYINT, SMALLINT, BIGINT.
- 浮点数类型: FLOAT, DOUBLE.
- 字符串类型: VARCHAR(n), CHAR(n), TEXT.
- 日期和时间类型: DATE, TIME, DATETIME, TIMESTAMP.
- 其他类型: BOOLEAN, BLOB, JSON, etc.
插入行
INSERT INTO 表名 (列1, 列2, 列3, ...) VALUES (值1, 值2, 值3, ...);
删除行
DELETE FROM 表名 WHERE 条件;
更新表
UPDATE 表名 SET 列1 = 值1, 列2 = 值2 WHERE 条件;
修改表
-
添加列:
ALTER TABLE 表名 ADD COLUMN 新列 数据类型;
-
删除列:
ALTER TABLE 表名 DROP COLUMN 列名;
关联表
CREATE TABLE 表1 (
id INT PRIMARY KEY,
列1 数据类型,
列2 数据类型
);
CREATE TABLE 表2 (
id INT PRIMARY KEY,
列3 数据类型,
列4 数据类型,
外键列 INT REFERENCES 表1(id)
);
连接操作
-
INNER JOIN
SELECT * FROM 表1 INNER JOIN 表2 ON 表1.列 = 表2.列;
-
LEFT JOIN
SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.列 = 表2.列;
-
RIGHT JOIN
SELECT * FROM 表1 RIGHT JOIN 表2 ON 表1.列 = 表2.列;
MySQL脚本
将SQL语句保存在一个文件中,例如script.sql,然后运行:
mysql -u 用户名 -p 数据库名 < script.sql
C语言 MySQL 编程
使用C语言构建 MySQL 客户机与服务器程序
客户机程序(client.c):
#include <mysql/mysql.h>
#include <stdio.h>
int main() {
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
conn = mysql_init(NULL);
// 连接到MySQL数据库
if (mysql_real_connect(conn, "localhost", "用户名", "密码", "数据库名", 0, NULL, 0)) {
printf("连接成功\n");
// 执行SQL查询
if (mysql_query(conn, "SELECT * FROM 表名")) {
fprintf(stderr, "查询失败: %s\n", mysql_error(conn));
} else {
// 获取查询结果
res = mysql_store_result(conn);
// 遍历结果集
while ((row = mysql_fetch_row(res))) {
printf("%s %s %s\n", row[0], row[1], row[2]);
}
// 释放结果集内存
mysql_free_result(res);
}
// 关闭连接
mysql_close(conn);
} else {
fprintf(stderr, "连接失败: %s\n", mysql_error(conn));
}
return 0;
}
服务器程序(server.c):
#include <mysql/mysql.h>
#include <stdio.h>
int main() {
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
conn = mysql_init(NULL);
// 启动MySQL服务器
if (mysql_real_connect(conn, "localhost", "用户名", "密码", NULL, 0, NULL, 0)) {
printf("服务器已连接\n");
// 执行SQL查询
if (mysql_query(conn, "SELECT * FROM 表名")) {
fprintf(stderr, "查询失败: %s\n", mysql_error(conn));
} else {
// 获取查询结果
res = mysql_store_result(conn);
// 遍历结果集
while ((row = mysql_fetch_row(res))) {
printf("%s %s %s\n", row[0], row[1], row[2]);
}
// 释放结果集内存
mysql_free_result(res);
}
// 关闭连接
mysql_close(conn);
} else {
fprintf(stderr, "连接失败: %s\n", mysql_error(conn));
}
return 0;
}
PHP MySQL 编程
PHP与MySQL的结合是非常常见和强大的组合,用于在Web开发中处理数据库操作。下面是一个简单的PHP与MySQL编程的例子,涵盖了连接到MySQL数据库、查询、插入、更新和删除数据的基本操作。
连接到MySQL数据库
<?php
$servername = "localhost";
$username = "用户名";
$password = "密码";
$dbname = "数据库名";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "连接成功";
?>
查询数据
<?php
$sql = "SELECT 列1, 列2 FROM 表名";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// 输出数据
while($row = $result->fetch_assoc()) {
echo "列1: " . $row["列1"]. " - 列2: " . $row["列2"]. "<br>";
}
} else {
echo "0 结果";
}
// 关闭连接
$conn->close();
?>
插入数据
<?php
$sql = "INSERT INTO 表名 (列1, 列2) VALUES ('值1', '值2')";
if ($conn->query($sql) === TRUE) {
echo "新记录插入成功";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
// 关闭连接
$conn->close();
?>
更新数据
<?php
$sql = "UPDATE 表名 SET 列1='新值1' WHERE 条件";
if ($conn->query($sql) === TRUE) {
echo "记录更新成功";
} else {
echo "Error updating record: " . $conn->error;
}
// 关闭连接
$conn->close();
?>
删除数据
<?php
$sql = "DELETE FROM 表名 WHERE 条件";
if ($conn->query($sql) === TRUE) {
echo "记录删除成功";
} else {
echo "Error deleting record: " . $conn->error;
}
// 关闭连接
$conn->close();
?>
实践过程