分享

MySQL数据库操作命令【建议收藏】...

 大傻子的文渊阁 2022-11-14 发布于浙江

MySQL数据库学习

如果想更多学习更多知识,无论是哪种语言、哪种教程,建议收藏下面网站,这里面是真的全:

http://c./

系列文章目录


前言

本人会用几天时间把数据库知识总结一下,希望大家三连好评,感谢!
数据库规范的写法是要大写,但运行起来小写也一样,只要能记住语法就学会了一大半


MySQL的安装配置

MySQL软件下载安装配置——详细教程(软件)

MySQL软件下载安装配置——详细教程(软件)

MySQL软件下载安装配置——详细教程(命令行)

MySQL软件下载安装配置——详细教程(命令行)

数据库概述

数据库入门到精通——数据库概述

SQL数据库的命令

下面的命令基本上是想到哪写到哪,没有什么顺序可言

SQL的特点

(1)功能一体化

(2)高度非过程化

(3)面向集合的操作方式

(4)两种使用方式:命令行和嵌入到其他宿主语言(如Java等)方式

(5)简洁易学

(6)大大减轻了用户的负担,并有利于提高数据独立性

(7)非关系数据模型采用的是面向记录的操作方式,操作对象是一条记录。而SQL采用集合操作方式,其查找对象查找结果都是数据的集合,每次插入删除更新操作的对象也是数据的集合。这种操作方式极大的提高了数据操作的效率。

(8)SQL语言可以直接以命令方式与数据库进行交互,也可以作为嵌入式语言嵌入到其他程序设计语言(如Java、C等)中,并且两种不同使用方式中SQL语言的语法结构基本上是一致的。

创建并使用数据库

创建数据库CREATE DATABASE 数据库名
使用数据库use 数据库名;

数据库如何建表

添加数据

前面的添加数据命令一次只能插入一条记录。如果想一次插入多条记录怎么办呢?
可以将子查询的结果,以集合的方式向表中添加数据。
格式:INSERT INTO <表名> 子查询

【例】创建一个新表'清华大学出版图书表’并将清华大学出版社出版的图书添加到此表中。

CREATE TABLE thboPRIMARY KEY,
name VARCHAR(30)  ,
author VARCHAR(10),
publish VARCHAR(20),
price DECIMAL(6,2)
)
INSERT INTO thbook
    SELECT * FROM Book WHERE publish='清华大学出版社'

插入数据

INSERT语句的基本语法:

INSERT INTO 表名(列名列表)
    VALUES(值列表)

注意:列名列表 与 值列表 永远保持一致!

【例】试把数据“(’021B310001’,’张冬’, ’男’, ’1991-11-26’)”插入到Reader表中。

INSERT INTO Reader(reader_ID,name,sex,birthdate)
       VALUES('021B310001','张冬','男','1991- 11-26')

要插入的数据如果恰好与表的列数以及各列的顺序保持一致,所以“列名列表”也可以省略掉,变成如下的形式:

INSERT INTO Reader
     VALUES('021B310001','张冬','男','1991-11-26')

【例】Reader表中插入下面的数据:
读者编号:’021B310002’
读者姓名:’牟晓光’
读者性别:’女’

INSERT INTO Reader(reader_ID,name,sex)
       VALUES('021B310002','牟晓光','女')
  或者:
INSERT INTO Reader
       VALUES('021B310002','牟晓光','女',NULL)

删除数据库

删除数据库语句DROP DATABASE 数据库名
这条语句会删除数据库中的所有表格并同时删除数据库,当然你要删除的是数据库里存在的名字

被删除的数据库不能是当前正在使用的数据库。

使用数据库删除语句可以一次删除多个数据库。

【例】删除 “图书管理” 数据库:

 DROP DATABASE 图书管理

【例】删除 MY1 和 MY2 数据库:

 DROP DATABASE MY1, MY2

删除表

语法格式:DROP TABLE <表名>{[,<表名>]…}

【例】删除 "student "

DROP TABLE student

注意:有外码参照的表只能在外码所在表删除后才可以被删除。

删除语句

语法格式:DELETE FROM 表名 WHERE 数据;

删除数据

语法格式:DELETE FROM <表名> [ WHERE <删除条件> ]
【例】删除Book表中的全部数据

DELETE FROM Book

【例】删除价格大于100元的图书

DELETE FROM Book WHERE price>100

【例】删除王旭的借阅纪录
子查询方式实现

DELETE FROM Borrow WHERE Reader_id IN
(SELECT Reader_id FROM Reader WHERE name='王旭')

修改数据库

语法格式:

ALTER DATABASE 数据库名 { 
[ DEFAULT ] CHARACTER SET <字符集名> |
[ DEFAULT ] COLLATE <校对规则名>}

修改表

语法格式:

ALTER TABLE <表名> 
{[ ALTER  COLUMN <列名> <新数据类型>]  -- 修改列定义

| [ ADD  <列名> <数据类型> [约束]  ]     -- 添加新列
| [ DROP  COLUMN <列名>  ]  }          -- 删除列

【例】为student表添加 “班级” 列,列的定义为 class CHAR(30)

ALTER TABLE student  ADD class CHAR(30)

【例】将class列修改为 VARCHAR(30)

ALTER TABLE student ALTER COLUMN class VARCHAR(30)

【例】删除class列

ALTER TABLE student DROP COLUMN class

修改数据

语法:

UPDATE <表名>
   SET <列名=值|表达式>[,…]
   [WHERE <更新条件>]

【例】所有图书的价格打8折

UPDATE Book SET price = price*0.8

更新前
在这里插入图片描述

更新后
在这里插入图片描述

练习

使用library数据库,把王旭的出生日期改成1995-3-2

update reader set birthdate='1995-3-2' 
where name='王旭'

修改reader表中为021B310005的读者的名字改为宋玮凌,性别改为男

update Reader set name='宋玮凌',sex='男'
where Reader_ID='021B310005'

【例】将王旭所借图书的日期更改为2022-5-1
子查询方式

UPDATE Borrow SET Borrowdate= '2022-5-1'
WHERE reader_ID IN 
(SELECT reader_ID FROM Reader
WHERE name= '王旭')

更改'胡晓丽’借阅'高等数学’的借阅日期为'2022-6-8’

UPDATE Borrow SET Borrowdate= '2022-6-8’
    WHERE reader_ID IN 
(SELECT reader_ID FROM Reader
    WHERE name= '胡晓丽')
and book_ID IN 
(SELECT book_ID FROM book
    WHERE name= '高等数学')

SQL的组成部分

SQL功能命令
数据定义语言( Data Definition Language,简称DDL)create、alter
数据操纵语言( Data Manipulation Language,简称DML)insert、delete、update、select
数据控制语言( Data ControlLanguage,简称DCL)grant、revoke

单表查询

查询语句格式

SELECT [ALL|DISTINCT] <目标列名序列>
FROM <数据源>
[ WHERE <检索条件表达式> ]
[ GROUP BY <分组依据列>
[ HAVING <组提取条件表达式> ] ]
[ ORDER BY <排序依据列> [ ASC|DESC ] ]

聚集函数:统计

SELECT后面直接跟列名

Book表
nameauthorprice
1计算机文化基础张三28.00
2C语言李四58.00
3JAVA王五25.00
4Python赵六27.00

【例】查询Book表中的书名(name),作者(author),价格(price)

SELECT name, author, price FROM Book 

【例】查询Book表中的全部数据

select * from book

DISTINCT关键字

如果在结果中重复的数据不想显示出来,可以使用DISTINCT关键字
对比结果:
【例】

SELECT pubilsh FROM Book
对比:
SELECT DISTINCT pubilsh FROM Book

【例】查询每一本书九折后的价格

Book表
book_IDnameprice
1A025B1计算机文化基础28.00
2A025B2C语言58.00
3A025B3JAVA25.00
4A025B4Python27.00
SELECT book_ID,name,price*0.9 FROM Book

列更名

SQL 提供了为关系表和属性重新命名的机制。

首先来学习一下如何为列重命名。经过计算的列、函数的列和常量列的显示结果都没有列名,也可以通过这样的方式指定列名。

语法格式:旧列名 | 表达式 [ AS ] 新列名 或:新列名 =旧列名 | 表达式

WHERE子句

语法格式:

SELECT  列名列表  FROM  表名 
   WHERE  条件表达式

【例2.25】查询价格大于30元的图书的全部信息
在这里插入图片描述

SELECT * FROM Book WHERE price >30

WHERE子句中可以使用的查询条件

在这里插入图片描述

范围比较:BETWEEN … AND …

【例】查询图书价格在25到50元之间的图书

SELECT * FROM Book
WHERE price BETWEEN 25 AND 50
等价于
SELECT * FROM Book
WHERE price>=25 AND price <= 50

【例】图书价格不在20到30元之间的图书

SELECT * FROM Book 
WHERE price NOT BETWEEN 20 AND 30
等价于
SELECT * FROM  Book 
WHERE price<20 OR price >30

比较运算

【例】查询所有的女读者的信息

Select * from reader where sex='女'

【例】查询图书价格在30到50元之间的图书

SELECT * FROM Book WHERE price BETWEEN 25 AND 50

【例】查询“机械工业出版社”或者“清华大学出版社”出版的图书

 SELECT *  FROM Book WHERE publish ='机械工业出版社' or publish = '清华大学出版社','高等教育出版社'

集合查询:IN

【例】查找“机械工业出版社”,“清华大学出版社”,“高等教育出版社”出版的全部图书

SELECT * FROM Book 
WHERE publish IN('机械工业出版社','清华大学出版社','高等教育出版社')

【例】查找不是“机械工业出版社”,“清华大学出版社”,“高等教育出版社”出版的全部图书

SELECT * FROM Book 
WHERE publish NOT IN ('机械工业出版社','清华大学出版社','高等教育出版社')

空值比较:IS NULL

在这里插入图片描述
【例】查询性别为空的读者的信息

SELECT * FROM Reader 
WHERE sex IS NULL

【例】查询出生日期不为空的读者的姓名

SELECT name FROM Reader    
WHERE birthdate IS not NULL

字符串模糊查询:LIKE

Reader_IDnamesexbirthdate
1256B10001张三春NULL1992-07-13
2256B10002李四1992-07-18

【例】查询姓全部 “张” 的读者的信息。

SELECT * FROM Reader
WHERE name LIKE '张%'

LIKE的用法

列名 LIKE <字符串>
在字符串中我们可以使用通配符
_代表任意一个字符
%代表任意多个字符

多重条件查询

【例】查询1992年以后出生的女读者的姓名

SELECT name FROM Reader 
WHERE birthdate >= '1992-1-1' AND sex='女'

查询语句格式

SELECT [ALL|DISTINCT] <目标列名序列>
FROM <数据源>
[ WHERE <检索条件表达式> ]
[ GROUP BY <分组依据列>
[ HAVING <组提取条件表达式> ] ]
[ ORDER BY <排序依据列> [ ASC|DESC ] ]

ORDER BY子句:排序

Reader表
Reader_IDnamesexbirthdate
1256B10001张三春NULL1992-07-13
2256B10002李四1992-07-18
3256B10003王五NULL1991-01-18
4256B10004赵六1992-08-18
5256B10005张一龙1992-08-03

【例】查询读者的信息按出生日期的升序显示

SELECT * FROM Reader
ORDER BY birthdate ASC

【例】查询读者的信息按出生日期的

SELECT MAX(price) FROM Book

"降序"显示

SELECT * FROM Reader 
ORDER BY birthdate DESC

【例】查询图书的信息,查询结果按照出版社的名称升序排序,同一出版社的按照价格的降序排序。

SELECT * FROM Book 
ORDER BY publish ASC,price DESC

聚集函数

聚集函数(也叫集合函数),方便统计一些数据。
COUNT ( * ): 统计表中元组个数;
COUNT (列名 ):统计本列列值个数;
SUM (列名 ):计算列值总和(必须是数值型列);
AVG (列名 ):计算列值平均值(必须是数值型列);
MAX (列名 ):求列值最大值;
MIN (列名 ):求列值最小值。

【例】统计全部图书的平均价格

SELECT AVG(price) FROM Book

【例】查询最高的图书价格

SELECT MAX(price) FROM Book

【例】统计读者的总人数

SELECT COUNT(*) FROM Reader 

分组查询(GROUP BY 子句)

【例】统计每个出版社的出版图书的数目
分析:如果能够将所有的图书,按照出版社的名称进行分组,然后我们在统计每一组的元组的个数,我们就能能到得到期望的数据。如图:

Book_IDNameAuthorPublicPrice
1256B10001数据库原理张三电子工业出版社25.00
2256B10001离散数学NULL高等教育出版社28.00
3256B10001线形数学李四高等教育出版社51.00
4256B10001大学语文张龙机械工业出版社31.00
5256B10001C语言赵虎机械工业出版社22.00
6256B10001JAVA王朝清华大学出版社42.00
7256B10001Python马汉清华大学出版社21.00

可以使用GROUP BY <列名>进行分组

在<列名>上值相同的元组被分在一组,该列称为分组依据列。然后可以使用聚集函数统计每一组的数据。

SELECT COUNT(*) , publish FROM Book
GROUP BY publish

【例】统计每个人所借图书的数目。

SELECT COUNT(book_ID), Reader_id
FROM Borrow 
GROUP BY Reader_id
Having COUNT(book_ID)>2

【例】统计每个出版社出版图书的平均价格,并显示每个出版社的名称

SELECT publish, AVG(price) AS 平均价格
FROM Book
GROUP BY publish

【例】查询出版图书平均价格高于30元的出版社名称,并显示其图书平均价格。
HAVING 子句用于对分组统计后的结果进行筛选。满足HAVING 子句条件将会保留在结果中

SELECT publish,AVG(price) FROM Book 
GROUP BY publish
HAVING AVG(price)>30

【例】查询出版图书多于2本的出版社名称和出版图书数目

SELECT publish, COUNT(*) FROM Book 
GROUP BY publish
HAVING COUNT(*)>2

小结:SELECT 的基本结构

SELECT <目标列名序列> – 查询哪些列
FROM <数据源> – 来自于哪些表
[WHERE <检索条件表达式>] – 筛选的条件
[GROUP BY <分组依据列>] --根据那些列分组
[HAVING <组提取条件>] --分组后的筛选条件
[ORDER BY <排序依据列>] --根据那些列排序

聚集函数

聚集函数(也叫集合函数),方便统计一些数据。
COUNT( * ):统计表中元组个数;
COUNT(列名 ):统计本列列值个数;
SUM(列名 ):计算列值总和(必须是数值型列);
AVG(列名 ):计算列值平均值(必须是数值型列);
MAX(列名 ):求列值最大值;
MIN(列名 ):求列值最小值。

嵌套子查询

思考:查询和王旭同一天出生的读者的信息
分析:查询王旭的生日

SELECT birthdate FROM Reader WHERE name='王旭'

那么可不可以使用这个查询结果呢?当然可以!

SELECT * FROM Reader WHERE birthdate=(
SELECT birthdate FROM Reader WHERE name='王旭')

子查询

在SQL语言中,一个SELECT-FROM语句称为一个查询块。

如果一个SELECT语句嵌套在另一个SELECT、INSERT、UPDATE或DELETE语句中,则称之为子查询或内层查询;而包含子查询的语句则称为主查询或外层查询。

执行顺序:先内层后外层;先子查询后主查询

比较运算中使用子查询

【例】查询售价最高的图书的名称

SELECT name FROM Book WHERE price=(SELECT MAX(price) FROM Book)

各种子查询

子查询返回结果只有一个值子查询返回多个值
等值比较=、< >判断可以用in代替采用 in或 not in进行判断
不等比较>、<、>=、<=>、<、>=、<= ALL some

带有IN的子查询

【例】查询与"C语言"在同一出版社的图书信息

SELECT * FROM Book WHERE publish IN (
SELECT publish FROM Book WHERE name='C语言')

【例】查询王旭所借图书的图书编号

读者表
Reader_IDReadersexbirthdate
021B310003于大海1992-01-26
021B310013张三春1991-01-12
021B310104李四1992-02-28
021B310105王海旭NULL1997-07-08
021B310006王五1992-08-23
021B310008赵六NULL
借阅情况表
book_IDReader_IDBorrowdate
A32DT0003021B3100032022-05-12
A32DT0005021B3100132022-06-27
A32DT0013021B3101042022-08-03
A32DT0011王海旭2022-02-24
A32DT1004王五2022-08-19
A32DT0109赵六2022-08-08
SELECT book_ID FROM Borrow WHERE reader_ID IN (
SELECT reader_ID FROM Reader WHERE   
name='王旭')

【例】查询"王旭"所借的图书的名称

SELECT name FROM Book WHERE book_ID IN
(SELECT book_ID FROM Borrow WHERE reader_ID IN (SELECT reader_ID FROM Reader WHERE  name='王旭')    )

查询过程:
第1步,查询"王旭"的reader_ID。

第2步,依据reader_ID在Borrow表中找王旭所借图书的book_ID

第3步,依据book_ID在Book表中找到图书名称。

查询借书价格在20-40之间的读者的姓名

select name from reader where reader_id in
(select reader_id from borrow where book_id in
(select book_id from book where price between 20 and 40))

查询胡晓丽 '借阅’ 计算机文化基础’的日期

select borrowdate from borrow where reader_id in(
select  reader_id from reader where name='胡晓丽')
and book_id in(
select book_id from book where name='计算机文化基础')

查询借书价格在20-40之间的读者的姓名

select name from reader where reader_id in
(select reader_id from borrow 
              where book_id in
 (select book_id from book 
             where price between 20 and 40
  )
)

SOME(子查询)

表示子查询的结果集合中某一个元素

【例】查询除最低价格外的所有图书

SELECT * FROM Book  WHERE 
             price!=(SELECT min(price) FROM Book)
 或
SELECT * FROM Book WHERE    
              price>SOME(SELECT price FROM Book)

【例】查询价格最低的图书信息

SELECT * FROM Book WHERE 
        price=(SELECT min(price) FROM Book)
 或
SELECT * FROM Book WHERE NOT( 
		price>SOME(SELECT price FROM Book))

ALL(子查询)

表示子查询的全部结果

【例】查询书价最高的图书的信息

SELECT * FROM Book WHERE 
price=(SELECT max(price) FROM Book)
 或
SELECT * FROM Book WHERE 
price >=ALL(SELECT price FROM Book)

EXISTS子查询

判断子查询是否存在结果

当子查询存在结果时,EXISTS(子查询)返回值为true,否则返回值为false。

先外层查询,后内层查询;将外层的值代入内层进行查询,根据内层查询是否存在结果,判断外层的元组是否保留在结果集中。

【例】查询借阅了图书的读者的姓名

SELECT name FROM reader WHERE 
EXISTS ( SELECT * FROM borrow WHERE     
borrow.reader_id=reader.reader_id)

在这里插入图片描述
【例】查询被借出的图书的信息

SELECT * FROM Book WHERE EXISTS
(SELECT * FROM Borrow WHERE Borrow.book_ID=Book.book_ID)

表连接的语法格式

Select  ……  FROM  表1
JOIN  表2
    ON  <连接条件>

其中表1,表2是需要连接的两张表, JOIN 表示连接,inner表示内连接,outer表示外连接,缺省情况就是内连接。ON后面接<连接条件>。

【例】查询2020年1月20日借书的读者姓名和所借图书的编号

SELECT  Name, book_ID 
FROM Reader 
JOIN Borrow
ON Reader.reader_ID =Borrow.reader_ID
WHERE borrowdate= '2022-9-20'

表内连接的语法格式

Select…FROM  表1    
    JOIN  表2    
    ON  <连接条件>

连接条件的一般格式为:[<表名1.>][<列名1>] <比较运算符> [<表名2.>][<列名2>]

两个表的连接列必须是可比较的,即是语义相同的列,否则比较将是无意义的。

当比较运算符为等号(=)时,称为等值连接,使用其他运算符的连接称为非等值连接。

【例】查询王旭所借图书的书号和借阅时间

SELECT book_ID, borrowdate
FROM Reader 
JOIN Borrow 
ON Reader.Reader_id =Borrow.Reader_id
WHERE name='王旭'

【例】查询2020年6月7日借阅图书的读者姓名和所借图书名称

SELECT Reader.name, Book.name 
FROM Book 
JOIN Borrow 
ON Book.book_ID=Borrow.Book_ID
 JOIN Reader 
ON Reader.reader_ID=Borrow.reader_ID WHERE borrowdate='2020-6-7'

【例】查询每个读者所借的图书的信息,要求显示读者姓名,图书名称,借出日期

SELECT Reader.name AS 姓名,Book.name AS 图书名称,
    Borrow.Borrowdate AS 借出日期 FROM Reader 
JOIN Borrow 
ON Reader.Reader_id = Borrow.Reader_id  JOIN Book
ON Borrow.book_ID=Book.book_ID

注意:多表的同名列前面必须加表名前缀

即:表名.列名

给表起别名
在SQL语句中,可以类似为列取别名那样为表取别名,格式:<源表名> [ AS ] <表别名>

注意:当为表指定了别名时,在查询语句中的其他地方,所有用到表名的地方都要使用别名,不能再使用原表名。

【例】查询’王旭’所借图书的书名

SELECT B.name FROM Book B 
   JOIN Borrow W 
   ON B.book_ID=W.book_ID 
   JOIN Reader R 
   ON R.Reader_id=W.Reader_id 
   WHERE R.name='王旭'

内连接的特点:

满足连接条件的元组保留到连接的结果中,其中存在不满足连接条件的元组会被舍弃。

在这里插入图片描述
表X和Y内连接结果

SELECT  a, X.b, Y.b, c 
FROM X  
JOIN Y  
ON X.b=Y.b

在这里插入图片描述

表外连接

和内连接相对的就是外连接。
外连接的特点:满足连接条件的元组保留到连接的结果中,其中不满足连接条件的元组也会显示到连接结果中。
外连接分类:

左外连接

FROM 表1 LEFT [OUTER] JOIN 表2
    ON <连接条件>

【例】SELECT a, X.b, Y.b, c

 FROM  X 
 LEFT JOIN  Y 
 ON  X.b=Y.b

在这里插入图片描述

右外连接

FROM 表1 RIGHT [OUTER] JOIN 表2
    ON <连接条件>

【例】SELECT a, X.b, Y.b, c

FROM X
RIGHT JOIN Y  
ON X.b=Y.b

在这里插入图片描述

例:统计每个读者所借阅的图书的数量,要求显示读者姓名和借阅数量

SELECT name,COUNT(book_id)
FROM Reader 
left JOIN Borrow 
ON Reader.Reader_id =Borrow.Reader_id
group by  Reader.Reader_id ,name

例:统计,每本书被借阅的次数,要求显示书名和被借阅的次数

SELECT name,COUNT(reader_id)
FROM book
left JOIN Borrow 
ON book.book_id =Borrow. book_id
group by book.book_id ,name

视图与索引

数据库入门到精通 ——视图与索引

数据库设计

数据库入门到精通 ——数据库设计

数据库的备份与恢复

备份恢复概述

在数据库系统中,保证数据库可以由错误状态恢复到正确状态的机制,称为备份与恢复。

备份是指定期地对数据库中的数据进行拷贝(或称转储),形成冗余副本。.

恢复是指当数据库发生故障时,利用数据库备份形成的副本来恢复数据库,将数据库恢复到正确状态。

故障的种类

1. 事务内部故障
事务没有到达预期的终点

2. 系统故障
指系统停止运转而引发的故障, 如停电、CPU故障、操作系统崩溃等

3. 介质故障
硬盘上保存数据库中数据的磁道损坏

4. 计算机病毒

数据库备份

按照数据库备份规模的不同分类:
完全备份:
备份数据库中的全部信息,包括数据文件、日志文件、备份文件的存储位置信息以及数据库中的全部对象。

差异备份:
在前一次完全备份之后,对数据所做的修改进行备份,包括完全备份之后变化了的数据文件、日志文件以及数据库中其它被修改了的对象。

事务日志备份:
备份上次日志备份之后的日志记录。

文件和文件组备份:
对数据库中个别文件进行备份,通常用在超大型数据库中。

按照备份的状态分类:
联机备份是指在数据库正常使用的时候,还有用户连接到数据库的时候,对数据库进行备份 脱机备份是指数据库停下来,与所有用户都断开连接的时候,对数据库进行备份

数据库的恢复

根据数据库恢复的程度不同分类:
完全恢复:将数据库恢复到出现故障时刻的一致性状态。

不完全恢复:将数据库恢复到出现故障时刻之前的某个一致性状态。

日志文件

数据库的日志文件用来记录事务对数据库进行的更新操作(insert, update, delete),当数据库出现故障时,通过日志文件中的事务,可以完全恢复数据库。因此,又称为重做日志文件。

数据库操作的一个重要原则就是“先写日志文件,后写数据文件”。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多