mysql命令行安装教程_MySQL命令行教程
mysql命令行安装教程
1. MySQL简介
在之前的教程中 ,我讨论了有关MySQL服务器的安装以及MySQL数据库使用入门的问题。 在本文中,我们将详细讨论如何使用MySQL命令行执行各种操作,例如选择,插入,更新,删除,数据库管理,授权管理以及使用MySQL数据库时所需的其他一些操作。
本教程的前提条件是必须预先安装MySQL服务器。 本文很好地指导您进行相同的安装。
目录
- 1. MySQL简介 2.连接到MySQL命令行 3.创建数据库和表 4.在表中插入记录 5.查看记录并格式化输出
-
- 5.1查看所有记录 5.2查看格式化的输出 5.3查看有限的记录 5.4抵消结果
- 6.更新和删除记录 7.切换安全更新和自动提交
-
- 7.1启用/禁用安全更新 7.2禁用自动提交
- 8. MySQL管理 9.结论
2.连接到MySQL命令行
数据库服务器启动并运行后,您可以使用以下命令登录到MySQL命令行。
$ mysql -u root -p
连接后,命令提示符或终端将显示mysql>
,表示您现在正在使用MySQL命令行。 如果您看到mysql command not found
类似mysql command not found
的错误,那可能是由于缺少MySQL路径变量。 您可以按照以下过程解决此问题:
视窗
如果是Windows,请右键单击“ 我的电脑” /“此PC”图标,然后选择“系统属性”。 在系统属性中,选择高级选项卡,然后单击环境变量 。 在环境变量中,查找PATH变量,然后双击以进行编辑。 最后,在分号后将MySQL安装路径附加到变量中。 应用更改,然后尝试再次在命令提示符下执行上述命令。 Linux / MacOS 在Linux和MacOS变体中,过程仍然相似。 为了启用对mysql命令的直接检测,请在替换命令中MySQL安装路径后执行以下命令。
export PATH=$PATH:
连接后,MySQL命令行可用于执行任何SQL查询,无论它是CRUD操作还是数据定义或管理查询。 首先,让我们使用以下命令检查可用数据库的列表:
mysql> show databases;
如果是全新安装,它将仅显示用于管理目的MySQL默认数据库列表。
3.创建数据库和表
让我们继续创建数据库。 MySQL中的数据库称为架构。 为了创建模式,请执行以下命令:
mysql> create schema tutorial;
确保最后使用分号。 如果您错过了分号,则该语句将不被认为是完整的,并且将提示您提供进一步的说明,如下所示。
mysql> create schema tutorial-> ;
Query OK, 1 row affected (0.09 sec)
输入分号后,它将立即执行之前编写的查询。 现在,您可以在末端检查数据库列表,以验证是否已创建数据库。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| tutorial |
+--------------------+
5 rows in set (0.01 sec)
现在让我们使用数据库并在其中创建表。 让我们创建一个简单的学生详细信息表。
mysql> use tutorial
Database changed
mysql> create table student_details (id int, name varchar(50), class varchar(3));
Query OK, 0 rows affected (0.07 sec)
上面的命令首先选择教程数据库,然后创建具有三列的表。 让我们再创建两个表以处理进一步的查询。
mysql> create table subjects (id int, name varchar(50));
Query OK, 0 rows affected (0.11 sec)mysql> create table marks (id int, subject_id int, student_id int, marks int);
Query OK, 0 rows affected (0.05 sec)
现在,让我们检查在数据库中创建的表。
mysql> show tables;
+--------------------+
| Tables_in_tutorial |
+--------------------+
| marks |
| student_details |
| subjects |
+--------------------+
3 rows in set (0.00 sec)
4.在表中插入记录
MySQL命令行支持用于插入记录的标准SQL命令。 要将记录插入创建的表中,请执行以下命令。
插入到student_details
mysql> mysql> insert into student_details values (1,'Abhishek','XII');
Query OK, 1 row affected (0.10 sec)
上面的语句将一条记录插入到student_details表中。 为了插入多个记录,您可以将值集合并在一行中,也可以将这些值添加到没有分号的单独行中。 这两种方法如下所示。
每行添加一条记录
mysql> insert into student_details values (2,'John','XII')-> ,(3,'Ted','XI')-> ,(4,'Tim','XII');
Query OK, 3 rows affected (0.08 sec)
Records: 3 Duplicates: 0 Warnings: 0
在一行中添加记录
mysql> insert into student_details values (2,'John','XII'),(3,'Ted','XI'),(4,'Tim','XII');
Query OK, 3 rows affected (0.08 sec)
Records: 3 Duplicates: 0 Warnings: 0
5.查看记录并格式化输出
现在, student_details
表中的记录很少。 现在让我们查看记录。
5.1查看所有记录
为了查看所有记录,您需要做的就是对student_details
表执行select查询。
mysql> select * from student_details;
+------+----------+-------+
| id | name | class |
+------+----------+-------+
| 1 | Abhishek | XII |
| 2 | John | XII |
| 3 | Ted | XI |
| 4 | Tim | XII |
+------+----------+-------+
4 rows in set (0.00 sec)
5.2查看格式化的输出
默认情况下,记录显示在表格控制台输出中,如上所示。 MySQL还提供了使用格式化命令来格式化控制台输出的工具。 例如,为了获得逐行输出,可以使用\G
,如下所示:
mysql> select * from student_details \G;
*************************** 1. row ***************************id: 1name: Abhishek
class: XII
*************************** 2. row ***************************id: 2name: John
class: XII
*************************** 3. row ***************************id: 3name: Ted
class: XI
*************************** 4. row ***************************id: 4name: Tim
class: XII
4 rows in set (0.00 sec)
5.3查看有限的记录
有时,可能需要在少数情况下希望看到有限数量的记录,例如表中的记录数量很大或尝试实现分页时。 在这种情况下,您需要限制返回的记录数。 在MySQL中,这可以通过关键字limit
。 它基本上限制了从表中获取的记录数。 例如,
mysql> select * from student_details limit 2;
+------+----------+-------+
| id | name | class |
+------+----------+-------+
| 1 | Abhishek | XII |
| 2 | John | XII |
+------+----------+-------+
2 rows in set (0.04 sec)
以这种方式,可以限制结果集中返回的记录数。
5.4抵消结果
在分页的情况下,需要抵消。 抵销基本上是一种跳过一定数量的记录并获取下一个记录的机制。 例如,如果一个表包含40条记录,而我们创建一个表,则每页显示10条记录。 在这种情况下,在第二页中,我们需要在跳过前10条后获取10条记录。这可以使用关键字offset
。 下面显示了相同的示例。
mysql> select * from student_details limit 2 offset 2;
+------+------+-------+
| id | name | class |
+------+------+-------+
| 3 | Ted | XI |
| 4 | Tim | XII |
+------+------+-------+
2 rows in set (0.00 sec)
6.更新和删除记录
插入记录后,我们通常需要做的下一个任务是更正或删除它们。 如上所述,MySQL命令像普通的数据库客户端一样处理所有SQL查询。 让我们尝试更新id-3的学生记录。 该类设置为XI而不是XII。 让我们使用更新查询对它们进行纠正。
mysql> update student_details set class='XII' where id= 3;
Query OK, 1 row affected (0.06 sec)
Rows matched: 1 Changed: 1 Warnings: 0
可以看到,命令行显示了已匹配和已更改的记录的摘要。 它还计算由于多种可能的原因在更新过程中可能引发的警告数量。 现在,让我们尝试检查无效数据的更新。 例如,
mysql> update student_details set class='XIIII' where id= 3;
ERROR 1406 (22001): Data too long for column 'class' at row 3
可以看出,每当您提供无效值时,就会发生错误。 每个错误都分配有一个相关的错误代码,而不仅仅是显示消息。 数据库客户端使用此错误代码来显示具有更好详细信息的明智错误。
现在,考虑蒂姆离开学校的情况。 Tim的记录不再需要,因此需要删除。 为了删除记录,让我们执行删除脚本,如下所示:
mysql> delete from student_details where id = 4;
Query OK, 1 row affected (0.03 sec)
删除的行数按受影响的行数显示。 因此,可以理解,一条记录已被成功删除。
7.切换安全更新和自动提交
考虑一种错误地执行删除查询而没有where子句的情况。 如果对此类查询的执行没有任何限制,则将导致记录丢失。 有两种方法可以阻止这种情况。
- 在没有关键字段条件的情况下停止查询执行
- 禁用自动提交以允许用户回滚
7.1启用/禁用安全更新
默认情况下,安全更新在MySQL命令行中处于关闭状态。 这使用户可以执行如下所示的查询。
mysql> delete from student_details;
这样的查询将从表中删除所有现有记录,从而导致数据丢失。 为了禁用此类查询的执行,您可以强制执行包含关键字段条件的where子句。 例如,您可以在条件中使用ID字段来强制执行where子句。 可以使用以下查询来完成。
mysql> set sql_safe_updates=1;
Query OK, 0 rows affected (0.01 sec)
现在,如果我们尝试执行上述删除查询,将显示如下所示的输出。
mysql> delete from student_details;
ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
启用安全更新模式后,如果where子句中没有id字段,则无法执行删除或更新查询。 请注意,由于当前student_details
表中没有键字段,因此我们将无法删除或更新任何记录。 为此,您需要更改表并添加主键。 本文将进一步介绍此过程。 现在,您可以使用以下语句禁用安全更新模式。
mysql> set sql_safe_update = 0;
7.2禁用自动提交
当前,如果删除查询被错误地执行,则无法取回数据。 这是因为默认情况下,MySQL在命令行中启用了自动提交功能。 自动提交基本上意味着它将自动将所有更改应用到实际数据库。
禁用自动提交后,将缓存使用命令行完成的更改,直到我们要求数据库显式提交它为止。 禁用自动提交后,如果执行了查询,则可以通过执行简单的命令rollback
来回滚更改。 为了禁用自动提交,请使用以下语句。
mysql> set autocommit=0;
Query OK, 0 rows affected (0.01 sec)
自动提交功能关闭后,请在安全更新模式关闭的情况下执行以下删除查询。
mysql> delete from student_details;
Query OK, 4 rows affected (0.00 sec)mysql> select count(*) from student_details;
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (0.01 sec)mysql> rollback;
Query OK, 0 rows affected (0.06 sec)mysql> select count(*) from student_details;
+----------+
| count(*) |
+----------+
| 4 |
+----------+
1 row in set (0.00 sec)
从上述执行删除查询的过程中可以看出,执行删除查询后,如果从表中选择数据,则没有可用的记录。 但是,回滚后,您可以看到这4条记录是完整的,并且删除操作已还原。 因此,关闭自动提交可能会对MySQL命令行的常规使用产生重大影响。
8. MySQL管理
一旦我们了解了MySQL数据库的创建和更新,就该开始研究管理数据库了。 对于大型项目,数据库管理是一项重要任务。 每个数据库都有其自己的存储管理数据的方式。 MySQL将管理数据存储在两个不同的数据库中。 用于管理目的的第一个数据库是名为mysql的数据库。 本节仅涵盖对初学者最重要的表格。
让我们选择数据库并检查可用表的列表。
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| component |
| db |
| default_roles |
| engine_cost |
| func |
| general_log |
| global_grants |
| gtid_executed |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| password_history |
| plugin |
| procs_priv |
| proxies_priv |
| role_edges |
| server_cost |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
33 rows in set (0.01 sec)
可以看出,仅此数据库就包含一堆33个表。 其中,最重要的表是user&global_grants 。 用户表包含到目前为止已创建的用户列表。 在查看记录时,除了默认的root用户之外,您还会发现另外三个用户。 这些用户默认在安装过程中创建,除非有必要,否则不应更新。
mysql> select * from user \G;;
*************************** 1. row ***************************Host: localhostUser: mysql.infoschemaSelect_priv: YInsert_priv: NUpdate_priv: NDelete_priv: NCreate_priv: NDrop_priv: NReload_priv: NShutdown_priv: NProcess_priv: NFile_priv: NGrant_priv: NReferences_priv: NIndex_priv: NAlter_priv: NShow_db_priv: NSuper_priv: NCreate_tmp_table_priv: NLock_tables_priv: NExecute_priv: NRepl_slave_priv: NRepl_client_priv: NCreate_view_priv: NShow_view_priv: NCreate_routine_priv: NAlter_routine_priv: NCreate_user_priv: NEvent_priv: NTrigger_priv: N
Create_tablespace_priv: Nssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0max_updates: 0max_connections: 0max_user_connections: 0plugin: mysql_native_passwordauthentication_string: *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHEREpassword_expired: Npassword_last_changed: 2018-05-13 14:47:36password_lifetime: NULLaccount_locked: YCreate_role_priv: NDrop_role_priv: N
Password_reuse_history: NULLPassword_reuse_time: NULL
*************************** 2. row ***************************Host: localhostUser: mysql.sessionSelect_priv: NInsert_priv: NUpdate_priv: NDelete_priv: NCreate_priv: NDrop_priv: NReload_priv: NShutdown_priv: NProcess_priv: NFile_priv: NGrant_priv: NReferences_priv: NIndex_priv: NAlter_priv: NShow_db_priv: NSuper_priv: YCreate_tmp_table_priv: NLock_tables_priv: NExecute_priv: NRepl_slave_priv: NRepl_client_priv: NCreate_view_priv: NShow_view_priv: NCreate_routine_priv: NAlter_routine_priv: NCreate_user_priv: NEvent_priv: NTrigger_priv: N
Create_tablespace_priv: Nssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0max_updates: 0max_connections: 0max_user_connections: 0plugin: mysql_native_passwordauthentication_string: *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHEREpassword_expired: Npassword_last_changed: 2018-05-13 14:47:36password_lifetime: NULLaccount_locked: YCreate_role_priv: NDrop_role_priv: N
Password_reuse_history: NULLPassword_reuse_time: NULL
*************************** 3. row ***************************Host: localhostUser: mysql.sysSelect_priv: NInsert_priv: NUpdate_priv: NDelete_priv: NCreate_priv: NDrop_priv: NReload_priv: NShutdown_priv: NProcess_priv: NFile_priv: NGrant_priv: NReferences_priv: NIndex_priv: NAlter_priv: NShow_db_priv: NSuper_priv: NCreate_tmp_table_priv: NLock_tables_priv: NExecute_priv: NRepl_slave_priv: NRepl_client_priv: NCreate_view_priv: NShow_view_priv: NCreate_routine_priv: NAlter_routine_priv: NCreate_user_priv: NEvent_priv: NTrigger_priv: N
Create_tablespace_priv: Nssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0max_updates: 0max_connections: 0max_user_connections: 0plugin: mysql_native_passwordauthentication_string: *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHEREpassword_expired: Npassword_last_changed: 2018-05-13 14:47:36password_lifetime: NULLaccount_locked: YCreate_role_priv: NDrop_role_priv: N
Password_reuse_history: NULLPassword_reuse_time: NULL
*************************** 4. row ***************************Host: localhostUser: rootSelect_priv: YInsert_priv: YUpdate_priv: YDelete_priv: YCreate_priv: YDrop_priv: YReload_priv: YShutdown_priv: YProcess_priv: YFile_priv: YGrant_priv: YReferences_priv: YIndex_priv: YAlter_priv: YShow_db_priv: YSuper_priv: YCreate_tmp_table_priv: YLock_tables_priv: YExecute_priv: YRepl_slave_priv: YRepl_client_priv: YCreate_view_priv: YShow_view_priv: YCreate_routine_priv: YAlter_routine_priv: YCreate_user_priv: YEvent_priv: YTrigger_priv: Y
Create_tablespace_priv: Yssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0max_updates: 0max_connections: 0max_user_connections: 0plugin: mysql_native_passwordauthentication_string: *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19password_expired: Npassword_last_changed: 2018-05-13 14:47:39password_lifetime: NULLaccount_locked: NCreate_role_priv: YDrop_role_priv: Y
Password_reuse_history: NULLPassword_reuse_time: NULL
4 rows in set (0.00 sec)
从这里可以看出, \G
可以方便地以更好的格式查看记录。 现在让我们创建一个用户并检查记录。
mysql> create user 'abhishek'@'localhost' identified by 'password';
Query OK, 0 rows affected (0.10 sec)
现在,您可以使用where子句指定用户属性来检查用户,如下所示。
mysql> select * from user where User='abhishek' \G;
*************************** 1. row ***************************Host: localhostUser: abhishekSelect_priv: NInsert_priv: NUpdate_priv: NDelete_priv: NCreate_priv: NDrop_priv: NReload_priv: NShutdown_priv: NProcess_priv: NFile_priv: NGrant_priv: NReferences_priv: NIndex_priv: NAlter_priv: NShow_db_priv: NSuper_priv: NCreate_tmp_table_priv: NLock_tables_priv: NExecute_priv: NRepl_slave_priv: NRepl_client_priv: NCreate_view_priv: NShow_view_priv: NCreate_routine_priv: NAlter_routine_priv: NCreate_user_priv: NEvent_priv: NTrigger_priv: N
Create_tablespace_priv: Nssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0max_updates: 0max_connections: 0max_user_connections: 0plugin: mysql_native_passwordauthentication_string: *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19password_expired: Npassword_last_changed: 2018-05-30 21:22:45password_lifetime: NULLaccount_locked: NCreate_role_priv: NDrop_role_priv: N
Password_reuse_history: NULLPassword_reuse_time: NULL
1 row in set (0.01 sec)
当前,该用户尚未获得任何授权。 因此,在以上输出中,所有用户授权都标记为N。 让我们向用户提供授权,以选择和查看教程模式的记录。
mysql> GRANT SELECT ON *.* TO 'abhishek'@'localhost';
Query OK, 0 rows affected (0.06 sec)mysql> select * from user where User='abhishek' \G;
*************************** 1. row ***************************Host: localhostUser: abhishekSelect_priv: YInsert_priv: NUpdate_priv: NDelete_priv: NCreate_priv: NDrop_priv: NReload_priv: NShutdown_priv: NProcess_priv: NFile_priv: NGrant_priv: NReferences_priv: NIndex_priv: NAlter_priv: NShow_db_priv: NSuper_priv: NCreate_tmp_table_priv: NLock_tables_priv: NExecute_priv: NRepl_slave_priv: NRepl_client_priv: NCreate_view_priv: NShow_view_priv: NCreate_routine_priv: NAlter_routine_priv: NCreate_user_priv: NEvent_priv: NTrigger_priv: N
Create_tablespace_priv: Nssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0max_updates: 0max_connections: 0max_user_connections: 0plugin: mysql_native_passwordauthentication_string: *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19password_expired: Npassword_last_changed: 2018-05-30 21:22:45password_lifetime: NULLaccount_locked: NCreate_role_priv: NDrop_role_priv: N
Password_reuse_history: NULLPassword_reuse_time: NULL
1 row in set (0.00 sec)
授予选择授权后,您可以看到第一个授权属性select_priv变为Y。
global_grants
表包含分配给每个用户的全局授权的列表。 您可以通过直接查看表中的记录来进行检查。 当前,它将仅列出根用户的全局授权,因为它是此时唯一拥有全局授权的用户。
MySQL用来存储主要管理数据的下一个数据库是sys数据库。 该数据库包含数据库的实时数据,例如已连接用户的详细信息,活动会话的详细信息,运行线程的详细信息以及其他一些参数,例如延迟,服务器状态,服务器日志,服务器编码配置等。 最重要的表包括session,host_summary和user_summary 。
这些表中每个表的详细信息如下:
- session:包含有关当前活动会话的详细信息。 它显示有关当前活动线程,上次执行的查询以及延迟时间的详细信息。 在发生锁定或高延迟查询执行的情况下,此表可用于标识进程。
- host_summary:此表包含通过此服务器提供服务的主机的详细信息。 可以通过多个主机域连接到服务器。 该表有助于识别活动连接的主机详细信息
- user_summary:包含已连接用户的详细信息。 如果每个用户有多个会话,则此表显示具有活动连接数的单个记录,而会话表显示指示每个连接线程的多个记录。
9.结论
本文探讨了从连接到数据库的创建和更新以及数据库管理开始,将使用MySQL命令行完成的所有主要任务。 此外,您还可以探索有关更改表,可用数据类型和功能的详细信息。
翻译自: https://www.javacodegeeks.com/2018/06/mysql-command-line-tutorial.html
mysql命令行安装教程
mysql命令行安装教程_MySQL命令行教程相关推荐
- mysql命令行操作大全_mysql命令行操作大全 mysql命令行操作总结
一.连接MYSQL 格式: mysql -h主机地址 -u用户名 -p用户密码 或者: mysql -u 用户名 -p // 回车后要求输入密码,密码不可见 1.连接本机MYSQL. 打开DOS窗口, ...
- mysql用命令行创建表_mysql命令行创建表
命令来查看表中的数据的变化: mysql>select*from students; 7.用文本方式将数据装入一个数据库表: 创建一个文本文件"student.sql",每行 ...
- linux mysql 命令行查询 乱码_mysql命令提示行连接乱码的解决
解决MySQL命令行无法连接问题错误ERROR1045(28000) 问题现象: 用navicat可以连接数据库 通过命令行mysql -uroot -p 输入密码后提示"ERROR 104 ...
- mysql 命令行 格式化输出_MySQL命令行格式化输出
使用G按行垂直显示结果 如果一行很长,需要这行显示的话,看起结果来就非常的难受.在SQL语句或者命令后使用G而不是分号结尾,可以将每一行的值垂直输出.这个可能也是大家对于MySQL最熟悉的区别于其他数 ...
- mysql 命令行 外键_MySQL基本命令行MySql外键设置详解
MySQL 命令行 一.mysql服务的启动和停止 net stop mysql net start mysql 二.登录mysql 语法如下:mysql -u 用户名 -p 用户密码 键入命 ...
- mysql 命令行 外键_MySQL命令行MySql外键设置详解
第一招.mysql服务的启动和停止 net stop mysql net start mysql 第二招.登陆mysql 语法如下: mysql -u用户名 -p用户密码 键入命令mysql -uro ...
- mysql里两个闪电_mysql命令小结
MySQL 数据库常用命令 1.MySQL常用命令 create database name; 创建数据库 use databasename; 选择数据库 drop database name 直接删 ...
- mysql 8免安装图解_mysql 8.0.21免安装版配置方法图文教程
六步安装Mysql(免安装包的才可以选安装位置),供大家参考,具体内容如下 第一步:下载MySQL压缩包 mysql下载路径 直接点击链接也可以下载:mysql 8.0.21 第二步:解压到自己想要安 ...
- mysql less6教程_MySQL 超级入门教程
原标题:MySQL 超级入门教程 MySQL简介 1.什么是数据库 ? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二 ...
最新文章
- 成功企业的核心思维逻辑
- Python面试准备
- [JavaScript]自定义MessageBox
- LC3无重复最长字串
- 一个Repeater的分页方法
- Android客户端获取服务器的json数据(二)
- 完整制作网吧系统全过程
- 计算机基础,Java介绍和环境搭建及Hello World
- 风寒感冒 风热感冒区别
- easyui treegrid php,jQuery EasyUI 数据网格与树插件 – Treegrid 树形网格 | 菜鸟教程
- [Python爬虫]爬取东方财富网公司公告需要注意的几个问题
- vim 基本够用的操作命令
- HTML5在线播放本地视频(IE9以上的浏览器)
- Vim 批量在行首/行尾插入相同字符
- OneNote-做笔记的软件-强烈推荐
- resent = msg.get_all('Resent-Date') AttributeError: 'str' object has no attribute 'get_all'
- 酷!60 s 速学HTTP 状态码 !
- 抖音视频怎样放到项目中使用php,快手、抖音、微视类短视频SDK接入教程,7步就能搞定...
- bat文件(cmd命令批处理)的编写使用
- 假期自学编程没有学习路线?