MySQL-表的基本操作

一、创建数据表


创建数据表是指在已经创建好的数据库中建立新表。创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性约束的过程。创建表之前应先使用语句{use 数据库名} 进入到指定的数据库,再执行表操作。

创建表

语法:

CREATE TABLE <表名> (字段名1, 数据类型 [列级别约束条件] [默认值], 字段名2, 数据类型 [列级别约束条件] [默认值],...);

例:

创建bbs库并进入

mysql> create database bbs;
Query OK, 1 row affected (0.00 sec)
mysql> use bbs;
Database changed

创建test表,编号为int类型,姓名为varchar类型,部门为int类型,薪资为float类型。

int:整数 4个字节

varchar:可变字符串 0~65535

float:浮点数 4个字节

mysql> create table test(
    -> id int,
    -> name varchar(20),
    -> deptid int,
    -> salary float);
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+---------------+
| Tables_in_bbs |
+---------------+
| test          |
+---------------+
1 row in set (0.00 sec)

插入两行数据,下面有两种插入方式,第二种更加精确。但是如果未定义列值将出现null。

mysql> insert into test values(1,'zs',10,3000);
Query OK, 1 row affected (0.05 sec)
​
mysql> insert into test (id,name,deptid) values (2,'ls',20);
Query OK, 1 row affected (0.00 sec)
​
mysql> select * from test;
+------+------+--------+--------+
| id   | name | deptid | salary |
+------+------+--------+--------+
|    1 | zs   |     10 |   3000 |
|    2 | ls   |     20 |   NULL |
+------+------+--------+--------+
2 rows in set (0.00 sec)

主键约束

主键约束要求:主键列的数据唯一,并且不允许为空。

(1)单字段主键

语法:

字段名 数据类型 PRIMARY KEY [默认值]

例:

创建file1表,定义id为主键。

mysql> create table file1(
    -> id int primary key,
    -> name varchar(20),
    -> deptid int,
    -> salary float);
Query OK, 0 rows affected (0.01 sec)

插入两行数据,主键id都为1,插入第二条数据时报错,表明id已存在不可重复。

mysql> insert into file1 values(1,'zs',10,3000);
Query OK, 1 row affected (0.01 sec)
​
mysql> insert into file1 values(1,'ls',20,3000);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

(2)在定义完所有列后指定主键

语法:

[CONSTRAINT <约束名>] PRIMARY KEY [字段名]

创建file2表,末尾定义主键。

mysql> create table file2(
    -> id int,
    -> name varchar(20),
    -> deptid int,
    -> salary float,
    -> PRIMARY KEY(id));
Query OK, 0 rows affected (0.01 sec)

插入两行数据,主键id都为1,插入第二条数据时报错,表明id已存在不可重复。

mysql> insert into file2 values(1,'zs',10,3000);
Query OK, 1 row affected (0.00 sec)

mysql> insert into file2 values(1,'ls',20,3000);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

(3)多字段联合主键

语法:

PRIMARY KEY [字段1,字段2,....]

创建file3表,末尾定义多主键。

mysql> create table file3(
    -> name varchar(20),
    -> deptid int,
    -> salary float,
    -> PRIMARY KEY(name,deptid));
Query OK, 0 rows affected (0.01 sec)

插入多行数据,主键为name和deptid,表示可以有多个“zs”或多个“10”,但是不能有两个姓名为“zs”并且部门为“10”。

mysql> insert into file3 values('zs',10,3000),('ls',20,4000),('ww',30,5000);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into file3 values('zs',40,6000);
Query OK, 1 row affected (0.00 sec)

mysql> insert into file3 values('ls',10,6000);
Query OK, 1 row affected (0.00 sec)

mysql> insert into file3 values('zs',10,6000);
ERROR 1062 (23000): Duplicate entry 'zs-10' for key 'PRIMARY'

外键约束

外键用来在两个表数据之间建立连接,它可以是一列或者多列。

语法:

[CONSTRAINT<外键名>] FOREIGN KEY [字段名1,字段名2...] REFERENCES<主表名> 主键列1[主键列2...]

创建两个表,外键名为dep_id,字段名为deptid,外键定义为dept1表中的id列。

mysql> create table dept1(
    -> id int PRIMARY KEY,
    -> name varchar(20) not null,
    -> location varchar(50));
Query OK, 0 rows affected (0.05 sec)

mysql> create table emp1(
    -> id int PRIMARY KEY,
    -> name varchar(20),
    -> deptid int,
    -> salary float,
    -> CONSTRAINT dep_id FOREIGN KEY(deptid) REFERENCES dept1(id));
Query OK, 0 rows affected (0.02 sec)

dept1表创建三行数据

mysql> insert into dept1 values(1,'zs','bj'),(2,'ls','hd'),(3,'ww','tz');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

emp1表第一条数据创建正常,第二条创建失败(因为在dept1表中的id列没有“4”,所以emp1表deptid列创建不了。通俗点讲dept1表中的id列没有的数据,emp1表的deptid列就创建不了)。第三条创建成功。

mysql> insert into emp1 values(1,'zs',1,3000);
Query OK, 1 row affected (0.00 sec)

mysql> insert into emp1 values(2,'ls',4,3000);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`bbs`.`emp1`, CONSTRAINT `dep_id` FOREIGN KEY (`deptid`) REFERENCES `dept1` (`id`))
mysql> insert into emp1 values(2,'ls',3,3000);
Query OK, 1 row affected (0.00 sec)

非空约束

非空约束指字段的值不能为空。

语法:

字段名 数据类型 not null

例1:

创建test1表,姓名列不能为空。

mysql> create table test1(
    -> id int PRIMARY KEY,
    -> name varchar(20) NOT NULL,
    -> deptid int,
    -> salary float);
Query OK, 0 rows affected (0.02 sec)

插入数据,第一条全部插入成功,第二条除了name列全部插入,结果反馈"name"列报错。

mysql> insert into test1 values(1,'zs',10,3000);
Query OK, 1 row affected (0.01 sec)

mysql> insert into test1(id,deptid,salary) values(1,10,3000);
ERROR 1364 (HY000): Field 'name' doesn't have a default value

唯一约束

使用unique来指定列,表明为该列的唯一性,不可具有重复性。

语法:

[CONSTRATIN <约束名>] UNIQUE (<字段名>)

创建test2表,unique指定name列。

mysql> create table test2(
    -> id int PRIMARY KEY,
    -> name varchar(20),
    -> location varchar(50),
    -> CONSTRAINT STH UNIQUE(name));
Query OK, 0 rows affected (0.01 sec)

指定name列后,该列姓名不可具有同名。

mysql> insert into test2 values(1,'zs','bj');
Query OK, 1 row affected (0.00 sec)

mysql> insert into test2 values(2,'zs','hd');
ERROR 1062 (23000): Duplicate entry 'zs' for key 'sth'

默认约束

默认约束指定某列的默认值。

语法:

字段名 数据类型 DEFAULT 默认值

例:

创建test3表,指定deptid列默认为666。

mysql> create table test3(
    -> id int PRIMARY KEY,
    -> name varchar(20) NOT NULL,
    -> deptid int DEFAULT 666,
    -> salary float,
    -> info varchar(50));
Query OK, 0 rows affected (0.02 sec)

插入两行数据,除了deptid列,其他列都写入数据。而后查看test3表,deptid列默认的值都为666(默认状态为NULL)。

mysql> insert into test3(id,name,salary,info) values(1,'zs',3000,'bjcp');
Query OK, 1 row affected (0.00 sec)

mysql> insert into test3(id,name,salary,info) values(2,'ls',3000,'bjcp');
Query OK, 1 row affected (0.00 sec)

mysql> select * from test3;
+----+------+--------+--------+------+
| id | name | deptid | salary | info |
+----+------+--------+--------+------+
|  1 | zs   |    666 |   3000 | bjcp |
|  2 | ls   |    666 |   3000 | bjcp |
+----+------+--------+--------+------+
2 rows in set (0.00 sec)

属性值自动增加

试想一下,id或与之类似的列,每次插入数据该列都需要输入。其值本身就需要递增,而如果自动添加将会省事很多,下面语句将解决这一问题。

语法:

字段名 数据类型 AUTO_INCREMENT

例:

创建test4表,指定id为主键、属性值自动增加。

mysql> create table test4(
    -> id int PRIMARY KEY AUTO_INCREMENT,
    -> name varchar(20) not null,
    -> deptid int,
    -> salary float);
Query OK, 0 rows affected (0.01 sec)

插入三行数据,指定插入name、salary。

mysql> insert into test4(name,salary) values('zs',1000),('ls',2000),('ww',3000);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

查看id列自动添加值。

mysql> select * from test4;
+----+------+--------+--------+
| id | name | deptid | salary |
+----+------+--------+--------+
|  1 | zs   |   NULL |   1000 |
|  2 | ls   |   NULL |   2000 |
|  3 | ww   |   NULL |   3000 |
+----+------+--------+--------+
3 rows in set (0.00 sec)

二、查看表结构


查看基本结构

语法:

DESCRIBE 表名; 或 DESC 表名;

例:

查看test1表结构。

mysql> describe test1;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   | PRI | NULL    |       |
| name   | varchar(20) | NO   |     | NULL    |       |
| deptid | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.02 sec)

或desc,两者查看的结果相同。

mysql> desc test1;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   | PRI | NULL    |       |
| name   | varchar(20) | NO   |     | NULL    |       |
| deptid | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

查看详细结构

语法:

SHOW CREATE TABLE <表名>;

例:

查看test1表的详细结构信息。

mysql> show create table test1;
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                               |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| test1 | CREATE TABLE `test1` (
  `id` int(11) NOT NULL,
  `name` varchar(20) NOT NULL,
  `deptid` int(11) DEFAULT NULL,
  `salary` float DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.04 sec)

三、修改数据表


修改表名

语法:

ALTER TABLE <旧表名> RENAME [TO] <新表名>;

例:

查看所有表,修改test1表改名为file1。

mysql> show tables;
+---------------+
| Tables_in_bbs |
+---------------+
| test1         |
+---------------+
1 row in set (0.01 sec)

mysql> alter table test1 rename file1;
Query OK, 0 rows affected (0.03 sec)

mysql> show tables;
+---------------+
| Tables_in_bbs |
+---------------+
| file1         |
+---------------+
1 row in set (0.00 sec)

修改字段数据类型

语法:

ALTER TABLE <表名> MODIFY <字段名> <数据类型>

例:

查看file1表结构,修改name列数据类型为varchar(50)。

mysql> desc file1;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   | PRI | NULL    |       |
| name   | varchar(20) | NO   |     | NULL    |       |
| deptid | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.09 sec)

mysql> alter table file1 modify name varchar(50);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc file1;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   | PRI | NULL    |       |
| name   | varchar(50) | YES  |     | NULL    |       |
| deptid | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

修改字段名

语法:

ALTER TABLE <表名> CHANGE<旧字段名><新字段名> <新数据类型>

例:

修改file1表name列名为new_name,数据类型为varchar(20);

mysql> alter table file1 change name new_name varchar(20);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc file1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| new_name | varchar(20) | YES  |     | NULL    |       |
| deptid   | int(11)     | YES  |     | NULL    |       |
| salary   | float       | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

添加字段

语法:

ALTER TABLE <表名> ADD <新字段名><数据类型> [约束条件] [FIRST|AFTER 已存在字段名]

例:

在file1表末尾添加location列。

mysql> desc file1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| new_name | varchar(20) | YES  |     | NULL    |       |
| deptid   | int(11)     | YES  |     | NULL    |       |
| salary   | float       | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> alter table file1 add location varchar(50);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc file1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| new_name | varchar(20) | YES  |     | NULL    |       |
| deptid   | int(11)     | YES  |     | NULL    |       |
| salary   | float       | YES  |     | NULL    |       |
| location | varchar(50) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

在file1表首行添加mail列。

mysql> alter table file1 add mail float first;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc file1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| mail     | float       | YES  |     | NULL    |       |
| id       | int(11)     | NO   | PRI | NULL    |       |
| new_name | varchar(20) | YES  |     | NULL    |       |
| deptid   | int(11)     | YES  |     | NULL    |       |
| salary   | float       | YES  |     | NULL    |       |
| location | varchar(50) | YES  |     | NULL    |       |
| email    | float       | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

删除字段

语法:

ALTER TABLE <表名> DROP <字段名>

例:

mysql> alter table file1 drop mail;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc file1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| new_name | varchar(20) | YES  |     | NULL    |       |
| deptid   | int(11)     | YES  |     | NULL    |       |
| salary   | float       | YES  |     | NULL    |       |
| location | varchar(50) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

修改排列位置

语法:

ALTER TABLE <表名> MODIFY <字段名> <数据类型> FIRST | AFTER <字段2>

例:

修改location列到首行。

mysql> alter table file1 modify location varchar(50) first;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc file1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| location | varchar(50) | YES  |     | NULL    |       |
| id       | int(11)     | NO   | PRI | NULL    |       |
| new_name | varchar(20) | YES  |     | NULL    |       |
| deptid   | int(11)     | YES  |     | NULL    |       |
| salary   | float       | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

修改location列到new_name列下。

mysql> alter table file1 modify location varchar(20) after new_name;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc file1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| new_name | varchar(20) | YES  |     | NULL    |       |
| location | varchar(20) | YES  |     | NULL    |       |
| deptid   | int(11)     | YES  |     | NULL    |       |
| salary   | float       | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

修改存储引擎

语法:

ALTER TABLE <表名> ENGINE=<更改后的存储引擎>

例:

查看表结构,引擎为ENGINE=InnoDB,修改表引擎后为ENGINE=MyISAM。

mysql> show create table file1;
#省略部分内容
| file1 | CREATE TABLE `file1` (
  `id` int(11) NOT NULL,
  `new_name` varchar(20) DEFAULT NULL,
  `location` varchar(20) DEFAULT NULL,
  `deptid` int(11) DEFAULT NULL,
  `salary` float DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
#省略部分内容
1 row in set (0.01 sec)
mysql> alter table file1 engine=myisam;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table file1;
#省略部分内容
| file1 | CREATE TABLE `file1` (
  `id` int(11) NOT NULL,
  `new_name` varchar(20) DEFAULT NULL,
  `location` varchar(20) DEFAULT NULL,
  `deptid` int(11) DEFAULT NULL,
  `salary` float DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
#省略部分内容
1 row in set (0.01 sec)
###如无其他需求则改回innodb,才可以进行下面的操作
mysql> alter table file1 engine innodb;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

删除表外键约束

语法:

ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>

例:

没有外键需要先创建,如果修改过储存引擎需要修改回”innodb“才可以创建外键。查看file2表结构,表明file2表中的deptid列外键约束于file1表中的id列;删除操作后,查看到没有外键约束了。

mysql> create table file2(
    -> id int primary key,
    -> name varchar(20),
    -> deptid int,
    -> constraint file_key foreign key (deptid) references file1(id));
Query OK, 0 rows affected (0.01 sec)
mysql> show create table file2;
#省略部分内容
| file2 | CREATE TABLE `file2` (
  `id` int(11) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  `deptid` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `file_key` (`deptid`),
  CONSTRAINT `file_key` FOREIGN KEY (`deptid`) REFERENCES `file1` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
#省略部分内容
1 row in set (0.02 sec)
mysql> alter table file2 drop foreign key file_key;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table file2;
#省略部分内容
| file2 | CREATE TABLE `file2` (
  `id` int(11) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  `deptid` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `file_key` (`deptid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
#省略部分内容
1 row in set (0.00 sec)

删除唯一约束

alter table 表名 drop index 约束名称;

drop index 约束名称 on 表名;

四、删除数据表


删除没有被关联的表

语法:

DROP TABLE [IF EXISTS]表1,表2...

例:

参考上面命令创建test1表、test2表,查看所有表并删除test1表、test2表。

mysql> show tables;
+---------------+
| Tables_in_bbs |
+---------------+
| file1         |
| file2         |
| test1         |
| test2         |
+---------------+
4 rows in set (0.00 sec)
mysql> drop table if exists test1,test2;
Query OK, 0 rows affected (0.02 sec)

mysql> show tables;
+---------------+
| Tables_in_bbs |
+---------------+
| file1         |
| file2         |
+---------------+
2 rows in set (0.01 sec)

删除被关联的主表

还是创建两个test表,test2表的deptid列指定test1表的id列。

mysql> create table test1(
    -> id int primary key,
    -> name varchar(20),
    -> location varchar(50));
Query OK, 0 rows affected (0.01 sec)

mysql> create table test2(
    -> id int primary key,
    -> name varchar(20),
    -> deptid int,
    -> salary float,
    -> constraint test_key foreign key(deptid) references test1(id));
Query OK, 0 rows affected (0.01 sec)

这时候删除主表test1发现删除失败。

mysql> drop table test1;
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

此时需要先解除子表test2的约束,然后删除主表test1就可以删除了。

mysql> alter table test2 drop foreign key test_key;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> drop table test1;
Query OK, 0 rows affected (0.00 sec)

总结


#创建表

create table 表名(字段名1 字段类型1 [约束条件1],字段名2 字段类型2 [约束条件2]);

约束条件

主键约束

PRIMARY KEY

外键约束

CONSTRAINT [外键名] FOREIGN KEY [字段名] REFERENCES [主表名] 主键列1

非空约束

NOT NULL

唯一约束

[CONSTRATIN <约束名>] UNIQUE (<字段名>)

默认约束

DEFAULT 默认值

自动增加值

AUTO_INCREMENT

#表结构

查看表结构

基本结构

DESCRIBE 表名;

基本结构

DESC 表名;

详细结构

SHOW CREATE TABLE 表名;

#修改表

ALTER TABLE <旧表名> RENAME [TO] <新表名>;

修改数据表

修改表名

RENAME [TO]

修改字段数据类型

MODIFY

修改字段名

CHANGE

添加字段

ADD [FIRST|AFTER 已存在字段名]

删除字段

DROP

修改排列位置

MODIFY

修改存储引擎

ENGINE

删除表外键约束

DROP FOREIGN KEY

猜你喜欢

转载自blog.csdn.net/qq_61116007/article/details/128984869