MySQL保姆级教程(SQL语法基础篇)从小白到高手的进阶指南,收藏这一篇就够了

MySQL学习教程(超全) mysql学习安装配置 阅读详情

本章节精心构构造SQL语法学习之旅的基石,旨在从基础出发,逐步深入,全面解析SQL语法规则并辅以丰富实例。通过这一篇章,您将循序渐进地掌握MySQL的核心语法,开启数据库操作的新境界。

1:SQL 语言概述

SQL(Structured Query Language),简称 SQL。结构化查询语言包含 6 个部分:

类型释义范例
数据查询语言DQL:Data Query Language如 SELECT
数据操作语言DML:Data Manipulation LanguageINSERT,DELETE,UPDATE
事务控制语言TCP:Transaction Control LanguageCOMMIT(提交)命令,SAVEPOINT(保存点)命令,ROLLBACK(回滚)命令)
数据控制语言DCL:Data Control LanguageGRANT,REVOKE
数据定义语言DDL:Data Definition LanguageCREATE,ALTER,DROP
指针控制语言CCL:Pointer Control LanguageDECLARE CURSOR,FETCH INTO,UPDATE CURRENT
2:数据库,表,列和行的概念
MySQL 中是 database(schema),table,column   # 那么我们如何连接 MySQL?   root@ubuntu:~# mysql -uxxxx -p -h xxx   Enter password:              # 这里输入密码   # 连接工具就非常的多了,比如 Navicate,workbeach 等等等等,其次我们要知道,MySQL 除了账号密码,还可以 socket 连接操作,这个在 my.cnf 配置的时候我们有配置过   # 查看数据库   mysql> show databases;   # 查看当前库   mysql> select database();   # 进入/连接到数据库   mysql> use mysql;   # 查看表   mysql> show tables;   # 查询账户   mysql> select user,host from mysql.user;   # 创建用户   mysql> create user 'g8s_manager'@'%' identified by 'MTIzNDU2Cg==';   # 为用户授权某数据库的权限,这里选择的是 g8s_manager 数据库下s的所有表的所有权限授权给 'g8s_manager'@'%'   mysql> grant all on g8s_manager.* to 'g8s_manager'@'%';   1:grant:用于授予权限   2:all:授予所有权限      2.1:SELECT:允许查询表      2.2:INSERT:允许插入新数据到表      2.3:UPDATE:允许更新表中的数据      2.4:DELETE:允许删除表中的数据      2.5:CREATE:允许创建表      2.6:ALTER:允许修改表      2.7:DROP:允许删除表   3:on:指定数据库和表   4:g8s_manager:指定数据库名称   5:.*:指定所有表   6:to:指定用户   7:'g8s_manager'@'%':指定用户名称和主机名,这里的主机名为 %,表示允许所有主机上的用户 g8s_manager 访问。   # 刷新权限   mysql> flush privileges;   # 测试用户登录数据库   root@ubuntu:~# mysql -ug8s_manager -p$password   ......   mysql> show databases;   +--------------------+   | Database           |   +--------------------+   | g8s_manager        |   | information_schema |   | performance_schema |   +--------------------+   3 rows in set (0.00 sec)   # 可以看到,权限仅限于查看系统自带的一些库和自己有权限的库,甚至查看表也一样   mysql> show tables from g8s_manager;   +-----------------------+   | Tables_in_g8s_manager |   +-----------------------+   | clusters              |   +-----------------------+   1 row in set (0.00 sec)   # 当然我们可以授权就可以撤销授权,我们可以使用 DCL(数据库控制)来撤销我们的授权   mysql> revoke all on g8s_manager.* from 'g8s_manager'@'%';   1:revoke:用于撤销权限   2:all:撤销所有权限   3:on:指定数据库和表   4:g8s_manager:指定数据库名称   5:.*:指定所有表   6:from:指定用户   7:'g8s_manager'@'%':指定用户名称和主机名,这里的主机名为 %,表示允许所有主机上的用户 g8s_manager 访问。   # 再次登录数据库查看   root@ubuntu:~# mysql -ug8s_manager -p$password   ......   mysql> show databases;   +--------------------+   | Database           |   +--------------------+   | information_schema |   | performance_schema |   +--------------------+   2 rows in set (0.00 sec)   # 可以看到权限没了   # 退出数据库   mysql> QUIT   Bye   或者   mysql> EXIT   Bye   或者   mysql> \q   Bye   # 下面我们将开始学习 6 个部分   
3:DDL(数据库定义语言)
`# 创建库(还可以有很多的附加操作,比如判断这个数据库是否存在等)   mysql> create database g8s_manager;   Query OK, 1 row affected (0.01 sec)   # 创建表   mysql> CREATE TABLE clusters (     id INT AUTO_INCREMENT NOT NULL,     name VARCHAR(20) NOT NULL,     version int NOT NULL,     created_at DATETIME NOT NULL,     updated_at DATETIME NOT NULL,     kubeconfig JSON NOT NULL,     PRIMARY KEY (id)   ) ENGINE = InnoDB;   Query OK, 0 rows affected (0.01 sec)   # 基于上面的表我们来写入一个模拟数据   mysql> insert into clusters (name, version, created_at, updated_at, kubeconfig) values ('cluster-1', 1, NOW(), NOW(), '{"name": "cluster1"}');   Query OK, 1 row affected (0.00 sec)   mysql> insert into clusters (name, version, created_at, updated_at, kubeconfig) values ('cluster-2', 1, NOW(), NOW(), '{"name": "cluster2"}');   Query OK, 1 row affected (0.00 sec)   mysql> insert into clusters (name, version, created_at, updated_at, kubeconfig) values ('cluster-3', 1, NOW(), NOW(), '{"name": "cluster3"}');   Query OK, 1 row affected (0.00 sec)   mysql> insert into clusters (name, version, created_at, updated_at, kubeconfig) values ('cluster-4', 1, NOW(), NOW(), '{"name": "cluster4"}');   Query OK, 1 row affected (0.00 sec)   mysql> insert into clusters (name, version, created_at, updated_at, kubeconfig) values ('cluster-5', 1, NOW(), NOW(), '{"name": "cluster5"}');   Query OK, 1 row affected (0.01 sec)   # 查询数据   mysql> select * from clusters;   +----+-----------+---------+---------------------+---------------------+----------------------+   | id | name      | version | created_at          | updated_at          | kubeconfig           |   +----+-----------+---------+---------------------+---------------------+----------------------+   |  1 | cluster-1 |       1 | 2024-01-20 22:04:39 | 2024-01-20 22:04:39 | {"name": "cluster1"} |   |  2 | cluster-2 |       1 | 2024-01-20 22:04:59 | 2024-01-20 22:04:59 | {"name": "cluster2"} |   |  3 | cluster-3 |       1 | 2024-01-20 22:05:05 | 2024-01-20 22:05:05 | {"name": "cluster3"} |   |  4 | cluster-4 |       1 | 2024-01-20 22:05:11 | 2024-01-20 22:05:11 | {"name": "cluster4"} |   |  5 | cluster-5 |       1 | 2024-01-20 22:05:16 | 2024-01-20 22:05:16 | {"name": "cluster5"} |   +----+-----------+---------+---------------------+---------------------+----------------------+   5 rows in set (0.00 sec)   # 创建同结构的表(只是表结构相同,不涉及数据)   mysql> create table new_clusters like clusters;   Query OK, 0 rows affected (0.02 sec)   # 查看表结构   mysql> desc clusters;   +------------+-------------+------+-----+---------+----------------+   | Field      | Type        | Null | Key | Default | Extra          |   +------------+-------------+------+-----+---------+----------------+   | id         | int         | NO   | PRI | NULL    | auto_increment |   | name       | varchar(20) | NO   |     | NULL    |                |   | version    | int         | NO   |     | NULL    |                |   | created_at | datetime    | NO   |     | NULL    |                |   | updated_at | datetime    | NO   |     | NULL    |                |   | kubeconfig | json        | NO   |     | NULL    |                |   +------------+-------------+------+-----+---------+----------------+   6 rows in set (0.01 sec)   mysql> desc new_clusters;   +------------+-------------+------+-----+---------+----------------+   | Field      | Type        | Null | Key | Default | Extra          |   +------------+-------------+------+-----+---------+----------------+   | id         | int         | NO   | PRI | NULL    | auto_increment |   | name       | varchar(20) | NO   |     | NULL    |                |   | version    | int         | NO   |     | NULL    |                |   | created_at | datetime    | NO   |     | NULL    |                |   | updated_at | datetime    | NO   |     | NULL    |                |   | kubeconfig | json        | NO   |     | NULL    |                |   +------------+-------------+------+-----+---------+----------------+   6 rows in set (0.00 sec)   # 获取创建表的 SQL 语句   mysql> show create table clusters\G;   *************************** 1. row ***************************          Table: clusters   Create Table: CREATE TABLE `clusters` (     `id` int NOT NULL AUTO_INCREMENT,     `name` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL,     `version` int NOT NULL,     `created_at` datetime NOT NULL,     `updated_at` datetime NOT NULL,     `kubeconfig` json NOT NULL,     PRIMARY KEY (`id`)   ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci   1 row in set (0.00 sec)   # 创建索引   mysql> create index i_name on clusters (name);   Query OK, 0 rows affected (0.03 sec)   Records: 0  Duplicates: 0  Warnings: 0   # 查询索引   mysql> show index from clusters\G;   *************************** 1. row ***************************           Table: clusters      Non_unique: 0        Key_name: PRIMARY    Seq_in_index: 1     Column_name: id       Collation: A     Cardinality: 4        Sub_part: NULL          Packed: NULL            Null:       Index_type: BTREE         Comment:    Index_comment:          Visible: YES      Expression: NULL   *************************** 2. row ***************************           Table: clusters      Non_unique: 1        Key_name: i_name    Seq_in_index: 1     Column_name: name       Collation: A     Cardinality: 5        Sub_part: NULL          Packed: NULL            Null:       Index_type: BTREE         Comment:    Index_comment:          Visible: YES      Expression: NULL   2 rows in set (0.00 sec)      #所以在这儿我们看到了两个索引,当然,还可以在建表的时候加上 key index_name (column_name),可以创建索引,这里的 id 是因为它是主键,主键必须有索引,所以才会看到 id 这个索引,我们可以自己加其他值得索引,或者我们像上面一样直接 create 创建索引也可以   # SQL 验证工具:https://tool.lu/sql/   # 不过总而言之,我们创建索引是使用 create,但是,在 8.0.13 之后的写法,推荐使用 alter 来操作   mysql> alter table clusters add index i_name(name);   Query OK, 0 rows affected (0.01 sec)   Records: 0  Duplicates: 0  Warnings: 0   mysql> show index from clusters\G;   *************************** 1. row ***************************           Table: clusters      Non_unique: 0        Key_name: PRIMARY    Seq_in_index: 1     Column_name: id       Collation: A     Cardinality: 4        Sub_part: NULL          Packed: NULL            Null:       Index_type: BTREE         Comment:    Index_comment:          Visible: YES      Expression: NULL   *************************** 2. row ***************************           Table: clusters      Non_unique: 1        Key_name: i_name    Seq_in_index: 1     Column_name: name       Collation: A     Cardinality: 5        Sub_part: NULL          Packed: NULL            Null:       Index_type: BTREE         Comment:    Index_comment:          Visible: YES      Expression: NULL   2 rows in set (0.01 sec)   # 写法与 create 不同,但是实现的效果却相同,我们从创建好索引之后去查看创建表的 SQL,也可以看到,它给我们增加了 key 创建索引的语句   mysql> show create table clusters\G;   *************************** 1. row ***************************          Table: clusters   Create Table: CREATE TABLE `clusters` (     `id` int NOT NULL AUTO_INCREMENT,     `name` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL,     `version` int NOT NULL,     `created_at` datetime NOT NULL,     `updated_at` datetime NOT NULL,     `kubeconfig` json NOT NULL,     PRIMARY KEY (`id`),     KEY `i_name` (`name`)   ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci   1 row in set (0.00 sec)   # 删除索引的方法   mysql> drop index i_name on clusters;   mysql> show index from clusters\G;   *************************** 1. row ***************************           Table: clusters      Non_unique: 0        Key_name: PRIMARY    Seq_in_index: 1     Column_name: id       Collation: A     Cardinality: 4        Sub_part: NULL          Packed: NULL            Null:       Index_type: BTREE         Comment:    Index_comment:          Visible: YES      Expression: NULL   1 row in set (0.00 sec)   # 然后我们来讲讲 alter 语句,我们可以修改表名   mysql> create table usar (name INTEGER, role CHAR(10));   Query OK, 0 rows affected (0.01 sec)   # 我们发现,貌似表名字写错了,那么我们将更新这个表名   mysql> alter table usar rename user;   Query OK, 0 rows affected (0.01 sec)   mysql> show tables;   +-----------------------+   | Tables_in_g8s_manager |   +-----------------------+   | clusters              |   | user                  |   +-----------------------+   2 rows in set (0.00 sec)   # 其次是我们可以修改表字段的属性   mysql> create table user (a INTEGER, b CHAR(10));   Query OK, 0 rows affected (0.01 sec)   mysql> desc user;   +-------+----------+------+-----+---------+-------+   | Field | Type     | Null | Key | Default | Extra |   +-------+----------+------+-----+---------+-------+   | a     | int      | YES  |     | NULL    |       |   | b     | char(10) | YES  |     | NULL    |       |   +-------+----------+------+-----+---------+-------+   2 rows in set (0.00 sec)   # 修改属性   mysql> alter table user modify a tinyint not null, change b c char(20);   Query OK, 0 rows affected (0.02 sec)   Records: 0  Duplicates: 0  Warnings: 0   mysql> desc user;   +-------+----------+------+-----+---------+-------+   | Field | Type     | Null | Key | Default | Extra |   +-------+----------+------+-----+---------+-------+   | a     | tinyint  | NO   |     | NULL    |       |   | c     | char(20) | YES  |     | NULL    |       |   +-------+----------+------+-----+---------+-------+   2 rows in set (0.00 sec)   # 可以看出,原来 a 的类型为 int,且可以为空,现在类型被改变了,且不能为,其次就是 b 的名字改成了 c,然后 char 的数量从 10 改为了 20   # 其次我们还可以加列,基于这个表再加一个列,列名为 b   mysql> desc user;   +-------+----------+------+-----+---------+-------+   | Field | Type     | Null | Key | Default | Extra |   +-------+----------+------+-----+---------+-------+   | a     | tinyint  | NO   |     | NULL    |       |   | c     | char(20) | YES  |     | NULL    |       |   | b     | datetime | YES  |     | NULL    |       |   +-------+----------+------+-----+---------+-------+   3 rows in set (0.00 sec)   # 然后我们还能加索引和主键   mysql> alter table user add index (b), add unique (a);   Query OK, 0 rows affected (0.02 sec)   Records: 0  Duplicates: 0  Warnings: 0   mysql> desc user;   +-------+----------+------+-----+---------+-------+   | Field | Type     | Null | Key | Default | Extra |   +-------+----------+------+-----+---------+-------+   | a     | tinyint  | NO   | PRI | NULL    |       |   | c     | char(20) | YES  |     | NULL    |       |   | b     | datetime | YES  | MUL | NULL    |       |   +-------+----------+------+-----+---------+-------+   3 rows in set (0.00 sec)   mysql> show index from user\G;   *************************** 1. row ***************************           Table: user      Non_unique: 0        Key_name: a    Seq_in_index: 1     Column_name: a       Collation: A     Cardinality: 0        Sub_part: NULL          Packed: NULL            Null:       Index_type: BTREE         Comment:    Index_comment:          Visible: YES      Expression: NULL   *************************** 2. row ***************************           Table: user      Non_unique: 1        Key_name: b    Seq_in_index: 1     Column_name: b       Collation: A     Cardinality: 0        Sub_part: NULL          Packed: NULL            Null: YES      Index_type: BTREE         Comment:    Index_comment:          Visible: YES      Expression: NULL   2 rows in set (0.00 sec)      # 然后我们还可以删除列   mysql> alter table user drop column b;   Query OK, 0 rows affected (0.02 sec)   Records: 0  Duplicates: 0  Warnings: 0   mysql> desc user;   +-------+----------+------+-----+---------+-------+   | Field | Type     | Null | Key | Default | Extra |   +-------+----------+------+-----+---------+-------+   | a     | tinyint  | NO   | PRI | NULL    |       |   | c     | char(20) | YES  |     | NULL    |       |   +-------+----------+------+-----+---------+-------+   2 rows in set (0.00 sec)   # 然后我们还能加列加主键   mysql> alter table user add d int unsigned not null auto_increment, add primary key (d);   Query OK, 0 rows affected (0.02 sec)   Records: 0  Duplicates: 0  Warnings: 0   mysql> desc user;   +-------+--------------+------+-----+---------+----------------+   | Field | Type         | Null | Key | Default | Extra          |   +-------+--------------+------+-----+---------+----------------+   | a     | tinyint      | NO   | UNI | NULL    |                |   | c     | char(20)     | YES  |     | NULL    |                |   | d     | int unsigned | NO   | PRI | NULL    | auto_increment |   +-------+--------------+------+-----+---------+----------------+   3 rows in set (0.00 sec)   # 但是这里我们有一个问题:如何修改主键?由一个列换成另一个列,我们要知道,一个表只能有一个主键,那么意思就是我们能否将一个列的主键切换为另一个列呢?   mysql> desc user;   +-------+-------------+------+-----+---------+----------------+   | Field | Type        | Null | Key | Default | Extra          |   +-------+-------------+------+-----+---------+----------------+   | id    | int         | NO   | PRI | NULL    | auto_increment |   | uid   | int         | NO   |     | NULL    |                |   | name  | varchar(20) | NO   |     | NULL    |                |   +-------+-------------+------+-----+---------+----------------+   # 去除自增属性   ALTER TABLE user MODIFY id INT;   mysql> desc user;   +-------+-------------+------+-----+---------+-------+   | Field | Type        | Null | Key | Default | Extra |   +-------+-------------+------+-----+---------+-------+   | id    | int         | NO   | PRI | NULL    |       |   | uid   | int         | NO   |     | NULL    |       |   | name  | varchar(20) | NO   |     | NULL    |       |   +-------+-------------+------+-----+---------+-------+   3 rows in set (0.00 sec)   # 删除主键然后替换新的主键上去   mysql> ALTER TABLE user DROP PRIMARY KEY, ADD PRIMARY KEY (uid);   Query OK, 0 rows affected (0.02 sec)   Records: 0  Duplicates: 0  Warnings: 0   mysql> desc user;   +-------+-------------+------+-----+---------+-------+   | Field | Type        | Null | Key | Default | Extra |   +-------+-------------+------+-----+---------+-------+   | id    | int         | NO   |     | NULL    |       |   | uid   | int         | NO   | PRI | NULL    |       |   | name  | varchar(20) | NO   |     | NULL    |       |   +-------+-------------+------+-----+---------+-------+   3 rows in set (0.00 sec)   # 我们可以通过 ? alter 来查看 alter 都有哪儿些操作   mysql> ? alter   Many help items for your request exist.   To make a more specific request, please type 'help <item>',   where <item> is one of the following   topics:      ALTER DATABASE      ALTER EVENT      ALTER FUNCTION      ALTER INSTANCE      ALTER LOGFILE GROUP      ALTER PROCEDURE      ALTER RESOURCE GROUP      ALTER SCHEMA      ALTER SERVER      ALTER TABLE      ALTER TABLESPACE      ALTER USER      ALTER VIEW      GRANT      SPATIAL INDEXES   # 其次下面就是 DROP 语句,它主要用于删除   mysql> ? drop   Many help items for your request exist.   To make a more specific request, please type 'help <item>',   where <item> is one of the following   topics:      ALTER TABLE      ALTER TABLESPACE      ALTER USER      DEALLOCATE PREPARE      DROP DATABASE      DROP EVENT      DROP FUNCTION      DROP FUNCTION LOADABLE FUNCTION      DROP INDEX      DROP PREPARE      DROP PROCEDURE      DROP RESOURCE GROUP      DROP ROLE      DROP SCHEMA      DROP SERVER      DROP SPATIAL REFERENCE SYSTEM      DROP TABLE      DROP TABLESPACE      DROP TRIGGER      DROP USER      DROP VIEW   # 我们无非也是 drop 用户,表,索引等操作,但是我们要记住,删除用户尽量用 drop 而不要用 dedlete(此操作非常之危险,请务必减少此操作)   # 详解为什么删除用户推荐使用 drop 而不推荐使用 delete   1:因为 drop 可以删除用户和关联权限表中关于此用户的数据   2:以为 delete 仅仅只是删除了 mysql.user 的数据,而并不删除关联权限的表,需要 flush privileges 刷新权限,才会将权限关联表删除已经删除用户的权限关联信息   mysql> drop table user;   Query OK, 0 rows affected (0.00 sec)   mysql> show tables;   +-----------------------+   | Tables_in_g8s_manager |   +-----------------------+   | clusters              |   +-----------------------+   1 row in set (0.01 sec)   # 然后删除数据库(此操作同上风险)   mysql> create database old_g8s;   Query OK, 1 row affected (0.00 sec)   mysql> show databases;   +--------------------+   | Database           |   +--------------------+   | g8s_manager        |   | information_schema |   | mysql              |   | old_g8s            |   | performance_schema |   | sys                |   +--------------------+   6 rows in set (0.01 sec)   mysql> drop database old_g8s;   Query OK, 0 rows affected (0.02 sec)   mysql> show databases;   +--------------------+   | Database           |   +--------------------+   | g8s_manager        |   | information_schema |   | mysql              |   | performance_schema |   | sys                |   +--------------------+   5 rows in set (0.00 sec)   `
4:DML(数据库操作语言)
1:select 语句   # 基本的 select 语句   mysql> select id, name, version, kubeconfig from g8s_manager.clusters;   +----+-----------+---------+----------------------+   | id | name      | version | kubeconfig           |   +----+-----------+---------+----------------------+   |  1 | cluster-1 |       1 | {"name": "cluster1"} |   |  2 | cluster-2 |       1 | {"name": "cluster2"} |   |  3 | cluster-3 |       1 | {"name": "cluster3"} |   |  4 | cluster-4 |       1 | {"name": "cluster4"} |   |  5 | cluster-5 |       1 | {"name": "cluster5"} |   +----+-----------+---------+----------------------+   5 rows in set (0.00 sec)   # 格式化   mysql> select id, name, version, kubeconfig from g8s_manager.clusters\G;   *************************** 1. row ***************************           id: 1         name: cluster-1      version: 1   kubeconfig: {"name": "cluster1"}   *************************** 2. row ***************************           id: 2         name: cluster-2      version: 1   kubeconfig: {"name": "cluster2"}   *************************** 3. row ***************************           id: 3         name: cluster-3      version: 1   kubeconfig: {"name": "cluster3"}   *************************** 4. row ***************************           id: 4         name: cluster-4      version: 1   kubeconfig: {"name": "cluster4"}   ***************************  row ***************************           id: 5         name: cluster-5      version: 1   kubeconfig: {"name": "cluster5"}   5 rows in set (0.00 sec)   # 这里的 id, name, version, kubeconfig 都是表中已经存在的列,然后查询出来之后会以我们查询的列来展示数据   # 使用 where 来过滤数据   mysql> select id, name, version, kubeconfig from g8s_manager.clusters where id = 1;   +----+-----------+---------+----------------------+   | id | name      | version | kubeconfig           |   +----+-----------+---------+----------------------+   |  1 | cluster-1 |       1 | {"name": "cluster1"} |   +----+-----------+---------+----------------------+   1 row in set (0.01 sec   mysql> select id, name, version, kubeconfig from g8s_manager.clusters where id in(1);   +----+-----------+---------+----------------------+   | id | name      | version | kubeconfig           |   +----+-----------+---------+----------------------+   |  1 | cluster-1 |       1 | {"name": "cluster1"} |   +----+-----------+---------+----------------------+   1 row in set (0.00 sec)   mysql> select id, name, version, kubeconfig from g8s_manager.clusters where id not in(1);   +----+-----------+---------+----------------------+   | id | name      | version | kubeconfig           |   +----+-----------+---------+----------------------+   |  2 | cluster-2 |       1 | {"name": "cluster2"} |   |  3 | cluster-3 |       1 | {"name": "cluster3"} |   |  4 | cluster-4 |       1 | {"name": "cluster4"} |   |  5 | cluster-5 |       1 | {"name": "cluster5"} |   +----+-----------+---------+----------------------+   4 rows in set (0.00 sec)   mysql> select id, name, version, kubeconfig from g8s_manager.clusters where name = 'cluster-1';   +----+-----------+---------+----------------------+   | id | name      | version | kubeconfig           |   +----+-----------+---------+----------------------+   |  1 | cluster-1 |       1 | {"name": "cluster1"} |   +----+-----------+---------+----------------------+   1 row in set (0.00 sec)      # 然后我们还可以使用 order by 对结果进行排序   # 正序排序   mysql> select id, name, version, kubeconfig from g8s_manager.clusters order by name asc;   +----+-----------+---------+----------------------+   | id | name      | version | kubeconfig           |   +----+-----------+---------+----------------------+   |  1 | cluster-1 |       1 | {"name": "cluster1"} |   |  2 | cluster-2 |       1 | {"name": "cluster2"} |   |  3 | cluster-3 |       1 | {"name": "cluster3"} |   |  4 | cluster-4 |       1 | {"name": "cluster4"} |   |  5 | cluster-5 |       1 | {"name": "cluster5"} |   +----+-----------+---------+----------------------+   5 rows in set (0.00 sec)   # 倒序排序   mysql> select id, name, version, kubeconfig from g8s_manager.clusters order by name DESC;   +----+-----------+---------+----------------------+   | id | name      | version | kubeconfig           |   +----+-----------+---------+----------------------+   |  5 | cluster-5 |       1 | {"name": "cluster5"} |   |  4 | cluster-4 |       1 | {"name": "cluster4"} |   |  3 | cluster-3 |       1 | {"name": "cluster3"} |   |  2 | cluster-2 |       1 | {"name": "cluster2"} |   |  1 | cluster-1 |       1 | {"name": "cluster1"} |   +----+-----------+---------+----------------------+   5 rows in set (0.00 sec)   # 我们还可以限制每行的回显数量   mysql> select id, name, version, kubeconfig from g8s_manager.clusters limit 2;   +----+-----------+---------+----------------------+   | id | name      | version | kubeconfig           |   +----+-----------+---------+----------------------+   |  1 | cluster-1 |       1 | {"name": "cluster1"} |   |  2 | cluster-2 |       1 | {"name": "cluster2"} |   +----+-----------+---------+----------------------+   2 rows in set (0.00 sec)   # 然后我们可以将查询连接到其他表内   mysql> SELECT *  FROM clusters INNER JOIN new_clusters ON clusters.id = new_clusters.id\G;   *************************** 1. row ***************************           id: 1         name: cluster-1      version: 1   created_at: 2024-01-20 22:04:39   updated_at: 2024-01-20 22:04:39   kubeconfig: {"name": "cluster1"}           id: 1         name: cluster-6      version: 1   created_at: 2024-01-22 16:15:36   updated_at: 2024-01-22 16:15:36   kubeconfig: {"name": "cluster6"}   *************************** 2. row ***************************           id: 2         name: cluster-2      version: 1   created_at: 2024-01-20 22:04:59   updated_at: 2024-01-20 22:04:59   kubeconfig: {"name": "cluster2"}           id: 2         name: cluster-7      version: 1   created_at: 2024-01-22 16:15:43   updated_at: 2024-01-22 16:15:43   kubeconfig: {"name": "cluster7"}   *************************** 3. row ***************************           id: 3         name: cluster-3      version: 1   created_at: 2024-01-20 22:05:05   updated_at: 2024-01-20 22:05:05   kubeconfig: {"name": "cluster3"}           id: 3         name: cluster-8      version: 1   created_at: 2024-01-22 16:15:50   updated_at: 2024-01-22 16:15:50   kubeconfig: {"name": "cluster8"}   *************************** 4. row ***************************           id: 4         name: cluster-4      version: 1   created_at: 2024-01-20 22:05:11   updated_at: 2024-01-20 22:05:11   kubeconfig: {"name": "cluster4"}           id: 4         name: cluster-9      version: 1   created_at: 2024-01-22 16:15:56   updated_at: 2024-01-22 16:15:56   kubeconfig: {"name": "cluster9"}   ***************************  row ***************************           id: 5         name: cluster-5      version: 1   created_at: 2024-01-20 22:05:16   updated_at: 2024-01-20 22:05:16   kubeconfig: {"name": "cluster5"}           id: 5         name: cluster-10      version: 1   created_at: 2024-01-22 16:16:02   updated_at: 2024-01-22 16:16:02   kubeconfig: {"name": "cluster10"}   5 rows in set (0.00 sec)      # 可以看到数据来了   # 去除重复行   mysql> select distinct id, name from clusters;   +----+-----------+   | id | name      |   +----+-----------+   |  1 | cluster-1 |   |  2 | cluster-2 |   |  3 | cluster-3 |   |  4 | cluster-4 |   |  5 | cluster-5 |   |  6 | cluster-1 |   +----+-----------+   6 rows in set (0.00 sec)   # 可以看到 id 6 的 name 和 id 1 的 name 重复了,那么我们来去除这个重复行   mysql> select distinct name from clusters;   +-----------+   | name      |   +-----------+   | cluster-1 |   | cluster-2 |   | cluster-3 |   | cluster-4 |   | cluster-5 |   +-----------+   # 我们还可以使用聚合函数计算统计信息   # 计算总数据的数量   mysql> select count(name) from clusters;   +-------------+   | count(name) |   +-------------+   |           6 |   +-------------+   1 row in set (0.00 sec)   # 计算所有数据的平均值   mysql> select avg(id) from clusters;   +---------+   | avg(id) |   +---------+   |  3.5000 |   +---------+   1 row in set (0.00 sec)   # 计算所有数据的总和   mysql> select sum(id) from clusters;   +---------+   | sum(id) |   +---------+   |      21 |   +---------+   1 row in set (0.00 sec)   # 计算数据的最大值   mysql> select max(id) from clusters;   +---------+   | max(id) |   +---------+   |       6 |   +---------+   1 row in set (0.00 sec)   # 计算数据的最小值   mysql> select min(id) from clusters;   +---------+   | min(id) |   +---------+   |       1 |   +---------+   1 row in set (0.00 sec)   # 除此之外还有 group by 进行分组   mysql> select count(*) as count, name FROM clusters group by name;   +-------+-----------+   | count | name      |   +-------+-----------+   |     2 | cluster-1 |   |     1 | cluster-2 |   |     1 | cluster-3 |   |     1 | cluster-4 |   |     1 | cluster-5 |   +-------+-----------+   mysql> select count(*) as count, name FROM clusters group by name having count >= 2;   +-------+-----------+   | count | name      |   +-------+-----------+   |     2 | cluster-1 |   +-------+-----------+   1 row in set (0.00 sec)   # 其次我们还可以嵌套查询   mysql> select id, name from clusters where name in (select name from clusters);   +----+-----------+   | id | name      |   +----+-----------+   |  1 | cluster-1 |   |  2 | cluster-2 |   |  3 | cluster-3 |   |  4 | cluster-4 |   |  5 | cluster-5 |   |  6 | cluster-1 |   +----+-----------+   6 rows in set (0.00 sec)   2:insert 语句   # 插入数据   mysql> insert into clusters (name, version, created_at, updated_at, kubeconfig) values ('cluster-2', 1, NOW(), NOW(), '{"name": "cluster2"}');   Query OK, 1 row affected (0.01 sec)   mysql> select * from clusters;   +----+-----------+---------+---------------------+---------------------+----------------------+   | id | name      | version | created_at          | updated_at          | kubeconfig           |   +----+-----------+---------+---------------------+---------------------+----------------------+   |  1 | cluster-1 |       1 | 2024-01-20 22:04:39 | 2024-01-20 22:04:39 | {"name": "cluster1"} |   |  2 | cluster-2 |       1 | 2024-01-20 22:04:59 | 2024-01-20 22:04:59 | {"name": "cluster2"} |   |  3 | cluster-3 |       1 | 2024-01-20 22:05:05 | 2024-01-20 22:05:05 | {"name": "cluster3"} |   |  4 | cluster-4 |       1 | 2024-01-20 22:05:11 | 2024-01-20 22:05:11 | {"name": "cluster4"} |   |  5 | cluster-5 |       1 | 2024-01-20 22:05:16 | 2024-01-20 22:05:16 | {"name": "cluster5"} |   |  6 | cluster-1 |       1 | 2024-01-22 19:27:51 | 2024-01-22 19:27:51 | {"name": "cluster1"} |   |  7 | cluster-2 |       1 | 2024-01-22 22:19:13 | 2024-01-22 22:19:13 | {"name": "cluster2"} |   +----+-----------+---------+---------------------+---------------------+----------------------+   7 rows in set (0.00 sec)   # 还有基于条件的插入数据,不过这个要谨慎使用了   3:delete 语句   # 我们需要记住,删除操作的时候我们最好是开启事务,确认好了之后再 commit,这样可以保证我们的数据是安全删除,其次就是有确认 sql 的可能性   # 删除满足条件的记录   mysql> select * from clusters;   +----+-----------+---------+---------------------+---------------------+----------------------+   | id | name      | version | created_at          | updated_at          | kubeconfig           |   +----+-----------+---------+---------------------+---------------------+----------------------+   |  1 | cluster-1 |       1 | 2024-01-20 22:04:39 | 2024-01-20 22:04:39 | {"name": "cluster1"} |   |  2 | cluster-2 |       1 | 2024-01-20 22:04:59 | 2024-01-20 22:04:59 | {"name": "cluster2"} |   |  3 | cluster-3 |       1 | 2024-01-20 22:05:05 | 2024-01-20 22:05:05 | {"name": "cluster3"} |   |  4 | cluster-4 |       1 | 2024-01-20 22:05:11 | 2024-01-20 22:05:11 | {"name": "cluster4"} |   |  5 | cluster-5 |       1 | 2024-01-20 22:05:16 | 2024-01-20 22:05:16 | {"name": "cluster5"} |   |  6 | cluster-1 |       1 | 2024-01-22 19:27:51 | 2024-01-22 19:27:51 | {"name": "cluster1"} |   |  7 | cluster-2 |       1 | 2024-01-22 22:19:13 | 2024-01-22 22:19:13 | {"name": "cluster2"} |   +----+-----------+---------+---------------------+---------------------+----------------------+   7 rows in set (0.00 sec)   # 删除 ID 大于 5 的数据   mysql> delete from clusters where id > 5;   Query OK, 2 rows affected (0.01 sec)   mysql> select * from clusters;   +----+-----------+---------+---------------------+---------------------+----------------------+   | id | name      | version | created_at          | updated_at          | kubeconfig           |   +----+-----------+---------+---------------------+---------------------+----------------------+   |  1 | cluster-1 |       1 | 2024-01-20 22:04:39 | 2024-01-20 22:04:39 | {"name": "cluster1"} |   |  2 | cluster-2 |       1 | 2024-01-20 22:04:59 | 2024-01-20 22:04:59 | {"name": "cluster2"} |   |  3 | cluster-3 |       1 | 2024-01-20 22:05:05 | 2024-01-20 22:05:05 | {"name": "cluster3"} |   |  4 | cluster-4 |       1 | 2024-01-20 22:05:11 | 2024-01-20 22:05:11 | {"name": "cluster4"} |   |  5 | cluster-5 |       1 | 2024-01-20 22:05:16 | 2024-01-20 22:05:16 | {"name": "cluster5"} |   +----+-----------+---------+---------------------+---------------------+----------------------+   5 rows in set (0.00 sec)   # 我们还可以删除部分行数   mysql> delete from clusters limit 5;   Query OK, 5 rows affected (0.01 sec)   mysql> select * from clusters;   +----+-----------+---------+---------------------+---------------------+----------------------+   | id | name      | version | created_at          | updated_at          | kubeconfig           |   +----+-----------+---------+---------------------+---------------------+----------------------+   |  8 | cluster-1 |       1 | 2024-01-22 22:24:51 | 2024-01-22 22:24:51 | {"name": "cluster1"} |   |  9 | cluster-2 |       1 | 2024-01-22 22:24:56 | 2024-01-22 22:24:56 | {"name": "cluster2"} |   | 10 | cluster-3 |       1 | 2024-01-22 22:25:01 | 2024-01-22 22:25:01 | {"name": "cluster3"} |   | 11 | cluster-4 |       1 | 2024-01-22 22:25:07 | 2024-01-22 22:25:07 | {"name": "cluster4"} |   | 12 | cluster-5 |       1 | 2024-01-22 22:25:12 | 2024-01-22 22:25:12 | {"name": "cluster5"} |   +----+-----------+---------+---------------------+---------------------+----------------------+   5 rows in set (0.00 sec)   mysql> select * from clusters;   Empty set (0.00 sec)   # 我们还可以删除数据库中重复的记录   mysql> select * from clusters;   +----+-----------+---------+---------------------+---------------------+----------------------+   | id | name      | version | created_at          | updated_at          | kubeconfig           |   +----+-----------+---------+---------------------+---------------------+----------------------+   |  8 | cluster-1 |       1 | 2024-01-22 22:24:51 | 2024-01-22 22:24:51 | {"name": "cluster1"} |   |  9 | cluster-2 |       1 | 2024-01-22 22:24:56 | 2024-01-22 22:24:56 | {"name": "cluster2"} |   | 10 | cluster-3 |       1 | 2024-01-22 22:25:01 | 2024-01-22 22:25:01 | {"name": "cluster3"} |   | 11 | cluster-4 |       1 | 2024-01-22 22:25:07 | 2024-01-22 22:25:07 | {"name": "cluster4"} |   | 12 | cluster-5 |       1 | 2024-01-22 22:25:12 | 2024-01-22 22:25:12 | {"name": "cluster5"} |   | 13 | cluster-1 |       1 | 2024-01-22 22:25:53 | 2024-01-22 22:25:53 | {"name": "cluster1"} |   | 14 | cluster-2 |       1 | 2024-01-22 22:25:59 | 2024-01-22 22:25:59 | {"name": "cluster2"} |   | 15 | cluster-3 |       1 | 2024-01-22 22:26:04 | 2024-01-22 22:26:04 | {"name": "cluster3"} |   +----+-----------+---------+---------------------+---------------------+----------------------+   8 rows in set (0.00 sec)   mysql> DELETE t1 FROM clusters t1       -> INNER JOIN clusters t2       -> WHERE t1.id > t2.id AND t1.name = t2.name;   Query OK, 3 rows affected (0.00 sec)   mysql> select * from clusters;   +----+-----------+---------+---------------------+---------------------+----------------------+   | id | name      | version | created_at          | updated_at          | kubeconfig           |   +----+-----------+---------+---------------------+---------------------+----------------------+   |  8 | cluster-1 |       1 | 2024-01-22 22:24:51 | 2024-01-22 22:24:51 | {"name": "cluster1"} |   |  9 | cluster-2 |       1 | 2024-01-22 22:24:56 | 2024-01-22 22:24:56 | {"name": "cluster2"} |   | 10 | cluster-3 |       1 | 2024-01-22 22:25:01 | 2024-01-22 22:25:01 | {"name": "cluster3"} |   | 11 | cluster-4 |       1 | 2024-01-22 22:25:07 | 2024-01-22 22:25:07 | {"name": "cluster4"} |   | 12 | cluster-5 |       1 | 2024-01-22 22:25:12 | 2024-01-22 22:25:12 | {"name": "cluster5"} |   +----+-----------+---------+---------------------+---------------------+----------------------+   5 rows in set (0.00 sec)   # 这个 SQL 的意思是 使用 JOIN 子句来连接 clusters 表中的两个副本 t1 和 t2。然后,它会使用 WHERE 子句来删除 t1 表中的记录,其中 t1.id 大于 t2.id 并且 t1.name 等于 t2.name。   # 模拟删除数据误删了   mysql> select * from clusters;   +----+-----------+---------+---------------------+---------------------+----------------------+   | id | name      | version | created_at          | updated_at          | kubeconfig           |   +----+-----------+---------+---------------------+---------------------+----------------------+   |  1 | cluster-1 |       1 | 2024-01-23 05:44:43 | 2024-01-23 05:44:43 | {"name": "cluster1"} |   |  2 | cluster-2 |       1 | 2024-01-23 05:44:47 | 2024-01-23 05:44:47 | {"name": "cluster2"} |   |  3 | cluster-3 |       1 | 2024-01-23 05:44:53 | 2024-01-23 05:44:53 | {"name": "cluster3"} |   |  4 | cluster-4 |       1 | 2024-01-23 05:44:58 | 2024-01-23 05:44:58 | {"name": "cluster4"} |   |  5 | cluster-5 |       1 | 2024-01-23 05:45:02 | 2024-01-23 05:45:02 | {"name": "cluster5"} |   |  6 | cluster-6 |       1 | 2024-01-23 05:51:18 | 2024-01-23 05:51:18 | {"name": "cluster6"} |   +----+-----------+---------+---------------------+---------------------+----------------------+   6 rows in set (0.00 sec)   # 开启事务   mysql> begin;   Query OK, 0 rows affected (0.00 sec)   # 删除数据   mysql> delete from clusters where id = 6;   Query OK, 1 row affected (0.00 sec)   # 查看到数据已经被删了,但是开启了事务,那么我们可以回滚   mysql> select * from clusters;   +----+-----------+---------+---------------------+---------------------+----------------------+   | id | name      | version | created_at          | updated_at          | kubeconfig           |   +----+-----------+---------+---------------------+---------------------+----------------------+   |  1 | cluster-1 |       1 | 2024-01-23 05:44:43 | 2024-01-23 05:44:43 | {"name": "cluster1"} |   |  2 | cluster-2 |       1 | 2024-01-23 05:44:47 | 2024-01-23 05:44:47 | {"name": "cluster2"} |   |  3 | cluster-3 |       1 | 2024-01-23 05:44:53 | 2024-01-23 05:44:53 | {"name": "cluster3"} |   |  4 | cluster-4 |       1 | 2024-01-23 05:44:58 | 2024-01-23 05:44:58 | {"name": "cluster4"} |   |  5 | cluster-5 |       1 | 2024-01-23 05:45:02 | 2024-01-23 05:45:02 | {"name": "cluster5"} |   +----+-----------+---------+---------------------+---------------------+----------------------+   5 rows in set (0.00 sec)   # 执行回滚   mysql> rollback;   Query OK, 0 rows affected (0.00 sec)   # 再次查看数据   mysql> select * from clusters;   +----+-----------+---------+---------------------+---------------------+----------------------+   | id | name      | version | created_at          | updated_at          | kubeconfig           |   +----+-----------+---------+---------------------+---------------------+----------------------+   |  1 | cluster-1 |       1 | 2024-01-23 05:44:43 | 2024-01-23 05:44:43 | {"name": "cluster1"} |   |  2 | cluster-2 |       1 | 2024-01-23 05:44:47 | 2024-01-23 05:44:47 | {"name": "cluster2"} |   |  3 | cluster-3 |       1 | 2024-01-23 05:44:53 | 2024-01-23 05:44:53 | {"name": "cluster3"} |   |  4 | cluster-4 |       1 | 2024-01-23 05:44:58 | 2024-01-23 05:44:58 | {"name": "cluster4"} |   |  5 | cluster-5 |       1 | 2024-01-23 05:45:02 | 2024-01-23 05:45:02 | {"name": "cluster5"} |   |  6 | cluster-6 |       1 | 2024-01-23 05:51:18 | 2024-01-23 05:51:18 | {"name": "cluster6"} |   +----+-----------+---------+---------------------+---------------------+----------------------+   6 rows in set (0.00 sec)   # 可以看到数据回滚回来了,那么这个就是事务的好处,如果确认了数据没有删错,我们直接执行 commit 就可以确认删除数据了   4:update 语句   # 更新数据   mysql> begin;   Query OK, 0 rows affected (0.00 sec)   mysql> update clusters set version = 2 where id = 1;   Query OK, 1 row affected (0.00 sec)   Rows matched: 1  Changed: 1  Warnings: 0   mysql> select * from clusters;   +----+-----------+---------+---------------------+---------------------+----------------------+   | id | name      | version | created_at          | updated_at          | kubeconfig           |   +----+-----------+---------+---------------------+---------------------+----------------------+   |  1 | cluster-1 |       2 | 2024-01-23 05:44:43 | 2024-01-23 05:44:43 | {"name": "cluster1"} |   |  2 | cluster-2 |       1 | 2024-01-23 05:44:47 | 2024-01-23 05:44:47 | {"name": "cluster2"} |   |  3 | cluster-3 |       1 | 2024-01-23 05:44:53 | 2024-01-23 05:44:53 | {"name": "cluster3"} |   |  4 | cluster-4 |       1 | 2024-01-23 05:44:58 | 2024-01-23 05:44:58 | {"name": "cluster4"} |   |  5 | cluster-5 |       1 | 2024-01-23 05:45:02 | 2024-01-23 05:45:02 | {"name": "cluster5"} |   |  6 | cluster-6 |       1 | 2024-01-23 05:51:18 | 2024-01-23 05:51:18 | {"name": "cluster6"} |   +----+-----------+---------+---------------------+---------------------+----------------------+   6 rows in set (0.00 sec)   mysql> commit;   Query OK, 0 rows affected (0.01 sec)   mysql> select * from clusters;   +----+-----------+---------+---------------------+---------------------+----------------------+   | id | name      | version | created_at          | updated_at          | kubeconfig           |   +----+-----------+---------+---------------------+---------------------+----------------------+   |  1 | cluster-1 |       2 | 2024-01-23 05:44:43 | 2024-01-23 05:44:43 | {"name": "cluster1"} |   |  2 | cluster-2 |       1 | 2024-01-23 05:44:47 | 2024-01-23 05:44:47 | {"name": "cluster2"} |   |  3 | cluster-3 |       1 | 2024-01-23 05:44:53 | 2024-01-23 05:44:53 | {"name": "cluster3"} |   |  4 | cluster-4 |       1 | 2024-01-23 05:44:58 | 2024-01-23 05:44:58 | {"name": "cluster4"} |   |  5 | cluster-5 |       1 | 2024-01-23 05:45:02 | 2024-01-23 05:45:02 | {"name": "cluster5"} |   |  6 | cluster-6 |       1 | 2024-01-23 05:51:18 | 2024-01-23 05:51:18 | {"name": "cluster6"} |   +----+-----------+---------+---------------------+---------------------+----------------------+   6 rows in set (0.00 sec)   # 我们还可以改多条数据   Database changed   mysql> update clusters set version = 2 where id in (1,2,3);   Query OK, 2 rows affected (0.00 sec)   Rows matched: 3  Changed: 2  Warnings: 0   mysql> select * from clusters;   +----+-----------+---------+---------------------+---------------------+----------------------+   | id | name      | version | created_at          | updated_at          | kubeconfig           |   +----+-----------+---------+---------------------+---------------------+----------------------+   |  1 | cluster-1 |       2 | 2024-01-23 05:44:43 | 2024-01-23 05:44:43 | {"name": "cluster1"} |   |  2 | cluster-2 |       2 | 2024-01-23 05:44:47 | 2024-01-23 05:44:47 | {"name": "cluster2"} |   |  3 | cluster-3 |       2 | 2024-01-23 05:44:53 | 2024-01-23 05:44:53 | {"name": "cluster3"} |   |  4 | cluster-4 |       1 | 2024-01-23 05:44:58 | 2024-01-23 05:44:58 | {"name": "cluster4"} |   |  5 | cluster-5 |       1 | 2024-01-23 05:45:02 | 2024-01-23 05:45:02 | {"name": "cluster5"} |   |  6 | cluster-6 |       1 | 2024-01-23 05:51:18 | 2024-01-23 05:51:18 | {"name": "cluster6"} |   +----+-----------+---------+---------------------+---------------------+----------------------+   6 rows in set (0.00 sec)   
5:DCL(数据库控制语言)

DCL 理论上包括 GRANT,REVORK 语句,但是这个放在权限讲可能更合适

1:连接方式
TCP/IP 套接字方式是网络中使用的最多的一种方式,CS 通信下最常用,client 和 server 端可以不在一个服务器上   root@ubuntu:~# mysql -u<username> -p<password> -P <port> -h <ipaddress>   1:<username>:数据库的账号   2:<password>:数据库的密码   3:<port>:数据库服务器的端口   4:<ipaddress>:数据库服务器的地址   其次就是我们还可以使用 Unix 域 套接字,但是这个只能在数据库服务器上使用   root@ubuntu:~# mysql -u<username> -p<password> --socket=<sock_path>   1:<username>:数据库的账号   2:<password>:数据库的密码   3:<sock_path>:数据库的 sock 文件   
2:权限管理
`# 在 MySQL 中,一个可用的账号 = 用户 + 主机 + 密码   mysql> select user,host,authentication_string from mysql.user where user = 'root';   +------+-----------+------------------------------------------------------------------------+   | user | host      | authentication_string                                                  |   +------+-----------+------------------------------------------------------------------------+   | root | localhost | $A$005$ uoum[m[O!E9pPDSX1zHBlKwS8GC/Ajo3rPIBMHbfIRYL5ovJL9H6 |   +------+-----------+------------------------------------------------------------------------+   1 row in set (0.01 sec)   mysql> select user,host,concat(user,'@',''',host,'''), authentication_string from mysql.user;   +------------------+-----------+-------------------------------+------------------------------------------------------------------------+   | user             | host      | concat(user,'@',''',host,''') | authentication_string                                                  |   +------------------+-----------+-------------------------------+------------------------------------------------------------------------+   | mysql.infoschema | localhost | mysql.infoschema@',host,'     | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |   | mysql.session    | localhost | mysql.session@',host,'        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |   | mysql.sys        | localhost | mysql.sys@',host,'            | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |   | root             | localhost | root@',host,'                 | $A$005$ uoum[m[O!E9pPDSX1zHBlKwS8GC/Ajo3rPIBMHbfIRYL5ovJL9H6           |   +------------------+-----------+-------------------------------+------------------------------------------------------------------------+   4 rows in set (0.00 sec)   # 创建用户,授权,回收权限   mysql> create user 'g8s_admin'@'%' identified with caching_sha2_password by 'MTIzNDU2Cg==';   Query OK, 0 rows affected (0.02 sec)   mysql> select user,host,concat(user,'@',''',host,'''), authentication_string from mysql.user;   +------------------+-----------+-------------------------------+------------------------------------------------------------------------+   | user             | host      | concat(user,'@',''',host,''') | authentication_string                                                  |   +------------------+-----------+-------------------------------+------------------------------------------------------------------------+   | g8s_admin        | %         | g8s_admin@',host,'            | $A$005$8>tqM'zIO#  +uT:shyPtYmFmKaXKC5utHWIrkS0JNlSZriiG0pUP2qAv20 |   | mysql.infoschema | localhost | mysql.infoschema@',host,'     | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |   | mysql.session    | localhost | mysql.session@',host,'        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |   | mysql.sys        | localhost | mysql.sys@',host,'            | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |   | root             | localhost | root@',host,'                 | $A$005$ uoum[m[O!E9pPDSX1zHBlKwS8GC/Ajo3rPIBMHbfIRYL5ovJL9H6 |   +------------------+-----------+-------------------------------+------------------------------------------------------------------------+   5 rows in set (0.00 sec)   # 授权   mysql> grant select on g8s_manager.* to 'g8s_admin'@'%';   Query OK, 0 rows affected (0.00 sec)   # 授权 select 权限给 g8s_manager 数据库中的所有表给用户 'g8s_admin'@'%'   root@ubuntu:~# mysql -ug8s_admin -p$password   ...   mysql> show databases;   +--------------------+   | Database           |   +--------------------+   | g8s_manager        |   | information_schema |   | performance_schema |   +--------------------+   3 rows in set (0.02 sec)   # select 权限   mysql> select * from g8s_manager.clusters;   +----+-----------+---------+---------------------+---------------------+----------------------+   | id | name      | version | created_at          | updated_at          | kubeconfig           |   +----+-----------+---------+---------------------+---------------------+----------------------+   |  1 | cluster-1 |       1 | 2024-01-23 05:44:43 | 2024-01-23 05:44:43 | {"name": "cluster1"} |   |  2 | cluster-2 |       1 | 2024-01-23 05:44:47 | 2024-01-23 05:44:47 | {"name": "cluster2"} |   |  3 | cluster-3 |       1 | 2024-01-23 05:44:53 | 2024-01-23 05:44:53 | {"name": "cluster3"} |   |  4 | cluster-4 |       1 | 2024-01-23 05:44:58 | 2024-01-23 05:44:58 | {"name": "cluster4"} |   |  5 | cluster-5 |       1 | 2024-01-23 05:45:02 | 2024-01-23 05:45:02 | {"name": "cluster5"} |   |  6 | cluster-6 |       1 | 2024-01-23 05:51:18 | 2024-01-23 05:51:18 | {"name": "cluster6"} |   +----+-----------+---------+---------------------+---------------------+----------------------+   6 rows in set (0.00 sec)   # drop 表   mysql> drop table g8s_manager.clusters;   ERROR 1142 (42000): DROP command denied to user 'g8s_admin'@'localhost' for table 'clusters'   # 可以看到权限不足,然后我们回收权限   mysql> revoke select on g8s_manager.* from 'g8s_admin'@'%';   Query OK, 0 rows affected (0.00 sec)   # 再次登录   # 查询库   mysql> show databases;   +--------------------+   | Database           |   +--------------------+   | information_schema |   | performance_schema |   +--------------------+   2 rows in set (0.00 sec)   # 查询数据,权限不足了   mysql> select * from g8s_manager.clusters;   ERROR 1142 (42000): SELECT command denied to user 'g8s_admin'@'localhost' for table 'clusters'   # 这里我们要扩展一个知识点:比如你授权的时候给一个用户授权了 % 为所有权限,然后又授权了 10.0.0.% 为只读权限,那么当你用 10.0.0.x 网段登录的时候,权限也只有只读而并非所有权限,这个是 MySQL 权限的优先级   # 其次就是我们要给大家扩展一下 MySQL 8.0 中的 Role 的功能,我们都知道 角色其实就是一组权限的集合,所以我们可以根据角色来将一组权限分配给某个用户,我们来熟悉一下 Role   # 创建角色   mysql> create role cpc_develop;   Query OK, 0 rows affected (0.00 sec)   mysql> create role cpc_operation;   Query OK, 0 rows affected (0.00 sec)   mysql> create role cpc_admin;   Query OK, 0 rows affected (0.01 sec)   # 可以看到这里创建了三个角色,分别是 cpc 项目的开发角色,运维角色,管理角色   # 创建用户   mysql> create user 'cpc_develop_jiasen'@'%' identified by 'MTIzNDU2Cg==';   Query OK, 0 rows affected (0.00 sec)   mysql> create user 'cpc_operation_dangjiaqi'@'%' identified by 'MTIzNDU2Cg==';   Query OK, 0 rows affected (0.01 sec)   mysql> create user 'cpc_admin_zhaoziyao'@'%' identified by 'MTIzNDU2Cg==';   Query OK, 0 rows affected (0.01 sec)   # 为相应角色授权(将多个权限加入到角色内)   mysql> grant create,update,select,insert on cpc.* to cpc_develop;   Query OK, 0 rows affected (0.00 sec)   mysql> grant create,update,select,insert,alter,delete on cpc.* to cpc_operation;   Query OK, 0 rows affected (0.00 sec)   mysql> grant all on cpc.* to cpc_admin;   Query OK, 0 rows affected (0.00 sec)   # 将角色授权给特定用户   mysql> grant cpc_develop to 'cpc_develop_jiasen'@'%';   Query OK, 0 rows affected (0.00 sec)   mysql> grant cpc_operation to 'cpc_operation_dangjiaqi'@'%';   Query OK, 0 rows affected (0.00 sec)   mysql> grant cpc_admin to 'cpc_admin_zhaoziyao'@'%';   Query OK, 0 rows affected (0.00 sec)   # 分别测试三个用户(用户登录后要激活权限哦)   mysql> show grants;   +-----------------------------------------------------+   | Grants for cpc_develop_jiasen@%                     |   +-----------------------------------------------------+   | GRANT USAGE ON *.* TO `cpc_develop_jiasen`@`%`      |   | GRANT `cpc_develop`@`%` TO `cpc_develop_jiasen`@`%` |   +-----------------------------------------------------+   2 rows in set (0.00 sec)   # 激活角色   mysql> set role cpc_develop;   Query OK, 0 rows affected (0.00 sec)   # 测试权限 insert 权限   mysql> insert into cpc.clusters (name, version, created_at, updated_at, kubeconfig) values ('cluster-6', 1, NOW(), NOW(), '{"name": "cluster6"}');   Query OK, 1 row affected (0.01 sec)   # 查询数据权限   mysql> select * from cpc.clusters;   +----+-----------+---------+---------------------+---------------------+----------------------+   | id | name      | version | created_at          | updated_at          | kubeconfig           |   +----+-----------+---------+---------------------+---------------------+----------------------+   |  1 | cluster-1 |       1 | 2024-01-24 14:12:57 | 2024-01-24 14:12:57 | {"name": "cluster1"} |   |  2 | cluster-2 |       1 | 2024-01-24 14:13:05 | 2024-01-24 14:13:05 | {"name": "cluster2"} |   |  3 | cluster-3 |       1 | 2024-01-24 14:13:10 | 2024-01-24 14:13:10 | {"name": "cluster3"} |   |  4 | cluster-4 |       1 | 2024-01-24 14:13:14 | 2024-01-24 14:13:14 | {"name": "cluster4"} |   |  5 | cluster-5 |       1 | 2024-01-24 14:13:20 | 2024-01-24 14:13:20 | {"name": "cluster5"} |   |  6 | cluster-6 |       1 | 2024-01-24 15:23:39 | 2024-01-24 15:23:39 | {"name": "cluster6"} |   +----+-----------+---------+---------------------+---------------------+----------------------+   6 rows in set (0.00 sec)   # 没有 delete 权限   mysql> drop table cpc_developer.clusters;   ERROR 1142 (42000): DROP command denied to user 'cpc_develop_jiasen'@'localhost' for table 'clusters'   # 其次我们再来测试一下其他权限   mysql> set role cpc_operation;   Query OK, 0 rows affected (0.00 sec)   mysql> show databases;   +--------------------+   | Database           |   +--------------------+   | cpc                |   | information_schema |   | performance_schema |   +--------------------+   3 rows in set (0.01 sec)   mysql> show tables from cpc;   +---------------+   | Tables_in_cpc |   +---------------+   | clusters      |   +---------------+   1 row in set (0.00 sec)   # 删除数据   mysql> delete from cpc.clusters where id = 6;   Query OK, 1 row affected (0.00 sec)   # 查询数据   mysql> select * from cpc.clusters;   +----+-----------+---------+---------------------+---------------------+----------------------+   | id | name      | version | created_at          | updated_at          | kubeconfig           |   +----+-----------+---------+---------------------+---------------------+----------------------+   |  1 | cluster-1 |       1 | 2024-01-24 14:12:57 | 2024-01-24 14:12:57 | {"name": "cluster1"} |   |  2 | cluster-2 |       1 | 2024-01-24 14:13:05 | 2024-01-24 14:13:05 | {"name": "cluster2"} |   |  3 | cluster-3 |       1 | 2024-01-24 14:13:10 | 2024-01-24 14:13:10 | {"name": "cluster3"} |   |  4 | cluster-4 |       1 | 2024-01-24 14:13:14 | 2024-01-24 14:13:14 | {"name": "cluster4"} |   |  5 | cluster-5 |       1 | 2024-01-24 14:13:20 | 2024-01-24 14:13:20 | {"name": "cluster5"} |   +----+-----------+---------+---------------------+---------------------+----------------------+   # 删除数据表的权限   mysql> drop table cpc.clusters;   ERROR 1142 (42000): DROP command denied to user 'cpc_operation_dangjiaqi'@'localhost' for table 'clusters'   # 测试 cpc_admin 角色权限的用户   mysql> set role cpc_admin;   Query OK, 0 rows affected (0.00 sec)   mysql> show databases;   +--------------------+   | Database           |   +--------------------+   | cpc                |   | information_schema |   | performance_schema |   +--------------------+   3 rows in set (0.01 sec)   mysql> show tables from cpc;   +---------------+   | Tables_in_cpc |   +---------------+   | clusters      |   +---------------+   1 row in set (0.01 sec)   mysql> drop table clusters;   Query OK, 0 rows affected (0.01 sec)   mysql> show tables;   Empty set (0.01 sec)   # 那么这个就是角色的概念和使用   # 各种版本权限管理命令的变化(6,7,8.0)   password函数在不同 MySQL 版本下面加密的结果一致,MySQL 8.0 版本中,password 函数被取消   `

|
| show grants for | show create user | grant select on *.* to *.* identified by ‘xxx’ | mysql.user 表密码串字段 |
| — | — | — | — | — |
| 55 | 权限 + 密码 | 不可用 | 可用 | password |
| 7 | 权限 | 用户密码 | 可用 | authentication_string |
| 8.0 | 权限 | 用户密码 | 不可用 | authentication_string |

3:常规函数
说明函数
字符串函数CONCAT,SUBSTRING,LENGTH,UPPER,LOWER,TRIM,REPLACE …
数值函数ABS,ROUNO,CEIL,FLOOR,MOD,RAND …
日期和时间函数NOW,CURDATE,CURTIME,TIME,YEAR,MONTH,DAY …
条件函数IF,CASE(一般存储过程等写,不建议 MySQL 中使用存储过程,业务逻辑尽量再业务代码中实现) …
聚合函数COUNT,SUM,AVG,MIN,MAX(一般查询中用) …
分组函数GROUP,CONCAT,GROUP BY …
转换函数CAST,CONVENRT …
数据类型函数CAST,CONVERT,DATE_FORMAT …
数据库函数DATABASE,USER,VERSION …
系统函数SLEEP …

黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

1.学习路线图

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。

(都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

MySQL详细学习教程(一) SQL的分类:DDL数据定义语言,用来定义数据库对象:数据库,表,列等;DML数据操作语言,用来对数据库中表的数据进行增删改DQL数据查询语言,用来查询;数据库中表的记录(数据),DCL数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户。 阅读详情

相关推荐

(收藏)MySQL从入门到进阶这一篇就够了

https://blog.youkuaiyun.com/qq_38490457/article/details/107640904?utm_source=app

weixin_42208959的博客 4983

Mysql详细教程(建议收藏)

顾名思义是用来组织、存储和管理数据的仓库。为了方便管理互联网世界中的数据,就有了数据库管理系统的概念(简称:数据库)。用户可以对数据库中的数据进行新增、查询、更新、删除等操作。不论我们使用的是上面的哪一个关系型数据库,在操作时,使用SQL语言的语法是一样的。所以学习了MySQL, 基本上等于学会了操作其它关系型数据库。章哥就是从SQL Server 到 Mysql的无缝衔接。

m0_63758722的博客 1万+

MYSQL 学习指南 (看完这篇就够了,万字收藏!!!)

数据类型决定了,mysql中所有列都具有数据类型,以决定能够存储哪种数据。本篇章数据库基础已经讲完啦,小伙伴一定要把基础知识学扎实了。虽然像jdbc这种实现方式在实际开发中已经被MyBatis、MyBatis Plus、 JPA这样封装好了的框架所替代。但是在我们面试中却会被面试官经常问到这些基础性的知识(例如:要你手写jdbd连接数据库代码。)所以大伙们不可以轻视这些基础的知识点。

小斜同学的博客 4692

MySQL学习教程(超详细步骤)

mysql从安装到卸载,从建数据库到数据库设计三范式

thewhat的博客 8775

MySQL超详细学习教程,2023年硬核学习路线

为什么学习MySQL?这是一篇 MySQL 通关一篇过硬经验学习路线,包括数据库相关知识,SQL语句的使用,数据库约束,设计等。未来是一个数字化的时代,数据是我们最为宝贵的资源,不论是哪个专业出身,未来或多或少都会卷入数据时代的浪潮之中。而那些前提性的工作基本都是依靠`数据库`来完成。

zhangxia_的博客 4万+

MySQL呕血汇总--从基础到毕业【收藏篇】

MYSQL目录前言一、MYSQL基础1.安装2.数据库介绍2.1.什么是数据库?2.2.实体(类)和表关系2.3.常见关系型数据库3.MYSQL基础操作❤重点❤3.1.启动关闭3.2.DDL(数据定义语言,这些语句定义不同的数据段、数据库、表、列、索引等数据库对象。常用语句关键字主要包括create,drop,alter等)3.2.1.操作数据库3.2.2.操作表3.3.DML(数据操作语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性。常用语句关键字主要包括 insert,delete,upda

白大锅的博客,毕设WangLoveBai_999 11万+

MySQL保姆级教程(基础篇)从小白到高手的进阶指南,从零基础到精通,收藏这篇就够了!

本教程精心编撰,旨在为初学者提供一条从零开始的MySQL学习路径。系统地掌握MySQL的核心知识,包括但不限于数据库的无缝安装、底层架构揭秘、存储引擎解析、高效索引构建、锁机制探秘、两阶段提交详解,以及高可用架构的设计与实现。无论你是数据库领域的新人,还是希望深化MySQL技能的从业者,这都是一份不可多得的学习资料,助你全方位、多层次地掌握MySQL的精髓。MySQL 5.6 算是 MySQL 历史上的的一个的一个里成本。

baimao__Ch的博客 1220

MySQL笔记:B站康师傅天花板教程(持续更新)

✅作者简介:大家好,我是Cisyam,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉💞当前专栏:✨特色专栏:🥭本文内容:MySQL笔记:B站康师傅天花板教程(持续更新),欢迎大家访问📚个人知识库:,欢迎大家访问B站康师傅MySQL天花板教程笔记: 最详细,最全面,最硬核!!!下面是对章节与视频的对应关系和学习建议【MySQL上篇:基础篇】【第1子篇:数据库概述与MySQL安装篇】p01-p11。

分享思想,留下痕迹。 3万+

【基础篇】MySQL保姆级教程从小白到高手的进阶指南,从零基础到精通,收藏这篇就够了!

本文是一篇MySQL基础教程,全面介绍了MySQL从5.5到8.0版本的演进历程及核心特性。重点解析了各版本重大更新:5.5版本将InnoDB设为默认引擎;5.6引入GTID复制、Online DDL等;5.7版本新增组复制、JSON支持等;8.0版本带来原子DDL、窗口函数等创新功能。教程系统梳理了MySQL在存储引擎、索引优化、锁机制等方面的技术演进,适合数据库初学者系统学习MySQL核心知识,也帮助开发者掌握最新技术特性,是一份完整的MySQL学习指南。

fly_enum的博客 857

手教你如何使用Simulink和相关工具箱模拟和实现无人机的多机接力信号中继的建模

扩大通信范围:单架无人机的通信能力有限,通过多机接力的方式可以显著扩展通信覆盖范围。提高可靠性:当某架无人机出现故障或电量不足时,其他无人机可以接管其任务,确保通信不中断。适应复杂环境:在山区、森林等复杂地形中,多机接力可以绕过障碍物,建立稳定的通信链路。使用Communications Toolbox中的模块来模拟无线通信链路。例如,可以使用模块模拟噪声信道,或者使用模块计算信号衰减。matlab深色版本。

MHD0815的博客 767

PIV实验流场流速云图(MALAB contour函数用法)

clear;clc; for k=1:5 str1=['filename1']; str2=['filename2']; str3=['filename3']; str=eval(['str',num2str(k)]); load(str); [m n]=size(y); y=flipud(y); v=-v; x=x-x(1,...

Nick_Cui的博客 3223

别怕SQL!这份MySQL保姆级教程让你从入门到上头

从安装与配置开始,详细讲解了Windows和Linux环境下的MySQL部署步骤。在数据类型部分,深入解析了数值、字符、日期等常用类型的特性和应用场景及SQL语法(DDL/DML/DQL)。详解查询操作(条件、排序、聚合、分组、分页、多表)、函数(基础、窗口、CASE WHEN)和约束(主键、自增、外键等),最后讲解索引的概念和基本操作,包含索引的创建、删除和展示,帮助读者快速掌握mysql数据库核心技能。

专注MySQL性能调优与大数据架构,用代码写诗,以算法作画。 2162

JMeter 压测实战全教程

脚本结构:测试计划 → 线程组 → HTTP 请求 → 监听器运行方式:图形化调试,命令行生产压测核心指标:QPS、RT、错误率、CPU、GC。

weixin_48309090的博客 652

学习SQL Server这一篇就够了

目录第一章 数据库概述1.1、数据库的好处1.2、数据库的常见概念1.3、数据库的存储特点1.4、数据库的常见分类1.5、SQL语言的分类第二章 SQL Server概述2.1、SQL Server的概述2.2、SQL Server的下载2.3、SQL Server的安装2.4、SQL Server的第一种连接2.5、SQL Server的第二种连接2.6、SQL Server的连接说明第三章 SQL Server数据库管理3.1、创建数据库3.1.1、界面方式3.1.2、命令方式3.2、修改数据库3.2.

轻松的小希 6万+

编译opencv4.2时出现undefined reference to `jpeg_default_qtables‘错误的解决方案

操作系统:kylinV10 opencv版本:4.2.0 在编译opencv4.2.0的版本时,出现undefined reference to `jpeg_default_qtables’的错误提示,导致openc编译中断,不能继续编译,所以这个错误必须解决。 解决方案 查看错误的名字,根据名字分析,很有可能是当前系统中没有安装jpeg第三方库,到 http://www.ijg.org/上下载最新的源码包 jpegsrc.v9e.tar.gz,按如下顺序开始编译安装: tar -xzvf jpegsr.

jndingxin的专栏 5106

11、rsa-目标主机支持RSA密钥交换【原理扫描】的漏洞

通过将 etcd 的 TLS 密钥交换算法从 RSA 升级为 ECDHE,可实现前向保密,彻底消除 “私钥泄露导致历史流量解密” 的风险。核心步骤是通过强制启用含ECDHE的套件,并禁用 RSA 密钥交换套件,同时建议升级到 TLS 1.2+ 并优化证书类型(优先 ECDSA)。这一配置符合云原生安全最佳实践,也是 Kubernetes 等依赖 etcd 的系统推荐的安全标准。生成临时密钥的具体步骤是什么?如何验证etcd是否已成功更新为ECDH密钥交换算法?配置临时密钥交换算法可能带来哪些性能影响。

xuebo1129927648的博客 1万+

MySQL数据库万字保姆级教程(有这一篇就够了,建议收藏)

这是我呕心沥血整理出的MySQL教程,一方面为自己复习回顾用,一方面也想将自己的知识分享给大家。注意:文中命令都是用的大写,但MySQL中的命令采用大小写均可SQL数据定义的模式种类:模式、基本表、索引、视图SQL数据定义的特点:1.数据库定义可以不断增长(不必一开始就定义完整)2.数据库定义可以随时修改(不必一开始就完全合理)创建删除修改模式表DROP TABLE视图DROP VIEW索引DROP INDEX。

qq_58737789的博客 2840

让 AI 变聪明的 20 条指令:如何让大模型回答得更精准、更专业、更实事求是

让 AI 变聪明,本质上不是写几句神奇咒语,而是把你的任务表达得更清楚,把事实标准设得更严格,把输出格式规定得更明确,把不确定性管理得更认真,把历史对话利用得更充分。大模型的强项是语言生成、信息组织、模式归纳和方案扩展;弱项是事实核验、实时更新、责任判断和对模糊意图的准确猜测。好的指令,就是在用人的判断弥补模型的弱点,让模型把强项发挥在正确的地方。

Sumarua的博客 1494

【MySQL】MySQL PHP 语法,PHP MySQL 简介,查询,下载 MySQL 数据库, SQL 教程

【MySQL】MySQL PHP 语法,PHP MySQL 简介,查询,下载 MySQL 数据库, SQL 教程

2201_75366661的博客 5413

旅行青蛙破解汉化教程——蹭个热度

汉化破解版资源(无尽三叶草与点券): https://github.com/wisdombyzf/lxqw/blob/master/lxqw_zf.apk 截图: 破解方法: 工具: 1,APKIDE https://www.pd521.com/thread-818-1-2.html 2,dnspy https://down.52pojie.

github_38838414的博客 3785

毕设-YOLOv8-OBB 实现自有数据集缺陷旋转检测全过程记录

这次项目让我深入理解了 YOLOv8-OBB 的原理和使用流程。步骤内容工具数据标注制作倾斜缺陷样本格式转换从 HBB 转换为 OBB模型训练使用 Ultralytics YOLOv8 OBBCLI 命令模型测试推理与结果可视化通过 OBB 模型,我的缺陷检测系统获得了更高的精度和鲁棒性。未来我打算继续优化数据增强方式,比如引入随机旋转、仿射变换等,让模型更适应不同角度的样本。

FJN110的博客 446
上一篇: 网络安全等级保护:分级保护工作解析(非常详细)零基础入门到精通,收藏这一篇就够了
下一篇: AI大模型入门指南(非常详细)零基础入门到精通,收藏这一篇就够了
程序员_大白
博客等级 码龄5年 1万+粉丝 4001原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值