MySQL数据库:表操作

文章目录

  • MySQL表操作入门:玩转你的数据库Excel,小白也能看懂
    • [📖 前言](#📖 前言)
    • [一、创建表 CREATE TABLE:绘制你的表头](#一、创建表 CREATE TABLE:绘制你的表头)
    • [二、查看表结构 DESC:看看表头长啥样](#二、查看表结构 DESC:看看表头长啥样)
      • [2.1 基础语法](#2.1 基础语法)
      • [2.2 输出字段说明](#2.2 输出字段说明)
      • [2.3 ✨ 拓展查看技巧](#2.3 ✨ 拓展查看技巧)
    • [三、修改表 ALTER TABLE ------ 线上大表千万谨慎!](#三、修改表 ALTER TABLE —— 线上大表千万谨慎!)
      • [3.1 ADD:新增字段(新增一列)](#3.1 ADD:新增字段(新增一列))
      • [3.2 MODIFY:修改字段属性,不能修改列名](#3.2 MODIFY:修改字段属性,不能修改列名)
      • [3.3 DROP:删除字段(极度高危)](#3.3 DROP:删除字段(极度高危))
      • [3.4 RENAME:修改整张表名字](#3.4 RENAME:修改整张表名字)
      • [3.5 CHANGE:改列名+修改字段属性(功能最强)](#3.5 CHANGE:改列名+修改字段属性(功能最强))
      • [3.6 修改表级属性(字符集、存储引擎)](#3.6 修改表级属性(字符集、存储引擎))
      • [3.7 ALTER写法速查表(新手必背,区分讲义伪语法和真实MySQL语法)](#3.7 ALTER写法速查表(新手必背,区分讲义伪语法和真实MySQL语法))
      • [3.8 MODIFY vs CHANGE 核心对比](#3.8 MODIFY vs CHANGE 核心对比)
    • 四、删除相关操作(行、全表、清空)
      • [4.1 delete:删除某一行 / 部分行(DML)](#4.1 delete:删除某一行 / 部分行(DML))
      • [4.2 truncate:清空整张表,保留表结构(DDL)](#4.2 truncate:清空整张表,保留表结构(DDL))
      • [4.3 DROP TABLE:一键删除整张表](#4.3 DROP TABLE:一键删除整张表)
      • [4.4 ⚠️ 三个易混删除命令对比(面试常考)](#4.4 ⚠️ 三个易混删除命令对比(面试常考))
    • 五、复制表:快速备份/复刻表
      • [5.1 LIKE:只复制表结构,不复制数据](#5.1 LIKE:只复制表结构,不复制数据)
      • [5.2 CREATE ... SELECT:复制结构 + 数据](#5.2 CREATE ... SELECT:复制结构 + 数据)
      • [5.3 组合:复制结构+全部数据+约束](#5.3 组合:复制结构+全部数据+约束)
    • [六、🧰 初学者常见报错速查表](#六、🧰 初学者常见报错速查表)
    • [🧠 初学者高频踩坑总结](#🧠 初学者高频踩坑总结)
    • [✍️ 手敲实操测试(完整练习脚本,复制执行)](#✍️ 手敲实操测试(完整练习脚本,复制执行))
    • [🎯 结尾](#🎯 结尾)
      • [💡 拓展思考(面试可以思考)](#💡 拓展思考(面试可以思考))
      • [📚 补充阅读知识点(拓展)](#📚 补充阅读知识点(拓展))

MySQL表操作入门:玩转你的数据库Excel,小白也能看懂

📝 摘要:数据库就像超级加强版Excel。数据库=Excel工作簿,数据表=工作表 。本文手把手带你吃透建表、查表、改表、删表、复制表,搞懂存储引擎、磁盘文件、字段约束、容易混淆的ALTER语法。新增「手敲实操测试」「常见报错速查表」,把真实踩坑经验写进文章,适合MySQL零基础小伙伴阅读。

⚠️ 重要提醒:MySQL没有Ctrl+Z撤销!DDL操作(建表改表删表)一旦执行,手滑就可能数据跑路,测试环境随便造,线上务必谨慎!

环境说明:核心语法兼容MySQL 5.7 / 8.0;版本差异处会专门标注。

📖 前言

刚学数据库的小伙伴,经常分不清数据库和表。记住这个生活化比喻:

  • Database(数据库):整个Excel文件(工作簿),里面可以放很多张表
  • Table(数据表):Excel里面的某一张工作表,真正用来存业务数据

我们建好数据库之后,重头戏就是操作表。写SQL操作表,等价于Excel新增工作表、修改表头、删除某一列。

但Excel错了可以按Ctrl+Z回退;MySQL的表结构操作大多属于DDL,敲完回车直接生效,没有系统回收站,敲命令前脑子先过一遍!

💡 实操小提示:MySQL命令行常见提示符

提示符 含义 处理方式
mysql> 命令就绪,可以输入SQL 正常编写执行
-> 语句未写完,等待继续输入 输入 \c 回车,取消当前语句重写
'> 单引号没有闭合 \c 取消,检查引号配对

一、创建表 CREATE TABLE:绘制你的表头

1.1 基础语法

建表语句有两种完全等价的书写形式:讲义课件常用「空格分隔版」,工具自动导出SQL常用「等号简写版」。

sql 复制代码
-- 形式1:空格分隔版(教材/讲义原版)
CREATE TABLE 表名 (
    字段名1 数据类型 [约束] [comment '注释'],
    字段名2 数据类型 [约束] [comment '注释']
) character set 字符集 collate 校验规则 engine 存储引擎;

-- 形式2:等号简写版(工具导出/项目常用)
CREATE TABLE 表名 (
    字段名1 数据类型 [约束] [comment '注释'],
    字段名2 数据类型 [约束] [comment '注释']
) charset=字符集 collate=校验规则 engine=存储引擎;

1.2 核心参数大白话拆解

参数 通俗解释
field(字段名) Excel表头,列的名字
datatype(数据类型) 规定该列存什么:int存数字,varchar存字符串,date存日期
character set / charset 字符编码,不指定就继承数据库的字符集;优先使用utf8mb4,MySQL的utf8是残缺版本,存不了emoji表情与部分生僻字
collate 校验规则 控制字符串排序、比较逻辑,一般不需要手动修改
engine 存储引擎 决定数据怎么在硬盘存储;MySQL 5.5+默认InnoDB
comment 字段注释,写注释是救命好习惯,半年后看自己写的SQL不至于一脸懵

💡 关键说明:

  • character set 是完整关键字,后面直接跟字符集名,不能加等号 ;想用等号写法必须用它的别名 charset。
  • collate 和 engine 两种写法都支持,空格和等号效果完全一致。
  • ❌ 错误写法:character set=utf8(语法直接报错)
  • ✅ 正确写法:charset=utf8 或 character set utf8

1.3 新手必知:常见数据类型选型

不用记全所有类型,掌握这几个覆盖90%场景:

类型 用途 注意事项
int 整数,存年龄、编号、数量 普通业务int足够,范围-21亿~21亿
bigint 大整数,存主键ID、雪花算法ID 数据量极大的表用
varchar(n) 可变长度字符串,存姓名、地址、简介 n是最大字符数,省空间,最常用
char(n) 固定长度字符串,存密码、MD5、UUID 长度固定,性能略高;不足长度补空格
date 日期,存生日、入职日期 格式YYYY-MM-DD
datetime 日期+时间,存创建时间、下单时间 格式YYYY-MM-DD HH:MM:SS
tinyint 小整数,存状态、性别 范围0~255,省空间

📌 char vs varchar 怎么选?

  • 长度确定用char:比如MD5密码固定32位,用char(32)
  • 长度不确定用varchar:比如用户名、地址,用varchar(n)
  • 同样长度,char性能略好,varchar更省空间

1.4 字段约束(建表核心,新手必学)

约束就是给字段定规矩,不符合规矩的数据插不进去。

约束关键字 作用
NOT NULL 非空,该字段必须填,不能为NULL
DEFAULT 值 默认值,不填就自动用默认值填充
PRIMARY KEY 主键,唯一标识一行;一张表只能一个主键,自动非空+唯一
AUTO_INCREMENT 自增,配合主键用,插入数据自动+1,不用手动填ID
UNIQUE 唯一约束,该列值不能重复
标准建表案例(带约束,接近真实开发)
sql 复制代码
create table users (
    id int primary key auto_increment comment '主键ID',
    name varchar(20) not null comment '用户名',
    password char(32) not null comment '32位MD5密码',
    age tinyint default 18 comment '年龄,默认18',
    birthday date comment '生日'
) charset=utf8mb4 engine=InnoDB;

主键+自增是业务表标配:id不用手动传,插入自动从1开始递增。

1.5 🔍 存储引擎对应的磁盘文件(面试高频考点)

MySQL的表不是虚拟的,实实在在保存在磁盘的data目录下,不同存储引擎生成的文件完全不一样。

MyISAM引擎(老版本遗留,新项目不推荐)

一张表会生成3个独立文件:

  • users.frm:保存表结构(表头),5.7所有引擎都会生成这个文件
  • users.MYD:MY Data,存放真实表数据
  • users.MYI:MY Index,存放索引

特点:数据、索引、表结构分开存放;不支持事务、只支持表锁;数据库异常崩溃有概率发生表损坏,现在业务很少使用。

InnoDB引擎(生产环境默认首选)
  • xxx.frm:表结构元数据文件,MySQL 8.0彻底取消frm文件,元数据存入内置数据字典,磁盘上再也看不到frm文件
  • xxx.ibd:一个文件包揽全部!表数据+索引全部放在这个文件

特点:支持事务ACID、行级锁、崩溃恢复、外键约束,是现在业务开发首选引擎。

🧪 小实验:分别创建MyISAM和InnoDB两张表,打开MySQL的data文件夹,对比文件数量,直观感受两者差异。

1.6 建表命名规范(好习惯从入门开始)

  1. 用小写字母+下划线,不要大写、不要中文、不要空格
  2. 表名见名知意:用户表user/users,订单表order/orders
  3. 避免用MySQL关键字做表名/字段名,比如name、order、condition,容易报错
  4. 主键统一叫id,字段名统一风格,比如create_time、update_time

二、查看表结构 DESC:看看表头长啥样

建完表,不要跑到磁盘扒frm文件,一条命令查看表字段、类型、约束。

2.1 基础语法

sql 复制代码
desc 表名;
-- 完整写法
describe 表名;

2.2 输出字段说明

执行desc users;输出各列含义:

列名 含义
Field 字段名
Type 字段数据类型
Null 是否允许为空(YES/NO)
Key 索引标记:PRI=主键,UNI=唯一索引,MUL=普通索引
Default 字段默认值
Extra 额外属性,如auto_increment自增

2.3 ✨ 拓展查看技巧

普通desc看不到完整字段注释;想看注释、字符集、引擎用这两条:

sql 复制代码
-- 查看完整字段信息,含注释
show full columns from users;

-- 查看完整建表语句,字符集、引擎、约束一目了然
show create table users;

📌 易混命令区分:

  • show tables;:查看当前库下所有表名字
  • desc 表名;:查看某一张表内部字段结构
    千万不要搞混!

三、修改表 ALTER TABLE ------ 线上大表千万谨慎!

需求永远会变:建表没考虑周全,需要加列、改字段长度、改列名、删除列、改字符集,全部靠ALTER TABLE。

⚠️ 高危警告:MySQL 5.7原生ALTER大表会锁表,整个表读写被阻塞;生产环境尽量业务低峰期执行,大表优先使用在线DDL工具,不要随便操作!

先插入两条测试数据,观察修改前后数据变化:

sql 复制代码
insert into users(name, password, age, birthday) values
('张三','e10adc3949ba59abbe56e057f20f883e',20,'2004-05-10'),
('李四','e10adc3949ba59abbe56e057f20f883e',21,'2003-09-15');

3.1 ADD:新增字段(新增一列)

单字段写法(最常用,可指定位置)

需求 :users表增加手机号tel,放在name字段的后面。

sql 复制代码
alter table users add tel char(11) comment '手机号' after name;
  • after name:指定新字段放在哪个列后面;写first代表放到表的最开头;省略则默认放在表末尾。
  • ✨ 效果:原有数据完全保留 ,老数据新增字段自动填充NULL(如果有default则填充默认值)。
批量新增写法(括号形式,讲义课件版)

一次性新增多个字段,用括号包裹,逗号分隔。

sql 复制代码
alter table users add (
    email varchar(50) comment '邮箱',
    address varchar(100) comment '家庭住址'
);

🚨 批量ADD大坑:

一旦使用括号批量新增,不能写after/first指定字段位置,所有新字段只能追加到表的末尾。需要控制列顺序,必须去掉括号单条写。

3.2 MODIFY:修改字段属性,不能修改列名

⚠️ 重要踩坑:讲义教材写的 MODIFY(字段1,字段2) 是伪语法,MySQL实际不支持括号批量MODIFY!会报1064语法错误!

单字段写法

需求:将name字段从varchar(20)扩容到varchar(50),列名保持不变。

sql 复制代码
alter table users modify name varchar(50) not null;
批量修改正确写法(不要括号,逗号分隔多条modify)
sql 复制代码
alter table users
modify email varchar(80) comment '企业邮箱',
modify address varchar(200);

划重点:

  1. MODIFY只能改类型、长度、是否为空、默认值,不能修改列的名字;
  2. MODIFY如果漏写了原有的约束(比如not null、comment),执行后会丢失,建议完整重写。

3.3 DROP:删除字段(极度高危)

需求:删除password密码这一列

sql 复制代码
alter table users drop password;

🚨 血泪提醒1:执行DROP字段,该列全部数据直接永久消失,MySQL没有回收站。测试环境随便玩,线上操作前务必备份!

🚨 血泪提醒2:DROP不支持括号批量删除多列!删除多列必须分开写多个DROP:

sql 复制代码
-- 错误写法
alter table users drop (password, tel);
-- 正确写法
alter table users drop password, drop tel;

3.4 RENAME:修改整张表名字

将users表重命名为employee;to关键字可以省略。

sql 复制代码
alter table users rename to employee;
-- 简写,效果完全一致
alter table users rename employee;

注意:RENAME没有批量括号写法,一次只能改一张表名。

3.5 CHANGE:改列名+修改字段属性(功能最强)

需求:把employee表的name列,改名为username,字段类型varchar(50)不变。

sql 复制代码
alter table employee change name username varchar(50) not null;

⚡ 超级大坑:CHANGE命令,哪怕字段类型不变,也必须完整写一遍字段定义 ,否则直接报语法错误!

注意:CHANGE也没有批量括号写法,一次只能改一列。
💡 小补充:MySQL 8.0新增RENAME COLUMN语法,专门只改列名不用重写类型,更方便:

sql 复制代码
alter table employee rename column name to username;

3.6 修改表级属性(字符集、存储引擎)

不止字段能改,整张表的字符集、引擎也能改:

sql 复制代码
-- 修改表字符集为utf8mb4
alter table employee convert to charset utf8mb4;

-- 修改存储引擎为InnoDB
alter table employee engine=InnoDB;

3.7 ALTER写法速查表(新手必背,区分讲义伪语法和真实MySQL语法)

命令 单字段写法 是否支持括号批量(MySQL真实) 能不能改列名 能不能指定位置
ADD新增字段 ✅ ✅ ❌ 单字段支持,批量不支持
MODIFY修改属性 ✅ ❌ ❌ ❌
CHANGE改列名+属性 ✅ ❌ ✅ ❌
DROP删除字段 ✅ ❌ ❌ -
RENAME改表名 ✅ ❌ 改表名 -

考试做题可以记忆讲义模板;实操敲代码,MODIFY、DROP、CHANGE不要加括号。

3.8 MODIFY vs CHANGE 核心对比

命令 能不能改列名 典型使用场景
MODIFY ❌ 只改字段类型、长度、约束,列名不动
CHANGE ✅ 需要修改列名,或者同时改名+改属性

四、删除相关操作(行、全表、清空)

4.1 delete:删除某一行 / 部分行(DML)

只删除行数据,表结构保留,可以加where条件,事务内可以回滚。

sql 复制代码
-- 删除id=1单独一行
delete from users where id = 1;

⚠️ 千万不能省略where,否则删除表里全部数据!

4.2 truncate:清空整张表,保留表结构(DDL)

sql 复制代码
truncate table users;

特点:速度极快,重置自增主键;不能加where,无法回滚。

4.3 DROP TABLE:一键删除整张表

sql 复制代码
drop table if exists users;
  • IF EXISTS容错:表不存在也不会报错,只会警告,写自动化脚本强烈建议带上。

4.4 ⚠️ 三个易混删除命令对比(面试常考)

命令 类型 作用 能不能加where 可以回滚
drop table 表名 DDL 整张表直接干掉,结构+数据+索引全部删除 ❌ ❌
delete from 表名 DML 删除行数据,保留表结构 ✅ ✅(事务内)
truncate table 表名 DDL 清空全部行,保留表结构,重置自增 ❌ ❌

口诀:删表用drop;删部分数据用delete+where;清空全表保留表头可以用truncate。

五、复制表:快速备份/复刻表

新手经常需要复制表做测试,这两条命令超实用:

5.1 LIKE:只复制表结构,不复制数据

sql 复制代码
create table user_bak like users;

完美复制表结构、主键、索引、约束;表里没有数据。

5.2 CREATE ... SELECT:复制结构 + 数据

sql 复制代码
create table user_bak2 select * from users;

数据和字段都复制过来;缺点:主键、索引、约束不会复制,只复制字段和数据。

5.3 组合:复制结构+全部数据+约束

sql 复制代码
-- 先复制结构
create table user_bak like users;
-- 再插入全部数据
insert into user_bak select * from users;

六、🧰 初学者常见报错速查表

错误码 典型报错 原因 解决办法
1146 Table 'shturl.' doesn't exist 表名拼写错误 / 没切换到正确的数据库 执行select database();确认库;show tables;复制真实表名
1064 You have an error in your SQL syntax 语法错误:括号、引号、分号、关键字拼写 检查符号是否英文半角;MODIFY不要套括号;检查逗号
1054 Unknown column 'xxx' in 'field list' 字段名写错 / 表中没有这个字段 desc 表名;查看真实字段名
1366 Incorrect string value 字符集不支持中文/emoji 表/字段字符集改成utf8mb4
1067 Invalid default value 默认值和字段类型不匹配 检查default后面的值类型
- 提示符变成-> 语句没写完 / 引号没闭合 输入\c回车取消,重写语句

🧠 初学者高频踩坑总结

  1. SQL末尾分号不要丢! 不写分号MySQL认为语句没有结束,卡在->等待输入。
  2. character set 是完整关键字,后面不能加等号;想用等号必须写别名charset。
  3. 使用CHANGE改名,千万不要漏写完整字段类型,否则直接语法报错。
  4. 批量ADD(...)带括号语法,不能写after/first指定字段位置,新字段只能追加到表末尾。
  5. ❗重点:MODIFY、DROP、CHANGE不支持括号批量语法,讲义模板不等于可运行代码。
  6. DROP不支持括号批量删多列,删除多列必须写多个DROP 列名用逗号分隔。
  7. delete删除行切记不要漏写where条件,否则清空全表。
  8. 删除字段、删除表三思而后行,MySQL没有回收站,数据删了很难救。
  9. 字符集大坑:拒绝直接用utf8,优先使用utf8mb4,支持emoji、生僻字。
  10. MyISAM已经逐步淘汰,新项目一律默认InnoDB,支持事务、崩溃恢复。
  11. MySQL 8.0已经没有frm文件,表元数据存入内部数据字典。
  12. 大表执行ALTER TABLE避开业务高峰,锁表会导致业务卡死。
  13. MODIFY修改字段属性时,原有的not null、comment、default最好一起重写,否则会丢失。

✍️ 手敲实操测试(完整练习脚本,复制执行)

实操目标:完整走一遍建表→查看→新增字段→修改字段→改列名→删字段→改表名→删除行→复制表→清空表→删除表,巩固全部知识点。

先切换到你的测试数据库,例如 use test1;,一条一条执行,每执行完建议执行desc student;观察表变化。

sql 复制代码
-- 1. 创建练习表 student(带主键、自增、非空、默认值)
create table student (
    id int primary key auto_increment comment '主键ID',
    stu_name varchar(30) not null comment '学生姓名',
    age tinyint default 18 comment '年龄',
    birthday date comment '出生日期'
) charset=utf8mb4 engine=InnoDB;

-- 查看表结构、建表语句
desc student;
show create table student;

-- 2. 插入两行测试数据(主键自增,不用传id)
insert into student(stu_name, age, birthday) values
('张三', 19, '2007-05-10'),
('李四', 20, '2006-09-15');

select * from student;

-- 3. 单字段新增,指定位置:tel放在stu_name后面
alter table student add tel char(11) comment '手机号' after stu_name;
desc student;

-- 4. ADD括号批量新增两列(只能追加末尾)
alter table student add (
    email varchar(50) comment '邮箱',
    address varchar(100) comment '家庭住址'
);
desc student;

-- 5. MODIFY单字段修改长度+保留非空
alter table student modify stu_name varchar(50) not null;
desc student;

-- 6. MODIFY批量修改,禁止括号!逗号分隔多条modify
alter table student
modify email varchar(80) comment '校园邮箱',
modify address varchar(200);
desc student;

-- 7. CHANGE修改列名 tel → phone,必须完整写字段类型
alter table student change tel phone char(11);
desc student;

-- 8. DROP删除多列,不能括号,多个DROP
alter table student drop age, drop address;
desc student;
select * from student;

-- 9. delete删除【某一行】,务必带where
delete from student where id = 1;
select * from student;

--10. 修改表名 student → t_student
alter table student rename to t_student;
show tables;
desc t_student;

--11. 复制表:备份结构+数据
create table student_bak like t_student;
insert into student_bak select * from t_student;
select * from student_bak;

--12. truncate清空全部数据,保留表结构
truncate table t_student;
desc t_student;
select * from t_student;

--13. drop删除测试表,收尾清理环境
drop table if exists t_student;
drop table if exists student_bak;
show tables;

💡实操排错小提示:

  1. 出现ERROR 1146:表名拼写错误,复制show tables;输出的真实表名;
  2. 出现ERROR 1064语法错误:检查括号、逗号、分号,MODIFY不要套括号;
  3. 提示符变成->:输入\c回车,放弃当前语句,重新写。

🎯 结尾

表操作是MySQL的地基,后续的增删改查DML、索引、约束、事务全部建立在表结构之上。

记住口诀:CREATE建,DESC看,ALTER改,DROP删;分清讲义伪语法与MySQL真实语法,牢记DDL高危操作,MySQL入门直接跨过一大半坎。

💡 拓展思考(面试可以思考)

  1. MyISAM三张磁盘文件和InnoDB ibd文件各自优缺点?什么场景会考虑MyISAM?
  2. 为什么线上环境大表执行ALTER TABLE要格外谨慎?有什么优化方案?
  3. COMMENT注释除了desc,还有哪些SQL方式读取字段注释?
  4. 批量ADD字段为什么不支持指定位置?从MySQL底层存储的角度可以怎么理解?
  5. delete和truncate都能清空表,为什么truncate速度快很多?

📚 补充阅读知识点(拓展)

  1. MyISAM只支持表级锁,写操作会锁整张表;InnoDB支持行锁,并发读写性能更强。MyISAM没有事务,数据库宕机容易损坏表。
  2. delete属于DML语句,可以回滚;drop、truncate属于DDL语句,执行隐式提交,无法回滚。
  3. MySQL 8.0支持事务型DDL,部分DDL操作支持原子性,是和5.7的重大底层差异。
  4. 生产环境改大表结构,通常使用pt-online-schema-change、gh-ost等在线DDL工具,避免锁表影响业务。
  5. InnoDB主键是聚簇索引,数据就挂在主键树上,所以每张表必须有主键。
相关推荐
宵时待雨1 小时前
MySQL数据库1:数据库基础
服务器·数据库·mysql
做运维的阿瑞1 小时前
一个 NULL 让整列姓名消失?MySQL 字符串与日期函数复盘
数据库·sql·mysql
程序猿乐锅1 小时前
【黑马点评 | 第十一篇】关注 Feed 流实现
java·数据库·redis·分布式·后端·缓存·maven
phltxy1 小时前
C 语言文件操作:让数据从内存走向持久化
c语言·网络·数据库
阳光九叶草LXGZXJ2 小时前
达梦数据库-学习-69-DM9主备集群部署
linux·运维·服务器·数据库·sql·学习
jnrjian2 小时前
Connect Microsoft Tools to Oracle Databases powerbi 之类的oracle 客户端
数据库·microsoft·oracle
北京恒星科通刘军2 小时前
灾害监测预警系统中,应急疏散广播的“应急叫应”实际送达率与有效性研究
网络·数据库·人工智能
ShineWinsu2 小时前
对于Redis:List类型的解析
数据库·c++·redis·链表·缓存·面试·list
问商十三载2 小时前
AI引擎生成式优化服务商怎么选?技术核验清单(附脚本)
数据库·人工智能·机器学习