技术学习|CDA level I 数据库应用(数据定义语言DDL)

用来对数据库管理系统中的对象进行增删改查的操作语言。

一、数据库

1、创建数据库

创建数据库是指在数据库管理系统的服务器中划分一个空间,用来存储相应的数据。在实际操作中,分析人员可以根据定期的需求分析对数据进行提取和归纳,并在当前用户权限下创建数据库用来存储提取的数据,这样即可以避免对实时业务产生冲突,也可以按照分析需求重新定义数据之间的关系。

--创建一个名为test的数据库(数据库名称可以为中英文字符、数字或下划线)
create database test;

2、查看数据库

在数据库管理系统中,可查看当前用户权限范围以内的数据库。

show databases;

3、选择数据库

在完成创建数据库之后,该数据库不会自动成为当前数据库,如果我们要使用这个数据库,需先使用use命令来指定使用数据库。当没有执行使用数据库的命令,则系统无法知道我们要使用哪个数据库,且之后的操作语句中每次都需要限定符来指定数据库(格式为数据库名称.表明);若既没有执行使用数据库的命令,也没有使用限定字符来指定数据库,则数据库管理系统就会报错,执行使用数据库的命令后,所有SQL命令都会在当前数据库执行,直到再次使用use命令指定其他数据库。

--基础语法格式
--use <数据库名称>;
use test;   #使用创建好的test数据库

4、删除数据库

当一个数据库我们创建错了或者不想要它时,则需要执行删除命令将其删除(删除数据库的同时会删除数据库中存储的所有表和数据)

--基础语法格式
--drop database <数据库名称>
drop database test;

二、数据表

1、数据字典

数据字典是一个用来描述数据表信息的表格,可以存储在数据库中,也可以以独立的说明文档的形式保存在数据库系统之外。对于分析人员来说,数据字典是分析阶段非常重要的工具,可以帮助分析人员快速梳理数据表的结构及字段的基础信息。数据字典应由数据库设计人员在数据库设计初期的需求分析阶段建立,在数据字典中会严格规定每个字段的相关属性,如字段的数据类型或字段的约束条件。一般来说,数据字典会包括表名、表的描述信息、字段名、字段描述、字段对应的数据类型、约束、初始值等信息。

2、创建表

创建表的同时需要指定表名、字段名、以及每个字段的数据类型和约束条件,其中约束条件可以不指定。在创建表时,一定要声明使用的数据库,即“use <数据库名称>”

--基础语法格式
create table <表名>(
<字段名1> <数据类型1>[<约束条件1>,
<字段名2> <数据类型2><约束条件2>,
…………
<字段名n> <数据类型n><约束条件n>]
);

3、查看表

我们查看当前数据库中已创建好的全部数据库,也可以进一步查看特定表的表结构。

--查看数据库下的所有表
show tables;
--查看表结构(在查看表之前需要声明该表所在的数据库,用限定符指定数据库名称、表名)
describe <表名>
--或
desc <表名>

4、修改表

--修改表名(对表名进行修改,不用考虑被修改的表中是否有数据)
alter table <原表名> rename <新表名>;
--修改字段名(对表中字段的名称进行修改,不用考虑被修改的字段中是否有数据)
alter table <表名> change <原字段名> <新字段名> <新数据类型>;
--修改字段类型(对字段的类型进行修改时,如果要修改的字段已经存储了数据,那么数据库会检查已存储的数据是否满足新的数据类型的要求,只有在该字段的所有数据都满足新的数据类型的要求的情况下才会成功执行修改命令,如果有任意一行数据不满足要求就会报错,无法进行字段类型的修改【以数值格式存储的字符串,可以强制转换为数值类型】)
alter table <表名> modify <字段名> <新数据类型>;
--添加新字段(向已存在的表中添加新的字段,添加字段的位置可以指定,在不指定的情况下会默认将新字段添加到表中的最后一列)
alter table <表名> add <新字段名> <数据类型> [约束条件] [first|after参照字段名]
--修改字段的排列位置(出于业务逻辑方面的考虑,于数据库管理系统而言,无具体意义)
alter table <表名> modify <字段名> <数据类型> first|after 参照字段名
--删除字段(删除表中不需要的字段,该字段在标准存储的全部数据、约束条件、索引等也会一并删除)
alter table <表名> drop <字段名>;

5、删除表

删除表不仅会删除表的结构、约束条件、索引等,也会删除表中存储的全部数据。drop可同时删除多个表,if exists主要用来判断表名是否存在,在使用时需要注意如果表名输入数据,语句也不会报错,会正常执行,但是需要删除的表并没有被删除。

drop table [if exists] <表名> [,<表名1>,<表名2>,<表名2>,……,<表名n>];

三、数据类型

1、数据库中的每个字段都需要指定相应的数据类型,用于限制该字段中存储的数据。数据库中常用的数据类型有以下3种:数值型、字符串型(文本型)、日期和时间型。

2、计算机中最小的数据单位是位(bit),每一位的状态只能是二进制的0或1(比特币就是位币的意思)。字节(Byte)是由8个二进制位构成的,字节是数据存储空间的基本计量单位。INT为4字节,(有符号的INT值的取值范围为-(2^31)~~~2^31-1,无符号INT值的取值范围是0~~~2^32。

3、数值型(分为整数型和小数型)

类型大小范围(有符号)范围(无符号)用途
TINYINT1字节(-128,127)(0.255)小整数值
SMALLINT2字节(-)
MEDIUMINT3字节
INT或INTEGER4字节
BIGINT8字节

注:整数型数据都可取有符号和无符号两种,如果要禁止负数,那么可以在整数型数据列后加上UNSIGNED,此时数据的取值就会从0开始。

FLOAT(4字节)、DOUBLE(8字节)。小数型数据可以通过后面加括号的方式来指定显示宽度和小数位数。括号中包含了一个最大可表示值和最小非零可表示值,最小非零可表示值决定了该类型的精确度。当指定UNSIGNED时,取值范围并没有平移到正数区间,而仅仅是把浮点类型的负数去掉。另,DECIMAL也可以用来存储小数,适用于金额、价格等对精度要求较高的数据存储,默认为DECIMAL(10,0),表示最多有10位数字,其中有0位小数。

名称描述
FLOAT(M,D)只能为有符号的。默认为FLOAT(10,2),表示最多有10位数字,其中有2位小数
DECIMAL(M,D)只能为有符号的,默认为DECIMAL(10,2),表示最多有10位数字,其中有0位小数

4、字符串型

字符串主要用来存储不能进行数字运算的文本数据。在实际应用中,字符串不仅可以用来表示任何一种值,还可以存储图片和声音的二进制数据,故字符串是最基本的数据类型之一。常见的字符串型数据类型有CHAR、VARCHAR、TEXT。CHAR(M)、VARCHAR(M)中的M是指定长度,这个长度必须大于实际数据的最大长度,否则会造成数据后半部分丢失。

CHAR和VARCHAR的区别在于,CHAR是固定长度的,每个值占用相同的字节数,针对不足的位数,MySQL会在它的右边用空格字符补足。VARCHAR是一种可变长度的类型,每个值占用其刚好的字数再加上一个用来记录其长度的字节,即L+1字节。在一个数据表中,只要有一个数据列的长度是可变的,所有数据列的长度就是可变的

MySQL会自动进行自动转换。例,CHAR的长度小于4,此时不会进行自动转换,因为MySQL认为没必要这样做,节省不了多少空间。反而MySQL会把大量长度小的VARCHAR转换成CHAR,以减少空间占用量。

CHAR和VARCHAR的使用主要根据数据长度进行选择,如果数据长度相同,那么选用VARCHAR会多占用空间,因为 有1位用来存储其长度。如果数据长度不一,选用VARCHAR能节省存储空间。而CHAR不论字符长短都需补位占用相同的空间,即使是空值也不例外。如果长度出入不大,而且使用MyISAM或ISAM类型的表格,则用CHAR会比VARCHAR好,因为MyISAM和ISAM类型的表对处理固定长度的行的效率最高。

名称描述
CHAR(M)固定长度字符串,长度为1~255个字符。若不指定字符长度,则默认存储1个字符;若指定字符长度,但实际存储字符长度小于指定长度,则右边填充空格;若指定字符长度,但实际存储字符长度大于指定长度,则会报错
VARCHAR(M)可变长度字符串,长度为1~255个字符。定义该类型时必须指定长度
TEXT最大长度为65535个字符。用来存储二进制大数据,如图片。该类型不能指定长度。

5、日期时间型

日期时间型数据主要用于存储日期、时间信息,主要包含4种数据类型。分别为DATE、TIME、DATETIME、TIMESTAMP。

最常用的DATE、TIME和DATETIME类型分别用来存储“YYYY-MM-DD”格式的日期数据、“hh:mm:ss”格式的时间数据和“YYYY-MM-DD hh:mm:ss”格式的日期时间数据。

DATETIME中的时间值和TIME值是有区别的,DATETIME中的时间值代表的是几点几分,TIME值代表的是所花费的时间。当向TIME数据列插值时,应用时间的完整写法,如12分30秒应写为00:12:30。

名称描述
DATEYYYY-MM-DD格式,在1000-01-01和9999-12-31之间,如1973-12-30
DATETIMEYYYY-MM-DD hh:mm:ss格式,在1000-01-01 00:00:00和9999-12-31 23:59:59之间
TIMEhh:mm:ss格式,在00:00:00和23:59:59之间
TIMESTAMP时间戳,在1970-01-01 00:00:00和2037-12-31 23:59:59之间,存储从1970-01-01 00:00:00到指定时间的秒数。

在数据库中字符串数据和日期时间型数据,都需要用英文的引号括起来。

四、约束条件

约束条件是在表和字段上强制执行的表的检验规则。使用约束条件可以保证表中数据的完整性和准确性,防止不规范的数据进入数据库。

1、定义约束条件

在MySQL中有以下5种常用的约束条件。

控制条件说明语法
primary key主键约束字段名 数据类型 primary key
not null非空约束字段名 数据类型 not null
unique唯一约束字段名 数据类型 unique
auto_increment自动增长约束字段名 数据类型 auto_increment
default默认约束字段名 数据类型 default 默认值
  • primary key是主键约束,用来唯一标识数据中的每行记录。主键约束要求字段中的数据记录是非空的和唯一的。

  • not null是非空约束,限制了字段中的数据记录不能有空值。

  • unique是唯一约束,限制了字段中的数据记录不能有重复值,即不能有两个相同的数据记录存在。

  • auto_increment是自动增长约束,它需要和主键约束,并且只有整数型字段才可以添加自动增长约束。在默认情况下,它是从1开始,在前一条记录的基础上,步长为1自动生成的。

  • default是默认约束,表示为字段设置默认值,如果某个字段在添加数据时,没有指定该字段的取值,那么数据库管理系统就会按照default设置的默认值进行存储。

  • 除了上述的5种约束条件,SQL还使用外键约束来指定表和表之间的依赖关系,受实际业务的限制。(SQL还会使用检查约束来指定需要检查的限定条件,以确保不符合限定条件的数据无法进入数据表,在8.0.16版本后,在MySQL客户端中并不显示)

2、主键约束

主键,又称为“主码”,是数据表中一列或多列的组合。

--单字段主键约束
create table <表名>(<字段名1> <字段类型1> primary key,<字段名2> <字段类型2>,……<字段名n> <字段类型n>
);
​
--多字段主键约束
--如果主键是由两个不同的字段组合而成复合主键,那么主键约束就要写在所有定义好的字段的最后一行primary key( , ),括号里面写复合主键的组成部分,中间用逗号分隔。如果主键是由两个以上字段组合而成的,有多少个字段就在括号里面增加多少个并以逗号分隔即可。
create table <表名>(<字段名1> <字段类型1>.<字段名2> <字段类型2>,……<字段名n> <字段类型n>,[constraint 主键约束名] primary key(字段名1[,字段名2,……字段名n])
);
​
--删除主键约束
alter  table <表名> drop primary key;

3、唯一约束

--格式1
create table <表名>(<字段名1> <字段类型1> unique,<字段名2> <字段类型2>,……<字段名n> <字段类型n>
)
​
--格式2
create table <表名>(<字段名1> <字段类型1>.<字段名2> <字段类型2>,……<字段名n> <字段类型n>,[constraint 唯一约束名] unique(字段名1[,字段名2,……字段名n])
);
​
--删除唯一约束(唯一约束名用字段名表示)
alter table <表名> drop index <唯一约束名>

4、自动增长约束

自动增长约束要求指定字段的数值取值自动增长,默认从1开始,每增加一条记录,这个字段的取值就会加1,所以它只适用于正数的数值型字段。一个表只能有一个自动增长字段,且必须为主键的一部分,因此自动增长约束也是辨别表中主键的重要标志之一。

--创建自动增长约束
create table <表名>(<字段名1> <字段类型1> primary key auto_increment,<字段名2> <字段类型2>,……<字段名n> <字段类型n>
);
--删除自动增长约束
alter table <表名> modify <字段名> <字段类型>;

5、非空约束

非空约束要求字段的值不能为空值。

--创建非空约束
create table <表名>(<字段名1> <字段类型1> not null,<字段名2> <字段类型2>,……<字段名n> <字段类型n>
);
--删除非空约束
alter table <表名> modify <字段名> <字段类型> [null];

6、默认约束

默认约束指定某个字段的默认值,当插入记录时,如果没有明确为字段赋值,那么系统就会自动为这个字段赋值为约束设定的值。但对于分析人员来说,默认约束中定义的默认值在实际分析场景中有时可能会导致分析的结果出现偏差。故有时需要将默认值按照缺失值的处理方式,对默认值进行过滤等操作。若默认值为字符串型数据或日期时间型数据,则必须用引号引起来。

--创建默认约束
create table <表名>(<字段名1> <字段类型1> default value,<字段名2> <字段类型2>,……<字段名n> <字段类型n>
);
--删除默认约束
alter table <表名> modify <字段名> <字段类型>;

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

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

相关文章

OpenAI ChatGPT-4开发笔记2024-02:Chat之text completion

API而已 大模型封装在库里&#xff0c;库放在服务器上&#xff0c;服务器放在微软的云上。我们能做的&#xff0c;仅仅是通过API这个小小的缝隙&#xff0c;窥探ai的奥妙。从程序员的角度而言&#xff0c;水平的高低&#xff0c;就体现在对openai的这几个api的理解程度上。 申…

【springboot+vue项目(零)】开发项目经验积累(处理问题)

一、VUEElement UI &#xff08;一&#xff09;elementui下拉框默认值不是对应中文问题 v-model绑定的值必须是字符串&#xff0c;才会显示默认选中对应中文&#xff0c;如果是数字&#xff0c;则显示数字&#xff0c;修改为&#xff1a; handleOpenAddDialog() {this.dialogT…

vue-动态高亮效果

个人练习&#xff0c;仅供参考 实现如下效果&#xff1a;点击某块&#xff0c;某块变成其他颜色。 具体实现代码&#xff1a; 上边&#xff1a; <template><div><h3 style"color: #f69">动态高亮效果</h3><hr> <!-- 对象 -->…

SwiftUI之深入解析如何使用新地图框架MapKit

一、前言 一旦将 App 目标更新到 iOS 17&#xff0c;Xcode 会将任何使用旧的 Map 初始化器的用法标记为已弃用&#xff1a; 会有警告提示&#xff1a;init coordinate region 已在 iOS 17 中弃用。请改用带有 MapContentBuilder 参数的地图初始化器。在 iOS 17 中&#xff0c;…

2023新年总结与展望

2023年总结 对Spring Cloud微服务更加熟悉&#xff0c;对consul、kafka、gateway的熟悉和掌握更近一步对docker和虚拟化部署更加熟悉对PostgreSQL数据库和JPA更加熟悉对clickhouse数据库和大数据分析更加熟悉对netty和socket网络通信更加熟悉 2024年flag 继续深入研究和学习…

Java-replaceAll()同时替换多个字符

今天复现了raplaceAll&#xff08;&#xff09;的用法&#xff0c;但是通常都是对一种字符进行替换&#xff0c;我就在想有没有操作可以一次性替换多个不同的字符&#xff0c;百度一搜&#xff0c;果然有。具体情况如下 首先是替换字的 String str1 "小明&#xff0c;小…

案例091:基于微信小程序的农场驿站平台的设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

Redis (三)

1、redis复制 简单的概括就是主从复制&#xff0c;master以写为主&#xff0c;Slave以读为主&#xff0c;当master数据发生变化的时候&#xff0c;自动将更新的数据异步同步到其他的slave是数据库。 使用这种机制的话&#xff0c;可以做到读写分离&#xff0c;可以减轻主机负担…

[设计模式 Go实现] 行为型~迭代器模式

迭代器模式 送代器模式用于使用相同方式送代不同类型集合或者隐藏集合类型的具体实现。 可以使用送代器模式使遍历同时应用送代策略&#xff0c;如请求新对象、过滤、处理对象等。 iterator.go package iteratorimport "fmt"type Aggregate interface {Iterator(…

【华为数据之道学习笔记】10-3 摆脱传统手段的数据管理方式

智能数据管理是数据工作的未来 在以传统方式对数据实施管理和治理的过程中&#xff0c;数据工作者和业务方都需要投入相当多的人力和资源&#xff0c;才能达成管理目标&#xff0c;其中的艰辛&#xff0c;相信各位业内人士都深有体会。而随着智能大数据时代的到来&#xff0c;各…

# [NOIP2015 普及组] 扫雷游戏#洛谷

题目背景 NOIP2015 普及组 T2 题目描述 扫雷游戏是一款十分经典的单机小游戏。在 n n n 行 m m m 列的雷区中有一些格子含有地雷&#xff08;称之为地雷格&#xff09;&#xff0c;其他格子不含地雷&#xff08;称之为非地雷格&#xff09;。玩家翻开一个非地雷格时&#…

14.两数之和

题目 class Solution {public int[] twoSum(int[] nums, int target) {int[] ret {-1,-1};for(int i0;i<nums.length;i) {for(int ji1;j<nums.length;j) {if(nums[i] nums[j] target) {ret[0] i;ret[1] j;}}}return ret;} }

uniapp 无限级树形结构面包屑、单选-多选、搜索、移除功能插件,基于【虚拟列表】高性能渲染海量数据,加入动态高度、缓冲区

hyq-tree-vtw 无限级树形结构面包屑、单选-多选、搜索、移除功能 示例项目 单选-user 单选-任意一项 多选-关联下级 多选-任意一项 已选择数据弹框 说明 本插件需要使用uni-popup、uni-transition用于已选择数据弹框&#xff0c;因此需要有这些依赖,请自行导入本插件基于【虚…

企业培训系统开发:构建灵活高效的学习平台

企业培训系统的开发在当今数字化时代是至关重要的。本文将介绍一些关键技术和代码示例&#xff0c;以帮助您构建一个灵活、高效的企业培训系统。 1. 技术选型 在开始企业培训系统的开发之前&#xff0c;首先需要选择合适的技术栈。以下是一个基本的技术选型示例&#xff1a;…

Python(wordcloud):根据文本数据(.txt文件)绘制词云图

一、前言 本文将介绍如何利用python来根据文本数据&#xff08;.txt文件&#xff09;绘制词云图&#xff0c;除了绘制常规形状的词云图&#xff08;比如长方形&#xff09;&#xff0c;还可以指定词云图的形状。 二、相关库的介绍 1、安装相关的库 pip install jieba pip i…

编程语言的未来:探索技术进步的轨迹

编程语言的未来&#xff1a;探索技术进步的轨迹 随着科技的飞速发展&#xff0c;编程语言在计算机领域中扮演着至关重要的角色。它们是软件开发的核心&#xff0c;为程序员提供了与机器沟通的桥梁。然而&#xff0c;未来的技术进步将如何影响编程语言的走向呢&#xff1f;让我…

Linux——使用KVM命令集管理虚拟机

一、KVM基本功能管理 1&#xff09;查看命令帮助 [rootlucky ~]# virsh -h2&#xff09;查看KVM的配置文件存放目录&#xff08;rhel7.1.xml是虚拟机系统实例的配置文件&#xff09; [rootlucky ~]# ls /etc/libvirt/qemu autostart networks rhel7.1.xml3&#xff09;查看…

git使用 笔记2

新建代码库 在当前目录新建一个Git代码库 $ git init 新建一个目录&#xff0c;将其初始化为Git代码库 $ git init [project-name] 下载一个项目和它的整个代码历史 $ git clone [url] 配置 显示当前的Git配置 $ git config --list 编辑Git配置文件 $ git config -e…

HTTP和TCP代理原理及实现,主要是理解

Web 代理是一种存在于网络中间的实体&#xff0c;提供各式各样的功能。现代网络系统中&#xff0c;Web 代理无处不在。我之前有关 HTTP 的博文中&#xff0c;多次提到了代理对 HTTP 请求及响应的影响。今天这篇文章&#xff0c;我打算谈谈 HTTP 代理本身的一些原理&#xff0c;…