第10章_创建和管理表

文章目录

  • 1 基础知识
    • 1.1 一条数据存储的过程
    • 1.2 标识符命名规则
    • 1.3 MySQL中的数据类型
  • 2 创建和管理数据库
    • 2.1 创建数据库
    • 2.2 使用数据库
    • 2.3 修改数据库
    • 2.4 删除数据库
    • 代码演示
  • 3 创建表
    • 3.1 创建方式1
    • 3.2 创建方式2
    • 3.3 查看数据表结构
    • 代码演示
  • 4 修改表
    • 4.1 追加一个列
    • 4.2 修改一个列
    • 4.3 重命名一个列
    • 4.4 删除一个列
    • 代码演示
  • 5 重命名表
    • 代码演示
  • 6 删除表
  • 7 清空表
    • 代码演示
  • 8 内容扩展
    • 扩展1:阿里巴巴《Java开发手册》之MySQL字段命名
    • 扩展2:如何理解清空表、删除表等操作需谨慎
    • 扩展3:MySQL8新特性---DDL的原子化
    • 代码演示
  • 课后练习

1 基础知识

1.1 一条数据存储的过程

存储数据是处理数据的第一步 。只有正确地把数据存储起来,才能进行有效的处理和分析。否则,只能是一团乱麻,无从下手。

那么,怎样才能把用户各种经营相关的、纷繁复杂的数据,有序、高效地存储起来呢? 在 MySQL 中,一个完整的数据存储过程总共有 4 步,分别是创建数据库、确认字段、创建数据表、插入数据。
在这里插入图片描述
为什么要先创建一个数据库,而不是直接创建数据表呢?
因为从系统架构的层次上看,MySQL 数据库系统从大到小依次是 数据库服务器 、 数据库 、数据表 、数据表的 行与列 。MySQL 数据库服务器之前已经安装。所以就从创建数据库开始

1.2 标识符命名规则

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

1.3 MySQL中的数据类型

在这里插入图片描述
其中,常用的几类类型介绍如下:
在这里插入图片描述

2 创建和管理数据库

2.1 创建数据库

  • 方式1:创建数据库
    CREATE DATABASE 数据库名;
  • 方式2:创建数据库并指定字符集
    CREATE DATABASE 数据库名 CHARACTER SET 字符集;
  • 方式3:判断数据库是否已经存在,不存在则创建数据库(推荐 )
    CREATE DATABASE IF NOT EXISTS 数据库名;

如果MySQL中已经存在相关的数据库,则忽略创建语句,不再创建数据库。

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

2.2 使用数据库

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

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

2.3 修改数据库

  • 更改数据库字符集
    ALTER DATABASE 数据库名 CHARACTER SET 字符集; #比如:gbk、utf8等

2.4 删除数据库

  • 方式1:删除指定的数据库
    DROP DATABASE 数据库名;
  • 方式2:删除指定的数据库(推荐 )
    DROP DATABASE IF EXISTS 数据库名;

代码演示

SELECT * 
FROM `order`;
#1. 创建和管理数据库#1.1 如何创建数据库
#方式1:
CREATE DATABASE mytest1;  # 创建的此数据库使用的是默认的字符集#查看创建数据库的结构
SHOW CREATE DATABASE mytest1;
/*
+----------+-----------------------------------------------------------------------------------------------------+
| Database | Create Database                                                                                     |
+----------+-----------------------------------------------------------------------------------------------------+
| mytest1  | CREATE DATABASE `mytest1` /*!40100 DEFAULT CHARACTER SET utf8 */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+-----------------------------------------------------------------------------------------------------+
*/
#方式2:显式了指名了要创建的数据库的字符集
CREATE DATABASE mytest2 CHARACTER SET 'gbk';#
SHOW CREATE DATABASE mytest2;
/*
+----------+----------------------------------------------------------------------------------------------------+
| Database | Create Database                                                                                    |
+----------+----------------------------------------------------------------------------------------------------+
| mytest2  | CREATE DATABASE `mytest2` /*!40100 DEFAULT CHARACTER SET gbk */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+----------------------------------------------------------------------------------------------------+
*/#方式3(推荐):如果要创建的数据库已经存在,则创建不成功,但不会报错。
CREATE DATABASE IF NOT EXISTS mytest2 CHARACTER SET 'utf8';#如果要创建的数据库不存在,则创建成功
CREATE DATABASE IF NOT EXISTS mytest3 CHARACTER SET 'utf8';SHOW DATABASES;#1.2 管理数据库
#查看当前连接中的数据库都有哪些
SHOW DATABASES;
/*
+--------------------+
| Database           |
+--------------------+
| atguigudb          |
| information_schema |
| mysql              |
| mytest1            |
| mytest2            |
| performance_schema |
| sys                |
+--------------------+
*/#切换数据库
USE atguigudb;#查看当前数据库中保存的数据表
SHOW TABLES;
/*
+---------------------+
| Tables_in_atguigudb |
+---------------------+
| countries           |
| departments         |
| emp_details_view    |
| employees           |
| job_grades          |
| job_history         |
| jobs                |
| locations           |
| order               |
| regions             |
+---------------------+
*/#查看当前使用的数据库
SELECT DATABASE() FROM DUAL;
/*
+------------+
| DATABASE() |
+------------+
| atguigudb  |
+------------+
*/#查看指定数据库下保存的数据表
SHOW TABLES FROM mysql;
/*部分输出
+------------------------------------------------------+
| Tables_in_mysql                                      |
+------------------------------------------------------+
| columns_priv                                         |
| component                                            |
| db                                                   |
| default_roles                                        |
| engine_cost                                          |
| func                                                 |
| general_log                                          |
| global_grants                                        |
*/#1.3 修改数据库(不轻易修改数据库)
#更改数据库字符集
SHOW CREATE DATABASE mytest2;ALTER DATABASE mytest2 CHARACTER SET 'utf8';#1.4 删除数据库
#方式1:如果要删除的数据库存在,则删除成功。如果不存在,则报错
DROP DATABASE mytest1;SHOW DATABASES;#方式2:推荐。 如果要删除的数据库存在,则删除成功。如果不存在,则默默结束,不会报错。
DROP DATABASE IF EXISTS mytest1;DROP DATABASE IF EXISTS mytest2;

3 创建表

3.1 创建方式1

必须具备:

  • CREATE TABLE权限
  • 存储空间

语法格式:

CREATE TABLE [IF NOT EXISTS] 表名(
字段1, 数据类型 [约束条件] [默认值],
字段2, 数据类型 [约束条件] [默认值],
字段3, 数据类型 [约束条件] [默认值],
……
[表约束条件]
);

加上了IF NOT EXISTS关键字,则表示:如果当前数据库中不存在要创建的数据表,则创建数据表;如果当前数据库中已经存在要创建的数据表,则忽略建表语句,不再创建数据表。

必须指定:

  • 表名
  • 列名(或字段名),数据类型,长度

可选指定:

  • 约束条件
  • 默认值

创建表举例1:

CREATE TABLE emp (
--	int类型emp_id INT,
--	最多保存20个中英文字符 
emp_name VARCHAR(20),
--	总位数不超过15位 
salary DOUBLE,
--	日期类型
birthday DATE
);
DESC emp;

MySQL在执行建表语句时,将id字段的类型设置为int(11),这里的11实际上是int类型指定的显示宽度,默认的显示宽度为11。也可以在创建数据表的时候指定数据的显示宽度。

创建表举例2:

CREATE TABLE dept(
--	int类型,自增
deptno INT(2) AUTO_INCREMENT,
dname VARCHAR(14),
loc VARCHAR(13),
--	主键
PRIMARY KEY (deptno)
);
DESCRIBE dept;

在MySQL 8.x版本中,不再推荐为INT类型指定显示长度,并在未来的版本中可能去掉这样的语法

3.2 创建方式2

使用 AS subquery 选项,将创建表和插入数据结合起来

  • 指定的列和子查询中的列要一一对应
  • 通过列名和默认值定义列
CREATE TABLE emp1 AS SELECT * FROM employees;CREATE TABLE emp2 AS SELECT * FROM employees WHERE 1=2; -- 创建的emp2是空表CREATE TABLE dept80
AS
SELECT	employee_id, last_name, salary*12 ANNSAL, hire_date
FROM	employees
WHERE	department_id = 80;

3.3 查看数据表结构

在MySQL中创建好数据表之后,可以查看数据表的结构。MySQL支持使用 DESCRIBE/DESC 语句查看数据表结构,也支持使用 SHOW CREATE TABLE 语句查看数据表结构。

语法格式如下:
SHOW CREATE TABLE 表名\G
使用SHOW CREATE TABLE语句不仅可以查看表创建时的详细语句,还可以查看存储引擎和字符编码。

代码演示


#3. 如何创建数据表
USE atguigudb;SHOW CREATE DATABASE atguigudb; #默认使用的是utf8SHOW TABLES;#方式1:"白手起家"的方式
CREATE TABLE IF NOT EXISTS myemp1(   #需要用户具备创建表的权限。
id INT,
emp_name VARCHAR(15), #使用VARCHAR来定义字符串,必须在使用VARCHAR时指明其长度。
hire_date DATE
);
#查看表结构
DESC myemp1;
/*
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id        | int         | YES  |     | NULL    |       |
| emp_name  | varchar(15) | YES  |     | NULL    |       |
| hire_date | date        | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
*/
#查看创建表的语句结构
SHOW CREATE TABLE myemp1; #如果创建表时没有指明使用的字符集,则默认使用表所在的数据库的字符集。
/*
+--------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table  | Create Table                                                                                                                                                    |
+--------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| myemp1 | CREATE TABLE `myemp1` (`id` int DEFAULT NULL,`emp_name` varchar(15) DEFAULT NULL,`hire_date` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 |
+--------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
*/
#查看表数据
SELECT * FROM myemp1;
#输出:Empty set (0.00 sec)#方式2:基于现有的表,同时导入数据
CREATE TABLE myemp2
AS
SELECT employee_id,last_name,salary
FROM employees;DESC myemp2;
/*
+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| employee_id | int         | NO   |     | 0       |       |
| last_name   | varchar(25) | NO   |     | NULL    |       |
| salary      | double(8,2) | YES  |     | NULL    |       |
+-------------+-------------+------+-----+---------+-------+
*/
DESC employees;SELECT *
FROM myemp2;#说明1:查询语句中字段的别名,可以作为新创建的表的字段的名称。
#说明2:此时的查询语句可以结构比较丰富,使用前面章节讲过的各种SELECT
CREATE TABLE myemp3
AS
SELECT e.employee_id emp_id,e.last_name lname,d.department_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id;SELECT *
FROM myemp3;
/*部分输出
+--------+-------------+------------------+
| emp_id | lname       | department_name  |
+--------+-------------+------------------+
|    200 | Whalen      | Administration   |
|    201 | Hartstein   | Marketing        |
|    202 | Fay         | Marketing        |
|    114 | Raphaely    | Purchasing       |
*/
DESC myemp3;
/*
+-----------------+-------------+------+-----+---------+-------+
| Field           | Type        | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| emp_id          | int         | NO   |     | 0       |       |
| lname           | varchar(25) | NO   |     | NULL    |       |
| department_name | varchar(30) | NO   |     | NULL    |       |
+-----------------+-------------+------+-----+---------+-------+
*/#练习1:创建一个表employees_copy,实现对employees表的复制,包括表数据
CREATE TABLE employees_copy
AS
SELECT *
FROM employees;SELECT * FROM employees_copy;#练习2:创建一个表employees_blank,实现对employees表的复制,不包括表数据
CREATE TABLE employees_blank
AS
SELECT *
FROM employees
#where department_id > 10000;
WHERE 1 = 2; #山无陵,天地合,乃敢与君绝。SELECT * FROM employees_blank;

4 修改表

修改表指的是修改数据库中已经存在的数据表的结构。

使用 ALTER TABLE 语句可以实现:

  • 向已有的表中添加列
  • 修改现有表中的列
  • 删除现有表中的列
  • 重命名现有表中的列

4.1 追加一个列

语法格式如下:
ALTER TABLE 表名 ADD 【COLUMN】 字段名 字段类型 【FIRST|AFTER 字段名】;
举例:

ALTER TABLE dept80
ADD job_id varchar(15);

4.2 修改一个列

  • 可以修改列的数据类型,长度、默认值和位置
  • 修改字段数据类型、长度、默认值、位置的语法格式如下:
ALTER TABLE 表名 MODIFYCOLUMN】 字段名1 字段类型 
【DEFAULT 默认值】【FIRST|AFTER 字段名2;

举例:

ALTER TABLE dept80
MODIFY last_name VARCHAR(30);
ALTER TABLE dept80
MODIFY salary double(9,2) default 1000;
  • 对默认值的修改只影响今后对表的修改
  • 此外,还可以通过此种方式修改列的约束。这里暂先不讲。

4.3 重命名一个列

使用 CHANGE old_column new_column dataType子句重命名列。语法格式如下:
ALTER TABLE 表名 CHANGE 【column】 列名 新列名 新数据类型;
举例:

ALTER TABLE	dept80
CHANGE department_name dept_name varchar(15);

4.4 删除一个列

删除表中某个字段的语法格式如下:
ALTER TABLE 表名 DROP 【COLUMN】字段名
举例:

ALTER TABLE	dept80
DROP COLUMN	job_id;

代码演示

#4. 修改表  --> ALTER TABLE 
DESC myemp1;
/*输出
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id        | int         | YES  |     | NULL    |       |
| emp_name  | varchar(15) | YES  |     | NULL    |       |
| hire_date | date        | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
*/# 4.1 添加一个字段
ALTER TABLE myemp1
ADD salary DOUBLE(10,2); #默认添加到表中的最后一个字段的位置ALTER TABLE myemp1
ADD phone_number VARCHAR(20) FIRST;ALTER TABLE myemp1
ADD email VARCHAR(45) AFTER emp_name;DESC myemp1;#修改后的myemp1
/*
+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| phone_number | varchar(20)  | YES  |     | NULL    |       |
| id           | int          | YES  |     | NULL    |       |
| emp_name     | varchar(15)  | YES  |     | NULL    |       |
| email        | varchar(45)  | YES  |     | NULL    |       |
| hire_date    | date         | YES  |     | NULL    |       |
| salary       | double(10,2) | YES  |     | NULL    |       |
+--------------+--------------+------+-----+---------+-------+
*/# 4.2 修改一个字段:数据类型、长度、默认值(略)
ALTER TABLE myemp1
MODIFY emp_name VARCHAR(25) ;ALTER TABLE myemp1
MODIFY emp_name VARCHAR(35) DEFAULT 'aaa';
DESC myemp1;#修改后的myemp1
/*
+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| phone_number | varchar(20)  | YES  |     | NULL    |       |
| id           | int          | YES  |     | NULL    |       |
| emp_name     | varchar(35)  | YES  |     | aaa     |       |
| email        | varchar(45)  | YES  |     | NULL    |       |
| hire_date    | date         | YES  |     | NULL    |       |
| salary       | double(10,2) | YES  |     | NULL    |       |
+--------------+--------------+------+-----+---------+-------+
*/# 4.3 重命名一个字段
ALTER TABLE myemp1
CHANGE salary monthly_salary DOUBLE(10,2);ALTER TABLE myemp1
CHANGE email my_email VARCHAR(50);
DESC myemp1;#修改后的myemp1
/*
+----------------+--------------+------+-----+---------+-------+
| Field          | Type         | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+-------+
| phone_number   | varchar(20)  | YES  |     | NULL    |       |
| id             | int          | YES  |     | NULL    |       |
| emp_name       | varchar(35)  | YES  |     | aaa     |       |
| my_email       | varchar(50)  | YES  |     | NULL    |       |
| hire_date      | date         | YES  |     | NULL    |       |
| monthly_salary | double(10,2) | YES  |     | NULL    |       |
+----------------+--------------+------+-----+---------+-------+
*/# 4.4 删除一个字段
ALTER TABLE myemp1
DROP COLUMN my_email;DESC myemp1;#修改后的myemp1
/*
+----------------+--------------+------+-----+---------+-------+
| Field          | Type         | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+-------+
| phone_number   | varchar(20)  | YES  |     | NULL    |       |
| id             | int          | YES  |     | NULL    |       |
| emp_name       | varchar(35)  | YES  |     | aaa     |       |
| hire_date      | date         | YES  |     | NULL    |       |
| monthly_salary | double(10,2) | YES  |     | NULL    |       |
+----------------+--------------+------+-----+---------+-------+
*/

5 重命名表

  • 方式一:使用RENAME
RENAME TABLE emp
TO myemp;

方式二:

ALTER table dept
RENAME [TO] detail_dept;	-- [TO]可以省略

代码演示

#5. 重命名表
#方式1:
RENAME TABLE myemp1
TO myemp11;DESC myemp11;
/*
+----------------+--------------+------+-----+---------+-------+
| Field          | Type         | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+-------+
| phone_number   | varchar(20)  | YES  |     | NULL    |       |
| id             | int          | YES  |     | NULL    |       |
| emp_name       | varchar(35)  | YES  |     | aaa     |       |
| hire_date      | date         | YES  |     | NULL    |       |
| monthly_salary | double(10,2) | YES  |     | NULL    |       |
+----------------+--------------+------+-----+---------+-------+
*/#方式2:
ALTER TABLE myemp2
RENAME TO myemp12;DESC myemp12;

6 删除表

  • 在MySQL中,当一张数据表没有与其他任何数据表形成关联关系 时,可以将当前数据表直接删除。
  • 数据和结构都被删除
  • 所有正在运行的相关事务被提交
  • 所有相关索引被删除

语法格式:
DROP TABLE [IF EXISTS] 数据表1 [, 数据表2, …, 数据表n];

IF EXISTS 的含义为:如果当前数据库中存在相应的数据表,则删除数据表;如果当前数据库中不存在相应的数据表,则忽略删除语句,不再执行删除数据表的操作。
举例1:

DROP TABLE dept80;
DROP TABLE 语句不能回滚

举例2:

#6. 删除表
#不光将表结构删除掉,同时表中的数据也删除掉,释放表空间
DROP TABLE IF EXISTS myemp2;DROP TABLE IF EXISTS myemp12;

7 清空表

TRUNCATE TABLE语句:

  • 删除表中所有的数据
  • 释放表的存储空间

举例:
TRUNCATE TABLE detail_dept;
TRUNCATE语句不能回滚,而使用 DELETE 语句删除数据,可以回滚
对比:

SET autocommit = FALSE;
DELETE FROM emp2;
#TRUNCATE TABLE emp2;
SELECT * FROM emp2;
ROLLBACK;
SELECT * FROM emp2;

阿里开发规范:
【参考】TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少,但 TRUNCATE 无事务且不触发 TRIGGER,有可能造成事故,故不建议在开发代码中使用此语句。
说明:TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同。

代码演示

#7. 清空表#清空表,表示清空表中的所有数据,但是表结构保留。SELECT * FROM employees_copy;TRUNCATE TABLE employees_copy;SELECT * FROM employees_copy;DESC employees_copy;#7. DCL 中 COMMIT 和 ROLLBACK
# COMMIT:提交数据。一旦执行COMMIT,则数据就被永久的保存在了数据库中,意味着数据不可以回滚\撤销。
# ROLLBACK:回滚数据。一旦执行ROLLBACK,则可以实现数据的回滚。回滚到最近的一次COMMIT之后。

8 内容扩展

扩展1:阿里巴巴《Java开发手册》之MySQL字段命名

【强制 】表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。

  • 正例:aliyun_admin,rdc_config,level3_name
  • 反例:AliyunAdmin,rdcConfig,level_3_name

【 强制 】禁用保留字,如 desc、range、match、delayed 等,请参考 MySQL 官方保留字。
【 强制 】表必备三字段:id, gmt_create, gmt_modified。

  • 说明:其中 id 必为主键,类型为BIGINT UNSIGNED、单表时自增、步长为 1。
  • gmt_create,gmt_modified的类型均为 DATETIME 类型,前者现在时表示主动式创建,后者过去分词表示被动式更新

【推荐 】表的命名最好是遵循 “业务名称_表的作用”。

  • 正例:alipay_task 、 force_project、trade_config

    【推荐 】库名与应用名称尽量一致。
    【参考】合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检索速度。

  • 正例:无符号值可以避免误存负数,且扩大了表示范围。

扩展2:如何理解清空表、删除表等操作需谨慎

表删除 操作将把表的定义和表中的数据一起删除,并且MySQL在执行删除操作时,不会有任何的确认信息提示,因此执行删除操时应当慎重。在删除表前,最好对表中的数据进行备份 ,这样当操作失误时可以对数据进行恢复,以免造成无法挽回的后果。

同样的,在使用 ALTER TABLE 进行表的基本修改操作时,在执行操作过程之前,也应该确保对数据进行完整的备份 ,因为数据库的改变是无法撤销 的,如果添加了一个不需要的字段,可以将其删除;相同的,如果删除了一个需要的列,该列下面的所有数据都将会丢失。

扩展3:MySQL8新特性—DDL的原子化

在MySQL 8.0版本中,InnoDB表的DDL支持事务完整性,即 DDL操作要么成功要么回滚 。DDL操作回滚日志写入到data dictionary数据字典表mysql.innodb_ddl_log(该表是隐藏的表,通过show tables无法看到)中,用于回滚操作。通过设置参数,可将DDL操作日志打印输出到MySQL错误日志中。

分别在MySQL 5.7版本和MySQL 8.0版本中创建数据库和数据表,结果如下:

CREATE DATABASE mytest;
USE mytest;CREATE TABLE book1(
book_id INT ,
book_name VARCHAR(255)
);SHOW TABLES;

(1)在MySQL 5.7版本中,测试步骤如下: 删除数据表book1和数据表book2,结果如下:

DROP TABLE book1,book2;
ERROR 1051 (42S02): Unknown table 'mytest.book2'

再次查询数据库中的数据表名称,结果如下:
SHOW TABLES;
从结果可以看出,虽然删除操作时报错了,但是仍然删除了数据表book1。

(2)在MySQL 8.0版本中,测试步骤如下: 删除数据表book1和数据表book2,结果如下:

DROP TABLE book1,book2;
ERROR 1051 (42S02): Unknown table 'mytest.book2'

再次查询数据库中的数据表名称,结果如下:

show tables;
+	------------------	+
| Tables_in_mytest	|
+	------------------	+
| book1	|
+	------------------	+
#1	row in set (0.00	sec)

从结果可以看出,数据表book1并没有被删除。

代码演示

#8. 对比 TRUNCATE TABLE 和 DELETE FROM 
# 相同点:都可以实现对表中所有数据的删除,同时保留表结构。
# 不同点:
#	TRUNCATE TABLE:一旦执行此操作,表数据全部清除。同时,数据是不可以回滚的。
#	DELETE FROM:一旦执行此操作,表数据可以全部清除(不带WHERE)和部分清除。同时,数据是可以实现回滚的。/*
9. DDL 和 DML 的说明① DDL(增加、创建)的操作一旦执行,就不可回滚。指令SET autocommit = FALSE对DDL操作失效。(因为在执行完DDL操作之后,一定会执行一次COMMIT。而此COMMIT操作不受SET autocommit = FALSE影响的。)② DML(删除)的操作默认情况,一旦执行,也是不可回滚的。但是,如果在执行DML之前,执行了 SET autocommit = FALSE,则执行的DML操作就可以实现回滚。*/
# 演示:DELETE FROM 
#1)
COMMIT;
#2)
SELECT *
FROM myemp3;
/*部分输出  106行
+--------+-------------+------------------+
| emp_id | lname       | department_name  |
+--------+-------------+------------------+
|    200 | Whalen      | Administration   |
|    201 | Hartstein   | Marketing        |
|    202 | Fay         | Marketing        |
*/
#3)
SET autocommit = FALSE;
#4)
DELETE FROM myemp3;
#5)
SELECT *
FROM myemp3;
#输出:Empty set (0.00 sec)
#6)
ROLLBACK;
#7)
SELECT *
FROM myemp3;
/*部分输出  106行
+--------+-------------+------------------+
| emp_id | lname       | department_name  |
+--------+-------------+------------------+
|    200 | Whalen      | Administration   |
|    201 | Hartstein   | Marketing        |
|    202 | Fay         | Marketing        |
|    114 | Raphaely    | Purchasing       |
*/# 演示:TRUNCATE TABLE
#1)
COMMIT;
#2)
SELECT *
FROM myemp3;
/*部分输出  106行
+--------+-------------+------------------+
| emp_id | lname       | department_name  |
+--------+-------------+------------------+
|    200 | Whalen      | Administration   |
|    201 | Hartstein   | Marketing        |
|    202 | Fay         | Marketing        |
*/
#3)
SET autocommit = FALSE;
#4)
TRUNCATE TABLE myemp3;
#5)
SELECT *
FROM myemp3;
#输出:Empty set (0.21 sec)
#6)
ROLLBACK;
#7)
SELECT *
FROM myemp3;
#输出:Empty set (0.21 sec)#######################
#9.测试MySQL8.0的新特性:DDL的原子化CREATE DATABASE mytest;USE mytest;CREATE TABLE book1(
book_id INT ,
book_name VARCHAR(255)
);SHOW TABLES;
/*
+------------------+
| Tables_in_mytest |
+------------------+
| book1            |
+------------------+
*/DROP TABLE book1,book2;
#删除book2失败,则对book1的删除也失败-->DDL的原子化的体现
SHOW TABLES;#没有删除成功
/*
+------------------+
| Tables_in_mytest |
+------------------+
| book1            |
+------------------+
*/

课后练习

# 第10章_创建和管理表的课后练习
#练习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)
*/
#在test01_office数据库下创建表dept01
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)
);
/*
desc emp01;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id         | int         | YES  |     | NULL    |       |
| first_name | varchar(25) | YES  |     | NULL    |       |
| last_name  | varchar(25) | YES  |     | NULL    |       |
| dept_id    | int         | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
*/#5.将列last_name的长度增加到50
ALTER TABLE emp01
MODIFY last_name VARCHAR(50);
DESC emp01;
/*
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id         | int         | YES  |     | NULL    |       |
| first_name | varchar(25) | YES  |     | NULL    |       |
| last_name  | varchar(50) | YES  |     | NULL    |       |
| dept_id    | int         | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
*/
#6.根据表employees创建emp02
CREATE TABLE emp02
AS
SELECT *
FROM atguigudb.`employees`;SHOW TABLES FROM test01_office;
/*
+-------------------------+
| Tables_in_test01_office |
+-------------------------+
| dept01                  |
| dept02                  |
| emp01                   |
| emp02                   |
+-------------------------+
*/
#7.删除表emp01
DROP TABLE emp01;#8.将表emp02重命名为emp01
#alter table emp02 rename to emp01;
RENAME TABLE emp02 TO emp01;
/* SHOW TABLES FROM test01_office;
+-------------------------+
| Tables_in_test01_office |
+-------------------------+
| dept01                  |
| dept02                  |
| emp01                   |
+-------------------------+
*/
#9.在表dept02和emp01中添加新列test_column,并检查所作的操作
ALTER TABLE emp01 ADD test_column VARCHAR(10);DESC emp01;
/*
+----------------+-------------+------+-----+---------+-------+
| Field          | Type        | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+-------+
| employee_id    | int         | NO   |     | 0       |       |
| first_name     | varchar(20) | YES  |     | NULL    |       |
| last_name      | varchar(25) | NO   |     | NULL    |       |
| email          | varchar(25) | NO   |     | NULL    |       |
| phone_number   | varchar(20) | YES  |     | NULL    |       |
| hire_date      | date        | NO   |     | NULL    |       |
| job_id         | varchar(10) | NO   |     | NULL    |       |
| salary         | double(8,2) | YES  |     | NULL    |       |
| commission_pct | double(2,2) | YES  |     | NULL    |       |
| manager_id     | int         | YES  |     | NULL    |       |
| department_id  | int         | YES  |     | NULL    |       |
| test_column    | varchar(10) | YES  |     | NULL    |       |
+----------------+-------------+------+-----+---------+-------+
*/
ALTER TABLE dept02 ADD test_column VARCHAR(10);
DESC dept02;
/*
+-----------------+-------------+------+-----+---------+-------+
| Field           | Type        | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| department_id   | int         | NO   |     | 0       |       |
| department_name | varchar(30) | NO   |     | NULL    |       |
| manager_id      | int         | YES  |     | NULL    |       |
| location_id     | int         | YES  |     | NULL    |       |
| test_column     | varchar(10) | YES  |     | NULL    |       |
+-----------------+-------------+------+-----+---------+-------+
*/
#10.直接删除表emp01中的列 department_id
ALTER TABLE emp01
DROP COLUMN department_id;#练习2:
# 1、创建数据库 test02_marketCREATE DATABASE IF NOT EXISTS test02_market CHARACTER SET 'utf8';USE test02_market;SHOW CREATE DATABASE test02_market;# 2、创建数据表 customers
CREATE TABLE IF NOT EXISTS customers(
c_num INT,
c_name VARCHAR(50),
c_contact VARCHAR(50),
c_city VARCHAR(50),
c_birth DATE
);SHOW TABLES;
/*
+-------------------------+
| Tables_in_test02_market |
+-------------------------+
| customers               |
+-------------------------+
*/# 3、将 c_contact 字段移动到 c_birth 字段后面
DESC customers;
/*
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| c_num     | int         | YES  |     | NULL    |       |
| c_name    | varchar(50) | YES  |     | NULL    |       |
| c_contact | varchar(50) | YES  |     | NULL    |       |
| c_city    | varchar(50) | YES  |     | NULL    |       |
| c_birth   | date        | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
*/ALTER TABLE customers
MODIFY c_contact VARCHAR(50) AFTER c_birth;
DESC customers;
/*
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| c_num     | int         | YES  |     | NULL    |       |
| c_name    | varchar(50) | YES  |     | NULL    |       |
| c_city    | varchar(50) | YES  |     | NULL    |       |
| c_birth   | date        | YES  |     | NULL    |       |
| c_contact | varchar(50) | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
*/# 4、将 c_name 字段数据类型改为 varchar(70)
ALTER TABLE customers
MODIFY c_name VARCHAR(70) ;
DESC customers;
/*
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| c_num     | int         | YES  |     | NULL    |       |
| c_name    | varchar(70) | YES  |     | NULL    |       |
| c_city    | varchar(50) | YES  |     | NULL    |       |
| c_birth   | date        | YES  |     | NULL    |       |
| c_contact | varchar(50) | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
*/# 5、将c_contact字段改名为c_phone
ALTER TABLE customers
CHANGE c_contact c_phone VARCHAR(50);
/*
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| c_num   | int         | YES  |     | NULL    |       |
| c_name  | varchar(70) | YES  |     | NULL    |       |
| c_city  | varchar(50) | YES  |     | NULL    |       |
| c_birth | date        | YES  |     | NULL    |       |
| c_phone | varchar(50) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
*/# 6、增加c_gender字段到c_name后面,数据类型为char(1)
ALTER TABLE customers
ADD c_gender CHAR(1) AFTER c_name;
/*
DESC customers;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| c_num    | int         | YES  |     | NULL    |       |
| c_name   | varchar(70) | YES  |     | NULL    |       |
| c_gender | char(1)     | YES  |     | NULL    |       |
| c_city   | varchar(50) | YES  |     | NULL    |       |
| c_birth  | date        | YES  |     | NULL    |       |
| c_phone  | varchar(50) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
*/# 7、将表名改为customers_info
RENAME TABLE customers
TO customers_info;DESC customers_info;# 8、删除字段c_city
ALTER TABLE customers_info
DROP COLUMN c_city;#练习3:
# 1、创建数据库test03_company
CREATE DATABASE IF NOT EXISTS test03_company CHARACTER SET 'utf8';USE test03_company;# 2、创建表offices
CREATE TABLE IF NOT EXISTS offices(
officeCode INT,
city VARCHAR(30),
address VARCHAR(50),
country VARCHAR(50),
postalCode VARCHAR(25)
);DESC offices;
/*
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| officeCode | int         | YES  |     | NULL    |       |
| city       | varchar(30) | YES  |     | NULL    |       |
| address    | varchar(50) | YES  |     | NULL    |       |
| country    | varchar(50) | YES  |     | NULL    |       |
| postalCode | varchar(25) | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
*/# 3、创建表employees
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));DESC employees;
/*
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| empNum    | int          | YES  |     | NULL    |       |
| lastName  | varchar(50)  | YES  |     | NULL    |       |
| firstName | varchar(50)  | YES  |     | NULL    |       |
| mobile    | varchar(25)  | YES  |     | NULL    |       |
| code      | int          | YES  |     | NULL    |       |
| jobTitle  | varchar(50)  | YES  |     | NULL    |       |
| birth     | date         | YES  |     | NULL    |       |
| note      | varchar(255) | YES  |     | NULL    |       |
| sex       | varchar(5)   | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+
*/# 4、将表employees的mobile字段修改到code字段后面
ALTER TABLE employees
MODIFY mobile VARCHAR(20) AFTER `code`;
DESC employees;
/*
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| empNum    | int          | YES  |     | NULL    |       |
| lastName  | varchar(50)  | YES  |     | NULL    |       |
| firstName | varchar(50)  | YES  |     | NULL    |       |
| code      | int          | YES  |     | NULL    |       |
| mobile    | varchar(20)  | YES  |     | NULL    |       |
| jobTitle  | varchar(50)  | YES  |     | NULL    |       |
| birth     | date         | YES  |     | NULL    |       |
| note      | varchar(255) | YES  |     | NULL    |       |
| sex       | varchar(5)   | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+
*/# 5、将表employees的birth字段改名为birthday
ALTER TABLE employees
CHANGE birth birthday DATE;
/*DESC employees;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| empNum    | int          | YES  |     | NULL    |       |
| lastName  | varchar(50)  | YES  |     | NULL    |       |
| firstName | varchar(50)  | YES  |     | NULL    |       |
| code      | int          | YES  |     | NULL    |       |
| mobile    | varchar(20)  | YES  |     | NULL    |       |
| jobTitle  | varchar(50)  | YES  |     | NULL    |       |
| birthday  | date         | YES  |     | NULL    |       |
| note      | varchar(255) | YES  |     | NULL    |       |
| sex       | varchar(5)   | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+
*/# 6、修改sex字段,数据类型为char(1)
ALTER TABLE employees
MODIFY sex CHAR(1);
/*
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| empNum    | int          | YES  |     | NULL    |       |
| lastName  | varchar(50)  | YES  |     | NULL    |       |
| firstName | varchar(50)  | YES  |     | NULL    |       |
| code      | int          | YES  |     | NULL    |       |
| mobile    | varchar(20)  | YES  |     | NULL    |       |
| jobTitle  | varchar(50)  | YES  |     | NULL    |       |
| birthday  | date         | YES  |     | NULL    |       |
| note      | varchar(255) | YES  |     | NULL    |       |
| sex       | char(1)      | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+
*/# 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;DESC employees_info;

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

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

相关文章

shell学习脚本05(小滴课堂)

可以对海量的数据进行提取。 -v对提取的内容进行取反。 -n显示出行号。 -w精确匹配: -i:忽略大小写: -E正则匹配: cut命令: -d指定分隔符,-f指定截取区域: 截取第一列到第三列: 截取第二列到最…

在Python中添加Selenium Web Driver等待

本文将介绍在Python中在Selenium Web驱动程序中添加等待的示例。 Python Selenium Web 驱动程序等待 大多数 Web 应用程序都使用 AJAX 技术。 因此,网页上存在的不同元素需要不同的时间间隔才能完全上传,因为硒在网页上存在之前无法找到任何文本。 我们…

系列六、Mybatis的一级缓存

一、概述 Mybatis一级缓存的作用域是同一个SqlSession,在同一个SqlSession中执行两次相同的查询,第一次执行完毕后,Mybatis会将查询到的数据缓存起来(缓存到内存中), 第二次执行相同的查询时,会…

【ML】分类问题

分类问题 classification:根据已知样本特征,判断输入样本属于哪种已知样本类。 常用入门案例:垃圾邮件检测、图像分类、手写数字识别、考试通过预测。 分类问题和回归问题的明显区别: 分类问题的结果是非连续型标签&#xff0c…

【算法|二分查找No.1】leetcode 704. 二分查找+二分模板 leetcode 34. 在排序数组中查找元素的第一个和最后一个位置

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

C/C++ static关键字详解(最全解析,static是什么,static如何使用,static的常考面试题)

目录 一、前言 二、static关键字是什么? 三、static关键字修饰的对象是什么? 四、C 语言中的 static 🍎static的C用法 🍉static的重点概念 🍐static修饰局部变量 💦static在修饰局部变量和函数的作用 &a…

【k8s】pod集群调度

调度约束 Kubernetes 是通过 List-Watch **** 的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦。 用户是通过 kubectl 根据配置文件,向 APIServer 发送命令,在 Node 节点上面建立 Pod 和 Container。…

[SSD综述1.7] SSD接口形态: SATA、M.2、U.2、PCIe、BGA

依公知及经验整理,原创保护,禁止转载。 专栏 《SSD入门到精通系列》 <<<< 返回总目录 <<<< 前言 犹记得当年Windows 7系统体验指数中,那5.9分磁盘分数,在其余四项的7.9分面前,似乎已经告诉我们机械硬盘注定被时代淘汰。势如破竹的SSD固态硬盘,彻…

二维码智慧门牌管理系统升级:一键报错解决三大问题

文章目录 前言一、一键报错功能解决了三大问题二、提高效率和便捷性 前言 随着科技的不断发展&#xff0c;智能化管理已经深入到社会的各个角落&#xff0c;其中二维码智慧门牌管理系统在社区、酒店、写字楼等场所的应用尤为广泛。为了更好地提升管理系统效率和解决实际问题&a…

旋转图像[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个n n的二维矩阵matrix表示一个图像。请你将图像顺时针旋转90度。你必须在原地旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a; matrix…

设计模式之装饰模式--优雅的增强

目录 概述什么是装饰模式为什么使用装饰模式关键角色基本代码应用场景 版本迭代版本一版本二版本三—装饰模式 装饰模式中的巧妙之处1、被装饰对象和装饰对象共享相同的接口或父类2、当调用装饰器类的装饰方法时&#xff0c;会先调用被装饰对象的同名方法3、子类方法与父类方法…

【深度学习基础】专业术语汇总(欠拟合和过拟合、泛化能力与迁移学习、调参和超参数、训练集、测试集和验证集)

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

vue+asp.net Web api前后端分离项目发布部署

一、前后端项目介绍 1.前端项目是使用vue脚手架进行创建的。 脚手架版本&#xff1a;vue/cli 5.0.8 编译器版本&#xff1a;vs code 1.82.2 2.后端是一个asp.net Core Web API 项目 后端框架版本&#xff1a;.NET 6.0 编译器版本&#xff1a;vs 2022 二、发布部署步骤 第…

Java基础篇 | 多线程详解

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; Java从入门到精通 ✨特色专栏&#xf…

网络工程师进阶课:华为HCIP认证课程介绍

微思网络HCIP VIP试听课程&#xff1a;DHCP协议原理与配置https://www.bilibili.com/video/BV1cy4y1J7yg/?spm_id_from333.999.0.0 【赠送】IT技术视频教程&#xff0c;白拿不谢&#xff01;思科、华为、红帽、数据库、云计算等等 https://xmws-it.blog.csdn.net/article/det…

如何选择微信管理系统?

如何选择微信管理系统&#xff1f; 1、不用下载安装软件&#xff0c;不越狱不刷机 2、不绑定手机或电脑&#xff0c;不对电脑或手机做限制&#xff0c;也不受电脑、手机关闭、关机影响 3、能更新迭代&#xff0c;不限制版本 4、使用安全登录&#xff0c;保障账号安全的 5、不用…

LangChain+LLM实战---ChatGPT的工作原理

一个词一个词的输出 ChatGPT能够自动生成类似于人类书写的文本&#xff0c;这是非常了不起和出乎意料的。但它是如何做到的&#xff1f;为什么会有效果呢&#xff1f;我的目的在于大致概述ChatGPT内部发生了什么&#xff0c;然后探讨它为什么能够很好地生成我们认为有意义的文…

GEE数据集——原住民土地(原住民土地地图)数据集

原住民土地&#xff08;原住民土地地图&#xff09; 土地承认是人们在日常生活中融入原住民存在和土地权利意识的一种方式。这通常在仪式、讲座或教育指南开始时进行。它可以是一种明确但有限的方式来认识殖民主义和第一民族的历史以及定居者殖民社会变革的需要。在这种情况下…

2023.11.03 homework

小学4年级数学 1 2 3 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 19…

2023.11.2事件纪念

然而造化又常常为庸人设计,以时间的流逝,来洗涤旧迹,仅以留下淡红的血色和微漠的悲哀。 回顾这次事件&#xff0c;最深的感触就是什么是团队的力量&#xff01; 当我们看到希望快要成功的时候&#xff0c;大家洋溢出兴奋开心的表情&#xff0c;一起的欢声笑语&#xff1b;但看…