MySql学习笔记05——DML
DML
插入数据insert
insert into 表名(字段名1,字段名2,字段名3...)values(值1,值2,值3);
字段名和值要一一对应(顺序对应,数据类型对应)
insert into t_student(no,name,sex,age,email) values(1,'Jack','b',12,'123456@123.com');
+------+------+------+------+----------------+
| no | name | sex | age | email |
+------+------+------+------+----------------+
| 1 | Jack | b | 12 | 123456@123.com |
+------+------+------+------+----------------+
insert into t_student(email,name,sex,age,no) values('lisi@123.com','lisi','f',20,2);
+------+------+------+------+----------------+
| no | name | sex | age | email |
+------+------+------+------+----------------+
| 1 | Jack | b | 12 | 123456@123.com |
| 2 | lisi | f | 20 | lisi@123.com |
+------+------+------+------+----------------+
insert into t_student(no) values(3);
+------+------+------+------+----------------+
| no | name | sex | age | email |
+------+------+------+------+----------------+
| 1 | Jack | b | 12 | 123456@123.com |
| 2 | lisi | f | 20 | lisi@123.com |
| 3 | NULL | NULL | NULL | NULL |
+------+------+------+------+----------------+
insert
语句只负责插入数据,不负责修改数据。
没有给其它字段指定值的话,默认值是NULL。
通过关键字default
可以设置字段的默认值,例如:
sex char(1) default 'm',
insert
语句中的字段名可以省略,但是values
中的值就必须全部写上,并且一一对应。
insert插入时间
create table t_user(id int(11),name varchar(32),birth date
);
insert into t_user values(123,'Jack',str_to_date('01-10-1990','%d-%m-%Y'));
使用str_to_date
函数将字符串类型转换成data
类型。
str_to_date('字符串日期','日期格式');
MySQL日期格式:
%Y 年// 注意这里Y大写
%m 月
%d 日
%h 时
%i 分
%s 秒
通常使用在插入insert
方面,因为插入的时候需要一个日期类型的数据,需要通过该函数将字符串转换成date
。
如果你提供的日期字符串是%Y-%m-%d
这个格式,str_to_date
函数就不需要了!!!
查询的时候可以使用date-format
函数将日期类型转化成特定格式的字符串。
date_format('日期类型数据', '日期格式')
mysql> select * from t_user;
+------+------+------------+
| id | name | birth |
+------+------+------------+
| 123 | Jack | 1990-10-01 |
| 124 | Lili | 1991-06-21 |
+------+------+------------+
默认的日期显示格式是%Y-%m-%d
自定义显示格式:
mysql> select id,name,date_format(birth,'%Y/%m/%d') as birth from t_user;
+------+------+------------+
| id | name | birth |
+------+------+------------+
| 123 | Jack | 1990/10/01 |
| 124 | Lili | 1991/06/21 |
+------+------+------------+
date和datetime之间的区别
date
是短日期,只包括年月日
datetime
是长日期,包括年月日,时分秒
mysql短日期默认格式:%Y-%m-%d
mysql长日期默认格式:%Y-%m-%d %h:%i:%s
create table t_user(id int,name varchar(32),birth date,create_time datetime
);insert into t_user(id,name,birth,create_time) values(123,'Tim','1990-10-01','2021-06-21 12:12:52');
mysql> select * from t_user;
+------+------+------------+---------------------+
| id | name | birth | create_time |
+------+------+------------+---------------------+
| 123 | Tim | 1990-10-01 | 2021-06-21 12:12:52 |
+------+------+------------+---------------------+
now()
函数可以获取系统的时间,并且是datetime类型的。
insert into t_user (id,name,birth,create_time) values(122,'Jan','2012-12-23',now());
mysql> select * from t_user;
+------+------+------------+---------------------+
| id | name | birth | create_time |
+------+------+------------+---------------------+
| 123 | Tim | 1990-10-01 | 2021-06-21 12:12:52 |
| 122 | Jan | 2012-12-23 | 2022-07-17 12:28:10 |
| 111 | Nik | 2011-06-23 | 2022-07-17 12:28:34 |
+------+------+------------+---------------------+
当然了,datetime
也是支持函数date_format
进行格式化显示的
mysql> select id,name,birth,date_format(create_time,'%h/%i/%s %Y-%m-%d')as create_time from t_user;
+------+------+------------+---------------------+
| id | name | birth | create_time |
+------+------+------------+---------------------+
| 123 | Tim | 1990-10-01 | 12/12/52 2021-06-21 |
| 122 | Jan | 2012-12-23 | 12/28/10 2022-07-17 |
| 111 | Nik | 2011-06-23 | 12/28/34 2022-07-17 |
+------+------+------------+---------------------+
修改表中数据update
update 表名 set 字段名1=新值1,字段名2=新值2,字段名3=新值3...where 条件
这里的where条件是用来判断修改哪一行的数据。
mysql> select * from t_user;
+------+------+------------+---------------------+
| id | name | birth | create_time |
+------+------+------------+---------------------+
| 123 | Tim | 1990-10-01 | 2021-06-21 12:12:52 |
| 122 | Jan | 2012-12-23 | 2022-07-17 12:28:10 |
| 111 | Nik | 2011-06-23 | 2022-07-17 12:28:34 |
+------+------+------------+---------------------+
update t_user set birth='2013-12-01',create_time=now() where id=123;
mysql> select * from t_user;
+------+------+------------+---------------------+
| id | name | birth | create_time |
+------+------+------------+---------------------+
| 123 | Tim | 2013-12-01 | 2022-07-17 12:58:55 |
| 122 | Jan | 2012-12-23 | 2022-07-17 12:28:10 |
| 111 | Nik | 2011-06-23 | 2022-07-17 12:28:34 |
+------+------+------------+---------------------+
如果没有了where条件,就是更新了所有。
update t_user set create_time=now();mysql> select * from t_user;
+------+------+------------+---------------------+
| id | name | birth | create_time |
+------+------+------------+---------------------+
| 123 | Tim | 2013-12-01 | 2022-07-17 13:00:18 |
| 122 | Jan | 2012-12-23 | 2022-07-17 13:00:18 |
| 111 | Nik | 2011-06-23 | 2022-07-17 13:00:18 |
+------+------+------------+---------------------+
删除表中数据delete
delete from 表名 where 条件;
如果没有条件,整个表都会被删除!!
delete from t_user where id=111;
mysql> select * from t_user;
+------+------+------------+---------------------+
| id | name | birth | create_time |
+------+------+------------+---------------------+
| 123 | Tim | 2013-12-01 | 2022-07-17 13:00:18 |
| 122 | Jan | 2012-12-23 | 2022-07-17 13:00:18 |
+------+------+------------+---------------------+
insert插入多条数据
insert into t_user (id,name,birth,create_time) values
(1,'zs','1980-10-11',now()),
(2,'lisi','1981-10-11',now()),
(3,'wangwu','1982-10-11',now());
mysql> select * from t_user;
+------+--------+------------+---------------------+
| id | name | birth | create_time |
+------+--------+------------+---------------------+
| 1 | zs | 1980-10-11 | 2022-07-17 13:41:43 |
| 2 | lisi | 1981-10-11 | 2022-07-17 13:41:43 |
| 3 | wangwu | 1982-10-11 | 2022-07-17 13:41:43 |
+------+--------+------------+---------------------+
语法:
insert into t_user(字段名1,字段名2...) values
(),
(),
(),
();
快速创建表(复制表)
create table emp2 as select * from emp;
mysql> show tables;
+------------------------+
| Tables_in_bjpowernnode |
+------------------------+
| dept |
| emp |
| emp2 |
| salgrade |
| t_student |
| t_user |
+------------------------+
mysql> select * from emp2;
+-------+--------+-----------+------+------------+---------+---------+--------+
| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
+-------+--------+-----------+------+------------+---------+---------+--------+
| 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | NULL | 20 |
| 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 |
| 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 |
| 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 |
| 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 |
| 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | NULL | 30 |
| 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450.00 | NULL | 10 |
| 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000.00 | NULL | 20 |
| 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL | 10 |
| 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 |
| 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100.00 | NULL | 20 |
| 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | NULL | 30 |
| 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | NULL | 20 |
| 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | NULL | 10 |
+-------+--------+-----------+------+------------+---------+---------+--------+
原理是将一个查询结果当作一张新表,实现快速表的复制
create table mytable as select empno,ename from emp where job = 'MANAGER';
mysql> select * from mytable;
+-------+-------+
| empno | ename |
+-------+-------+
| 7566 | JONES |
| 7698 | BLAKE |
| 7782 | CLARK |
+-------+-------+
将查询结果插入到表中
用的不多,了解就行了。
create table dept_bak as select * from dept;
mysql> select * from dept_bak;
+--------+------------+----------+
| DEPTNO | DNAME | LOC |
+--------+------------+----------+
| 10 | ACCOUNTING | NEW YORK |
| 20 | RESEARCH | DALLAS |
| 30 | SALES | CHICAGO |
| 40 | OPERATIONS | BOSTON |
+--------+------------+----------+
insert into dept_bak select * from dept;
mysql> select * from dept_bak;
+--------+------------+----------+
| DEPTNO | DNAME | LOC |
+--------+------------+----------+
| 10 | ACCOUNTING | NEW YORK |
| 20 | RESEARCH | DALLAS |
| 30 | SALES | CHICAGO |
| 40 | OPERATIONS | BOSTON |
| 10 | ACCOUNTING | NEW YORK |
| 20 | RESEARCH | DALLAS |
| 30 | SALES | CHICAGO |
| 40 | OPERATIONS | BOSTON |
+--------+------------+----------+
快速删除表中所有数据
使用delete
不增加where
条件也能删除表中所有数据
delete from dept_bak;
mysql> select * from dept_bak;
Empty set (0.00 sec)
但是它可以回滚数据:
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)mysql> select * from dept_bak;
+--------+------------+----------+
| DEPTNO | DNAME | LOC |
+--------+------------+----------+
| 10 | ACCOUNTING | NEW YORK |
| 20 | RESEARCH | DALLAS |
| 30 | SALES | CHICAGO |
| 40 | OPERATIONS | BOSTON |
| 10 | ACCOUNTING | NEW YORK |
| 20 | RESEARCH | DALLAS |
| 30 | SALES | CHICAGO |
| 40 | OPERATIONS | BOSTON |
+--------+------------+----------+
8 rows in set (0.00 sec)
但是从底层逻辑上来说,delete是一个个来删除表中的数据,效率比较低。
另外一个快速删除表中所有数据的方法是truncate
truncate table 表名;
这个操作属于DDL
中的操作。
使用truncate
可以快速删除表中的所有数据,但是不支持数据回滚,因此要考虑再三再去使用它。
delete语句删除数据的原理?(delete属于DML语句!!!)
表中的数据被删除了,但是这个数据在硬盘上的真实存储空间不会被释放!!!
这种删除缺点是:删除效率比较低。
这种删除优点是:支持回滚,后悔了可以再恢复数据!!!
truncate语句删除数据的原理?
这种删除效率比较高,表被一次截断,物理删除。
这种删除缺点:不支持回滚。
这种删除优点:快速。
在DDL
中也有删除表的操作drop
,但是drop
是删除整个表,表和表的数据全部删除,truncate
删除的仅仅只是表中的所有数据,表的结构还在。
相关文章:
MySql学习笔记05——DML
DML 插入数据insert insert into 表名(字段名1,字段名2,字段名3...)values(值1,值2,值3);字段名和值要一一对应(顺序对应,数据类型对应) insert into t_student(no,name,sex,age,…...
halcon对图片进行处理基础
实例图片 C:\Users\Public\Documents\MVTec\HALCON-19.11-Progress\examples\images*读取图片 read_image (Image1, D:/c/image/1.png) *读取大小 get_image_size(Image1,Width, Height) *创建窗口 dev_close_window() dev_open_window(0, 0, Width, Height, black, WindowHan…...
element-ui在vue中如何实现校验两个复选框至少选择一个!
整体进行验证 想验证至少选择一个复选框,可以将这两个复选框视为一个整体进行验证。在 Element UI 中,可以使用自定义验证规则来实现这一点。 你可以在 rules 对象中定义一个自定义的验证规则来检查 isCheck1 和 isCheck2 至少有一个被选中。 以下是一…...
DeepinV20/Ubuntu安装postgresql方法
首先,建议看一下官方的安装文档PostgreSQL: Linux downloads (Ubuntu) PostgreSQL Apt Repository 简单的说,就是Ubuntu下的Apt仓库,可以用来安装任何支持版本的PgSQL。 If the version included in your version of Ubuntu is not the one…...
汽车ECU软件升级方案介绍
软件OTA的背景 随着汽车网联化的发展,现在的汽车电子架构都支持软件空中升级,即大家常说的OTA(Software Update and Upgrade Over the Air),传统的软件升级常常是离线升级,需要车主将车开到维修保养中心进行软件更新。不过OTA升级方式带来方便之处需要考虑的问题也随之增…...
首家!亚信科技AntDB数据库完成中国信通院数据库迁移工具专项测试
近日,在中国信通院“可信数据库”数据库迁移工具专项测试中,湖南亚信安慧科技有限公司(简称:亚信安慧科技)数据库数据同步平台V2.1产品依据《数据库迁移工具能力要求》、结合亚信科技AntDB分布式关系型数据库产品&…...
为什么好多人想辞职去旅行?
一、“世界那么大,我想去看看。” 这句话成为了网络上的一句流行语。这句话的出处就是在一位女教师的一份辞职申请上,这样的辞职理由是多少人想干却不敢干的事情。这句话的流行,反映了现代社会中人们对于探索未知世界和追求个人梦想的渴望。在这个快速发展的时代&am…...
vim的使用介绍以及命令大全
懒羊羊感谢大家的关注和三连支持~ 目录 前言 一、vim的使用介绍 二、命令大全 1.命令模式 (1)复制(配合粘贴命令p使用) (2)剪切 (3)粘贴 (4)删除 …...
JavaScript高级技巧:深入探索JavaScript语言的高级特性和用法
当我们谈论JavaScript高级技巧时,以下是一些示例来说明这些概念: 闭包(Closures): function outerFunction() {var outerVariable Hello;function innerFunction() {console.log(outerVariable);}return innerFunct…...
虹科方案|HK-Edgility利用边缘计算和VNF降本增效
一、边缘计算和 VNF 在当今瞬息万变的数字环境中,边缘虚拟化网络功能(VNF)是一个既能够优化网络基础设施,又能控制成本的创新型解决方案。它使客户能够将多个基于软件的 VNF 整合到一个专用计算设备上。更值得高兴的是,…...
SpringBoot项目--电脑商城【新增收货地址】
1.新增收货地址 t_address CREATE TABLE t_address (aid INT AUTO_INCREMENT COMMENT 收货地址id,uid INT COMMENT 归属的用户id,name VARCHAR(20) COMMENT 收货人姓名,province_name VARCHAR(15) COMMENT 省-名称,province_code CHAR(6) COMMENT 省-行政代号,city_name VARC…...
[HNCTF 2022 Week1]——Web方向 详细Writeup
Week1 [HNCTF 2022 Week1]2048 f12查看源代码 可以看出游戏的分数是score 修改score的值 得到flag [HNCTF 2022 Week1]Interesting_include 得到源码 <?php //WEB手要懂得搜索 //flag in ./flag.phpif(isset($_GET[filter])){$file $_GET[filter];if(!preg_match(&qu…...
3dmax vray如何创建真实的灯光?3dmax vray 室内照明教程
为什么良好的照明很重要? 通过仔细操纵光源并利用 V-Ray 的功能,您将解锁制作超越普通渲染的能力,让观众着迷。每个阴影和每个高光都有一个目的 - 通过注意掌握照明,您的渲染将变得栩栩如生,并为您的室内设计赋予独特…...
如何在本地使用Docker搭建和运行Kubernetes集群
文章目录 1. 准备环境2. 安装Minikube3. 启动Minikube集群4. 验证集群5. 部署一个示例应用创建一个Deployment部署应用检查部署 6. 访问应用创建一个Service部署Service获取Service的访问地址 7. 清理资源结论 🎈个人主页:程序员 小侯 🎐CSDN…...
每天几道Java面试题(第二天)
目录 第二幕、第一场)公司前台第二场)公司卫生间 友情提醒 背面试题很枯燥,加入一些戏剧场景故事人物来加深记忆。PS:点击文章目录可直接跳转到文章指定位置。 第二幕、 第一场)公司前台 【接待人员埃斯卡莱罗,面试…...
Java | 线程的生命周期和安全
不爱生姜不吃醋⭐️ 如果本文有什么错误的话欢迎在评论区中指正 与其明天开始,不如现在行动! 🌴线程的生命周期 sleep方法会让线程睡眠,睡眠时间到了之后,立马就会执行下面的代码吗? 答:不会&am…...
Bootstrap的一些主要作用
Bootstrap是一个流行的前端开发框架,它主要用于快速构建响应式、移动优先的网站和网络应用程序。它提供了一套CSS样式和JavaScript插件,帮助开发者轻松地创建漂亮、一致和交互丰富的用户界面。 以下是Bootstrap的一些主要作用: 响应式布局&a…...
网络编程套接字 | UDP套接字
前面的文章中我们叙述了网络编程套接字的一些预备知识点,从本文开始我们就将开始UDP套接字的编写。本文中的服务端与客户端都是在阿里云的云服务器进行编写与测试的。 udp_v1 在v1的版本中我们先来使用一下前面讲过得一些接口,简单的构建一个udp服务器…...
网络层IP协议
目录 前言 1.如何理解IP协议 2.IP协议格式 3.网段划分 4.特殊的IP地址 5.IP地址的数量限制 6.私有IP地址和公网IP地址 7.路由 总结 前言 在前面的文章中介绍了关于传输层常用的两个协议,UDP协议和TCP协议,当数据经过传输层之后,进入网…...
C++ Day4
目录 仿照string类,完成myString 类 思维导图 仿照string类,完成myString 类 #include <iostream> #include<cstring>using namespace std;class myString {private:char *str; //记录c风格的字符串int size; //记录…...
2024字节跳动校招面试真题汇总及其解答(二)
1. 微服务的好处,划分原则 微服务是软件架构的一种模式,它将应用程序划分为一系列小型、独立的服务。每个服务都提供一个单独的功能,并使用轻量级的接口相互通信。 微服务架构具有以下好处: 灵活性:微服务可以独立部署、扩展和更新,这使得它们能够随着业务需求的变化而…...
SpringBoot集成websocket(4)|(使用okhttp3实现websocket)
SpringBoot集成websocket(4)|(使用okhttp3实现websocket) 文章目录 SpringBoot集成websocket(4)|(使用okhttp3实现websocket)[TOC] 前言一、实现步骤1.实现步骤 二、websocket服务代…...
【MySQL】JDBC编程
MySQL-JDBC编程 文章目录 MySQL-JDBC编程Java的数据库编程JDBC工作原理JDBC的使用驱动包下载导入代码编写 Java的数据库编程 JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是 Java中的数据库连接…...
数据结构——二叉树线索化遍历(前中后序遍历)
二叉树线索化 线索化概念: 为什么要转换为线索化 二叉树线索化是一种将普通二叉树转换为具有特殊线索(指向前驱和后继节点)的二叉树的过程。这种线索化的目的是为了提高对二叉树的遍历效率,特别是在不使用递归或栈的情况下进行遍历…...
GO语言网络编程(并发编程)Channel
GO语言网络编程(并发编程)Channel 1、Channel 1.1.1 Channel 单纯地将函数并发执行是没有意义的。函数与函数间需要交换数据才能体现并发执行函数的意义。 虽然可以使用共享内存进行数据交换,但是共享内存在不同的goroutine中容易发生竞态…...
c++day3
stack.h #ifndef STACK_H #define STACK_H #include <iostream> //#define max 128 using namespace std; class Stack { private:int* stack;//数组指针int top;//栈顶元素int max;//栈容量 public://构造函数Stack();//析构函数~Stack();//定义拷贝构造函数Stack(cons…...
算法通过村第六关-树青铜笔记|中序后序
文章目录 前言1. 树的常见概念2. 树的性质3. 树的定义与存储方式4. 树的遍历方式5. 通过序列构建二叉树5.1 前中序列恢复二叉树5.2 中后序列恢复二叉树 总结 前言 提示:瑞秋是个小甜心,她只喜欢被爱,不懂的去爱人。 --几米《你们 我们 他们》…...
C++动态内存管理+模板
💓博主个人主页:不是笨小孩👀 ⏩专栏分类:数据结构与算法👀 C👀 刷题专栏👀 C语言👀 🚚代码仓库:笨小孩的代码库👀 ⏩社区:不是笨小孩👀 🌹欢迎大…...
SQL 注入漏洞攻击
文章目录 1. 介绍2. 无密码登录3. 无用户名无密码登录4. 合并表获取用户名密码 1. 介绍 假设你用自己的用户名和密码登录了一个付费网站,网站服务器就会查询一下你是不是 VIP 用户,而用户数据都是放在数据库中的,服务器通常都会向数据库进行查…...
一篇五分生信临床模型预测文章代码复现——Figure 10.机制及肿瘤免疫浸润(四)
之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…...
建设工程合同纠纷案例典型案例/百度seo排名主要看啥
自智能手机开始普及以来,充电宝就开始出现在公众的视野里充电宝与智能手机目前最影响智能手机使用体验的问题是电池续航问题,如果电池技术方面没有创新那么充电宝也必将一直伴随着智能手机充电宝电路板充电宝是使用内置的锂电池作为电源,通过…...
免费自己做网站吗/如何结合搜索检索与seo推广
Mybaits的开发步骤 添加MyBatis的坐标创建user数据表编写User实体类编写映射文件UserMapper.xml编写核心文件SqlMapConfig.xml编写测试类 流程: 搭建环境–>导入Mybatis—>编写代码—>测试 1.搭建实验数据库 CREATE DATABASE mybatis;USE mybatis;DRO…...
9377 这种网站怎么做/北京官方seo搜索引擎优化推荐
在上次的分享中javascript--函数参数与闭包--详解,对闭包的解释不够深入。本人经过一段时间的学习,对闭包的概念又有了新的理解。于是便把学习的过程整理成文章,一是为了加深自己闭包的理解,二是给读者提供学习的途径,…...
银川做网站公司/网络销售挣钱吗
ECHO服务: ECHO服务器仅返回它从客户处收集到的所有数据。是网络管理员测试可达性、调试协议软件及识别选路问题的重要工具,周知端口位于7 与此类似,Time服务的知名端口是37,记录了从1900年1月1日午夜起所经历的秒数;DATETIME服务…...
我的世界做皮肤壁纸网站/厦门百度关键词seo收费
转自: http://rfyiamcool.blog.51cto.com/1030776/1335700/ 简单的说就是,每个硬件设备(如:硬盘、网卡等)都需要和 CPU 有某种形式的通信以便 CPU 及时知道发生了什么事情,这样 CPU 可能就会放下手中的事情去处理应急…...
温州 网站建设/刷关键词排名软件有用吗
世界那么大,我想去看看。 技术世界波澜壮阔,只做一个前端实在太无趣。 做了那么多年的前端,每天都是做不完的列表页,详情页,弹窗。突然有一天我想玩的新鲜的玩意。 不管怎么说,前端一直都在软件开发中处…...