常用SQL语法总结

目录

常见的DDL操作

创建数据库

删除数据库

查看数据库:

创建表格

删除表格

添加主键

删除主键

查看表格

查看表的结构

改变表格名字

添加列

删除列

修改列名

修改表格

创建索引

删除索引

创建视图

删除视图

常见的DML操作

插入数据

[方式1:使用常规INSERT INTO语句](#方式1:使用常规INSERT INTO语句)

方式2:插入多行数据

更新数据

方式1:使用常规UPDATE语句

方式2:同时更新多个列

删除数据

[方式1:使用常规DELETE FROM语句](#方式1:使用常规DELETE FROM语句)

方式2:删除所有数据

查询数据

方式1:基本SELECT语句

方式2:使用聚合函数

方式3:多表联接

高级DML技巧

事务管理

使用子查询

使用触发器

常见的DCL操作

[SQL Server](#SQL Server)

创建用户

给用户授权

撤销授权

查看用户权限

删除用户

修改用户密码

MySQL

创建用户

给用户授权

撤销授权

查看用户权限

删除用户

修改用户密码

数据库权限的层次结构

角色的使用

注意事项和最佳实践

常见的DQL操作

多种查询方式

[a. 基本SELECT语句](#a. 基本SELECT语句)

[b. 条件筛选](#b. 条件筛选)

[c. 排序结果](#c. 排序结果)

使用聚合函数

分组和分组函数

内连接

左连接

右连接

子查询

[SQL Server常用语法](#SQL Server常用语法)

创建数据库:

选择数据库:

创建表格:


SQL(Structured Query Language)具有四个主要的子集,用于不同的数据库操作,这些子集分别是:

  1. DML(Data Manipulation Language): DML用于操纵数据库中的数据,主要包括插入、更新、删除数据的操作。常见的DML语句包括INSERT、UPDATE、DELETE。

  2. DQL(Data Query Language): DQL用于查询数据库中的数据,它主要包括用于检索信息的查询操作,其中最常见的是SELECT语句。

  3. DDL(Data Definition Language): DDL用于定义数据库的结构,包括创建、修改、删除数据库对象,如表、索引、视图等。常见的DDL语句包括CREATE、ALTER、DROP。

  4. DCL(Data Control Language): DCL用于数据库的访问控制和权限管理,它包括授权、撤销授权等语句,用于管理用户对数据库的权限。常见的DCL语句包括GRANT和REVOKE。

这四个子集一起构成了SQL的核心功能,使用户能够管理数据库对象、执行查询、操纵数据以及控制访问权限。不同的数据库管理系统(DBMS)支持SQL的不同子集,但这些子集都是SQL语言的标准组成部分。

常见的DDL操作

创建数据库

要创建一个新数据库,您可以使用SQL中的CREATE DATABASE语句,后面跟着数据库的名称。例如:

sql 复制代码
CREATE DATABASE MyDatabase;

这将创建一个名为"MyDatabase"的新数据库。

删除数据库

要删除数据库及其所有内容,可以使用SQL中的DROP DATABASE语句,后面跟着数据库的名称。请谨慎使用此操作,因为它将永久删除数据库中的所有数据。例如:

sql 复制代码
DROP DATABASE MyDatabase;

这将永久删除名为"MyDatabase"的数据库。

查看数据库:

要查看数据库的列表或属性,可以使用数据库管理系统(DBMS)提供的查询或命令。具体操作取决于使用的DBMS。以下是一些常见的示例:

在MySQL中,您可以使用以下命令列出所有数据库:

sql 复制代码
SHOW DATABASES;

在SQL Server中,您可以使用以下查询来列出所有数据库:

sql 复制代码
SELECT name FROM sys.databases;

创建表格

创建表格是数据库设计的第一步。使用DDL中的CREATE TABLE语句,我们可以定义表格的结构,包括列的名称、数据类型、约束条件等。这是数据存储的基础。

sql 复制代码
CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    Salary DECIMAL(10, 2)
);

这个SQL代码用于创建名为"Employees"的表格。以下是各个部分的解释:

  • CREATE TABLE Employees: 这是DDL语句的起始部分,指示要创建一个名为"Employees"的表格。

  • (EmployeeID INT PRIMARY KEY, FirstName VARCHAR(50), LastName VARCHAR(50), Salary DECIMAL(10, 2)): 这部分定义了表格的列。每列由列名和数据类型组成,其中包括EmployeeID(整数类型),FirstNameLastName(文本类型),以及Salary(十进制数类型)。PRIMARY KEY关键字指示EmployeeID列是主键,用于唯一标识每个记录。

删除表格

有时候,我们需要从数据库中删除不再需要的表格。使用DDL中的DROP TABLE语句,我们可以永久删除表格及其数据。

sql 复制代码
DROP TABLE Employees;

这个SQL代码用于永久删除名为"Employees"的表格及其所有数据。以下是解释:

  • DROP TABLE Employees: 这部分指示要删除名为"Employees"的表格。

添加主键

sql 复制代码
Alter table tabname add primary key(col)

删除主键

sql 复制代码
Alter table tabname drop primary key(col)

查看表格

在MySQL中,您可以使用以下SQL查询来查看数据库中的表格:

sql 复制代码
SHOW TABLES;

在SQL Server中,您可以使用以下SQL查询来列出当前数据库中的所有表格:

sql 复制代码
SELECT table_name = t.name
FROM sys.tables t
INNER JOIN sys.schemas s
ON t.schema_id = s.schema_id;

查看表的结构

使用以下SQL语句可以查看表格的结构

sql 复制代码
DESCRIBE table_name;

sql 复制代码
SHOW COLUMNS FROM table_name;

改变表格名字

使用以下SQL语句可以更改表格的名字:

sql 复制代码
ALTER TABLE old_table_name RENAME TO new_table_name;

添加列

sql 复制代码
-- 在Employees表格中添加新列Email
ALTER TABLE Employees
ADD Email VARCHAR(100);

在上面的示例中,我们使用ALTER TABLE语句,指定要修改的表格(Employees),然后使用ADD子句添加新列(Email),并指定新列的数据类型(VARCHAR(100))。

删除列

sql 复制代码
-- 从Employees表格中删除列Email
ALTER TABLE Employees
DROP COLUMN Email;

在上面的示例中,我们使用ALTER TABLE语句指定要修改的表格(Employees),然后使用DROP COLUMN子句删除列(Email)。

修改列名

使用以下SQL语句可以修改列名:

sql 复制代码
ALTER TABLE table_name
CHANGE old_column_name new_column_name new_data_type;

这将把名为old_column_name的列的名字更改为new_column_name,并可以选择性地更改数据类型。

修改表格

据库结构是动态的,需要不断适应变化的需求。DDL允许我们使用ALTER TABLE语句来修改表格结构,如添加新列、修改列数据类型或添加约束条件。

sql 复制代码
ALTER TABLE Employees
ADD Email VARCHAR(100);

这个SQL代码用于修改名为"Employees"的表格,添加一个名为"Email"的新列。以下是解释:

  • ALTER TABLE Employees: 这部分指示要修改名为"Employees"的表格。

  • ADD Email VARCHAR(100): 这部分表示要向表格中添加一个新列,名为"Email",数据类型为VARCHAR,最大长度为100个字符。

创建索引

索引是加速数据检索的关键。DDL允许我们使用CREATE INDEX语句来定义一个或多个列的索引,提高数据检索性能。

sql 复制代码
CREATE INDEX idx_EmployeeLastName ON Employees(LastName);

个SQL代码用于在名为"Employees"的表格的"LastName"列上创建一个索引。以下是解释:

  • CREATE INDEX idx_EmployeeLastName: 这部分表示要创建一个名为"idx_EmployeeLastName"的索引。

  • ON Employees(LastName): 这部分指示该索引应该建立在名为"Employees"的表格的"LastName"列上,以加速对"LastName"列的数据检索。

删除索引

sql 复制代码
DROP INDEX index_name ON table_name

**注:**索引是不可更改的,想更改必须删除重新建。

创建视图

sql 复制代码
create view viewname as select statement

删除视图

sql 复制代码
drop view viewname

常见的DML操作

DML是SQL的子集,专注于操作和管理数据库中的数据。它是数据库管理的核心,允许我们以不同的方式操纵数据,以满足应用程序的需求。

插入数据

插入数据是DML中的基本操作,用于将新数据添加到数据库表格中。有多种方式可以实现插入数据,下面是一些示例:

方式1:使用常规INSERT INTO语句
sql 复制代码
INSERT INTO Customers (CustomerName, ContactName, ContactEmail)
VALUES ('CompanyA', 'John Smith', 'john@example.com');

在这个示例中,我们使用INSERT INTO语句指定要插入数据的目标表格(Customers),然后在VALUES子句中指定要插入的值,这将在表格中创建一条新记录。

方式2:插入多行数据
sql 复制代码
INSERT INTO Orders (OrderID, CustomerID, OrderDate)
VALUES (1, 101, '2023-01-15'),
       (2, 102, '2023-01-16'),
       (3, 101, '2023-01-17');

这个示例演示如何一次插入多行数据,以便高效地添加多个记录。

更新数据

更新数据是DML的另一个关键操作,它允许我们修改数据库中的现有数据。以下是一些更新数据的方式:

方式1:使用常规UPDATE语句
sql 复制代码
UPDATE Employees
SET Salary = 55000.00
WHERE EmployeeID = 1001;

在这个示例中,我们使用UPDATE语句指定要更新的目标表格(Employees),然后使用SET子句指定要更新的列和新值,最后使用WHERE子句确定要更新的行。

方式2:同时更新多个列
sql 复制代码
UPDATE Orders
SET OrderStatus = 'Shipped',
    ShippedDate = '2023-01-20'
WHERE OrderID = 123;

这个示例演示了如何同时更新多个列,以便在一次操作中修改多个字段的值。

删除数据

删除数据是DML操作的一个关键方面,用于从数据库中永久删除不再需要的数据。以下是一些删除数据的方式:

方式1:使用常规DELETE FROM语句
sql 复制代码
DELETE FROM Customers
WHERE CustomerName = 'CompanyA';

在这个示例中,我们使用DELETE FROM语句指定要删除的目标表格(Customers),然后使用WHERE子句确定要删除的行。

方式2:删除所有数据
sql 复制代码
DELETE FROM Products;

这个示例演示了如何删除表格中的所有数据,这在清理整个表格时非常有用。

查询数据

查询数据是DML的核心,用于检索数据库中的数据。以下是一些不同方式的查询数据:

方式1:基本SELECT语句
sql 复制代码
SELECT CustomerName, ContactName
FROM Customers;

这是最基本的查询方式,用于选择特定列的数据。

方式2:使用聚合函数
sql 复制代码
SELECT COUNT(*) AS TotalOrders
FROM Orders;

这个示例演示了如何使用聚合函数(COUNT)来汇总数据,以获取总订单数。

方式3:多表联接
sql 复制代码
SELECT Customers.CustomerName, Orders.OrderDate
FROM Customers
JOIN Orders ON Customers.CustomerID = Orders.CustomerID;

这个示例演示了如何将多个表格联接在一起,以获取相关数据。

高级DML技巧

除了基本的插入、更新、删除和查询操作,还有一些高级DML技巧:

事务管理

使用事务可以确保一系列DML操作要么全部成功,要么全部失败。这有助于维护数据库的一致性。

sql 复制代码
BEGIN TRANSACTION;
-- 执行一系列DML操作
COMMIT;
-- 或者 ROLLBACK 如果需要回滚操作
使用子查询

子查询允许您在DML操作中使用查询结果,以便根据其他数据来操作数据。

sql 复制代码
UPDATE Products
SET Price = Price * 0.9
WHERE CategoryID IN (SELECT CategoryID FROM Categories WHERE CategoryName = 'Electronics');
使用触发器

触发器是在DML操作之前或之后自动触发的存储过程。它们可以用于执行特定的操作,如日志记录或数据验证。

常见的DCL操作

数据库授权是授予用户或角色对数据库对象的访问权限的过程。权限控制是确保用户只能执行其具备权限的操作的方法。通过DCL语句,数据库管理员可以执行以下操作:

SQL Server

创建用户

  1. 创建登录(用户名和密码):

    sql 复制代码
    CREATE LOGIN NewUser WITH PASSWORD = 'UserPassword';

    使用 CREATE LOGIN 语句创建登录,登录将作为用户的凭证。NewUser 是要创建的登录用户名,UserPassword 是登录的密码。

  2. 创建用户并将其与数据库关联:

    sql 复制代码
    USE YourDatabaseName;
    CREATE USER NewUser FOR LOGIN NewUser;

使用 USE 语句选择要创建用户的数据库。使用 CREATE USER 语句为登录创建数据库用户。NewUser 是用户的名称,它将与创建的登录关联起来。

给用户授权

使用 GRANT 语句为用户分配权限。

sql 复制代码
GRANT SELECT, INSERT, UPDATE ON YourTableName TO NewUser;

这个语句将授予 NewUser 用户对 YourTableName 表格的 SELECTINSERTUPDATE 权限。

撤销授权

使用 REVOKE 语句来撤销已授予的权限。

sql 复制代码
REVOKE SELECT, INSERT, UPDATE ON YourTableName FROM NewUser;

这个语句将从 NewUser 用户中撤销对 YourTableName 表格的 SELECTINSERTUPDATE 权限。

查看用户权限

要查看用户的权限,您可以使用以下查询:

sql 复制代码
SELECT permission_name, state_desc
FROM sys.database_permissions
WHERE grantee_principal_id = USER_ID('NewUser');

这个查询将返回 NewUser 用户在数据库中拥有的权限列表,以及这些权限的状态。

删除用户

删除用户需要首先删除用户与数据库的关联,然后删除登录。

  1. 删除用户与数据库的关联:

    sql 复制代码
    USE YourDatabaseName;
    DROP USER NewUser;

    使用 USE 语句选择要删除用户的数据库。使用 DROP USER 语句删除用户。

  2. 删除登录:

    sql 复制代码
    DROP LOGIN NewUser;

    使用 DROP LOGIN 语句删除登录。

修改用户密码

要更改用户密码,可以使用以下命令:

sql 复制代码
ALTER LOGIN NewUser WITH PASSWORD = 'NewPassword';

这个命令将 NewUser 登录的密码更改为 NewPassword

MySQL

创建用户

在MySQL中,您可以使用 CREATE USER 语句创建用户。

sql 复制代码
CREATE USER 'NewUser'@'localhost' IDENTIFIED BY 'UserPassword';

这个语句将创建一个名为 NewUser 的用户,只允许从 localhost 访问,并且使用 UserPassword 作为密码。

给用户授权

使用 GRANT 语句为用户分配权限:

sql 复制代码
GRANT SELECT, INSERT, UPDATE ON YourDatabaseName.YourTableName TO 'NewUser'@'localhost';

这个语句将授予 NewUser 用户对 YourDatabaseName.YourTableName 表格的 SELECTINSERTUPDATE 权限。

撤销授权

使用 REVOKE 语句来撤销已授予的权限:

sql 复制代码
REVOKE SELECT, INSERT, UPDATE ON YourDatabaseName.YourTableName FROM 'NewUser'@'localhost';

这个语句将从 NewUser 用户中撤销对 YourDatabaseName.YourTableName 表格的 SELECTINSERTUPDATE 权限。

查看用户权限

您可以使用以下查询来查看用户的权限:

sql 复制代码
SHOW GRANTS FOR 'NewUser'@'localhost';

这个查询将返回 NewUser 用户在数据库中的权限列表。

删除用户

要删除MySQL用户,使用 DROP USER 语句:

sql 复制代码
DROP USER 'NewUser'@'localhost';

修改用户密码

要更改用户密码,可以使用以下命令:

sql 复制代码
SET PASSWORD FOR 'NewUser'@'localhost' = PASSWORD('NewPassword');

这个命令将 NewUser 用户在 localhost 上的密码更改为 NewPassword

数据库权限的层次结构

数据库权限通常具有层次结构,其中高级别的权限包含了低级别的权限。一些常见的数据库权限包括:

  • SELECT:允许用户查询数据库对象的数据。
  • INSERT:允许用户向数据库对象中插入新数据。
  • UPDATE:允许用户修改数据库对象中的数据。
  • DELETE:允许用户从数据库对象中删除数据。
  • CREATE:允许用户创建新的数据库对象,如表格、视图、存储过程等。
  • ALTER:允许用户修改现有的数据库对象的结构。
  • DROP:允许用户删除数据库对象。
  • GRANT:允许用户授权其他用户或角色。
  • REVOKE:允许用户回收已授权的权限。

通过将这些权限分配给特定的用户或角色,数据库管理员可以实现细粒度的权限控制,确保数据库的安全性和完整性。

角色的使用

数据库管理员通常使用角色来简化权限管理。角色是一组权限的集合,可以将用户分配给角色,而不必单独分配每个权限。这提高了权限管理的效率,因为可以根据角色来管理权限,而不是为每个用户分配权限。

注意事项和最佳实践

在使用DCL进行权限控制时,有一些重要的注意事项和最佳实践:

  • 最小权限原则:仅授予用户或角色所需的最小权限,以降低不必要的风险。
  • 定期审查权限:定期审查和更新用户和角色的权限,以确保数据库安全性和完整性。
  • 谨慎使用WITH GRANT OPTIONWITH GRANT OPTION允许用户将其获得的权限授予其他用户,要慎用以防止权限滥用。
  • 记录权限变更:记录权限的授予和撤销,以便跟踪权限变更的历史。

常见的DQL操作

多种查询方式

a. 基本SELECT语句

基本的SELECT语句用于从数据库中检索数据。以下是一个例子,从名为Employees的表格中检索员工的姓名和工资信息:

sql 复制代码
SELECT FirstName, LastName, Salary
FROM Employees;
b. 条件筛选

条件筛选允许您根据特定条件筛选数据行。在以下示例中,我们只检索工资高于50000的员工:

sql 复制代码
SELECT FirstName, LastName, Salary
FROM Employees
WHERE Salary > 50000;
c. 排序结果

您可以使用ORDER BY子句对结果进行排序。以下是一个示例,按工资降序排列员工:

sql 复制代码
SELECT FirstName, LastName, Salary
FROM Employees
ORDER BY Salary DESC;

使用聚合函数

聚合函数用于计算结果集中的统计信息,如总和、平均值、最大值和最小值。以下是一个示例,计算所有员工的平均工资:

sql 复制代码
SELECT AVG(Salary)
FROM Employees;

分组和分组函数

分组操作允许您将结果集按一列或多列分组,然后使用分组函数对每个组进行聚合。以下是一个示例,按部门分组并计算每个部门的平均工资:

sql 复制代码
SELECT Department, AVG(Salary)
FROM Employees
GROUP BY Department;

内连接

内连接(INNER JOIN)用于将两个表格中相匹配的行联接在一起。以下是一个内连接的示例,它检索员工的姓名和所属部门:

sql 复制代码
SELECT Employees.FirstName, Employees.LastName, Departments.DepartmentName
FROM Employees
INNER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

内连接仅返回两个表格中匹配的行。

左连接

左连接(LEFT JOIN)返回左表格的所有行,以及与右表格匹配的行。如果没有匹配的行,将显示NULL值。以下是一个左连接示例,返回所有员工和他们的部门信息,包括那些没有分配到部门的员工:

sql 复制代码
SELECT Employees.FirstName, Employees.LastName, Departments.DepartmentName
FROM Employees
LEFT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

这个查询将返回所有员工的姓名以及他们所属的部门,如果员工没有分配到部门,将显示NULL。

右连接

右连接(RIGHT JOIN)返回右表格的所有行,以及与左表格匹配的行。如果没有匹配的行,将显示NULL值。以下是一个右连接示例,返回所有部门以及属于该部门的员工,包括那些没有员工的部门:

sql 复制代码
SELECT Employees.FirstName, Employees.LastName, Departments.DepartmentName
FROM Employees
RIGHT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

这个查询将返回所有部门的名称以及在该部门工作的员工,如果没有员工在某个部门工作,将显示NULL。

子查询

子查询是一个嵌套在主查询中的查询,允许您根据其他查询的结果进行进一步的操作。以下是一个子查询的示例,筛选出工资高于平均工资的员工:

sql 复制代码
SELECT FirstName, LastName, Salary
FROM Employees
WHERE Salary > (SELECT AVG(Salary) FROM Employees);
  • WHERE Salary > (SELECT AVG(Salary) FROM Employees):这是一个子查询,它计算了员工的平均工资,并将其与每个员工的工资进行比较。

这个查询将返回工资高于平均工资的员工的姓名和工资信息。

SQL Server常用语法

创建数据库

sql 复制代码
CREATE DATABASE database_name;

CREATE DATABASE database_name;: 用于创建一个新的数据库,其中database_name是您要创建的数据库的名称。

选择数据库

sql 复制代码
USE database_name;

USE database_name;: 用于选择要在其上执行SQL操作的数据库,database_name是数据库的名称。

创建表格

sql 复制代码
CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    ...
);

CREATE TABLE table_name (...): 创建一个新表格,您需要指定表格的名称和列的定义,列定义包括列名和数据类型。

插入数据

sql 复制代码
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);

INSERT INTO table_name (...) VALUES (...): 用于将新数据插入到表格中,您需要指定表格名称和要插入的值。

更新数据

sql 复制代码
UPDATE table_name
SET column1 = new_value1, column2 = new_value2, ...
WHERE condition;

UPDATE table_name SET ... WHERE ...: 用于更新表格中的数据,指定要更新的列和条件,以确定要更新的行。

删除数据

sql 复制代码
DELETE FROM table_name
WHERE condition;

DELETE FROM table_name WHERE ...: 用于从表格中删除数据,指定要删除的行的条件。

选择数据

sql 复制代码
SELECT column1, column2, ...
FROM table_name
WHERE condition;

SELECT ... FROM table_name WHERE ...: 用于从表格中检索数据,可以指定要选择的列和筛选条件。

排序数据

sql 复制代码
SELECT column1, column2, ...
FROM table_name
ORDER BY column1 ASC, column2 DESC;

ORDER BY column1 ASC, column2 DESC: 用于对检索的数据进行排序,ASC表示升序,DESC表示降序。

聚合函数

  • 求和:SUM(column_name)
  • 平均值:AVG(column_name)
  • 最大值:MAX(column_name)
  • 最小值:MIN(column_name)
  • 计数:COUNT(column_name)

分组和分组函数

sql 复制代码
SELECT column1, COUNT(*)
FROM table_name
GROUP BY column1;

GROUP BY column1: 用于将结果集按列分组,以便应用分组函数来计算每个组的统计信息。

连接表格

  • 内连接:INNER JOIN
  • 左连接:LEFT JOIN
  • 右连接:RIGHT JOIN
  • 全外连接:FULL OUTER JOIN

子查询

sql 复制代码
SELECT column1
FROM table_name
WHERE column2 = (SELECT column3 FROM another_table WHERE condition);

子查询嵌套在主查询中,可用于根据其他查询的结果进行进一步的操作,例如根据子查询的结果筛选数据。

创建索引

sql 复制代码
CREATE INDEX index_name ON table_name (column1, column2, ...);

CREATE INDEX index_name ON table_name (...): 用于在一个或多个列上创建索引,以加速数据检索。

更改表格结构

  • 添加列:ALTER TABLE table_name ADD column_name datatype;
  • 删除列:ALTER TABLE table_name DROP COLUMN column_name;
  • 修改列:ALTER TABLE table_name ALTER COLUMN column_name new_datatype;

删除表格

sql 复制代码
DROP TABLE table_name;

DROP TABLE table_name;: 用于删除整个表格以及其数据。

相关推荐
行走的山峰4 分钟前
etcd三节点,其中一个坏掉了的恢复办法
数据库·etcd
ImomoTo3 小时前
HarmonyOS学习(十三)——数据管理(二) 关系型数据库
数据库·学习·harmonyos·arkts·鸿蒙
开MINI的工科男5 小时前
【笔记】自动驾驶预测与决策规划_Part3_路径与轨迹规划
人工智能·笔记·自动驾驶·预测与决策
机器视觉知识推荐、就业指导5 小时前
Qt/C++事件过滤器与控件响应重写的使用、场景的不同
开发语言·数据库·c++·qt
jnrjian6 小时前
export rman 备份会占用buff/cache 导致内存压力
数据库·oracle
isNotNullX6 小时前
一文解读OLAP的工具和应用软件
大数据·数据库·etl
小诸葛的博客8 小时前
pg入门1——使用容器启动一个pg
数据库
洛寒瑜9 小时前
【读书笔记-《30天自制操作系统》-23】Day24
开发语言·汇编·笔记·操作系统·应用程序
大熊程序猿9 小时前
python 读取excel数据存储到mysql
数据库·python·mysql