MySQL基础篇——第10章 DDL(数据定义):创建和管理表

2023-11-07

MySQL基础篇——第10章 DDL(数据定义):创建和管理表

1. 基础知识

1.1 一条数据存储的过程

  • 存储数据是处理数据的第一步。只有正确地把数据存储起来,我们才能进行有效的处理和分析

  • MySQ的数据存储过程:创建数据库、确认字段、创建数据表、插入数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yK50yFjv-1652660526961)(MySQL基础篇——第10章 创建和管理表.assets/image-20220424181558529.png)]

  • 我们要先创建一个数据库(本质是一个文件系统),而不是直接创建数据表呢?
    • 因为从系统架构的层次上看,MySQL 数据库系统从大到小依次是:数据库服务器、数据库、数据表、数据表的行与列

1.2 标识符命名规则

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

2. 创建数据库 & 管理数据库

2.1 创建数据库 CREATE DATABASE

注意:DATABASE 不能改名。一些可视化工具可以改名,它是建新库,把所有表复制到新库,再删旧库完成的

  • 方式1:创建数据库,使用默认字符集
CREATE DATABASE 数据库名;
  • 方式2:创建数据库并指定字符集
CREATE DATABASE 数据库名 CHARACTER SET '字符集';
  • 方式3(推荐):判断该数据库名的数据库是否已存在。若不存在则创建数据库;若已存在则忽略该指令,且不会报错
CREATE DATABASE IF NOT EXISTS 数据库名 [CHARACTER SET '字符集'];

2.2 使用和查看数据库

注意:要操作表格和数据之前必须先说明是对哪个数据库进行操作,否则就要对所有对象加上 数据库名.

  • 使用 / 切换数据库
USE 数据库名;
  • 查看当前所有的数据库
SHOW DATABASES;  # 复数,代表多个数据库
  • 查看当前正在使用的数据库
SELECT DATABASE();  # DATABASE():mysql中的全局函数
或者:
SELECT DATABASE() FROM DUAL;
  • 查看指定数据库下所有的表
SHOW TABLES FROM 数据库名;
  • 查看当前正在使用的数据库下所有的表
SHOW TABLES;
  • 查看数据库的创建信息
SHOW CREATE DATABASE 数据库名;
# 或
SHOW CREATE DATABASE 数据库名\G

2.3 修改数据库 ALTER DATABASE

  • 更改指定数据库的字符集
ALTER DATABASE 数据库名 CHARACTER SET '字符集';

2.4 删除数据库 DROP DATABASE

  • 方式1:删除指定的数据库
DROP DATABASE 数据库名;
  • 方式2( 推荐 ):删除指定的数据库。若存在则删除数据库;若不存在则忽略该指令,且不会报错
DROP DATABASE IF EXISTS 数据库名;

3. 创建表 & 查看表结构

3.1 创建表 CREATE TABLE

3.1.1 创建方式1:创建一个空表
  • 必须具备:CREATE TABLE 权限和存储空间
  • 语法格式:
CREATE TABLE [IF NOT EXISTS] 表名(
字段名1 数据类型 [约束条件] [默认值],
字段名2 数据类型 [约束条件] [默认值],
字段名3 数据类型 [约束条件] [默认值],
……
[表约束条件]
);
  1. 加上了 IF NOT EXISTS 关键字,则表示:如果当前数据库中不存在要创建的数据表,则创建数据表;如果当前数据库中已经存在要创建的数据表,则忽略建表语句,不再创建数据表

  2. 如果创建表时没有指明使用的字符集,则默认使用表所在的数据库的字符集

  3. 必须指定新创建表的:

    • 表名
    • 字段名(列名),数据类型,长度
  4. 可选指定:

    • 约束条件
    • 默认值

举例:

CREATE TABLE emp (
emp_id INT,  # int类型
emp_name VARCHAR(20),  # 最多保存20个中英文字符
salary DOUBLE,  # 总位数不超过15位
birthday DATE  # 日期类型
);
3.1.2 创建方式2:基于已有的表
  • 使用 AS + SELECT 语句 的结构,将创建表和插入数据结合起来

  • 语法格式:

CREATE TABLE 表名
AS
SELECT 字段列表
FROM 已有的表;
  1. 将子查询的结果集复制为一张新表,同时将结果集中的数据插入到新表中

  2. 新创建表的字段的数据类型取决于子查询的结果集中字段的数据类型

  3. 子查询结果集中字段的名称(或别名),作为新创建表的字段的名称


举例1:创建一个表 emp_copy,实现对employees的复制,包括表数据

CREATE TABLE emp_copy
AS
SELECT *
FROM employees;

举例2:创建一个表 emp_blank,实现对employees的复制,不包括表数据

CREATE TABLE emp_blank
AS
SELECT *
FROM employees
WHERE 1 = 2;  # 创建的emp_blank是空表

举例3:

CREATE TABLE dept80
AS
SELECT employee_id, last_name, salary * 12 "ANNSAL", hire_date
FROM employees
WHERE department_id = 80; 

3.2 查看表结构 DESC / SHOW CREATE TABLE

  • MySQL支持使用 DESCRIBE / DESC 语句查看数据表结构,也支持使用 SHOW CREATE TABLE 语句查看数据表结构:
DESCRIBE 表名;
# 或
DESC 表名;
# 或
SHOW CREATE TABLE 表名;
# 或
SHOW CREATE TABLE 表名\G
  • 使用 SHOW CREATE TABLE 语句不仅可以查看表创建时的详细语句,还可以查看存储引擎和字符编码

4. 修改表 ALTER TABLE

  • 凡是对表中字段(列)进行操作,即修改表的结构,都使用 ALTER TABLE

  • 使用 ALTER TABLE 语句可以实现:

    • 向已有的表中增加字段(列)
    • 修改现有表中的字段(列)
    • 删除现有表中的字段(列)
    • 重命名现有表中的字段(列)

4.1 增加一个字段(列) ALTER TABLE ... ADD

  • 语法格式:
ALTER TABLE 表名 
ADD 字段名1 数据类型 [FIRST/AFTER 字段名2];

举例1:默认添加到当前表的最后一个字段之后

ALTER TABLE myemp1 
ADD salary DOUBLE(10, 2);

举例2:添加到当前表的第一个字段之前

ALTER TABLE myemp1 
ADD phone_number VARCHAR(20) FIRST;

举例3:添加到当前表的emp_name字段之后

ALTER TABLE myemp1 
ADD email VARCHAR(45) AFTER emp_name;

4.2 修改一个字段(列) ALTER TABLE ... MODIFY

  • 可以修改当前表中字段的数据类型,长度、默认值和位置
  • 语法格式:
ALTER TABLE 表名 
MODIFY 字段名1 新数据类型 [DEFAULT 默认值] [FIRST/AFTER 字段名2];

举例1:修改myemp1表中emp_name字段的数据类型

ALTER TABLE myemp1 
MODIFY emp_name VARCHAR(25);

举例2:修改myemp1表中emp_name字段的数据类型和默认值

ALTER TABLE myemp1 
MODIFY emp_name VARCHAR(35) DEFAULT 'aaa';

4.3 重命名一个字段(列) ALTER TABLE ... CHANGE

  • 可以重命名当前表中的字段,还可以同时修改该字段的数据类型和长度

  • 语法格式:

ALTER TABLE 表名 
CHANGE 旧字段名 新字段名 新数据类型;

举例:

ALTER TABLE myemp1 
CHANGE salary monthly_salary DOUBLE(10, 2);

4.4 删除一个字段(列) ALTER TABLE ... DROP COLUMN

  • 语法格式:
ALTER TABLE 表名 
DROP COLUMN 字段名;

举例:

ALTER TABLE myemp1 
DROP COLUMN my_email;

5. 重命名表 RENAME TABLE ... TO ...

  • 方式一:使用 RENAME
RENAME TABLE 旧表名
TO 新表名;
  • 方式二:ALTER table ... RENAME
ALTER table 旧表名
RENAME [TO] 新表名;  # TO可以省略

6. 删除表 DROP TABLE

  1. 当一张数据表 没有与其他任何数据表形成关联关系 时,可以使用 DROP TABLE 语句将当前数据表删除:

    ①删除表中所有数据(记录)和结构(字段);②所有正在运行的相关事务被提交;③所有相关索引被删除;④释放表的存储空间

  2. DROP TABLE 语句不能回滚,即不能撤销

  • 语法格式:
DROP TABLE [IF EXISTS] 表名1 [, 表名2, …, 表名n];  # 可以同时删除多张表

举例:

DROP TABLE dept80;

7. 清空表(的数据) TRUNCATE TABLE

  1. TRUNCATE TABLE 语句:仅删除表的所有数据(记录),仍保留表的结构(字段)
  2. 使用 TRUNCATE TABLE 语句清空表中数据不能回滚
  • 语法格式:
TRUNCATE TABLE 表名;

8. DDL(数据定义语言)总结

8.1 DCL(数据控制语言)中 COMMIT & ROLLBACK 的使用

  • COMMIT:提交数据。一旦执行 COMMIT,则数据就被永久的保存在了数据库中,意味着数据不可以回滚
  • ROLLBACK:回滚数据。一旦执行 ROLLBACK,则可以实现数据的回滚,回滚到最近的一次 COMMIT 之后(不一定成功)

8.2 TRUNCATE TABLE & DELETE FROM

  • 相同点:二者都可以实现对表中所有数据(记录)的删除,同时保留表的结构(字段)
  • 不同点:
    • TRUNCATE TABLE:一旦执行此操作,则会清空表中所有数据(记录),被删除的数据不能回滚
    • DELETE FROM:一旦执行此操作,则会删除表中指定数据(记录),被删除的数据可以回滚

阿里开发规范:

【参考】TRUNCATE TABLEDELETE 速度快,且使用的系统和事务日志资源少,但 TRUNCATE 无事务且不触发 TRIGGER,有可能造成事故,故不建议在开发代码中使用此语句。

说明:TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同。

8.3 总结:DDL(数据定义语言) & DML(数据操作语言)

  • DDL的操作一旦执行,就不可回滚。因为在执行完DDL操作之后,一定会自动执行一次 COMMIT 操作,而此 COMMIT 操作并不受 SET autocommit = FALSE 的影响
  • 默认情况下,DML操作是不可回滚的。因为在执行完DML操作之后,默认会执行一次 COMMIT 操作。但如果在执行DML操作前,执行了 SET autocommit = FALSE,则此时再执行DML操作,不会自动 COMMITDML操作可以实现回滚
COMMIT;  # 先提交一次数据

SELECT * FROM myemp3;

SET autocommit = FALSE;

DELETE FROM emp2;
#TRUNCATE TABLE emp2;

SELECT * FROM myemp3;

ROLLBACK;  # 回滚数据

SELECT * FROM myemp3;

9. 课后练习

练习1

#1. 创建数据库test01_office,指明字符集为utf8。并在此数据库下执行下述操作
CREATE DATABASE IF NOT EXISTS test01_office CHARACTER SET 'utf8';

USE test01_office;

#2. 创建表dept01
/*
字段 		类型
id 		INT(7)
NAME 	VARCHAR(25)
*/
CREATE TABLE IF NOT EXISTS dept01(
id INT(7),
`NAME` VARCHAR(25)
);

#3. 将表departments中的数据插入新表dept02中
CREATE TABLE dept02
AS
SELECT *
FROM atguigudb.`departments`;

#4. 创建表emp01
/*
字段 			类型
id 			INT(7)
first_name 	VARCHAR (25)
last_name 	VARCHAR(25)
dept_id 	INT(7)
*/
CREATE TABLE emp01(
id INT(7),
first_name VARCHAR(25),
last_name VARCHAR(25),
dept_id INT(7)
);

#5. 将列last_name的长度增加到50
ALTER TABLE emp01
MODIFY last_name VARCHAR(50);

DESC emp01;

#6. 根据表employees创建emp02
CREATE TABLE emp02
AS
SELECT *
FROM atguigudb.`employees`;

#7. 删除表emp01
DROP TABLE IF EXISTS emp01;

SHOW TABLES;
ROLLBACK; # DDL操作执行完后一定会自动COMMIT,无法回滚

#8. 将表emp02重命名为emp01
RENAME TABLE emp02 
TO emp01;

SHOW TABLES;

#9.在表dept02和emp01中添加新列test_column,并检查所作的操作
ALTER TABLE dept02
ADD test_column VARCHAR(25);

SELECT test_column
FROM dept02;

ALTER TABLE emp01
ADD test_column VARCHAR(25);

SELECT test_column
FROM emp01;

#10.直接删除表emp01中的列 department_id
ALTER TABLE emp01
DROP COLUMN department_id;

DESC emp01;

练习2

# 1、创建数据库 test02_market
CREATE DATABASE IF NOT EXISTS test02_market CHARACTER SET 'utf8';

USE test02_market;

# 2、创建数据表 customers
/*
字段名 	数据类型
c_num 		INT
c_name 		VARCHAR(50)
c_contact 	VARCHAR(50)
c_city 		VARCHAR(50)
c_birth 	DATE
 */
CREATE TABLE IF NOT EXISTS customers(
c_num INT,
c_name VARCHAR(50),
c_contact VARCHAR(50),
c_city VARCHAR(50),
c_birth DATE
);

DESC customers;

# 3、将 c_contact 字段移动到 c_birth 字段后面
ALTER TABLE customers
MODIFY c_contact VARCHAR(50) AFTER c_birth;

DESC customers;

# 4、将 c_name 字段数据类型改为 varchar(70)
ALTER TABLE customers
MODIFY c_name VARCHAR(70);

DESC customers;

# 5、将c_contact字段改名为c_phone
ALTER TABLE customers
CHANGE c_contact c_phone VARCHAR(50);

DESC customers;

# 6、增加c_gender字段到c_name后面,数据类型为char(1)
ALTER TABLE customers
ADD c_gender CHAR(1) AFTER c_name;

DESC customers;

# 7、将表名改为customers_info
RENAME TABLE customers
TO customers_info;

SHOW TABLES;

# 8、删除字段c_city
ALTER TABLE customers_info
DROP COLUMN c_city;

DESC customers_info;

练习3

# 1、创建数据库test03_company
CREATE DATABASE IF NOT EXISTS test03_company CHARACTER SET 'utf8';

USE test03_company;

# 2、创建表offices
/*
字段名 		数据类型
officeCode 	int
city 		varchar(30)
address 	varchar(50)
country 	varchar(50)
postalCode 	varchar(25)
 */
CREATE TABLE IF NOT EXISTS offices(
officeCode INT,
city VARCHAR(30),
address VARCHAR(50),
country VARCHAR(50),
postalCode VARCHAR(25)
);

SHOW TABLES;
DESC offices;

# 3、创建表employees
/*
字段名 		数据类型
empNum 		int
lastName 	varchar(50)
firstName 	varchar(50)
mobile 		varchar(25)
code 		int
jobTitle 	varchar(50)
birth 		date
note 		varchar(255)
sex 		varchar(5)
 */
CREATE TABLE IF NOT EXISTS employees(
empNum INT,
lastName VARCHAR(50),
firstName VARCHAR(50),
mobile VARCHAR(25),
`code` INT,
jobTitle VARCHAR(50),
birth DATE,
note VARCHAR(255),
sex VARCHAR(5)
); 
 
# 4、将表employees的mobile字段修改到code字段后面
ALTER TABLE employees
MODIFY mobile VARCHAR(25) AFTER `code`;

DESC employees;

# 5、将表employees的birth字段改名为birthday
ALTER TABLE employees
CHANGE birth birthday DATE;

DESC employees;

# 6、修改sex字段,数据类型为char(1)
ALTER TABLE employees
MODIFY sex CHAR(1);

# 7、删除字段note
ALTER TABLE employees
DROP COLUMN note;

# 8、增加字段名favoriate_activity,数据类型为varchar(100)
ALTER TABLE employees
ADD favoriate_activity VARCHAR(100);

# 9、将表employees的名称修改为 employees_info
RENAME TABLE employees
TO employees_info;

SHOW TABLES;
,
jobTitle VARCHAR(50),
birth DATE,
note VARCHAR(255),
sex VARCHAR(5)
); 
 
# 4、将表employees的mobile字段修改到code字段后面
ALTER TABLE employees
MODIFY mobile VARCHAR(25) AFTER `code`;

DESC employees;

# 5、将表employees的birth字段改名为birthday
ALTER TABLE employees
CHANGE birth birthday DATE;

DESC employees;

# 6、修改sex字段,数据类型为char(1)
ALTER TABLE employees
MODIFY sex CHAR(1);

# 7、删除字段note
ALTER TABLE employees
DROP COLUMN note;

# 8、增加字段名favoriate_activity,数据类型为varchar(100)
ALTER TABLE employees
ADD favoriate_activity VARCHAR(100);

# 9、将表employees的名称修改为 employees_info
RENAME TABLE employees
TO employees_info;

SHOW TABLES;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL基础篇——第10章 DDL(数据定义):创建和管理表 的相关文章

  • 树形表的sql查询

    我有一个树形结构的表 id parentId name 1 0 Category1 2 0 Category2 3 1 Category3 4 2 Category4 5 1 Category5 6 2 Category6 7 3 Cate
  • 为什么这个递归连接会产生:数据太长

    我在 MySQL 8 上有这个表 create table tbl id varchar 2 val int insert into tbl values A 1 B 2 C 3 D 4 E 5 以下查询应找出哪些记录集的值之和不大于 6
  • Ubuntu:无法通过套接字“/var/run/mysqld/mysqld.sock”连接到本地 MySQL 服务器 (2)

    我有 Ubuntu 14 04 安装了 LAMP 并运行 Owncloud 的服务器 我尝试安装文书工作 https github com twostairs paperwork wiki Installing Paperwork on U
  • 无法从 Windows GUI 工具连接到远程 Linux 服务器上的 MySql 数据库

    我已经在 Amazon EC2 上的 Linux 服务器上设置了 mysql 数据库 这在本地效果很好 我可以登录 linux 盒子并管理 mysql 数据库 我正在尝试将本地 GUI 客户端连接到远程 mysql 但连接失败 我更新了 e
  • 强制连接第一个表中的所有行

    我有三张桌子 machines拿着自动售货机 products持有所有可能的产品 并且machines products这是两者的交集 给出了特定机器中每个产品线的库存数量 如果机器中没有库存产品 则第三个表中没有相应的行 DESCRIBE
  • sql server中的str_to_date函数?

    MySQL有一个函数叫STR TO DATE 将字符串转换为日期 http dev mysql com doc refman 5 1 en date and time functions html function str to date
  • MySQL空间几何验证wkt

    在 MySQL mysql gt select astext geomfromtext polygon astext geomfromtext polygon NULL 1 row in set 0 00 sec 但对于较新的 MySQL
  • 无法将 MYSQL 备份恢复到新数据库

    我成功创建了一个mysqldump file myDump sql of a myDb1数据库使用指南this https stackoverflow com questions 105776 how do i restore a mysq
  • Postgres 服务器性能在达到一定数量的记录后急剧下降

    我正在使用游标从大型 postgres 表中检索记录 4亿条记录 使用子表对数据进行分区 我的游标定义为 select from parent table order by indexed column 同时使用 JDBC 和 psql 前
  • 如何在后台调用存储过程?

    我有一个存储过程 大约需要 2 3 分钟才能完成执行 从 ado net 我想让存储过程执行在后台发生 一旦我向存储过程发出请求 我就必须返回到我的代码 谁可以帮我这个事 你应该调查一下螺纹加工 http msdn microsoft co
  • 函数 SQL 中的函数

    我可以在表值函数中调用标量函数吗 Thanks 是的 只要表值函数完成后返回一个表即可 用户自定义函数可以嵌套 也就是说 一个用户定义的函数可以 呼叫另一个 嵌套级别为 被调用函数时递增 开始执行 并在以下时间递减 被调用函数完成 执行 用
  • 使用 MySQL 作为元存储从 HIVE 查询元数据

    我正在寻找一种使用 HiveQL 命令查询 HIVE 数据元数据的方法 我配置了一个 MySQL 元存储 但需要通过 HIVE 命令查询元数据 因为然后我想通过 ODBC 连接到 HIVE 系统来访问数据 要从 Hive 查看它们 必须使用
  • 在重复密钥更新时插入...在哪里?

    我正在做一个INSERT ON DUPLICATE KEY UPDATE但我需要更新部分是有条件的 只有在某些额外条件发生变化时才进行更新 然而 WHERE不允许这样做UPDATE 有什么解决方法吗 我无法执行 INSERT UPDATE
  • SourceTree 中通过 textconv 自定义差异

    我正在尝试比较和合并 SourceTree 中的 MySQL WorkBench 文件 为此 我创建了一个小型 shell 脚本 用于提取 mwb 文件的内容 并从其中的 XML 文件中删除一些无用的计数器 然后我将此行添加到项目根目录中的
  • MySQL:“SELECT 将检查超过 MAX_JOIN_SIZE 行”

    我正在使用 PHP 和 MySQL 在我的程序中 有一个涉及连接的选择查询 当我在本地主机上运行它时 它工作正常 但是当我将它上传到我的服务器上并尝试执行它时 它会生成以下错误 The SELECT would examine more t
  • 变更数据捕获性能损失是否仅限于启用 CDC 的表?

    我读到启用更改数据捕获显然会对数据库性能产生影响 这种性能损失是否仅影响启用了 CDC 的表 还是会影响数据库中的所有操作 在我的情况下 我使用 SSIS 并且有大量数据移入和移出临时数据库 我的系统中还有一些用于转换的查找表 我希望使用
  • C# SMO 远程数据库备份到本地机器

    我有一个执行 SQL 数据库备份和恢复的应用程序 这在本地计算机上运行良好 但是如果我针对另一台计算机上托管的 SQL 服务器运行此应用程序 则会出现以下错误 Microsoft SqlServer Management Smo Faile
  • PHP 中的依赖注入

    我一直在研究依赖注入 我是在关注某件事还是完全没有关注 代码是好是坏 依赖注入与否 下面的代码是CMS系统的基础 现在有一个名为 page details 的表 其中存储了所有网页 目录 文件结构 htaccess index php cl
  • 一个大连接或多个查询哪个提供更好的性能?

    我有一个名为订单的表 订单上的一列是 customer id我有一个名为 customers 的表 有 10 个字段 给定两个选项 如果我想构建订单对象数组并嵌入订单对象中的是客户对象 我有两个选择 选项1 A 首先查询订单表 b 循环遍历
  • SQL 几何 VS 小数(8,6) 纬度、经度性能

    我正在研究选择与给定坐标一定距离内的最近点的性能 选项是以太使用两个decimal 8 6 纬度 长列或单列geography列并与之合作 我只感兴趣哪个更快 TL DR地理大约快 10 倍 好的 我已经设置了测试 几张桌子 一张id la

随机推荐

  • 图解HTTP-核心知识总结1

    第一章 了解 Web 及网络基础 1 使用HTTP协议访问web 2 TCP IP的分层管理 3 TCP IP通信传输流 4 与HTTP关系密切的协议 IP TCP DNS 5 URI和URL区别 第一章 了解 Web 及网络基础 1 使用
  • 高斯混合模型--GMM

    原文 http blog sina com cn s blog 54d460e40101ec00 html 高斯混合模型 GMM Gaussian Mixture Model 统计学习的模型有两种 一种是概率模型 一种是非概率模型 所谓概率
  • 华为od寻找关键钥匙

    题目描述 小强正在参加 密室逃生 游戏 当前关卡要求找到符合给定 密码K 升序的不重复小写字母组成 的箱子 并给出箱子编号 箱子编号为1 N 每个箱子中都有一个字符串s 字符串由大写字母 小写字母 数字 标点符号 空格组成 需要在这些字符串
  • 服务机器人研究报告:产业链分析及投资前景预测

    服务机器人研究报告 产业链分析及投资前景预测 2017 08 31 08 37中国投资咨询网 服务机器人在国内发展的阻力远远小于工业机器人 一方面 服务机器人是国内公司与国外公司差距较小的领域 国内企业的服务机器人往往能针对特定市场进行开发
  • 用stm32f103点灯的一些模式

    关于stm32点灯 因为使用的芯片就母版可能不是一样的 这里我使用的是stm32f103c8t6来进行讲解 首先要点亮一个灯 就需要知道灯是一个外设 就涉及到gpio的一些知识点 第一步就是要对板子原理图上的硬件连接进行一定的了解 下面这是
  • 堆排序HeapSort

    堆排序的最好最坏平均时间复杂度都为nlogn adjustment执行次数为logn for循环次数为3 2n 空间复杂度为O 1 没有使用额外空间 include
  • 文盘Rust -- tonic-Rust grpc初体验

    gRPC 是开发中常用的开源高性能远程过程调用 RPC 框架 tonic 是基于 HTTP 2 的 gRPC 实现 专注于高性能 互操作性和灵活性 该库的创建是为了对 async await 提供一流的支持 并充当用 Rust 编写的生产系
  • 如何保护移动应用程序安全–移动应用程序安全检查表

    Security has always been a major concern for businesses And this concern is even greater when it comes to mobile apps 安全
  • 全程 AIGC 游戏创作,2小时开发微信小游戏!(完整ChatGPT调教流程)

    给 AI 打工 2小时开发一款3D小游戏可行么 源码下载地址见文末 最近 科技发展是日新月异 如果说 Stable Diffusion 和 Mid Journey 只是卷死了美术 我们还在庆幸研发不能被替代 那么 3 月份出来的 GPT4
  • react-router-dom的基本使用

    React Router Dom 1 React Router react router是一个核心库 我们在做PC端时要用react router dom 而在移动端我们要用React Router Native 2 React Route
  • 无极超分辨率

    文章目录 前言 一 Meta SR 1 1 Meta SR A Magnification Arbitrary Network for Super Resolution 1 2 Location Projection 1 3 Weight
  • Android Update Engine 分析(二十一)Android A/B 更新过程

    0 背景 早期 Android A B 系统升级在 Android 7 1 版本推出时 参考文档十分有限 也就是 Android 官方大概有两三个页面介绍文档 我的第一篇 A B 系统分析文章 Android A B System OTA分
  • php使用ecc算法进行签名,ECDSA签名算法(ECC椭圆曲线算法3)

    现在有一个场景 Alice想要用私钥签名一个数据 Bob想要使用Alice的公钥验证这个签名 只有Alice能够进行计算签名然后得到签名 每个人都能验证签名值 首先Alice和Bob拥有相同的椭圆曲线参数 算法被签名称之为ECDSA 是DS
  • 关于OpenGL纹理尺寸的坑 - 图像行偏移,出现异色条纹

    学习OpenGL时想简单创建一个纹理 但马上就出现错误 错误效果如下 原图如下 由于之前没有碰过这种问题 费了好大一番功夫才找到问题所在 原始图片尺寸为210 220 OpenGL版本与教程一致 为3 3 把像素值打印出来观察之后发现 传入
  • Spring 特性

    目录 核心特性 数据存储 Web 技术 Web Servlet 技术栈 Spring 1 4的唯一支持 Web Reactive 技术栈 Spring 5引入 技术整合 Integration 测试 Testing Spring 模块化设计
  • DeformableDetr论文简介+mmdet源码解读

    文章目录 前言 一 论文解读 1 1 研究问题 1 2 可形变注意力模块 1 3 拓展到多层特征图 二 mmdet源码讲解 2 1 图像特征提取 2 2 生成mask和位置编码 2 3 送入Transformer 2 3 1 Transfo
  • 机器学习之朴树贝叶斯②——调库实现

    文章目录 多项式朴素贝叶斯 MultinomialNB 高斯朴素贝叶斯 GaussianNB 多项式朴素贝叶斯 MultinomialNB sklearn naive bayes MultinomialNB alpha 1 0 fit pr
  • 为什么HashMap线程不安全?

    我们都知道 HashMap 是线程不安全的 那 HashMap 为什么线程不安全 JDK1 8 还有这些问题吗 如何解决这些问题呢 本文将对该问题进行解密 多线程下扩容死循环 JDK1 7中的 HashMap 使用头插法插入元素 在多线程的
  • 如何在深度学习中处理图像数据?

    深度学习在图像处理领域取得了重大的突破 可以用于图像分类 目标检测 图像生成等各种任务 处理图像数据的关键是将图像转换为适合深度学习模型处理的形式 下面是处理图像数据的一般步骤 1 数据准备 收集和整理用于训练的图像数据集 数据集应包含图像
  • MySQL基础篇——第10章 DDL(数据定义):创建和管理表

    MySQL基础篇 第10章 DDL 数据定义 创建和管理表 1 基础知识 1 1 一条数据存储的过程 存储数据是处理数据的第一步 只有正确地把数据存储起来 我们才能进行有效的处理和分析 MySQ的数据存储过程 创建数据库 确认字段 创建数据