SQL第二周学习笔记—关系数据库、云数据库、DDL与DML、sql操作

这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战

大家好,我是【豆干花生】,这次我带来了一整套sql、mysql学习笔记,后续还会更新~

sql大家是很常用的数据库语言,但是对于初学者,往往不能系统的学习,所以我带来了一套完整笔记

今天我要分享第一周笔记,在本模块中,你将学习到关系数据库、云数据库、DDL与DML、sql操作

这是我从头开始学习sql/mysql的学习笔记,后续还会更新,欢迎关注~

注:本笔记为coursera网站课程《Databases and SQL for Data Science with Python》的学习笔记

In this module, you will explore the fundamental concepts behind databases, tables, and the relationships between them. You will then create an instance of a database, discover SQL statements that allow you to create and manipulate tables, and then practice them on your own live database.

image.png

学习目标

  • 描述基本的关系数据库概念,包括表,主键和外键。
  • 在云上创建数据库实例
  • 区分数据定义语言和数据处理语言。
  • 解释CREATE TABLE语句的语法。
  • 解释ALTER,DROP和TRUNCATE语句的语法。
  • 在实时数据库上动手编写和执行CREATE TABLE,ALTER,DROP和TRUNCATE语句。

一.关系数据库概念

关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据,同时也是一个被组织成一组拥有正式描述性的表格,该形式的表格作用的实质是装载着数据项的特殊收集体,这些表格中的数据能以许多不同的方式被存取或重新召集而不需要重新组织数据库表格。

关系数据库的定义造成元数据的一张表格或造成表格、列、范围和约束的正式描述。每个表格(有时被称为一个关系)包含用列表示的一个或更多的数据种类。 每行包含一个唯一的数据实体,这些数据是被列定义的种类。

当创造一个关系数据库的时候,你能定义数据列的可能值的范围和可能应用于那个数据值的进一步约束。而SQL语言是标准用户和应用程序到关系数据库的接口。其优势是容易扩充,且在最初的数据库创造之后,一个新的数据种类能被添加而不需要修改所有的现有应用软件。

主流的关系数据库有oracle、db2、sqlserver、sybase、mysql等。

二.在云上创建数据库实例

云数据库是一种数据库服务 通过云平台构建和访问。 它具有许多与 传统数据库 云计算的额外灵活性。

使用的一些优点 云数据库包括:使用方便,用户可以从虚拟访问云数据库 使用供应商的API或网络界面的任何地方, 或您自己的应用程序(无论是在Cloud还是Remote上)。可扩展性。 云数据库可以扩展 并缩减其存储和计算 运行时的容量 适应不断变化的需求和使用需求, 因此,组织只需为他们实际使用的东西付费。 灾难恢复。 如果发生自然灾害 或设备故障或断电, 通过远程服务器上的备份确保数据安全 在地理分布区域中的Cloud上。

要在Cloud中运行数据库, 您必须先配置一个实例 上的数据库服务 您选择的云平台。 数据库即服务的实例或 DBaaS为用户提供 访问云中的数据库资源 无需设置 基础硬件 安装数据库软件, 和管理数据库。

数据库服务实例将 将数据保存在相关表中。 将数据加载到数据库实例后, 您可以使用连接到数据库实例 应用程序中的Web界面或API。 连接后,您的应用程序可以发送 跨数据库实例的SQL查询。 数据库实例 将SQL语句解析为 对数据库中的数据和对象进行操作。 返回任何检索到的数据 作为结果集。

您也可以选择创建多组 不同应用程序和用户的凭据。 创建一组服务凭证后, 您可以将其视为相邻的代码段。 凭证包括必要的详细信息 建立与数据库的连接, 并包括以下内容; 数据库名称和端口号, 主机名,即服务器上的服务器的名称 数据库实例所在的云, 用户名,即用户 用于连接的ID和密码。 请注意,您的用户名也是架构名称 默认情况下将在其中创建表。

这里建议直接在阿里云服务器里建立云数据库。

三.sql语句的类型(DDL与DML)

SQL语句分为两种不同的类别: 数据定义语言语句和数据操作语言语句。

数据定义语言(或DDL)语句用于定义,更改或删除数据库 表等对象。 常见的DDL语句类型包括CREATE,ALTER,TRUNCATE和DROP。 CREATE:用于创建表和定义其列; ALTER:用于更改表,包括添加和删除列以及修改 他们的数据类型; TRUNCATE:用于删除表中的数据,但不删除表本身; DROP:用于删除表。

数据操作语言(或DML)语句用于读取和修改表中的数据。 这些有时也称为CRUD操作, 即创建,读取,更新和删除表中的行。 常见的DML语句类型包括INSERT,SELECT,UPDATE和DELETE。 INSERT:用于在表中插入一行或几行数据; SELECT:从表中读取或选择一行; 更新:编辑表中的一行或多行; 和DELETE:从表中删除一行或多行数据。 现在您知道了: DDL或数据定义语言语句用于定义或更改对象 在诸如表之类的数据库中。 DML或数据操作语言语句用于操作或使用 表中的数据。

四.CREATE TABLE语句

blog.csdn.net/weixin_4437…

1. create table命令

强调:使用建表命令之前必须使用use命令选择表所在的数据库。create table命令的格式如下:

create table tablename(
     col_name1 type auto_increment,
     col_name2 type not null|null default val,
     col_name3 type unique,
     .... ,
    primary key(col_name),
    index idx_name(col_name1,col_name2,...),
    foreign key(col_name) references tablename(col_name)
) engine=innoDB|myISAM default charset=字符集;

复制代码

说明:

(1)type:定义字段的数据类型。其中:字符串类型(char,varchar)需要指定长度;整型(int,biging,tinyint等)和日期类型(datetime,timestamp等)只需要指定类型,不需要指定长度;decimal类型需要指定精度和小数位数。
(2)primary key参数指定表的主键。
(3)auto_increment参数指定字段为自增字段,该字段的类型必须为int或bigint才能设置为自增字段。
(4)not null|null参数设置字段能否取空值。
(5)default参数设置字段的默认值。
(6)index参数用来创建索引。idx_name指定索引名,该参数可以省略,如果省略则索引名就是字段名。
(7)foreign key参数用来指定外键。
(8)engine参数用来设置引擎类型,常用的有innoDB和myISAM引擎。
(9)default charset参数设置表所用的字符集。

2.举例:

(1)创建dept表:

create table dept(
    dept_id int primary key auto_increment,    --dept_id设置为int类型,自增字段,主键
    dept_name char(20) not null default '',    --dept_name不能为空,默认值为空字符串
    phone char(20)
);

复制代码

(2)创建emp表:

create table emp(
    emp_id int auto_increment,
    emp_name char(20) not null default '',
    birth datetime not null,
    phone char(20) not null,
    addr varchar(200) not null,
    dept_id int not null default 0,
    index idx_emp_name(emp_name),
    index idx_emp_name_birth(emp_name,birth),
    primary key(emp_id),               --emp_id字段为主键
    foreign key(dept_id) references dept(dept_id)
) engine=innoDB default charset=utf8;

复制代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xAABIl6g-1628407683206)(C:\Users\YUANMU\AppData\Roaming\Typora\typora-user-images\image-20210418164207643.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tYeTiuNE-1628407683208)(C:\Users\YUANMU\AppData\Roaming\Typora\typora-user-images\image-20210418164216789.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D8KrZwH0-1628407683211)(C:\Users\YUANMU\AppData\Roaming\Typora\typora-user-images\image-20210418164224685.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MqwTjVNB-1628407683214)(C:\Users\YUANMU\AppData\Roaming\Typora\typora-user-images\image-20210418164233346.png)]

五.ALTER,DROP,Truncate表

1.alter

原文链接:blog.csdn.net/sinat_36053…

1:删除列

ALTER TABLE 【表名】 DROP 【列名】
2:增加列

ALTER TABLE 【表名】 ADD 【列名】 【类型】
alter table table1 add transactor varchar(10) not Null;
3:重命名列

ALTER TABLE 【表名】 CHANGE 【列名】【新名】

建议使用rename,change容易报错

ALTER TABLE table_name RENAME TO new_table_name;

4:修改表字段

alter table 表名称 change 字段名称 字段名称 字段类型 [是否允许非空];
alter table 表名称 modify 字段名称 字段类型 [是否允许非空];
5:查询表的字段信息

desc 表名称;
6:创建索引

ALTER TABLE tbl_name ADD INDEX index_name (column list);
7:删除索引

ALTER TABLE tbl_name DROP INDEX index_name (column list);
8:修改表名

ALTER TABLE tbl_name rename new_tbl_name;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tsZFrZJu-1628407683216)(C:\Users\YUANMU\AppData\Roaming\Typora\typora-user-images\image-20210418181436823.png)]

更换类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-15gpHiqR-1628407683217)(C:\Users\YUANMU\AppData\Roaming\Typora\typora-user-images\image-20210418182812142.png)]

2.DROP

DROP TABLE table_name;
复制代码

3.TRUNCATE

blog.csdn.net/wangkun_j/a…

truncate的作用是清空表或者说是截断表,只能作用于表。truncate的语法很简单,后面直接跟表名即可,例如: truncate table tbl_name 或者 truncate tbl_name 。

执行truncate语句需要拥有表的drop权限,从逻辑上讲,truncate table类似于delete删除所有行的语句或drop table然后再create table语句的组合。为了实现高性能,它绕过了删除数据的DML方法,因此,它不能回滚。尽管truncate table与delete相似,但它被分类为DDL语句而不是DML语句。

上面说过truncate与delete,drop很相似,其实这三者还是与很大的不同的,下面简单对比下三者的异同。

truncate与drop是DDL语句,执行后无法回滚;delete是DML语句,可回滚。
truncate只能作用于表;delete,drop可作用于表、视图等。
truncate会清空表中的所有行,但表结构及其约束、索引等保持不变;drop会删除表的结构及其所依赖的约束、索引等。
truncate会重置表的自增值;delete不会。
truncate不会激活与表有关的删除触发器;delete可以。
truncate后会使表和索引所占用的空间会恢复到初始大小;delete操作不会减少表或索引所占用的空间,drop语句将表所占用的空间全释放掉。

通过前面介绍,我们很容易得出truncate语句的使用场景,即该表数据完全不需要时可以用truncate。如果想删除部分数据用delete,注意带上where子句;如果想删除表,当然用drop;如果想保留表而将所有数据删除且和事务无关,用truncate即可;如果和事务有关,或者想触发trigger,还是用delete;如果是整理表内部的碎片,可以用truncate然后再重新插入数据。

drop语句将表所占用的空间全释放掉。

当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小,

DELETE操作不会减少表或索引所占用的空间。

一般而言,drop > truncate > delete

无论怎样,truncate表都是高危操作,特别是在生产环境要更加小心,下面列出几点注意事项,希望大家使用时可以做下参考。

truncate无法通过binlog回滚。
truncate会清空所有数据且执行速度很快。
truncate不能对有外键约束引用的表使用。
执行truncate需要drop权限,不建议给账号drop权限。
执行truncate前一定要再三检查确认,最好提前备份下表数据。

TRUNCATE TABLE table_name;
复制代码

六.Summary & Highlights

  • 数据库是数据存储库,它提供添加,修改和查询数据的功能。

  • SQL是一种用于从关系数据库中查询或检索数据的语言。

  • 关系模型是数据库中最常用的数据模型,因为它允许数据独立。

  • 关系表的主键唯一地标识每个元组或行,从而防止数据重复,并提供了一种定义表之间关系的方法。

  • SQL语句分为两类:数据定义语言(DDL)语句和数据操作语言(DML)语句。

都看到这里了,不如点个赞哦~

初来掘金,我还有很多有趣的文章,后续都将搬运过来,欢迎关注哦~

在这里插入图片描述

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享