2024-01-重学MySQL

0 SQL

0.1 SQL分类

SQL语言在功能上主要分为如下三大类:

  • DDL(Data Definition Languages,数据定义语言):这些语言定义了不同的数据库、表、视图、索引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构
    • 主要的语句关键字包括 CREATE、DROP、ALTER、RENAME、TRUNCATE
  • DML(Data Nabipulation Language,数据操作语言):用于增删改查数据库记录,并检查数据完整性
    • 主要的语句关键字包括 INSERT、DELETE、UPDATE、SELECT
    • SELECT是SQL语言的基础,最为重要
  • DCL(Data Control Language,数据控制语言):用于定义数据库、表、字段、用户的访问权限和安全级别
    • 主要的语句关键字包括 GRANT、REVOKE、COMMIT、ROLLBACK、SAVEPOINT

说明:

​ 因为查询语句使用比较频繁,很多人帮他单拎出来一类:DQL(数据查询语言)

​ 还有单独将 COMMIT、ROLLBACK 取出来称为 TCL(Transaction Control Language,事务控制语言)

0.2 SQL语言的规则和规范

0.2.1 基本规则

  • SQL可以写在一行或多行。为提高可读性,各个子句分行写,必要时使用缩减

  • SQL语句结束标准 ; \g \G \G可以使输出更美观

  • 关键字不能被缩写,也不能分行

  • 关于标点符号:

    • 必须保证所有的 ()、单引号、双引号 都是成对结束的
    • 必须使用英文状态下的半角输入方式
    • 字符串型和日期时间类型的数据可以使用 单引号(‘’)表示
    • 列的别名,尽量使用双引号(“”),而且不建议省略 as

0.2.2 SQL的规范

  • MySQL 在Windows环境下是大小写不敏感的

  • MySQL 在Linux环境下是大小写敏感的

    • 数据库名、表名、表的别名、变量名 都是严格区分大小写的
    • 关键字、函数名、列名(或字段名)、列的别名 是忽略大小写的
  • 推荐采用同一的书写规范:

    • 数据库名、表名、表的别名、列名、列的别名 等都小写
    • SQL关键字、函数名、绑定变量等都大写

0.2.3 MySQL的三种注释

#单行注释(mysql特有的方式)-- 单行注释(-- 后面必须包含一个空格)/*多行注释
*/

0.2.4 命令规则

  • 数据库、表名不得超过30个字符,变量名限制为 29 个
  • 必须只能包含 A-Z、a-z、0-9,_ 共63个字符
  • 数据库名、表名、字段名等对象名中间不能出现空格
  • 同一个MySQL中,数据库不能同名;同一个库中,数据表不能重名;同一张表中,字段不能重名
  • 必须保证你的字段名和和保留字、数据库系统或常用方法冲突。如果坚持使用,请在SQL语句中使用`(反引号)引起来
  • 保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假设数据类型在一个表里是整数,拿在另一个表中就变成字符型了,这显然不合适

1、数据库基本操作

1.1、创建数据库

create database [if not exists] company;
create database [if not exists] company charset=utf8;  -- 推荐

数据库命令规则:

字母、数字、下划线、@、$、#,不允许有空格和特殊字符,最大长度是128位

1.2、修改数据库

alter database company charset=utf8;

1.3、切换/选择数据库

use company;

1.4、查看当前所在数据库

select database();

1.5、查询建库语句

mysql> show create database company;
+----------+------------------------------------------------------------------+
| Database | Create Database                                                  |
+----------+------------------------------------------------------------------+
| company  | CREATE DATABASE `company` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+------------------------------------------------------------------+
1 row in set (0.01 sec)

1.6、查看所有数据库

show databases;

1.7、删除数据库

drop database databasetest1;

2、MySQL存储引擎和数据类型

-- 查看当前数据库支持的存储引擎
SHOW ENGINES ;

其中

engine 表示存储引擎名称

support 表示该DBMS是否支持该引擎 ,yes 支持,no 不支持,default DBMS支持的默认存储引擎

comment 该存储引擎的评论

transactions 是否支持事务

XA 表示该存储引擎支持的分布式是否符合XA规范

savepoints 表示是否支持事务处理中的保存点

安装版MySQL5.5默认支持的存储引擎为InnoDB

2.1、查看所有支持的存储引擎

show variables like 'have%';

2.2、修改默认存储引擎

打开MySQL安装目录下的my.ini配置文件

[mysql]
default-character-set=utf8[mysqld]
character-set-server=utf8  # mysql服务端的字符集
default-storage-engine=INNODB  # 存储引擎
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIONlog-output=FILE
general-log=1
general_log_file = "D:\mysql.log"
slow-query-log = 1
slow_query_log_file="D:\mysql_slow.log"
long_query_time=2

2.3、数据类型

整数类型字节范围
TINYINT1-128~127 0~255
SAMALLINT2
MEDIUMINT3
INT和INTEGER4
BIGINT8
浮点类型字节
FLOAT4
DOUBLE8
定点数型
DEC(M,D) 和 DECIMAL(M,D)M+2

存储小数是可以采用浮点型float或double,当对小数精度要求非常高时,可以采用dec和decimal

位类型字节
BIT(M)1~8字节
日期和时间类型字节范围
DATA41000-01-01~9999-12-31
DATATIME81000-01-01 00:00:00~9999-12-31 23:59:59
TIMESTAMP419700101080001~2038年的某个时刻
TIME3-835:59:59~838:59:59
YEAR11901~2155
CHAR型
CHAR(M)M字节M为0~255之间的整数适用于定长字符串
VARCHAR(M)M字节M为0~65535之间的整数适用于变长字符串
TEXT型字节描述
TINYTEXT0~255值的长度为+2个字节
TEXT0~65535值的长度为+2个字节
MEDIUMTEXT0~167772150值的长度为+3个字节
LONGTEXT0~4294967295值的长度为+4个字节
BINARY字节描述
BINARY(M)M允许长度为0~M
VARBINARY(M)M允许长度为0~M
BLOB型字节
TINYBLOB0~255
BLOB0~2的16次方
MEDIUMBLOB0~2的24次方
LONGBLOB0~2的32次方

3、表的基本操作

3.1、创建表

在数据库company,创建表t_dept

create database company;  -- 创建数据库
use company;  -- 切换数据库create table if not exists t_dept(deptno INT,dname VARCHAR(20),loc VARCHAR(40)
) charset=utf8;  -- 表默认的字符编码就是当前数据库的字符编码

经验之谈:

​ 创建一张表,会在相应文件夹中产生两个文件,一个 frm 结尾(存储表结构),另一个 ibd 结尾(存储数据)

3.2 查询表结构/查看表定义 DESC

describe t_dept;
-- 或简写
desc t_dept;

3.3、show查看建表语句 /查看表详细定义

show create table t_dept;

查看当前数据库的所有表

show tables;

3.4、删除表

drop table t_dept;

3.5、修改表

3.5.1、修改表名

alter table 旧表名 rename [to] 新表名
mysql> alter table t_dept rename to tep_dept;
Query OK, 0 rows affected (0.04 sec)

3.5.2、增加字段

3.5.2.1、在表末尾增加字段
alter table tb_name ADD 属性名 属性类型
mysql> alter table t_dept add test char;
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc t_dept;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| deptno | int(11)     | YES  |     | NULL    |       |
| dname  | varchar(20) | YES  |     | NULL    |       |
| loc    | varchar(40) | YES  |     | NULL    |       |
| test   | char(1)     | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
3.5.2.2、在表开头增加字段
alter table tb_name ADD 属性名 属性类型 FIRST
mysql> alter table t_dept add test2 char first;
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc t_dept;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| test2  | char(1)     | YES  |     | NULL    |       |
| deptno | int(11)     | YES  |     | NULL    |       |
| dname  | varchar(20) | YES  |     | NULL    |       |
| loc    | varchar(40) | YES  |     | NULL    |       |
| test   | char(1)     | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
3.5.2.3、在表的任意位置添加字段
alter table tb_name ADD 属性名 属性类型 after 属性名
-- 演示在 loc字段 后添加 test3字段
mysql> alter table t_dept add test3 char after loc;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc t_dept;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| test2  | char(1)     | YES  |     | NULL    |       |
| deptno | int(11)     | YES  |     | NULL    |       |
| dname  | varchar(20) | YES  |     | NULL    |       |
| loc    | varchar(40) | YES  |     | NULL    |       |
| test3  | char(1)     | YES  |     | NULL    |       |
| test   | char(1)     | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

3.5.3、删除字段

alter table tb_name DROP 属性名
mysql> alter table t_dept drop test3;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc t_dept;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| test2  | char(1)     | YES  |     | NULL    |       |
| deptno | int(11)     | YES  |     | NULL    |       |
| dname  | varchar(20) | YES  |     | NULL    |       |
| loc    | varchar(40) | YES  |     | NULL    |       |
| test   | char(1)     | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

3.5.4、修改字段

3.5.4.1、修改字段类型
alter table tb_name MODIFY 属性名 数据类型
mysql> alter table t_dept modify test int;
Query OK, 1 row affected (0.03 sec)
Records: 1  Duplicates: 0  Warnings: 0mysql> desc t_dept;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| test2  | char(1)     | YES  |     | NULL    |       |
| deptno | int(11)     | YES  |     | NULL    |       |
| dname  | varchar(20) | YES  |     | NULL    |       |
| loc    | varchar(40) | YES  |     | NULL    |       |
| test   | int(11)     | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
3.5.4.2、修改字段名称
alter table tb_name CHANGE 旧属性名 新属性名 旧数据类型
mysql> alter table t_dept change test demo int;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc t_dept;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| test2  | char(1)     | YES  |     | NULL    |       |
| deptno | int(11)     | YES  |     | NULL    |       |
| dname  | varchar(20) | YES  |     | NULL    |       |
| loc    | varchar(40) | YES  |     | NULL    |       |
| demo   | int(11)     | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

其实 修改字段名称与同时修改字段名称和属性类型的SQL语句是一样的

3.5.4.3、同时修改字段名称和属性
alter table tb_name CHANGE 旧属性名 新属性名 新数据类型
mysql> alter table t_dept change demo demo2 date;
Query OK, 1 row affected (0.03 sec)
Records: 1  Duplicates: 0  Warnings: 0mysql> desc t_dept;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| test2  | char(1)     | YES  |     | NULL    |       |
| deptno | int(11)     | YES  |     | NULL    |       |
| dname  | varchar(20) | YES  |     | NULL    |       |
| loc    | varchar(40) | YES  |     | NULL    |       |
| demo2  | date        | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
3.5.4.4、修改字段顺序
alter table tb_name MODIFY 属性名1 数据类型 <FIRST|AFTER 属性名2>
FIRST表示将属性名1调整到表最前面
ALTER 属性名2表示将属性名1调整到属性名2后面
-- 把 test2字段 移动到 demo2字段后面
mysql> alter table t_dept modify test2 char after demo2;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc t_dept;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| deptno | int(11)     | YES  |     | NULL    |       |
| dname  | varchar(20) | YES  |     | NULL    |       |
| loc    | varchar(40) | YES  |     | NULL    |       |
| demo2  | date        | YES  |     | NULL    |       |
| test2  | char(1)     | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

3.6、操作表的约束

3.6.1、完整性约束

所谓完整性,指的是数据的准确性和一致性。

完整性约束关键字含义
not null约束字段不能为空(非空)
default设置字段的默认值
unique key (uk)约束字段值唯一
primary key (pk)约束字段为主键,可以作为该表记录的唯一标识
auto_increment约束字段自增长
foreign key (fk)约束字段为表的外键

3.6.2、设置非空约束(not null,nk)

create table t_dept(deptno int not null,dname varchar(20),loc varchar(40)
);

3.6.3、设置默认约束(default)

create table t_dept(deptno int not null,dname varchar(20) default ‘小黑子’,loc varchar(40)
);

3.6.4、设置唯一约束(unique,uk)

create table t_dept(deptno int not null,dname varchar(20) unique,loc varchar(40)
);

3.6.5、设置主键约束(primary key,pk)

主键约束相当于 唯一约束+非空约束

3.6.5.1、单字段主键
create table t_dept(deptno int primary key,dname varchar(20),loc varchar(40)
);

若想要给主键约束设置约束名,则为以下方式

create table t_dept(deptno int ,dname varchar(20),loc varchar(40),constraint pk_dname primary key(dname)
);
3.6.5.2、多字段主键(联合主键)
create table t_dept(deptno int ,dname varchar(20),loc varchar(40),constraint pk_dname_deptno primary key(deptno,dname)
);

其中,constraint pk_dname_deptno 可以省略,此时表的主键采用默认名称

3.6.6、设置字段值自增长(autu_increment)

create table t_dept(deptno int primary key auto_increment,dname varchar(20),loc varchar(40)
);

3.6.7、设置外键约束(foreign key,fk)

create table t_dept(deptno int primary key,dname varchar(20),loc varchar(40)
);
create table t_employee(empno int primary key,ename varchar(20),job  varchar(40),mgr int,hiredate date,sal double(10,2),comm double(10,2),deptno int,constraint fk_deptno foreign key(deptno) references t_dept(deptno)
);

4、索引

4.1、索引概述

索引类似于书的目录,主要是为了提高从表中检索数据的速度。

索引的存储类型可分为B树型索引(Btree)和哈希索引(Hash)

InnoDB和MyISAM存储引擎支持btree类型索引,MEMORY存储引擎支持Hash类型索引,默认为前者索引。

MySQL支持的6种索引类型

  • 普通索引
  • 唯一索引
  • 全文索引
  • 单列索引
  • 多列索引
  • 空间索引

索引的利弊:

​ 创建索引可以提高查询速度,但过多的索引则会占据许多的磁盘空间。因此创建索引前需要权衡利弊。

常见情况下适合创建索引的情况:

​ 经常被查询的字段,即在where子句中出现的字段

​ 在分组的字段,即在group by子句中出现的字段

​ 存在依赖的子表和副表之间的查询,即主键或外键字段

​ 设置唯一完整性约束的字段

不太适合创建索引的情况:

​ 在查询中很少使用的字段

​ 拥有很多重复值的字段

4.2、创建、查看索引

4.2.1、普通索引 index|key

所谓普通索引,就是在创建索引时,不添加任何限制条件(唯一、非空等约束)。该类型索引可以创建在任何字段

4.2.1.1、创建表时创建普通索引
create table tb_name(属性名 数据类型,.....index|key [索引名] (属性名1 [(长度)] [ASC|DESC] )
);

参数

index|key 用于指定索引字段

属性名1 指定索引关联的字段

长度 指定索引的长度

ASC|DESC 升序|降序排序

create table t_dept(deptno int,dname varchar(20),loc varchar(40),index index_deptno (deptno)
);

使用查询建表语句 查看索引是否成功

show create table t_dept;

执行下面语句查看索引是否被使用

explain select * from t_dept where deptno=1;
4.2.1.2、在已存在的表上创建普通索引
create index 索引名 on 表名 (属性名1 [(长度)] [ASC|DESC] )
create index index_deptno on t_dept (deptno);

使用查询建表语句 查看索引是否成功

show create table t_dept;
4.2.1.3、alter table 创建普通索引
alter table tb_name add index|key  索引名 (属性名1 [(长度)] [ASC|DESC] )
alter table t_dept add index index_deptno(deptno)

4.2.2、唯一索引 unique index|key

所谓唯一索引,就是创建唯一索引值时,限定索引的值必须是唯一的。该类型的索引可以更快速的查询某条记录。

创建索引的方式可分为自动索引和手动索引。

自动索引:是指在设置完整性约束时,该表会被系统自动创建索引。

手动索引:是指手动在表上创建索引

在设置表中的某个字段设置主键或为唯一完整性约束时,系统就会自动创建关联该字段的唯一索引。

(说人话就是字段为主键或被唯一约束系统就会自动创建唯一索引)

4.2.2.1、创建表时创建唯一索引
create table tb_name(属性名 数据类型,.....unique index|key [索引名] (属性名1 [(长度)] [ASC|DESC] )
);

上述语句相比创建普通普通索引,多了关键字unique,其中unique index 或 unique key 表示创建唯一索引

create table t_dept(deptno int,dname varchar(20),loc varchar(40),unique index index_deptno (deptno)
);

使用查询建表语句 查看索引是否成功

show create table t_dept;

执行下面语句查看索引是否被使用

explain select * from t_dept where deptno=1;
4.2.2.2、在已存在的表上创建唯一索引
create unique index 索引名 on 表名 (属性名1 [(长度)] [ASC|DESC] )
create index index_deptno on t_dept (deptno);
4.2.2.3、alter table 创建唯一索引
alter table tb_name add unique index|key  索引名 (属性名1 [(长度)] [ASC|DESC] )
alter table t_dept add unique index index_deptno(deptno)

4.2.3、全文索引 fulltext index|key

全文索引主要关联的数据类型为 char、varchar、text的字段,以便快速查询数据量较大的字符串类型的字段。

默认情况下,全文索引的搜索执行方式不区分大小写,若关联的是二进制类型数据,则区分大小写。

MySQL从3.23.23版本开始支持全文索引,只能在MyISAM存储引擎的表上使用全文索引

4.2.3.1、创建表时创建全文索引
create table tb_name(属性名 数据类型,.....fulltext index|key [索引名] (属性名1 [(长度)] [ASC|DESC] )
);

上述语句相比创建普通索引,多了关键字fulltext,其中fulltext index 或fulltext key 表示创建全文索引

create table t_dept(deptno int,dname varchar(20),loc varchar(40),fulltext index index_loc (loc)
)ENGINES=MyISAM;

使用查询建表语句 查看索引是否成功

show create table t_dept;

执行下面语句查看索引是否被使用

explain select * from t_dept where dname='cjgong';
4.2.3.2、在已存在的表上创建全文索引
create fulltext index 索引名 on 表名 (属性名1 [(长度)] [ASC|DESC] )
create fulltext index_loc on t_dept (loc);
4.2.3.3、alter table 创建全文索引
alter table tb_name add fulltext index|key  索引名 (属性名1 [(长度)] [ASC|DESC] )
alter table t_dept add fulltext index index_loc(loc)

4.2.4、多列索引

所谓多列索引,就是创建索引时关联多个字段。

只有查询条件使用所关联的字段的第一个字段时,多列索引才会生效。

4.2.4.1、创建表时创建多列索引
create table tb_name(属性名 数据类型,.....index|key [索引名] (属性名1 [(长度)] [ASC|DESC],属性名1 [(长度)] [ASC|DESC],......)
);

上述语句创建索引时,所关联的字段至少大于一个字段

create table t_dept(deptno int,dname varchar(20),loc varchar(40),key index_dname_loc (dname,loc)
);

使用查询建表语句 查看索引是否成功

show create table t_dept;

执行下面语句查看索引是否被使用

explain select * from t_dept where dname='cjgong';
4.2.4.2、在已存在的表上创建多列索引
create index 索引名 on 表名 (属性名1 [(长度)] [ASC|DESC],属性名1 [(长度)] [ASC|DESC],......)
create fulltext index_dname_loc on t_dept (dname,loc);
4.2.4.3、alter table 创建全文索引
alter table tb_name add index|key  索引名 (属性名1 [(长度)] [ASC|DESC],属性名1 [(长度)] [ASC|DESC],......)
alter table t_dept add index index_dname_loc(dname,loc)

4.3、删除索引

drop index 索引名 on tb_name;
drop index index_deptno on t_dept;

5.视图

5.1、视图概述

视图就是为了提高复杂SQL的复用性和表操作的安全性。

视图本质上就是一张虚拟表,其内容与真实表相似,视图的行和列数据来自定义视图的查询所引用基本表,并且在引用视图时动态生成。

视图特点:

  • ​ 视图的列可以来自不同的表,是表的抽象和在逻辑意义上建立的新关系。
  • ​ 视图是由基本表(实表)产生的表(虚表)
  • ​ 视图的建立和删除不影响基本表
  • ​ 对视图内容的更新(增删改)直接影响基本表
  • ​ 当视图来自多个基本表时,不允许添加和删除数据

5.2、创建视图

5.2.1创建视图

创建视图语法如下:

crete view view_name as 查询语句;
create view view_selectproductas select id,name from t_product;

使用视图(查询视图与查询表格很类似)

select * from view_selectproduct;

5.2.2、创建各种视图

视图的功能其实就是将各种查询语句封装起来。

常量视图

封装实现查询常量语句的视图,即所谓常量视图

create view view_test1as select 3.1415926;
聚合函数视图

封装使用聚合函数(sum、min、max、count等)查询语句的视图

create view view_test2asselect count(name) from t_student;

使用视图

select * from view_test2;
排序视图

封装实现排序功能(order by)查询语句的视图

create view view_test3asselect name from t_student order by id desc;

使用视图

select * from view_test2;
内连接视图

封装了实现表内连接查询语句的视图

create view view_test4asselect s.name from t_student as s,t_group as g where s.group_id = g.id and g.id=2;
外连接视图

封装了实现表外连接(left join 和right join)查询语句的视图

create view view_test5asselect s.name from t_student as s left joint_group as g on s.group_id=g.idwhere g.id=2;
子查询视图

封装了实现子查询语句的视图

create view view_test6asselect s.name from t_student as swhere s.group_id in(select id from t_group);
联合查询视图

封装了记录联合查询(union 和 union all)语句的视图

create view view_test7asselect id,name from t_studentunion allselect id,name from t_group;

5.3、查看视图

5.3.1、show tables 查询视图名

show tables;

该语句的作用是查询数据库下的所有表名和视图名

5.3.2、show table status 查看视图详情

该语句的作用是显示表、视图的详细信息。

语法如下:

show table status [from db_name] [like 'pattern']

其中

​ db_name 用来设置数据库

show table status from view\G

截图输出一段如下:

*************************** 4. row ***************************
Name: view_selectproduct
Engine: NULL
Version: NULL
Row_format: NULL
Rows: NULL
Avg_row_length: NULL
Data_length: NULL
Max_data_length: NULL
Index_length: NULL
Data_free: NULL
Auto_increment: NULL
Create_time: NULL
Update_time: NULL
Check_time: NULL
Collation: NULL
Checksum: NULL
Create_options: NULL
Comment: VIEW

各个字段含义如下:

字段名含义
Name表或视图名
Engine表的存储引擎
Version表的.frm文件版本号
Row_format表的行存储格式
Rows表中行的数
Avg_row_length表中行平均长度
Data_length表数据文件的长度
Max_data_length表数据文件的最大长度
Index_length表索引的长度
Data_free表被整序后,但是未使用的字节的数目
Auto_increment表中的下一个Auto_increment值
Create_time表的创建时间
Update_time表的最后一次更新时间
Check_time表的最后一次检查时间
Collation表的字符集
Checksum表的活性校验
Create_options表的额外选项
Comment表的注解

5.3.3、show create view 查看视图定义信息

语法格式如下:

show create view viewname;
show create view view_selectproduct;

5.3.4、describe|desc 查看视图设计信息

describe|desc viewname;
describe view_selectproduct;

5.3.5、通过系统查看视图信息

当MySQL安装成功后,系统会自动创建系统数据库information_schema。该数据库中包含一个存放视图信息的表格views,可通过查看表格wiews查看所有视图的信息。

use information_schema;select * from views where table_name='view_selectproduct' \G

5.4、修改视图

原来创建视图的语句如下:

create view view_selectproductas select id,name from t_product;

5.4.1、通过create or replace view修改视图

create or replace view view_selectproductas select name from t_product;

5.4.2、通过alter 语句修改视图

语法如下:

alter view viewnameas 查询语句
alter view view_selectproductas select name from t_product;

5.5、删除视图

使用drop view 语句可以一次删除一个或多个视图

格式如下:

drop view view_name[,view_name,......]
drop view view_selectproduct;

5.6、通过视图操作基本表

5.6.1、检索(查询)数据

通过视图查询数据,与通过表查询数据是完全相同的。

通过视图查询比表更安全、更简单、实用。

如下:

select * from view.view_selectproduct;

5.6.2、利用视图操作基本表

前面描述过,通过视图可以查询数据,通过视图也可以对表进行更新(增删改)。这是因为视图是虚表,所以对视图的更新,其实就是对视图背后的基本表更新。

注意:

  • ​ 对视图的增删改操作会直接影响基本表
  • ​ 当视图来自多个表时,不允许对其添加和删除

下面演示以下增删改操作

5.6.2.1、添加数据

先创建一个视图

create view view_produceas select * from t_product;

通过视图在基本表中添加数据

insert into view_produce values(null,'pear2',5.5);
5.6.2.2、修改数据

通过视图在基本表中修改数据

update view_produceset price=3.5where name='banana';
5.6.2.3、删除数据

通过视图在基本表中删除数据

delete from view_produce where name='pear2';

6、触发器

按照触发器触发时执行得语句数码,触发器可以分为”一个执行语句得触发器“和“多个执行语句得触发器”

6.1、创建触发器

6.1.1、创建一条执行语句的触发器

语法如下:

create trigger trigger_namebefore|after trigger_eventon table_name from each row trigger_stmt;

其中

trigger_name 表示触发器名称

before|after 表示触发器执行的时间

trigger_event 表示触发事件(即触发器执行的条件,包含delete、update、insert语句)

table_name 表示触发器执行时操作的表名

from each row 表示行级触发器

trigger_stmt 表示触发器执行时执行的语句

-- 创建触发器
create trigger tri_diarytimebefore inserton t_dept for each rowinsert into t_diary values (null,'t_dept',now());

测试,在表t_dept中插入数据

insert into t_dept values (1,'cjgong','Beijing');

查询t_diary表中是有数据,验证触发器是否创建成功

select * from t_diary;

6.1.2、创建多条执行语句的触发器

语法如下:

create trigger trigger_namebefore|after trigger_eventon table_name for each rowbegintrigger_stmtend

关键字delimiter 语句,例如 delimiter ,可以将实现将结束符号换成 ,可以将实现将结束符号换成 ,可以将实现将结束符号换成

例子如下:

delimiter $$
create trigger tri_diarytime2before inserton t_dept for each rowbegininsert into t_diary values (null,'t_dpet',now());insert into t_diary values (null,'t_dpet',now());end $$
$$ delimiter ;

6.2、查看触发器

6.2.1、通过show triggers查看触发器

show trigger \G

6.2.2、通过查看系统表triggers查看触发器

在系统数据库information_schema中存在一个存储所有触发器的系统表triggers

use information_schema;
select *
from triggers;

6.3、删除触发器

drop trigger trigger_name;

7、数据的增、删、改

7.1、插入数据记录

插入数据的语句如下所示:

insert into tb_name[(field1,field2,....)]values(value1,value2,...)[,(value1,value2,...)...] -- 可以同时插入一条数据 或 多条数据
mysql> desc t_dept;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| deptno | int(11)     | YES  |     | NULL    |       |
| dname  | varchar(20) | YES  |     | NULL    |       |
| loc    | varchar(40) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)mysql> insert into t_dept values(100,'zhangsan','beijing');
Query OK, 1 row affected (0.02 sec)

7.2、插入子查询语句结果

语法格式如下:

insert into tb_name[(field1,field2,...)]select <*|[field1,field2,...]> from tb_name2 where ...;
mysql> insert into t_dept select * from t_dept;  -- 插入子查询语句的结果
Query OK, 2 rows affected (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 0mysql> select * from t_dept;
+--------+----------+---------+
| deptno | dname    | loc     |
+--------+----------+---------+
|      1 | cjgong   | Beijing |
|    100 | zhangsan | beijing |
|      1 | cjgong   | Beijing |
|    100 | zhangsan | beijing |
+--------+----------+---------+
4 rows in set (0.00 sec)

7.3、更新数据记录

语法如下:

update tb_name set field1=value1,field2=value2,...[where 条件]

注意:

​ 如果不加条件,所有记录的相应字段都会被改变

mysql> update t_dept set dname='lisi' where deptno=100;
Query OK, 2 rows affected (0.01 sec)
Rows matched: 2  Changed: 2  Warnings: 0mysql> select * from t_dept;
+--------+--------+---------+
| deptno | dname  | loc     |
+--------+--------+---------+
|      1 | cjgong | Beijing |
|    100 | lisi   | beijing |
|      1 | cjgong | Beijing |
|    100 | lisi   | beijing |
+--------+--------+---------+
4 rows in set (0.00 sec)

7.4、删除数据记录

语法如下:

delete from tb_namewhere 条件
Query OK, 2 rows affected (0.01 sec)mysql> select * from t_dept;
+--------+--------+---------+
| deptno | dname  | loc     |
+--------+--------+---------+
|      1 | cjgong | Beijing |
|      1 | cjgong | Beijing |
+--------+--------+---------+
2 rows in set (0.00 sec)

8 单表查询

8.1 简单数据查询 SELETE

8.1.1 查询所有字段

语法如下:

SELECT field1,field2,....  -- field1,field2,.... 表示需要查询的字段FROM tb_name;

例如:

SELECT  empno,ename,job,mgr,job,mgr,hiredate,sal,comm,deptno from t_employee;

说明:

​ empno,ename,job,mgr,job,mgr,hiredate,sal,comm,deptno这些字段可以交换位置

​ empno,ename,job,mgr,job,mgr,hiredate,sal,comm,deptno这些字段用 * 代替

​ 但是用 * 代替了字段以后,查询到的记录只能表的字段排序来显示,不够灵活

8.1.2 查询指定字段

语法与查询所有字段相似

例如

select empno, ename, sal from t_employee;

8.1.3 避免查询重复数据 DISTINCT

例如

select distinct job from t_employee;

8.1.4 使用四则运算查询数据

MySQL支持的关系运算符有:

运算符描述
+加法
-减法
*乘法
/ (DIV)除法
% (MOD)求余

例如:

select ename, sal * 12 from t_employee;

如需改变查询结果的字段,可以采用如下方式:

select ename, sal * 12 as yearsalary from t_employee;
-- 或
select ename, sal * 12  yearsalary from t_employee;

其中 ,

​ as 可以改变字段的显示结果,as 可以省略

8.1.5 设置显示格式数据查询

可以采用MySQL提供的函数concat()来连接字符串实现

例如:

select concat(ename,'雇员的年薪为:',sal*12) from t_employee;
-- 或
select concat(ename, '雇员的年薪为:', sal * 12) as yearsalary
from t_employee;

8.2 条件数据查询 WHERE

语法如下:

select field1,field2,...from tb_namewhere condition(条件)

condition条件包括以下几种:

  • ​ 带有关系运算符和逻辑运算符的条件数据查询
  • ​ 带有 between and 关键字的条件数据查询
  • ​ 带 is null 关键字的条件数据查询
  • ​ 带 in 关键字的条件数据查询
  • ​ 带 like 关键字的条件数据查询

比较运算符: > < = !=(<>) >= <=

逻辑运算符: and(&&) 与 or(||) 或 xor 异或 not(!) 非

查询sql例如:

-- 单条件查询
select ename from t_employee where job='clerk';-- 多条件查询
select ename from t_employee where job='clerk' && sal > 800;-- 带关键字 between and 的范围查询
select ename from t_employee where sal between 1000 and 2000;
-- 不符合范围的数据查询
select ename from t_employee where sal not between 1000 and 2000;-- 带is null 关键字的空值查询
select ename from t_employee where comm is null;
-- 不是空值的数据查询
select ename from t_employee where comm is not null;-- 带in 关键字的集合查询
select ename from t_employee where empno = 7902or empno = 7788or empno = 7698or empno = 7566;
select ename from t_employee where empno in(7902,7788,7698,7566);
-- 不在集合中的数据查询
select ename from t_employee where empno not in(7902,7788,7698,7566);-- 带like 关键字的模糊查询   mysql中默认不区分大小写
select ename from t_employee where ename like 'A%';   # %代表通配符,可以匹配多个字符
select ename from t_employee where ename like '_A%';   # _代表通配符,只能匹配一个字符select ename from t_employee where ename not like 'A%';
select ename from t_employee where !(ename like 'A%');

注意:

使用in关键字时需要注意,如果是 in ,集合中包含null不会影响查询结果,如果是not in,集合中包含null则查询不到结果,如下sql语句:

select ename from t_employee where empno not in (7902,null);
-- 该语句查询不到任何数据

8.3 排序数据查询 ORDER BY

排序查询的关键字是 order by

语法如下:

select field1,field2,...from tb_namewhere condition(条件)order by fieldm1 [ASC|DESC] [,fieldm2 [ASC|DESC]...]

上述语句中,参数 fieldm1 表示按照该字段进行排序,默认升序AS

参数:

  • ASC 升序
  • DESC 降序

注意:

​ 在roder by 后面可以放多个字段,表示按照多个字段进行排序

​ 若在排序字段中,如果有为null的,则该组为最小

8.3.1 按照单字段排序

语句如下:

select * from t_employee order by sal ASC;

8.3.1 按照多个字段排序

select * from t_employee order by sal ASC,hiredate;

8.4 限制/分页查询 LIMIT

语法如下:

select field1,field2,...from tb_namewhere condition(条件)limit [offset_start],row_cont

参数:

  • offset_start 表示起始偏移量 该参数为可选参数

  • row_count 表示显示的行数(记录数)

8.4.1 不指定初始位置

语法形式

LIMIT row_cont  -- 若 row_cont的值 > 查询的总记录数,则显示所有查询结果
SELECT * FROM t_employee WHERE comm IS null LIMIT 2;

8.4.3 指定起始位置

select * from t_employee where comm is null order by hiredate limit 0,5;

8.5 聚合函数与分组数据查询GROUP BY

8.5.1 聚合函数

聚合函数说明
count()用于统计记录条数 count(*):统计包含null值,count(field):统计时忽略null值
avg()用于统计平均值 avg(field):对指定字段计算平均值,忽略null
sum()用户统计求和 sum(field):对指定字段求和,忽略null
max()用户求最大值 max(field):求指定字段中最大值,忽略null
min()用户求最小值 max(field):求指定字段中最小值,忽略null

注意:

​ 空值: null

​ null 不等同于 0 ,‘’,‘null’

​ 聚合函数中,若所操纵的表中无数据,count()函数会返回0,其他函数会返回null(空值参与运算,结果也一定为空)

8.5.2 分组查询

语法如下:

select field1,field2,...from tb_namegroup by field
select * from t_employeegroup by deptno;

8.5.2 多字段分组查询

select * from t_employeegroup by deptno,hiredate;

8.5.3 HAVING 子句限制 分组查询

语法如下:

select field1,field2,...from tb_namegroup by fieldhaving 条件;
select deptno, AVG(sal) averagr, group_concat(ename) ename, COUNT(ename) numberfrom t_employeegroup by deptnohaving AVG(sal) > 2000;

其中

​ 函数 group_concat(ename) 表示将分组后的同一组的ename字段拼接起来

9 多表查询

9.1 关系操作符

  • ​ 并(union)
  • ​ 笛卡尔积(cartesian product)
  • ​ 内连接(inner join)
  • ​ 外连接(outer join)
  • ​ 交叉连接(cross join)

9.2 内连接 INNER JOIN

9.2.1 自连接

自连接可以通过sql语句“ inner join … on”来实现,也可以不用,如下

select e.ename employeename, e.job, l.ename loadernamefrom t_employee e inner join t_employee lon e.mgr = l.empno;
-- 或
select e.ename employeename, e.job, l.ename loadernamefrom t_employee e,t_employee lwhere e.mgr = l.empno;

还要等值连接、不等连接都大同小异,不再赘述

9.3 外连接

外连接查询分为以下三种:

  • ​ 左外连接
  • ​ 右外连接
  • ​ 全外连接(MySQL不支持)

语法如下:

select field1,field2,...
from tb_name1 <left|right|full> [outer] join tb_name2on 连接条件

9.3.1、左外连接

左外连接指的是新关系中执行匹配条件时,以left [outer] join 关键字左边的表为参考表

select t1.ename employeename, t1.job, t2.ename loadername from t_employee t1 left join t_employee t2on t1.mgr = t2.empno;

9.3.2、右外连接

右外连接指的是新关系中执行匹配条件时,以right [outer] join 关键字右边的表为参考表

select t2.ename employeename, t2.job, t1.ename loadername from t_employee t1 right join t_employee t2on t2.mgr = t1.empno;

从上述语句可以看出,左外连接可以改写为右外连接,反之毅然

9.4、合并查询

通过关键字 union 可以实现将多个sql语句的查询结果合并在一起组成的新的关系。

语法形如:

select field1,field2,...
from tb_name1union|union all
select field1,field2,...
from tb_name2.....

其中

​ 关键字 union 表示查询到的结果会去重复值展示

​ 关键字 union all 表示查询到的结果不会去重复值展示

9.4.1、使用union 合并

select * from t_cstudentunion 
select * from t_mstudent;

9.4.2、使用union all 合并

select * from t_cstudentunion all
select * from t_mstudent;

9.5、子查询

9.5.1、返回结果单行单列子查询

# 返回结果单行单列
select sal from t_employee where ename='SMITH';# 子查询语句
select * from t_employeewhere sal > (select sal from t_employee where ename='SMITH');

9.5.2、返回结果单行多列子查询

# 返回结果单行多列
select sal,job from t_employee where ename='SMITH';# 子查询语句
select * from t_employee where (sal,job) = (select sal,job from t_employee where ename='SMITH');

9.5.3、返回结果多行单列子查询

当子查询的结果返回结果为多行单列时,一般在主查询语句会包含in、any、all、exists等关键字

# 返回结果多行单列
select deptno from t_dept;select * from t_employeewhere deptno not in (select deptno from t_dept);

9.5.4、返回结果为多行多列子查询

# 返回结果多行多列
select deptno dno, count(empno) number, avg(sal) average from t_employeegroup by deptno desc ;select  d.deptno, d.dname,d.loc,number, average  from t_dept dinner join (select deptno dno, count(empno) number, avg(sal) average from t_employeegroup by deptno desc) employeeon d.deptno = employee.dno;
select field1,field2,...from tb_namegroup by field

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/742397.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

漏洞发现-漏扫项目篇武装BURP浏览器插件信息收集分析辅助

知识点 1、插件类-武装BurpSuite-漏洞检测&分析辅助 2、插件类-武装谷歌浏览器-信息收集&情报辅助 章节点&#xff1a; 漏洞发现-Web&框架组件&中间件&APP&小程序&系统 扫描项目-综合漏扫&特征漏扫&被动漏扫&联动漏扫 Poc开发-Ymal语…

产品测试方案:视频接入平台并发性能测试方案和报告(即150路视频并发流媒体服务器模块的性能测试方案和报告)

目 录 一、测试目的&#xff1a; 二、测试方案&#xff1a; 2.1、测试思路 2.2、拓扑图 三、测试环境 3.1 服务器配置 3.2 网络摄像机列表 3.3 测试软件 四、测试流程 4.1 H.264并发测试&#xff1a; 4.1.1老版本srsout3.10并发测试 4.1.2 新版本srsout…

【PyTorch][chapter 22][李宏毅深度学习]【无监督学习][ WGAN]【理论二】

前言&#xff1a; 本篇主要参考《Wasserstein GAN and the Kantorovich-Rubinstein Duality》 重点介绍一下 WGAN 的损失函数 是如何通过 Wasserstein Distance 变换过来的。 分为5步&#xff1a; 我们首先建立Wasserstein Distance 极小值形式&#xff0c; 经过对…

代码随想录算法训练营第三十二天|LeetCode122 买卖股票的最佳时机II 、LeetCode55 跳跃游戏、

122.买卖股票的最佳时机II 为了获得最大利润&#xff0c;我们可以将每一个局部峰值和局部谷值之间的差值累加起来。如果第 i 天的股票价格比第 i-1 天高&#xff0c;则将这两天的股票进行买卖&#xff0c;即累加差值 (prices[i] - prices[i-1])&#xff0c;否则不进行交易。 …

Gradio测试-->Gradio映射-->可视化GPT4V API-->Gemini Pro、Claude和Qwen的API

Gradio测试 import gradio as gr import timedef demo_test(text, imageNone):time.sleep(1) # 正确的暂停调用return text, image if image is not None else None# 创建 Gradio 接口 iface gr.Interface(fndemo_test,inputs[gr.Textbox(label"输入文本"), gr.Im…

零基础学习JS--基础篇--函数

定义函数 一个函数定义&#xff08;也称为函数声明&#xff0c;或函数语句&#xff09;由 function 关键字&#xff0c;并跟随以下部分组成&#xff1a; 函数名称。函数参数列表&#xff0c;包围在括号中并由逗号分隔。定义函数的 JavaScript 语句&#xff0c;用大括号括起来…

向ChatGPT高效提问模板

PS: ChatGPT无限次数&#xff0c;无需魔法&#xff0c;登录即可使用,网页打开下面 tj4.mnsfdx.net [点击跳转链接](http://tj4.mnsfdx.net/) 我想请你XXXX&#xff0c;请问我应该如何向你提问才能得到最满意的答案&#xff0c;请提供全面、详细的建议&#xff0c;针对每一个建…

三权分立学习

1、什么是三权 三权指的是配置、授权、审计。 配置指对应用系统进行配置&#xff0c;使之能正常运行&#xff1b;授权指对使用应用系统的账号进行管理&#xff0c;在此过程中提高应用系统的安全等级&#xff1b;审计指对上述两项工作进行监督指导&#xff0c;及时上报危险的操…

微任务与宏任务的区别

一. 什么是宏任务&#xff08;MacroTask&#xff09; 宏任务包括&#xff1a;setTimeout setInterval Ajax DOM事件&#xff0c; 宏任务是由宿主&#xff08;浏览器、Node&#xff09;发起的&#xff0c;宏任务&#xff0c;可以理解为每次执行栈执行的代码就是一个宏任务&…

王道机试C++第6章 数学问题和22年蓝桥杯省赛选择题Day34

6.1 进制转换 二进制数&#xff08;十转二&#xff09; 习题描述 大家都知道&#xff0c;数据在计算机里中存储是以二进制的形式存储的。 有一天&#xff0c;小明学了C语言之后&#xff0c;他想知道一个类型为unsigned int 类型的数字&#xff0c;存储在计算机中的二进制串是…

详解Python中open()函数指定文件打开方式的用法

当我们用open()函数去打开文件的时候&#xff0c;有好几种打开的模式。 r->只读 w->只写&#xff0c;文件已存在则清空&#xff0c;不存在则创建。 a->追加&#xff0c;写到文件末尾 b->二进制模式,比如打开图像、音频、word文件。 ->更新(可读可写) 这个带号…

Spring MVC中的REST风格

文章目录 REST风格1 REST简介问题导入1.1 REST介绍1.2 RESTful介绍1.3 注意事项 2 RESTful入门案例问题导入2.1 快速入门2.2 PathVariable介绍2.3 RequestBody、RequestParam、PathVariable区别和应用 3 REST快速开发【重点】3.1 代码中的问题3.2 Rest快速开发 4案例&#xff1…

Lua 函数前的冒号和点号,你知道他们的区别吗?

1. 函数前的冒号和点号 点号&#xff08;.&#xff09;和冒号&#xff08;:&#xff09;的区别主要在于是否自动处理self参数。 在Lua中&#xff0c;函数定义时前面有点号&#xff08;.&#xff09;和冒号&#xff08;:&#xff09;的区别主要体现在函数如何处理其第一个参数…

【node】模块化与包(二)

1、模块化的基本概念 模块化是指解决一个复杂的问题时&#xff0c;自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说&#xff0c;模块是可组合、分解和更换的单元。 &#xff08;1&#xff09;模块化的优点 遵循固定规则&#xff0c;把大文件拆分成对立并相互依赖…

springboot3 打包报错32-bit architecture x86 unsupported或者 returned non-zero result

springboot3 打包异常情况处理记录 在测试springboot3 native打包时候遇到的异常&#xff0c;百度和谷歌上方法都无法解决我的问题&#xff0c;最后记录一下我最后的原因和解决方案。 前置要求&#xff1a;自己处理好vs的相关内容后 报错一&#xff1a; [1/7] Initializing…

升级版本彻底解决bootstrap-table-fixed-columns固定列后行对不齐问题

升级到bootstrap-table和bootstrap-table-fixed-columns版本都升级到v1.22.3版本以上&#xff0c;即可解决该问题 bootstrap-table&#xff1a;bootstrap-table/dist/bootstrap-table.min.css at develop wenzhixin/bootstrap-table GitHub bootstrap-table-fixed-columns&…

蓝桥杯算法训练VIP-数组查找及替换

题目 1634: 蓝桥杯算法训练VIP-数组查找及替换 时间限制: 3s 内存限制: 192MB 提交: 1629 解决: 890 题目描述 给定某整数数组和某一整数b。要求删除数组中可以被b整除的所有元素&#xff0c;同时将该数组各元素按从小到大排序。如果数组元素数值在A到Z的ASCII之间&#xff0…

浅谈 前端的动态绑定属性

目录 前言1. 基本知识2. Demo 前言 作为Java开发者&#xff0c;从开发转到全栈&#xff0c;前端好些细节都需要科普&#xff0c;这不就来个动态绑定属性 起因是这个&#xff1a; <uni-tr> <uni-td align"center" :rowspan"checkTypesCount 1"…

SSM 整合使用 @PropertySource 问题

SSM 整合使用 PropertySource 问题 如果你想将数据库连接的相关属性移入一个 classpath 下的 “.properties” 文件中&#xff0c;让后再在上述配置类中结合 PropertySource 和 Value 来加载 .properties 配置文件&#xff0c;引入相关属性值&#xff0c;那么&#xff0c;你会…

跨境电子商务支付与结算的支撑系统

​1、跨境电子商务支付与结算的核心系统。 核心系统是用户执行跨境电子商务支付的核心模块&#xff0c;包括以下具体流程。 ​ ​①用户从跨境电子商务支付应用启动跨境电子商务支付流程。 ②跨境电子商务支付应用根据应用和用户选择的支付工具&#xff0c;来调用对应的支付产…