当前位置: 首页 > news >正文

mysql进阶篇(二)

前言

在这里插入图片描述
「作者主页」:雪碧有白泡泡
「个人网站」:雪碧的个人网站
「推荐专栏」

java一站式服务
React从入门到精通
前端炫酷代码分享
★ 从0到英雄,vue成神之路★
uniapp-从构建到提升
从0到英雄,vue成神之路
解决算法,一个专栏就够了
架构咱们从0说
★ 数据流通的精妙之道★
★后端进阶之路★

请添加图片描述

文章目录

  • 前言
  • MySQL 的高级操作
    • 事务处理
    • 备份和恢复
      • 备份
      • 恢复
    • 性能优化
      • 1. 索引优化
      • 2. 查询优化
      • 3. 数据库参数调优
      • 4. 分区表
  • MySQL 的开发应用
    • 使用 PHP 进行数据库编程
    • 使用 Java 进行数据库编程
    • 使用 MySQL 进行 Web 应用程序开发
  • 数据库管理
    • 1. 数据备份
    • 2. 数据恢复
    • 3. 性能监测
    • 4. 安全管理

在这里插入图片描述

继 MYSQL基础篇(一) 续文

MySQL 的高级操作

学习 MySQL 的高级操作,包括事务处理、备份恢复、性能优化等。
好的,下面是 MySQL 的高级操作,包括事务处理、备份恢复、性能优化等的全部代码和概念详解。

事务处理

在 MySQL 中,事务是一组原子性的 SQL 操作,可以确保数据库在执行一系列操作时,要么完全完成,要么完全不完成。

要开始一个事务,可以使用 START TRANSACTION 语句。例如:

START TRANSACTION;

要提交一个事务,可以使用 COMMIT 语句。例如:

COMMIT;

如果想要撤销一个事务,可以使用 ROLLBACK 语句。例如:

ROLLBACK;

备份和恢复

在 MySQL 中,可以使用 mysqldump 工具来备份和恢复数据库。mysqldump 工具可以生成 SQL 文件,其中包含了数据库的所有表、数据、索引等信息。

备份

要备份一个数据库,可以使用以下命令:

mysqldump -u username -p password database_name > backup.sql

其中:

  • username:登录 MySQL 的用户名。
  • password:登录 MySQL 的密码。
  • database_name:要备份的数据库名。
  • backup.sql:备份文件的保存路径和文件名。

恢复

要恢复一个数据库,可以使用以下命令:

mysql -u username -p password database_name < backup.sql

其中:

  • username:登录 MySQL 的用户名。
  • password:登录 MySQL 的密码。
  • database_name:要恢复的数据库名。
  • backup.sql:备份文件的路径和文件名。

性能优化

在 MySQL 中,可以采取一系列措施来提高数据库的性能。以下是一些常见的性能优化措施:

1. 索引优化

在 MySQL 中,为表添加索引可以大大提高查询速度。但是过多的索引会降低写入速度,因此要根据实际情况进行优化。

2. 查询优化

建议使用 JOIN 替代子查询,JOIN 更加高效;同时,应该避免使用 SELECT *,只选取必要的列。

3. 数据库参数调优

在 MySQL 中,可以通过修改一些数据库参数来提高性能。例如,可以增大缓存区大小、修改连接数、增加并发线程等。

4. 分区表

在处理大量数据时,可以考虑使用分区表来优化性能。

MySQL 的开发应用

学习使用 MySQL 进行开发应用,包括使用 PHP、Java 等编程语言进行数据库编程,以及使用 MySQL 进行 Web 应用程序开发等。
好的,下面是 MySQL 的开发应用,包括使用 PHP、Java 等编程语言进行数据库编程,以及使用 MySQL 进行 Web 应用程序开发等的全部代码和详解。

使用 PHP 进行数据库编程

PHP 是一种流行的服务端编程语言,它可以与 MySQL 数据库进行交互。以下是一个简单的 PHP 代码示例,演示如何连接 MySQL 并执行查询:

<?php
$servername = "localhost";
$username = "root";
$password = "";// 创建连接
$conn = new mysqli($servername, $username, $password);// 检查连接是否成功
if ($conn->connect_error) {die("连接失败: " . $conn->connect_error);
}// 执行查询
$sql = "SELECT * FROM mydatabase.customers";
$result = $conn->query($sql);// 输出查询结果
if ($result->num_rows > 0) {while($row = $result->fetch_assoc()) {echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. "<br>";}
} else {echo "0 结果";
}// 关闭连接
$conn->close();
?>

在上面的示例中,首先使用 mysqli 类创建了一个 MySQL 连接,然后执行了一条查询语句,并将结果输出到浏览器上。最后,关闭了 MySQL 连接。

使用 Java 进行数据库编程

Java 是一种通用的编程语言,也可以与 MySQL 数据库进行交互。以下是一个简单的 Java 代码示例,演示如何连接 MySQL 并执行查询:

import java.sql.*;public class MySQLTest {public static void main(String[] args) {String url = "jdbc:mysql://localhost/mydatabase";String username = "root";String password = "";try {Connection conn = DriverManager.getConnection(url, username, password);Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("SELECT * FROM customers");while (rs.next()) {int id = rs.getInt("id");String name = rs.getString("name");String email = rs.getString("email");System.out.println("id: " + id + " - Name: " + name + " - Email: " + email);}rs.close();stmt.close();conn.close();} catch (SQLException e) {e.printStackTrace();}}
}

在上面的示例中,首先使用 DriverManager 类创建了一个 MySQL 连接,然后执行了一条查询语句,并将结果输出到控制台上。最后,关闭了 MySQL 连接。

使用 MySQL 进行 Web 应用程序开发

MySQL 可以与多种 Web 应用程序框架进行集成,例如 Laravel、Spring 等。在 Web 应用程序开发中,需要对 MySQL 进行增删改查操作。

以下是一个使用 Laravel 框架实现的增删改查示例:

  1. 在 Laravel 中创建一个名为 Customer 的模型:
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class Customer extends Model
{protected $fillable = ['name', 'email'];
}
  1. 在 Laravel 中创建一个名为 CustomerController 的控制器:
<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;
use App\Customer;class CustomerController extends Controller
{public function index(){$customers = Customer::all();return view('customer.index', ['customers' => $customers]);}public function create(){return view('customer.create');}public function store(Request $request){$customer = Customer::create(['name' => $request->input('name'),'email' => $request->input('email')]);return redirect('/customers');}public function edit($id){$customer = Customer::find($id);return view('customer.edit', ['customer' => $customer]);}public function update(Request $request, $id){$customer = Customer::find($id);$customer->name = $request->input('name');$customer->email = $request->input('email');$customer->save();return redirect('/customers');}public function destroy($id){$customer = Customer::find($id);$customer->delete();return redirect('/customers');}
}

在上面的示例中,CustomerController 控制器提供了 index、create、store、edit、update 和 destroy 六个动作,分别对应于查询、新增、编辑、更新和删除 Customer 模型。

  1. 在 Laravel 中创建对应的路由:
Route::get('/customers', 'CustomerController@index')->name('customer.index');
Route::get('/customers/create', 'CustomerController@create')->name('customer.create');
Route::post('/customers', 'CustomerController@store')->name('customer.store');
Route::get('/customers/{id}/edit', 'CustomerController@edit')->name('customer.edit');
Route::put('/customers/{id}', 'CustomerController@update')->name('customer.update');
Route::delete('/customers/{id}', 'CustomerController@destroy')->name('customer.destroy');

在上面的示例中,定义了六个路由,分别对应于上面的六个动作。

  1. 在 Laravel 中创建相应的视图模板:
  • index.blade.php
@extends('layout')@section('content')<h1>Customers</h1><a href="{{ route('customer.create') }}" class="btn btn-primary">Add New Customer</a><table class="table"><thead><tr><th>ID</th><th>Name</th><th>Email</th><th>Actions</th></tr></thead><tbody>@foreach ($customers as $customer)<tr><td>{{ $customer->id }}</td><td>{{ $customer->name }}</td><td>{{ $customer->email }}</td><td><a href="{{ route('customer.edit', ['id' => $customer->id]) }}" class="btn btn-primary">Edit</a><form action="{{ route('customer.destroy', ['id' => $customer->id]) }}" method="POST" style="display: inline">{{ method_field('DELETE') }}{{ csrf_field() }}<button type="submit" class="btn btn-danger">Delete</button></form></td></tr>@endforeach</tbody></table>
@endsection
  • create.blade.php
@extends('layout')@section('content')<h1>Add New Customer</h1><form action="{{ route('customer.store') }}" method="POST">{{ csrf_field() }}<div class="form-group"><label for="name">Name:</label><input type="text" name="name" id="name" class="form-control"></div><div class="form-group"><label for="email">Email:</label><input type="email" name="email" id="email" class="form-control"></div><button type="submit" class="btn btn-primary">Create</button></form>
@endsection
  • edit.blade.php
@extends('layout')@section('content')<h1>Edit Customer</h1><form action="{{ route('customer.update', ['id' => $customer->id]) }}" method="POST">{{ method_field('PUT') }}{{ csrf_field() }}<div class="form-group"><label for="name">Name:</label><input type="text" name="name" id="name" class="form-control" value="{{ $customer->name }}"></div><div class="form-group"><label for="email">Email:</label><input type="email" name="email" id="email" class="form-control" value="{{ $customer->email }}"></div><button type="submit" class="btn btn-primary">Update</button></form>
@endsection

在上面的示例中,定义了三个视图模板,分别对应于显示客户列表、新增客户和编辑客户。

以上就是使用 MySQL 进行开发应用的示例,包括使用 PHP、Java 等编程语言进行数据库编程,以及使用 MySQL 进行 Web 应用程序开发等的全部代码和详解

数据库管理

学习如何进行数据库管理,包括数据备份、恢复、性能监测、安全管理等。
数据库管理是指对数据库进行维护和管理,包括数据备份、恢复、性能监测、安全管理等方面。下面我将分别介绍这些方面的概念和相关的代码详解。

1. 数据备份

数据备份是指将数据库中的数据复制到一个或多个位置,以便在原始数据受到破坏时可以恢复。常见的备份方式有完全备份、增量备份和差异备份。

完全备份是将整个数据库备份到另一个位置。增量备份只备份上次完全备份后新增或更改的数据。差异备份备份上次完全备份后发生更改的数据。

以下是SQL Server数据库的备份代码:

-- 完全备份
BACKUP DATABASE MyDatabase
TO DISK = 'C:\MyDatabase.bak'
WITH INIT;-- 增量备份
BACKUP DATABASE MyDatabase
TO DISK = 'C:\MyDatabase_incremental.bak'
WITH DIFFERENTIAL;-- 差异备份
BACKUP DATABASE MyDatabase
TO DISK = 'C:\MyDatabase_differential.bak'
WITH DIFFERENTIAL;

2. 数据恢复

数据恢复是指将备份文件中的数据还原到数据库中,以便从破坏中恢复数据。

以下是SQL Server数据库的恢复代码:

-- 恢复完全备份
RESTORE DATABASE MyDatabase
FROM DISK = 'C:\MyDatabase.bak';-- 恢复增量备份
RESTORE DATABASE MyDatabase
FROM DISK = 'C:\MyDatabase_incremental.bak'
WITH NORECOVERY;-- 恢复差异备份
RESTORE DATABASE MyDatabase
FROM DISK = 'C:\MyDatabase_differential.bak'
WITH NORECOVERY;

3. 性能监测

性能监测是指通过对数据库进行监测和分析,来评估系统的性能,并发现可能存在的问题。

以下是SQL Server数据库的性能监测代码:

-- 查看当前运行的所有进程
SELECT * FROM sys.sysprocesses;-- 查看缓存中的查询计划
SELECT * FROM sys.dm_exec_cached_plans;-- 查看缓存中的查询
SELECT text FROM sys.dm_exec_query_stats
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
WHERE execution_count > 1;

4. 安全管理

安全管理是指保护数据库免遭未授权访问或恶意攻击。常见的安全管理措施包括创建用户、角色和权限等。

以下是SQL Server数据库的安全管理代码:

-- 创建用户并授予数据库访问权限
CREATE LOGIN NewUser WITH PASSWORD = 'password';
CREATE USER NewUser FOR LOGIN NewUser;
USE MyDatabase;
GRANT SELECT, INSERT, UPDATE, DELETE TO NewUser;-- 创建角色并向其中添加用户
CREATE ROLE MyRole;
EXEC sp_addrolemember 'MyRole', 'NewUser';-- 授予对象级别的权限给角色
GRANT SELECT, INSERT, UPDATE, DELETE ON MyTable TO MyRole;

相关文章:

mysql进阶篇(二)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…...

考研C语言进阶题库——更新31-32题

目录 31.姜太公门前有一个池塘&#xff0c;他每天都会去池塘里面钓鱼&#xff0c;他钓鱼技术非常高&#xff0c;距离水面五米的深度之内&#xff0c;包括五米的鱼&#xff0c;他都能钓到池塘里面一共有n条鱼&#xff0c;给出每条鱼距离水面的高度&#xff0c;问姜太公一次能钓…...

机动车号牌正则表达式(兼容新能源车牌)

说明&#xff1a;“|”前面面是绿牌车&#xff08;8位&#xff09;规则&#xff0c;“|”后面是蓝牌车&#xff08;7位&#xff09;规则。 ([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领]A-Z)|(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵…...

idea如何上传项目到github(超详细)

idea如何上传项目到github 1、IDEA配置2、项目上传到本地仓库2.1、创建本地git仓库2.2、Add操作2.3、Commit操作 3、项目上传到Github4、拿到登录Github的token 1、IDEA配置 File-Settings-VersionControl-Git Git的安装路径下bin目录下的git.exe可执行文件 可以直接点 Gene…...

护网专题简单介绍

护网专题简单介绍 一、护网红蓝队介绍1.1、网络安全大事件1.2、护网行动由来1.3、护网行动中的角色二、红队介绍2.1、红队所需技能2.2、红队攻击流程 三、蓝队介绍3.1、蓝队所需技能3.2、蓝队防守四阶段3.3、蓝队前期准备 四、常见安全厂商介绍4.1、常见安全厂商 五、常见安全产…...

GO学习之 网络通信(Net/Http)

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、 文章目录 GO系列前言一、H…...

<dependency> idea中为什么这个变黄色

在IDE中&#xff0c;当你的代码出现黄色高亮时&#xff0c;通常表示存在警告或建议的提示。对于Maven的<dependency>标签来说&#xff0c;黄色高亮可能有以下几种原因&#xff1a; 依赖项未找到&#xff1a;黄色高亮可能表示IDE无法找到指定的依赖项。这可能是由于配置错…...

SA8000 社会责任要求之健康安全准则

【SA8000 社会责任要求之健康安全准则】 健康和安全 准则 3.1 组织应提供一个安全和健康的工作环境&#xff0c;并应采取有效的措施防止潜在的健康和安全事故和职业伤害&#xff0c;或在工作的过程中发生的或引起的疾病。基于产业相关的安全与健康的知识以及任何特定的危害&…...

SpringMVC的架构有什么优势?——控制器(三)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…...

AI和ChatGPT:人工智能的奇迹

AI和ChatGPT&#xff1a;人工智能的奇迹 引言什么是人工智能&#xff1f;ChatGPT&#xff1a;AI的语言之王ChatGPT的工作原理ChatGPT的优势和挑战AI和ChatGPT的未来展望结论 引言 人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;是一项令人兴奋的…...

掌握 JVM 的参数及配置

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ JVM&#xff08;Java虚拟机&#xff09;是Java编程语言的核心组件之一&#xff0c;它负责执行Java程序&#xff0c;并提供一系列参数和配置选项&#xff0c;可以调整Java程…...

如何高性能、高效率地实现3D Web轻量化?

随着互联网和Web技术的发展&#xff0c;3D Web应用的需求越来越多。然而&#xff0c;复杂的3D模型在Web上展示和交互通常需要大量的带宽和计算资源。为了解决这一问题&#xff0c;HOOPS技术作为一套专业的3D图形技术开发工具包&#xff0c;发挥着关键作用。本文将探讨HOOPS技术…...

【Linux 网络】 传输层协议之TCP协议 TCP的三次握手和四次挥手

TCP协议 TCP协议段格式谈谈什么是 “可靠” 和 “不可靠”TCP协议段——序号与确认序号TCP协议段——窗口大小TCP协议段 —— 六个标志位确认应答机制&#xff08;ACK&#xff09;超时重传机制连接管理机制TCP 的三次握手四次挥手TCP三次握手四次挥手总结图 滑动窗口流量控制拥…...

git仓库与本地暂存区的同步问题

向下同步 对于远程仓库的项目&#xff0c;初始化一个配置文件&#xff0c;配置远程仓库及相关信息&#xff0c;赋值远程仓库的地址&#xff0c;使用git pull命令即可拉取仓库代码。 git pull [remote_addr] 该部分完成向下同步 向上同步 向上同步时会遇到很多的问题&#xf…...

MATLAB算法实战应用案例精讲-【图像处理】图像分类模型-LeNetAlexNetVGG

目录 LeNet 模型介绍 模型结构 模型实现 模型特点 模型指标 AlexNet...

ArcGIS API for JavaScript 4.x 教程(二)切换基础地图图层

了解如何更改地图中的基础地图图层。 基础地图图层&#xff1a; 基础地图层是用于访问和显示来自基础地图层服务的数据的层。它为地图或场景提供视觉和地理上下文&#xff0c;通常包含具有管理边界和地名的全局数据。 基本地图图层服务提供了许多基本地图图层样式&#xff0c;例…...

SpringBoot——如何读写使用JSON文件保存的数据

文章目录 1. 将数据写入JSON文件2. 从JSON文件读取数据2.1 读取单个对象2.2 读取对象列表 1. 将数据写入JSON文件 要将数据写入JSON文件&#xff0c;可以使用Spring Boot中提供的Jackson库。Jackson库是处理JSON的Java库&#xff0c;可以轻松地将对象转换为JSON字符串&#xff…...

SDU Crypto School - 计算不可区分性1

Encryption: Computational security 1-4 主讲人&#xff1a;李增鹏&#xff08;山东大学&#xff09; 参考教材&#xff1a;Jonathan Katz, Yehuda Lindell, Introduction to Modern Cryptography - Principles and Protocols. 什么是加密 首先&#xff0c;加密方案的目的在于…...

win11 vscode torch 编译遇错

1. 错误内容&#xff1a; Failed to build pc-util ERROR: Could not build wheels for pc-util, which is required to install pyproject.toml-based projects NativeCommandExitException: Program “pip.exe” ended with non-zero exit code: 2.问题分析&#xff1a; pip出…...

Markdown系列之Flowchat流程图

一.欢迎来到我的酒馆 介绍Markdown的Flowchart流程图语法。 目录 一.欢迎来到我的酒馆二.什么是Flowchart三.更进一步 二.什么是Flowchart 2.1 Flowchart是一款基于javascript的工具&#xff0c;使用它可以用代码创建简单的流程图。具体信息可以查看flowchart官网&#xff1a;…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

JDK 17 序列化是怎么回事

如何序列化&#xff1f;其实很简单&#xff0c;就是根据每个类型&#xff0c;用工厂类调用。逐个完成。 没什么漂亮的代码&#xff0c;只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...

flow_controllers

关键点&#xff1a; 流控制器类型&#xff1a; 同步&#xff08;Sync&#xff09;&#xff1a;发布操作会阻塞&#xff0c;直到数据被确认发送。异步&#xff08;Async&#xff09;&#xff1a;发布操作非阻塞&#xff0c;数据发送由后台线程处理。纯同步&#xff08;PureSync…...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)

旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据&#xff01;该数据集源自2025年4月发表于《地理学报》的论文成果…...

41道Django高频题整理(附答案背诵版)

解释一下 Django 和 Tornado 的关系&#xff1f; Django和Tornado都是Python的web框架&#xff0c;但它们的设计哲学和应用场景有所不同。 Django是一个高级的Python Web框架&#xff0c;鼓励快速开发和干净、实用的设计。它遵循MVC设计&#xff0c;并强调代码复用。Django有…...