软件与硬件——综合


MYSQL数据库的讲解


    在应用开发中,常用的数据储存有:XML、JSON、MYSQL、Hadoop HDFS、Cassandra、Redis、MongoDB、Oracle等。
    
    本章主要讲解myspl数据库的组成、连接数据库、库和表的创建、表的类型属性、插入数据、读取数据、增加数据、删除数据等,让初始小白简单了解myspl与使用myspl。



myspl数据对象和概念
对象 概念
数据库(库)是一个逻辑上的容器,用于存储和管理相关的数据库对象,如数据表、视图、存储过程、函数等。它就像是一个文件夹,将相关的数据和对象组织在一起,便于管理和维护。不同的库可以用于不同的应用程序或项目,以实现数据的隔离和独立管理。
表是数据库中存储数据的基本结构,由行和列组成。表就像一个二维表格,每一列代表数据的一个属性(字段),每一行代表一条具体的记录。例如,在一个“学生”表中,可能有“学号”“姓名”“年龄”等列,而每一行则对应一个具体学生的信息。
数据数据是实际存储在表中的内容,是对现实世界中各种信息的数字化表示。这些数据按照表的结构和定义进行存储,填充在表的行和列中。数据可以是各种类型,如整数、字符串、日期、浮点数等,它们是数据库的核心价值所在,通过对这些数据的查询、分析和处理,可以获取有意义的信息和知识,为业务决策和应用程序提供支持。
视图是从一个或多个表中导出的虚拟表,它本身不存储数据,而是根据定义的查询语句动态生成结果集。
索引是一种数据结构,用于提高数据库中数据的查询效率。可以在表的列上创建索引,类似于书籍的目录,使数据库能够快速定位到需要的数据行。
存储过程是一组为了完成特定功能的SQL语句集合,它可以接受参数、执行一系列操作,并返回结果。存储过程可以在数据库服务器上存储和执行,提高了代码的复用性和执行效率。
函数与存储过程类似,但函数通常用于返回一个单一的值,而不是执行一系列的操作。MySQL提供了许多内置函数,同时也允许用户自定义函数。
触发器是一种特殊的存储过程,它会在特定的数据库事件(如插入、更新或删除数据)发生时自动触发执行。触发器可以用于实现数据的完整性检查、审计跟踪等功能。
事务是一组数据库操作的逻辑单元,这些操作要么全部成功执行,要么全部回滚,以确保数据库的一致性。
约束用于限制表中数据的完整性和一致性,包括主键约束、外键约束、唯一约束、非空约束等。
创建库、表、数据和类型属性
(以PHP示例)
一、连接myspl数据库

// 创建连接
$servername = "localhost";//如本地数据库IP与端口$servername = "192.168.91.52:45267";
$username = "root";//数据库账号
$password = "";//数据库密码

// 创建连接对象
$conn = new mysqli($servername, $username, $password);

// 检测连接
if ($conn->connect_error) {
    die("连接失败: ". $conn->connect_error);
}
echo "连接成功
";
二、创建库与选择库

// 创建数据库mydatabase
$sql = "CREATE DATABASE IF NOT EXISTS mydatabase";
if ($conn->query($sql) === TRUE) {
    echo "数据库创建成功
"; } else { echo "创建数据库失败: ". $conn->error; } // 选择数据库mydatabase $conn->select_db("mydatabase");
三、创建表并设置表的类型属性

// 创建表表名(customers)
$sql = "CREATE TABLE IF NOT EXISTS customers (
/*表格第1行
名字id
类型int(6)表示整数类型,宽度6位
排序规则空
属性UNSIGNED(无符号整数0~4294967295)
空否
默认无
注释空
额外AUTO_INCREMENT(自动递增列)
*/
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
/*表格第2行
名字firstname
类型VARCHAR(30)30位可变长度字符串类型
排序规则utf8m64_general_ci(字符集和排序规则ci表示不区分大小写)
属性空
空否
默认无
注释空
额外空
*/
    firstname VARCHAR(30) NOT NULL,
/*表格第3行
名字lastname
类型VARCHAR(30)30位可变长度字符串类型
排序规则utf8m64_general_ci(字符集和排序规则ci表示不区分大小写)
属性空
空否
默认无
注释空
额外空
*/ 
   lastname VARCHAR(30) NOT NULL,
/*表格第4行
名字email
类型VARCHAR(50)50位可变长度字符串类型
排序规则utf8m64_general_ci(字符集和排序规则ci表示不区分大小写)
属性空
空是
默认NULL
注释空
额外空
*/   
    email VARCHAR(50),
/*表格第5行
名字reg_date
类型TIMESTAMP(日期和时间数据类型)
排序规则空
属性空
空值否
默认DEFAULT(设置默认值CURRENT_TIMESTAMP,current_timestamp()是一个函数,代表当前的日期和时间。)
注释空
额外ON UPDATE CURRENT_TIMESTAMP(当向表中插入新记录时,如果没有为  reg_date  列显式指定值,那么该列会自动被赋值为插入记录时的当前日期和时间。)
*/   
    reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";

if ($conn->query($sql) === TRUE) {
    echo "表创建成功
"; } else { echo "创建表失败: ". $conn->error; }
四、插入数据

// 插入数据
$sql = "INSERT INTO customers (firstname, lastname, email)
        VALUES ('高', '富帅', '10000@diankb.cn')";
if ($conn->query($sql) === TRUE) {
    echo "新记录插入成功";
} else {
    echo "插入数据失败: ". $conn->error;
}

// 关闭连接
$conn->close();
存储后的myspl数据如下
通过之前创建数据库、表、数据,在myspl数据库中大概就是以下样子了。
id 邮箱 时间
1富帅10000@diankb.cn2025-01-01 0:0:0
查询输出数据

<html>
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" id="viewport" content="width=device-width, initial-scale=1">
    </head>
    <body>

<?php
// 数据库连接信息
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mydatabase";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("连接失败: ". $conn->connect_error);
}

// 假设你有一个名为 `users` 的表,包含 `id` 和 `name` 字段
$sql = "SELECT id, firstname FROM customers";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // 输出数据
    while($row = $result->fetch_assoc()) {
        echo "id: ". $row["id"]. " - Name: ". $row["firstname"]. "<br>";
    }
} else {
    echo "0 结果";
}

$conn->close();
?>

    </body>
</html>		
增加数据

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta name="viewport" id="viewport" content="width=device-width, initial-scale=1">
    <title>数据库数据写入与查询</title>
    <style>
        table {
            border-collapse: collapse;
            width: 100%;
        }

        table,
        th,
        td {
            border: 1px solid #ccc;
        }

        form {
            margin-bottom: 20px;
        }
    </style>
</head>

<body>
    <!-- 数据插入表单 -->
    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
        <label for="firstname">名字:</label>
        <input type="text" id="firstname" name="firstname" required><br>

        <label for="lastname">姓氏:</label>
        <input type="text" id="lastname" name="lastname" required><br>

        <label for="email">邮箱:</label>
        <input type="text" id="email" name="email" required><br>

        <input type="submit" name="submit" value="插入数据">
    </form>

    <?php
    // 数据库连接信息
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "mydatabase";

    // 创建连接
    $conn = new mysqli($servername, $username, $password, $dbname);

    // 检查连接
    if ($conn->connect_error) {
        die("连接失败: ". $conn->connect_error);
    }

    // 处理表单提交,插入数据
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["submit"])) {
    // ... 插入数据的代码 ...
   
        $firstname = isset($_POST["firstname"])? $_POST["firstname"] : "";
        $lastname = isset($_POST["lastname"])? $_POST["lastname"] : "";
        $email = isset($_POST["email"])? $_POST["email"] : "";

        // 使用预处理语句插入数据
        $sqlInsert = "INSERT INTO customers (firstname, lastname, email) VALUES (?,?,?)";
        $stmt = $conn->prepare($sqlInsert);
        $stmt->bind_param("sss", $firstname, $lastname, $email);
        if ($stmt->execute()) {
            echo "数据插入成功";
        } else {
            echo "插入失败: ". $conn->error;
        }
        $stmt->close();
    // 插入成功后重定向
    header("Location: ".$_SERVER['PHP_SELF']);
    exit();
}

    // 查询数据
    $sql = "SELECT id, firstname, lastname, email, reg_date FROM customers";
    $result = $conn->query($sql);

    if ($result === false) {
        // 查询失败时的处理
        echo "查询失败: ". $conn->error;
    } elseif ($result->num_rows > 0) {
        // 输出数据,使用 HTML 表格展示
        echo "<table>";
        echo "<tr><th>ID</th><th>First Name</th><th>Last Name</th><th>email</th><th>reg_date</th></tr>";
        while ($row = $result->fetch_assoc()) {
            echo "<tr><td>". $row["id"]. "</td><td>". $row["firstname"]. "</td><td>". $row["lastname"]. "</td><td>". $row["email"]. "</td><td>". $row["reg_date"]. "</td></tr>";
        }
        echo "</table>";
    } else {
        echo "0 结果";
    }

    $conn->close();
    ?>
</body>

</html>
删除数据

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta name="viewport" id="viewport" content="width=device-width, initial-scale=1">
    <title>数据库数据写入与查询</title>
    <style>
        table {
            border-collapse: collapse;
            width: 100%;
        }

        table,
        th,
        td {
            border: 1px solid #ccc;
        }

        form {
            margin-bottom: 20px;
        }
        
        .delete-btn {
            background-color: #ff4444;
            color: white;
            border: none;
            padding: 5px 10px;
            border-radius: 3px;
            cursor: pointer;
        }
        
        .delete-btn:hover {
            background-color: #cc0000;
        }
    </style>
</head>

<body>
    <!-- 数据插入表单 -->
    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
        <label for="firstname">名字:</label>
        <input type="text" id="firstname" name="firstname" required><br>

        <label for="lastname">姓氏:</label>
        <input type="text" id="lastname" name="lastname" required><br>

        <label for="email">邮箱:</label>
        <input type="text" id="email" name="email" required><br>

        <input type="submit" name="submit" value="插入数据">
    </form>

    <?php
    // 数据库连接信息
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "mydatabase";

    // 创建连接
    $conn = new mysqli($servername, $username, $password, $dbname);

    // 检查连接
    if ($conn->connect_error) {
        die("连接失败: ". $conn->connect_error);
    }

    // 处理删除请求
    if (isset($_GET['delete_id'])) {
        $delete_id = $_GET['delete_id'];
        $sqlDelete = "DELETE FROM customers WHERE id = ?";
        $stmt = $conn->prepare($sqlDelete);
        $stmt->bind_param("i", $delete_id);
        if ($stmt->execute()) {
            echo "<p>记录删除成功</p>";
            // 重定向以避免刷新时重复删除
            header("Location: ".strtok($_SERVER["REQUEST_URI"], '?'));
            exit();
        } else {
            echo "<p>删除失败: ". $conn->error . "</p>";
        }
        $stmt->close();
    }

    // 处理表单提交,插入数据
    if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["submit"])) {
        $firstname = isset($_POST["firstname"]) ? $_POST["firstname"] : "";
        $lastname = isset($_POST["lastname"]) ? $_POST["lastname"] : "";
        $email = isset($_POST["email"]) ? $_POST["email"] : "";

        // 使用预处理语句插入数据
        $sqlInsert = "INSERT INTO customers (firstname, lastname, email) VALUES (?,?,?)";
        $stmt = $conn->prepare($sqlInsert);
        $stmt->bind_param("sss", $firstname, $lastname, $email);
        if ($stmt->execute()) {
            echo "<p>数据插入成功</p>";
            // 插入成功后重定向
            header("Location: ".$_SERVER['PHP_SELF']);
            exit();
        } else {
            echo "<p>插入失败: ". $conn->error . "</p>";
        }
        $stmt->close();
    }

    // 查询数据
    $sql = "SELECT id, firstname, lastname, email, reg_date FROM customers";
    $result = $conn->query($sql);

    if ($result === false) {
        // 查询失败时的处理
        echo "<p>查询失败: ". $conn->error . "</p>";
    } elseif ($result->num_rows > 0) {
        // 输出数据,使用 HTML 表格展示
        echo "<table>";
        echo "<tr><th>ID</th><th>First Name</th><th>Last Name</th><th>Email</th><th>注册日期</th><th>操作</th></tr>";
        while ($row = $result->fetch_assoc()) {
            echo "<tr>
                    <td>". $row["id"]. "</td>
                    <td>". $row["firstname"]. "</td>
                    <td>". $row["lastname"]. "</td>
                    <td>". $row["email"]. "</td>
                    <td>". $row["reg_date"]. "</td>
                    <td>
                        <a href='?delete_id=".$row["id"]."' class='delete-btn' onclick='return confirm(\"确定要删除这条记录吗?\")'>删除</a>
                    </td>
                </tr>";
        }
        echo "</table>";
    } else {
        echo "<p>0 结果</p>";
    }

    $conn->close();
    ?>
</body>

</html>
😊感谢你的关注与支持,以上就是关于myspl的简单介绍和使用,如后续内容有所补充,会在第一时间更新。
diankb.cn