万字详解ANSI SQL语法及其扩展

ANSI SQL 与扩展SQL详解

一、ANSI SQL语法

ANSI SQL(American National Standards Institute Structured Query Language),即美国国家标准学会结构化查询语言,是一种标准化的数据库查询语言。它用于管理和操作关系数据库中的数据。ANSI SQL 定义了一组标准的 SQL 语句,以确保在不同的数据库管理系统(DBMS)之间保持一致性和互操作性。下面是 ANSI SQL 语法的详解:

数据定义语言 (DDL)

DDL 用于定义和管理数据库结构,如创建、修改和删除数据库对象。

  1. 创建数据库:

    CREATE DATABASE database_name;
    
  2. 删除数据库:

    DROP DATABASE database_name;
    
  3. 创建表:

    CREATE TABLE table_name (column1 datatype [constraint],column2 datatype [constraint],...
    );
    
  4. 删除表:

    DROP TABLE table_name;
    
  5. 修改表:

    • 添加列:

      ALTER TABLE table_name ADD column_name datatype;
      
    • 删除列:

      ALTER TABLE table_name DROP COLUMN column_name;
      
    • 修改列数据类型:

      ALTER TABLE table_name ALTER COLUMN column_name datatype;
      

数据操作语言 (DML)

DML 用于查询和修改数据库中的数据。

  1. 插入数据:

    INSERT INTO table_name (column1, column2, ...)
    VALUES (value1, value2, ...);
    
  2. 更新数据:

    UPDATE table_name
    SET column1 = value1, column2 = value2, ...
    WHERE condition;
    
  3. 删除数据:

    DELETE FROM table_name WHERE condition;
    
  4. 查询数据:

    SELECT column1, column2, ...
    FROM table_name
    WHERE condition
    GROUP BY column
    HAVING condition
    ORDER BY column
    LIMIT number;
    

数据控制语言 (DCL)

DCL 用于授权和撤销对数据库对象的访问权限。

  1. 授予权限:

    GRANT privilege ON object TO user;
    
  2. 撤销权限:

    REVOKE privilege ON object FROM user;
    

事务控制语言 (TCL)

TCL 用于管理事务处理,以确保数据的一致性和完整性。

  1. 开始事务:

    BEGIN TRANSACTION;
    
  2. 提交事务:

    COMMIT;
    
  3. 回滚事务:

    ROLLBACK;
    

语法示例

创建表
CREATE TABLE employees (employee_id INT PRIMARY KEY,first_name VARCHAR(50) NOT NULL,last_name VARCHAR(50) NOT NULL,hire_date DATE,salary DECIMAL(10, 2),department_id INT,FOREIGN KEY (department_id) REFERENCES departments(department_id)
);
插入数据
INSERT INTO employees (employee_id, first_name, last_name, hire_date, salary, department_id)
VALUES (1, 'John', 'Doe', '2022-01-01', 50000.00, 101);
查询数据
SELECT first_name, last_name, salary
FROM employees
WHERE department_id = 101
ORDER BY last_name;
更新数据
UPDATE employees
SET salary = salary * 1.10
WHERE department_id = 101;
删除数据
DELETE FROM employees
WHERE employee_id = 1;
授予权限
GRANT SELECT, INSERT ON employees TO user1;
回滚事务
BEGIN TRANSACTION;UPDATE employees
SET salary = salary * 1.10
WHERE department_id = 101;ROLLBACK;  -- 取消更新操作

ANSI SQL 提供了一套通用的标准语法,用于定义和操作关系数据库。尽管不同的数据库管理系统(DBMS)对 SQL 标准进行了不同程度的扩展,但理解和掌握 ANSI SQL 标准是学习和使用 SQL 的基础。在实际应用中,可以根据特定 DBMS 的文档和功能,进一步了解和使用其特有的 SQL 扩展。

ANSI SQL 多表查询

ANSI SQL 标准定义了多表连接查询的几种常见类型,包括内连接 (INNER JOIN)、左外连接 (LEFT JOIN)、右外连接 (RIGHT JOIN)、全外连接 (FULL JOIN) 、交叉连接 (CROSS JOIN)和自链接(SELF JOIN),下面提供了每种连接类型的语法和示例,并增加图示以帮助理解连接结果。

1. 内连接 (INNER JOIN)

语法

SELECT columns
FROM table1
INNER JOIN table2
ON table1.common_column = table2.common_column;

示例

SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.department_id;

图示

employees             departments
+----+------+---------+          +----+---------+
| id | name | dept_id |          | id | name    |
+----+------+---------+          +----+---------+
| 1  | John | 1       |          | 1  | HR      |
| 2  | Jane | 2       |          | 2  | IT      |
| 3  | Mike | 1       |          | 3  | Finance |
| 4  | Mary | 3       |          | 4  | Sales   |
+----+------+---------+          +----+---------+Result:
+------+---------+
| name | dept_name |
+------+---------+
| John | HR      |
| Mike | HR      |
| Jane | IT      |
+------+---------+
2. 左外连接 (LEFT JOIN)

语法

SELECT columns
FROM table1
LEFT JOIN table2
ON table1.common_column = table2.common_column;

示例

SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id;

图示

employees             departments
+----+------+---------+          +----+---------+
| id | name | dept_id |          | id | name    |
+----+------+---------+          +----+---------+
| 1  | John | 1       |          | 1  | HR      |
| 2  | Jane | 2       |          | 2  | IT      |
| 3  | Mike | 1       |          | 3  | Finance |
| 4  | Mary | 4       |          | 4  | Sales   |
+----+------+---------+          +----+---------+Result:
+------+---------+
| name | dept_name |
+------+---------+
| John | HR      |
| Mike | HR      |
| Jane | IT      |
| Mary | NULL    |
+------+---------+
3. 右外连接 (RIGHT JOIN)

语法

SELECT columns
FROM table1
RIGHT JOIN table2
ON table1.common_column = table2.common_column;

示例

SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.department_id;

图示

employees             departments
+----+------+---------+          +----+---------+
| id | name | dept_id |          | id | name    |
+----+------+---------+          +----+---------+
| 1  | John | 1       |          | 1  | HR      |
| 2  | Jane | 2       |          | 2  | IT      |
| 3  | Mike | 1       |          | 3  | Finance |
| 4  | Mary | 4       |          | 4  | Sales   |
+----+------+---------+          +----+---------+Result:
+------+---------+
| name | dept_name |
+------+---------+
| John | HR      |
| Mike | HR      |
| Jane | IT      |
| NULL | Finance |
| NULL | Sales   |
+------+---------+
4. 全外连接 (FULL JOIN)

语法

SELECT columns
FROM table1
FULL JOIN table2
ON table1.common_column = table2.common_column;

示例

SELECT employees.name, departments.department_name
FROM employees
FULL JOIN departments
ON employees.department_id = departments.department_id;

图示

employees             departments
+----+------+---------+          +----+---------+
| id | name | dept_id |          | id | name    |
+----+------+---------+          +----+---------+
| 1  | John | 1       |          | 1  | HR      |
| 2  | Jane | 2       |          | 2  | IT      |
| 3  | Mike | 1       |          | 3  | Finance |
| 4  | Mary | 4       |          | 4  | Sales   |
+----+------+---------+          +----+---------+Result:
+------+---------+
| name | dept_name |
+------+---------+
| John | HR      |
| Mike | HR      |
| Jane | IT      |
| NULL | Finance |
| NULL | Sales   |
| Mary | NULL    |
+------+---------+
5. 交叉连接 (CROSS JOIN)

语法

SELECT columns
FROM table1
CROSS JOIN table2;

示例

SELECT employees.name, departments.department_name
FROM employees
CROSS JOIN departments;

图示

employees             departments
+----+------+---------+          +----+---------+
| id | name | dept_id |          | id | name    |
+----+------+---------+          +----+---------+
| 1  | John | 1       |          | 1  | HR      |
| 2  | Jane | 2       |          | 2  | IT      |
| 3  | Mike | 1       |          | 3  | Finance |
| 4  | Mary | 4       |          | 4  | Sales   |
+----+------+---------+          +----+---------+Result:
+------+---------+
| name | dept_name |
+------+---------+
| John | HR      |
| John | IT      |
| John | Finance |
| John | Sales   |
| Jane | HR      |
| Jane | IT      |
| Jane | Finance |
| Jane | Sales   |
| Mike | HR      |
| Mike | IT      |
| Mike | Finance |
| Mike | Sales   |
| Mary | HR      |
| Mary | IT      |
| Mary | Finance |
| Mary | Sales   |
+------+---------+
6. 自连接 (SELF JOIN)

语法

SELECT a.columns, b.columns
FROM table a
INNER JOIN table b
ON a.common_column = b.common_column;

示例

SELECT e1.name AS Employee, e2.name AS Manager
FROM employees e1
INNER JOIN employees e2
ON e1.manager_id = e2.employee_id;

图示

employees
+----+------+---------+------------+
| id | name | dept_id | manager_id |
+----+------+---------+------------+
| 1  | John | 1       | NULL       |
| 2  | Jane | 2       | 1          |
| 3  | Mike | 1       | 1          |
| 4  | Mary | 3       | 2          |
+----+------+---------+------------+Result:
+----------+---------+
| Employee | Manager |
+----------+---------+
| Jane     | John    |
| Mike     | John    |
| Mary     | Jane    |
+----------+---------+
7、小结

这些示例展示了使用 ANSI SQL 进行多表连接查询的常见类型,并提供了可视化图示来帮助理解每种连接的结果。这些连接类型包括内连接、左外连接、右外连接、全外连接、交叉连接和自连接。通过这些示例和图示,您可以更直观地理解多表连接的功能和用法。

ANSI SQL 的优势

  • 标准化: 由于 ANSI SQL 是标准化的,学习和使用它能够在不同的数据库系统之间通用。
  • 可移植性: 使用 ANSI SQL 编写的查询可以在支持 ANSI SQL 标准的数据库管理系统之间迁移。
  • 广泛支持: 主要的数据库管理系统如 MySQL、PostgreSQL、Oracle、SQL Server 等,都支持 ANSI SQL。

ANSI SQL 版本

ANSI SQL 标准自首次发布以来,经历了多次修订和更新。主要版本包括:

  • SQL-86: 第一个标准版本。
  • SQL-89: 对 SQL-86 的小幅修订。
  • SQL-92: 增加了许多新功能,是影响最大的一个版本。
  • SQL:1999: 引入了对象关系模型和扩展的存储过程。
  • SQL:2003: 引入了 XML 支持和窗口函数。
  • SQL:2006: 提升了对 XML 的支持。
  • SQL:2008: 引入了新数据类型和一些小修正。
  • SQL:2011: 引入了时间和序列数据类型。
  • SQL:2016: 增加了 JSON 支持和多项新功能。

总结

ANSI SQL 是一种强大的数据库查询和操作语言,具有高度的标准化和广泛的支持。它为数据库管理提供了基础,确保了不同数据库系统之间的兼容性和互操作性。通过学习 ANSI SQL,用户能够在各种数据库环境中有效地管理和操作数据。

二、常见数据库在ANSI SQL实现上的差异

以下是 MySQL、PostgreSQL、SQL Server 和 Oracle 在实现 ANSI SQL 标准上的详细差异和扩展,涵盖数据类型、数据定义语言 (DDL)、数据操作语言 (DML)、函数和表达式、事务控制语言 (TCL)、索引和约束、以及语法书写上的差异。

1. 数据类型

MySQL

扩展:

  • TINYINT: 小整数 (0 到 255)
  • MEDIUMINT: 中整数 (-8388608 到 8388607)
  • DATETIME: 日期和时间,精度为秒
  • ENUM: 枚举类型
  • SET: 集合类型
  • BIT: 位字段
PostgreSQL

扩展:

  • SERIAL: 自动递增整数
  • BIGSERIAL: 大范围的自动递增整数
  • TIMESTAMP WITH TIME ZONE: 带有时区的日期和时间
  • JSON/JSONB: JSON 数据类型,JSONB 支持二进制存储
  • UUID: 全局唯一标识符
  • ARRAY: 数组类型
  • HSTORE: 键值对存储
SQL Server

扩展:

  • TINYINT: 小整数 (0 到 255)
  • DATETIME2: 日期和时间,精度更高
  • DATETIMEOFFSET: 带有时区的日期和时间
  • UNIQUEIDENTIFIER: 全局唯一标识符
  • SQL_VARIANT: 任何数据类型的值
  • NVARCHAR: 支持 Unicode 的字符串
Oracle

扩展:

  • NUMBER: 可变精度的数值
  • TIMESTAMP WITH TIME ZONE: 带有时区的时间戳
  • TIMESTAMP WITH LOCAL TIME ZONE: 本地时区时间戳
  • CLOB: 大文本对象
  • BLOB: 二进制大对象
  • RAW: 原始二进制数据

2. 数据定义语言 (DDL)

创建表
  • MySQL:

    CREATE TABLE example (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50)
    ) ENGINE=InnoDB;
    
  • PostgreSQL:

    CREATE TABLE example (id SERIAL PRIMARY KEY,name VARCHAR(50)
    );
    
  • SQL Server:

    CREATE TABLE example (id INT IDENTITY(1,1) PRIMARY KEY,name NVARCHAR(50)
    );
    
  • Oracle:

    CREATE TABLE example (id NUMBER GENERATED BY DEFAULT AS IDENTITY,name VARCHAR2(50)
    );
    

扩展:

  • MySQL: 支持不同的存储引擎,如 InnoDB 和 MyISAM。
  • PostgreSQL: 支持扩展表继承和分区。
  • SQL Server: 支持文件组和表分区。
  • Oracle: 提供表分区和索引组织表。

3. 数据操作语言 (DML)

插入数据
  • MySQL:

    INSERT INTO example (name) VALUES ('John Doe');
    
  • PostgreSQL:

    INSERT INTO example (name) VALUES ('John Doe');
    
  • SQL Server:

    INSERT INTO example (name) VALUES ('John Doe');
    
  • Oracle:

    INSERT INTO example (name) VALUES ('John Doe');
    

扩展:

  • MySQL: 支持 INSERT IGNOREREPLACE 语句。
  • PostgreSQL: 提供 INSERT ... ON CONFLICT DO NOTHING/UPDATE
  • SQL Server: 支持 MERGE 语句进行条件插入和更新。
  • Oracle: 提供 MERGE INTO 语句进行条件插入和更新。

4. 函数和表达式

字符串函数
  • MySQL:

    SELECT CONCAT(first_name, ' ', last_name) FROM example;
    
  • PostgreSQL:

    SELECT CONCAT(first_name, ' ', last_name) FROM example;
    
  • SQL Server:

    SELECT first_name + ' ' + last_name FROM example;
    
  • Oracle:

    SELECT first_name || ' ' || last_name FROM example;
    

扩展:

  • MySQL: 提供 FIND_IN_SETFIELD 等函数。
  • PostgreSQL: 支持正则表达式匹配和处理函数,如 REGEXP_MATCH
  • SQL Server: 提供 CHARINDEXPATINDEX 等函数。
  • Oracle: 提供丰富的字符串处理函数,如 INSTRSUBSTRREGEXP_INSTR

5. 事务控制语言 (TCL)

开始事务
  • MySQL:

    START TRANSACTION;
    
  • PostgreSQL:

    BEGIN;
    
  • SQL Server:

    BEGIN TRANSACTION;
    
  • Oracle:

    BEGIN;
    

扩展:

  • MySQL: 提供显式锁机制,如 LOCK TABLES
  • PostgreSQL: 支持 SAVEPOINT 创建事务保存点。
  • SQL Server: 提供 SAVE TRANSACTIONTRY...CATCH 错误处理。
  • Oracle: 提供 SAVEPOINT 和高级锁机制。

6. 索引和约束

创建索引
  • MySQL:

    CREATE INDEX idx_name ON example (name);
    
  • PostgreSQL:

    CREATE INDEX idx_name ON example (name);
    
  • SQL Server:

    CREATE INDEX idx_name ON example (name);
    
  • Oracle:

    CREATE INDEX idx_name ON example (name);
    

扩展:

  • MySQL: 支持全文索引和空间索引。
  • PostgreSQL: 支持 GiST、GIN 等索引类型。
  • SQL Server: 支持全文索引和过滤索引。
  • Oracle: 支持基于函数的索引和位图索引。
外键约束
  • MySQL:

    ALTER TABLE example ADD CONSTRAINT fk_example FOREIGN KEY (department_id) REFERENCES departments(department_id);
    
  • PostgreSQL:

    ALTER TABLE example ADD CONSTRAINT fk_example FOREIGN KEY (department_id) REFERENCES departments(department_id);
    
  • SQL Server:

    ALTER TABLE example ADD CONSTRAINT fk_example FOREIGN KEY (department_id) REFERENCES departments(department_id);
    
  • Oracle:

    ALTER TABLE example ADD CONSTRAINT fk_example FOREIGN KEY (department_id) REFERENCES departments(department_id);
    

7. 其他特性

MySQL

扩展:

  • 复制: 主从复制、半同步复制、组复制。
  • 分区: 范围分区、列表分区、哈希分区等。
  • 插件架构: 支持多种存储引擎。
  • 语法差异:
    • 默认 AUTO_INCREMENT 关键字。
    • 支持 INSERT IGNOREREPLACE 语句。
PostgreSQL

扩展:

  • 扩展: 支持创建自定义扩展。
  • 数据类型: 广泛支持地理数据类型和全文搜索。
  • 并行查询: 支持并行查询执行。
  • 语法差异:
    • 默认使用 SERIAL 数据类型。
    • 支持 RETURNING 子句获取插入/更新的数据。
SQL Server

扩展:

  • CLR: 支持 Common Language Runtime (CLR) 集成。
  • 联机索引重建: 允许在线索引重建。
  • Always On: 高可用性和灾难恢复解决方案。
  • 语法差异:
    • 使用 IDENTITY 关键字。
    • 支持 MERGE 语句进行条件插入和更新。
Oracle

扩展:

  • PL/SQL: 强大的过程化语言支持。
  • Flashback: 数据库闪回功能。
  • RAC: 真实应用集群,实现高可用性。
  • 语法差异:
    • 使用 NUMBER 数据类型。
    • 支持 MERGE INTO 语句进行条件插入和更新。

总结

各个数据库系统在实现 ANSI SQL 标准时,都进行了广泛的扩展,以满足不同应用

三、常见数据库在SQL语法差异

以下列举了 MySQL、PostgreSQL、SQL Server 和 Oracle 在一些常见 SQL 操作(如分页、字符串连接、日期处理等)上的语法差异和独特的功能实现。

1. 分页查询

MySQL
SELECT * FROM table_name
LIMIT 10 OFFSET 20;
PostgreSQL
SELECT * FROM table_name
LIMIT 10 OFFSET 20;
SQL Server
SELECT * FROM table_name
ORDER BY column_name
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
Oracle
SELECT * FROM (SELECT t.*, ROWNUM rnum FROM table_name tWHERE ROWNUM <= 30
) WHERE rnum > 20;

2. 字符串连接

MySQL
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM table_name;
PostgreSQL
SELECT first_name || ' ' || last_name AS full_name FROM table_name;
SQL Server
SELECT first_name + ' ' + last_name AS full_name FROM table_name;
Oracle
SELECT first_name || ' ' || last_name AS full_name FROM table_name;

3. 日期处理

MySQL
SELECT DATE_ADD(NOW(), INTERVAL 1 DAY) AS tomorrow;
PostgreSQL
SELECT NOW() + INTERVAL '1 day' AS tomorrow;
SQL Server
SELECT DATEADD(day, 1, GETDATE()) AS tomorrow;
Oracle
SELECT SYSDATE + 1 AS tomorrow FROM dual;

4. 自动递增主键

MySQL
CREATE TABLE example (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50)
);
PostgreSQL
CREATE TABLE example (id SERIAL PRIMARY KEY,name VARCHAR(50)
);
SQL Server
CREATE TABLE example (id INT IDENTITY(1,1) PRIMARY KEY,name NVARCHAR(50)
);
Oracle
CREATE TABLE example (id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,name VARCHAR2(50)
);

5. 获取当前日期和时间

MySQL
SELECT NOW() AS current_time;
PostgreSQL
SELECT NOW() AS current_time;
SQL Server
SELECT GETDATE() AS current_time;
Oracle
SELECT SYSDATE AS current_time FROM dual;

6. 子查询中的列别名

MySQL
SELECT sub.name FROM (SELECT name FROM table_name) AS sub;
PostgreSQL
SELECT sub.name FROM (SELECT name FROM table_name) AS sub;
SQL Server
SELECT sub.name FROM (SELECT name FROM table_name) AS sub;
Oracle
SELECT sub.name FROM (SELECT name FROM table_name) sub;

7. 插入或更新 (UPSERT)

MySQL
INSERT INTO table_name (id, name) VALUES (1, 'John Doe')
ON DUPLICATE KEY UPDATE name = VALUES(name);
PostgreSQL
INSERT INTO table_name (id, name) VALUES (1, 'John Doe')
ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.name;
SQL Server
MERGE INTO table_name AS target
USING (SELECT 1 AS id, 'John Doe' AS name) AS source (id, name)
ON (target.id = source.id)
WHEN MATCHED THENUPDATE SET name = source.name
WHEN NOT MATCHED THENINSERT (id, name) VALUES (source.id, source.name);
Oracle
MERGE INTO table_name target
USING (SELECT 1 AS id, 'John Doe' AS name FROM dual) source
ON (target.id = source.id)
WHEN MATCHED THENUPDATE SET name = source.name
WHEN NOT MATCHED THENINSERT (id, name) VALUES (source.id, source.name);

8. 删除重复记录

MySQL
DELETE t1 FROM table_name t1
INNER JOIN table_name t2 
WHERE t1.id > t2.id AND t1.name = t2.name;
PostgreSQL
DELETE FROM table_name a
USING table_name b
WHERE a.id > b.id AND a.name = b.name;
SQL Server
WITH CTE AS (SELECT name, ROW_NUMBER() OVER (PARTITION BY name ORDER BY id) AS rnFROM table_name
)
DELETE FROM CTE WHERE rn > 1;
Oracle
DELETE FROM table_name
WHERE ROWID IN (SELECT ridFROM (SELECT ROWID AS rid,ROW_NUMBER() OVER (PARTITION BY name ORDER BY id) AS rnFROM table_name)WHERE rn > 1
);

9. 条件更新 (CASE WHEN)

MySQL
UPDATE table_name
SET column_name = CASEWHEN condition1 THEN result1WHEN condition2 THEN result2ELSE result3
END
WHERE some_column = some_value;
PostgreSQL
UPDATE table_name
SET column_name = CASEWHEN condition1 THEN result1WHEN condition2 THEN result2ELSE result3
END
WHERE some_column = some_value;
SQL Server
UPDATE table_name
SET column_name = CASEWHEN condition1 THEN result1WHEN condition2 THEN result2ELSE result3
END
WHERE some_column = some_value;
Oracle
UPDATE table_name
SET column_name = CASEWHEN condition1 THEN result1WHEN condition2 THEN result2ELSE result3
END
WHERE some_column = some_value;

10. 行号 (ROW NUMBER)

MySQL
SELECT *, @row_num := @row_num + 1 AS row_number
FROM table_name, (SELECT @row_num := 0) AS r;
PostgreSQL
SELECT *, ROW_NUMBER() OVER (ORDER BY some_column) AS row_number
FROM table_name;
SQL Server
SELECT *, ROW_NUMBER() OVER (ORDER BY some_column) AS row_number
FROM table_name;
Oracle
SELECT *, ROW_NUMBER() OVER (ORDER BY some_column) AS row_number
FROM table_name;

总结

以上示例展示了 MySQL、PostgreSQL、SQL Server 和 Oracle 在处理常见 SQL 操作时的语法差异和独特功能。这些差异包括分页查询、字符串连接、日期处理、自动递增主键、获取当前日期和时间、子查询中的列别名、插入或更新操作、删除重复记录、条件更新和行号生成。了解这些差异有助于在不同数据库系统之间进行迁移和优化查询。

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

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

相关文章

【数学】Leetcode 66. 加一【简单】

加一 给定一个由 整数 组成的 非空 数组所表示的非负整数&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外&#xff0c;这个整数不会以零开头。 示例 1&#xff1a; 输入&#xff1a;…

在Krpano中点击热点放大图片并交互

在全景项目中&#xff0c;经常会遇到这样的功能&#xff1a;点击场景中的某个热点&#xff0c;能够进行图片放大&#xff0c;同时还可以对图片进行交互操作&#xff0c;比如放大图片、拖动图片等&#xff0c;本章节内容讲述如何在Krpano库中调用js代码实现图片的放大和交互。具…

MySQL入门学习-连接查询.RIGHT JOIN

Rights Join 是 MySQL 中的一种连接查询类型&#xff0c;用于根据右表中的匹配条件&#xff0c;将左表中的数据与右表中的数据进行连接。 一、与其他连接查询相比&#xff0c;Rights Join 具有以下特点&#xff1a; 1. 连接方向&#xff1a; Rights Join 以右表为主表&#x…

django 身份验证与鉴权

目录 用户模型建立账号密码登录手机号登录验证码双后端鉴权JWT 介绍 用户模型建立 在django中自带auth_user表,字段名有id, password,username&#xff0c;is_superuer,is_activate , email &#xff0c;is_staff&#xff08;用于标识某个用户是否可以登录到 Django 的管理界面…

【Sa-Token|2】Sa-Token在微服务中的使用

在微服务架构中&#xff0c;使用 Sa-Token 进行分布式认证和权限管理需要考虑到各个服务之间的通信和 Token 的共享。以下是一个详细的教程&#xff0c;介绍如何在微服务中使用 Sa-Token。 1. 微服务架构介绍 假设有以下几个微服务&#xff1a; AuthService: 负责用户认证和 …

Python-日志模块

目录 一、日志级别 二、日志配置 1、日志基本配置 2、日志配置字典&#xff08;知道咋么改就可以&#xff09; 3、日志的使用 一、日志级别 import logginglogging.debug(调试日志) logging.info(消息日志) logging.warning(警告日志) logging.error(错误日志) logging.cr…

Java自增自减运算符

Java中的自增自减运算符分为两种&#xff1a; 自增运算符“ ”&#xff0c;作用是执行加法运算的变量值1 自减运算符“ -- ”&#xff0c;作用是执行加法运算的变量值-1 注意事项&#xff1a; “ ”和“ -- ”既可以放在变量的前面&#xff0c;也可以放在变量的后面。 自增自…

Linux驱动开发笔记(十三)Sysfs文件系统

文章目录 前言一、Sysfs1.1 Sysfs的引入1.2 Sysfs的目录结构1.2 Sysfs的目录详解1.2.1 devices1.2.2 bus1.2.3 class1.2.4 devices、bus、class目录之间的关系1.2.5 其他子目录 二、Sysfs使用2.1 核心数据结构2.2 相关函数2.2.1 kobject_create_and_add2.2.2 kobject_put()2.2.…

大模型自然语言生成自动驾驶可编辑仿真场景(其一 共十篇)

第一篇&#xff1a;LLM greater scene summarize 第二篇&#xff1a;LLM simulation Test effect 第三篇&#xff1a;LLM simulation driving scenario flow work 第四篇&#xff1a;LLM Algorithm flow description 第五篇&#xff1a;Configure the environment and back…

每天一个项目管理概念之PDCA

在项目管理中&#xff0c;PDCA&#xff08;计划-执行-检查-行动&#xff09;循环是一种广泛采用的质量管理工具&#xff0c;它帮助组织确保项目能够高效、有序地进行&#xff0c;并持续优化流程。本文将深入探讨PDCA循环的四个阶段&#xff0c;以及如何将其应用于项目管理中&am…

一键转换PDL至HTML,轻松驾驭文档格式,高效办公新纪元从此开启!

在信息爆炸的时代&#xff0c;文档格式繁多&#xff0c;如何高效处理这些文档成为了每个职场人士关注的焦点。现在&#xff0c;我们为您带来一款革命性的工具——一键转换PDL至HTML&#xff0c;让您轻松驾驭文档格式&#xff0c;开启高效办公新纪元&#xff01; 首先&#xff0…

八-工具包3-pandas数据清洗及相关性

数据清洗概述 数据清洗是对一些没有用的、不合理的数据进行处理的过程。 很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况,如果要使数据分析更加准确,就需要对这些没有用的数据进行处理。 样本数据: from io import StringIO import pandas as pdcsv_d…

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-14模型构造

14模型构造 import torch from torch import nn from torch.nn import functional as F#通过实例化nn.Sequential来构建我们的模型&#xff0c; 层的执行顺序是作为参数传递的 net1 nn.Sequential(nn.Linear(20, 256), nn.ReLU(), nn.Linear(256,10)) """ nn.…

不同@Transactional方法调用同一个synchronized方法引发的生成重复序号问题

背景&#xff1a; Transactional( propagation Propagation.REQUIRED ) 方法 A内调用synchronized方法 这种默认传播方式使得子函数也加入当前事务&#xff0c; synchronized方法结束之后&#xff0c; Transactional 方法A 执行结束之前, synchronized方法对数据库表所作变…

Electron快速入门(三):在(二)的基础上修改了一个文件夹做了个备忘录

Lingering Memories 诗绪萦怀 修改index.html <!--index.html--> <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --><meta http…

opencv-python(十一)

图像加法 import numpy as np import cv2 img cv2.imread(jk.jpg) res cv2.add(img, img) cv2.imshow(Mypicture1,img) cv2.imshow(MyPicture2,res)cv2.waitKey(0) cv2.destroyAllWindows() res cv2.add(src1, src2, dstNone, maskNone, dtypeNone) src1&#xff1a;第一幅…

Android RecyclerView卡顿

Android RecyclerView卡顿的原因可能包括以下几点&#xff1a; 数据加载和渲染耗时&#xff1a; 当列表项较多或者数据量庞大时&#xff0c;如果在主线程中进行数据加载和布局渲染&#xff0c;会导致主线程阻塞&#xff0c;从而造成滑动卡顿。例如&#xff0c;在滚动过程中需要…

作为一名程序员,怎么才能写出简洁实用还漂亮的代码楼呢?这25个超惊艳的Python代码写法,你一定要学会!

前言 Python可以用于复杂的数据分析和Web开发项目&#xff0c;还能以极少的代码行数完成令人惊叹的任务。本文将分享25个简短的Python代码示例&#xff0c;用来展示Python编程语言的魅力和效率。 1.列表推导式 Python的列表推导式提供了一种优雅的方法来创建列表。 # 将一个…

以太坊==MetaMask获取测试币最新网址

估算分数https://community.infura.io/t/unable-to-receive-sepolia-eth-from-faucet/7715 Gitcoin Passport 水龙头地址&#xff0c;填入自己的测试地址 水龙头项目地址 GitHub - pk910/PoWFaucet: Modularized faucet for EVM chains with different protection methods (…

从0开发一个Chrome插件:用户反馈与更新 Chrome 插件

前言 这是《从0开发一个Chrome插件》系列的第二十二篇文章,也是最终篇,本系列教你如何从0去开发一个Chrome插件,每篇文章都会好好打磨,写清楚我在开发过程遇到的问题,还有开发经验和技巧。 专栏: 从0开发一个Chrome插件:什么是Chrome插件?从0开发一个Chrome插件:开发…