【MySQL】数据库基础

news2024/12/25 12:58:48


 

目录

1、什么是数据库

2、 数据库基本操作

2.1 查看当前数据库

2.2 创建一个数据库

2.3 选中数据库

2.4 删除数据库 

3、常见的数据类型

3.1 数值类型 

3.2 字符串类型

3.3 日期类型 

4、表的操作

4.1 创建表

4.2 查看指定数据库下的所有表

4.3 查看表的结构

4.4 删除表


1、什么是数据库

数据库其实是一类软件,这样的软件就能够对数据进行操作,比如增删改查。前面我们学习过的数据结构也是来管理数据的,数据呢也是基于数据结构实现出来的软件。

数据库大概可以分为两类:

关系型数据库:MySQL,Oracle,SQLServer,SQLite...

非关系型数据库:Redis,MongoDB,HBase...

上述所说的呢,都是软件,本专栏主要讲解 SQL 这门编程语言,去操作 MySQL 数据库。

一条 SQL 指令是可以换行的,以分号结尾即可。


2、 数据库基本操作

数据库的操作不区分大小写! 

2.1 查看当前数据库

MySQL中其实自带了很多系统库,使用 show databases; 就能查看当前所有的数据库了:

show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
-- 5 rows in set (0.00 sec)

上面显示的除了 test 是博主创建的,其他的就是系统自带的数据库了,系统带的库可不要随便乱动哦!

2.2 创建一个数据库

create database 数据库名;

比如说这里我们要创建一个 demo 数据库,直接执行上述的 SQL 语句即可:

create database demo;
-- Query OK, 1 row affected (0.00 sec)

show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| demo               |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
-- 6 rows in set (0.00 sec)

这里有个小细节不知道大家发现了没有,创建数据库的时候是 database,显示所有数据库是 databases,这里为啥,自然就不用博主解释了吧,后续查看数据库中所有表的操作也是类似的哦!

在创建数据库的时候,也是可以指定字符集的:

create database 数据库名 charset 字符集名;

如果创建数据库名重复了会咋样?

create database demo;
-- ERROR 1007 (HY000): Can't create database 'demo'; database exists

有一个办法,可以解决报错:

create database if not exists demo;
-- Query OK, 1 row affected, 1 warning (0.00 sec)

这样写就没问题了,也就是不会报错了,但是有一个警告,学习Java阶段,我们知道一个程序中允许有 warning 但不允许有 error。

这样写的意思就是,如果存在了 demo 这个数据库,那么就不创建了,没有存在才创建 demo 数据库,有小伙伴可能会问,这有啥用呢?不就是把 error 变成了 warning 吗?

很多时候 SQL 是写在文件中的,进行批量执行,如果执行过程中,某个操作报错了,那么后续的代码是无法执行的,而 warning 是不影响的!

注意:数据库的名字不能是 SQL 的关键字。 

2.3 选中数据库

一个 MySQL 服务器上,数据库是可以有多个的,要对数据库进行操作,就需要先明确我们要操作的是哪个数据库。

use demo;
-- Database changed

那么选中数据库后,我们后面的操作都是针对这个 demo 数据库来执行的。

2.4 删除数据库 

drop database demo; -- drop database 数据库名;
-- Query OK, 0 rows affected (0.01 sec)

注意:删除数据库是非常危险的一个操作,如果你删的是测试环境的那还好,如果你删的是生产环境的数据库,那就可能会出问题了,可能有的人想到,反正有备份,但是虽然有备份,但是仍然是需要耗费大量时间的,一个公司的数据量可想而知。 


3、常见的数据类型

3.1 数值类型 

数据类型大小说明
BIT[ (M) ]M指定位 数,默认 为1二进制数,M范围从1到64, 存储数值范围从0到2^M-1
TINYINT1字节
SMALLINT2字节
INT4字节
BIGINT8字节
FLOAT(M,D)4字节单精度,M指定长度,D指定小数位数,会发生精度丢失
DOUBLE(M,D)8字节
DECIMAL(M,D)M/D最大 值+2双精度,M指定长度,D表示 小数点位数。精确数值
NUMERIC(M, D)M/D最大 值+2和DECIMAL一样

数值类型可以定义成无符号(unsigned),表示不取负数,但是没这个必要,就比如对于 int 类型可能放不下的数据 int unsigned 也可能放不下,不如直接采用 bigint 来的实在。

上述常用类型:int,double,decimal,bigint 

3.2 字符串类型

数据类型大小说明
VARCHAR(SIZE)0-65,535字节可变长度字符串
TEXT0-65,535字节长文本数据
MEDIUMTEXT0-16 777 215字节中等长度文本数据
BLOB0-65,535字节二进制形式的长文本数据

上述的 VARCHAR(128) 表示这个列最多存 128 个字符,但是这里也不是你写了 128 就真的固定分配了这么多内存,也会动态适应,但最大的内存不会超过这个 128.

TEXT 和 MEDIUMTEXT 更适合于更长的字符串。BLOB 主要是存二进制数据的。

3.3 日期类型 

数据类型大小说明
DATETIME8字节范围从1000到9999年,不会进行时区的 检索及转换。
TIMESTAMP4字节范围从1970到2038年,自动检索当前时 区并进行转换。

第二个目前就不推荐使用了,毕竟时间戳到 2038 年就用尽了。


4、表的操作

4.1 创建表

当我们要创建表的时候,要明确是哪个数据库中创建,所以创建表的前提是,我们要选中需要操作的数据库。

use demo;
-- Database changed
create table student(id int, name varchar(10));
-- Query OK, 0 rows affected (0.02 sec)

这里我们的学生表就创建完成了,创建表采用 create 这个命令,与创建数据库是类似的,这里值得注意的是,我们定义字段是 字段名在前 字段类型在后,中间用空格隔开,每列中间用逗号隔开。

这里 varchar(10),这里面的10并不是表示10个字节,而是表示10个字符,具体大小取决于你数据库设定的字符集,要知道不同的字符集设定的每个字符大小可是不一样的!这里在JavaSE有讲到过。

同一个表中是不能存在两张名字相同的表的:

create table student(id int);
-- ERROR 1050 (42S01): Table 'student' already exists

而且如上代码可只,与列无关,纯属是表明不能相同!

表名和列名,不能和 SQL 关键字相同:

create table table (val int);
-- ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'table (val int)' at line 1

这里发现报错了,如果实在要表名或列名与关键字相同怎么办呢?可以把表名或列名使用反引号引起来就行了,但是不推荐:

create table `table`(val int);
-- Query OK, 0 rows affected (0.02 sec)

英文千千万,你何必非要跟关键字过意不去呢?

在创建表的时候也可以对字段增加说明,使用 comment 关键字:

create table student (id int comment '学号', name varchar(10) comment '姓名');
-- Query OK, 0 rows affected (0.02 sec)

使用如下指令就能查看已有表所有字段的注释了:

show full columns from student;
+-------+-------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type        | Collation       | Null | Key | Default | Extra | Privileges                      | Comment |
+-------+-------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| id    | int(11)     | NULL            | YES  |     | NULL    |       | select,insert,update,references | 学号    |
| name  | varchar(10) | utf8_general_ci | YES  |     | NULL    |       | select,insert,update,references | 姓名    |
+-------+-------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
-- 2 rows in set (0.00 sec)

注意:MySQL 中不允许创建没有任何列的表,这样的表是没有无意义的。

4.2 查看指定数据库下的所有表

show tables;
+----------------+
| Tables_in_demo |
+----------------+
| student        |
+----------------+
-- 1 row in set (0.00 sec)

那个跟 SQL 关键字重名的 table 表的我已经删了,所以这里能看见只存在一张前面刚创建的学生表,这里还是要注意,这里 tables,相比 table 是多了个 s 的,跟显示所有数据库是一样的。

由于前面操作我已经选中的 demo 数据库,所以显示指定数据库下所有表的操作是不会出错的,但是有的小伙伴可能一登录就开始查看所有的表,在没选中数据库的情况下,是会报错的:

show tables;
-- ERROR 1046 (3D000): No database selected

4.3 查看表的结构

desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
-- 2 rows in set (0.00 sec)

int(11) 这个只是显示的宽度,不会影响数据的存储,Null这一列表示该列能否为空,这个后续文章也会介绍到,key 与表的约束有关,Default 指的是该列没有插入数据默认是啥数据,Extra 额外的描述,这些内容在后续都会介绍到,这里简单看一下即可。

4.4 删除表

drop table student;
-- Query OK, 0 rows affected (0.00 sec)

跟删除库一样,仍然是个特别危险的操作,这里需要注意。

那如果没有要删除的表则会报错:

drop table hello;
-- ERROR 1051 (42S02): Unknown table 'demo.hello'

这里一样的 ERROR,能不能不让报错呢?像我们前面讲到过,报错是不好的,跟创建数据库时如果重名是一样的:

drop table if exists hello;
-- Query OK, 0 rows affected, 1 warning (0.00 sec)

下期预告:【MySQL】增删改操作(基础篇)

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

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

相关文章

java常见的异常

异常分类 Throwable 是java异常的顶级类,所有异常都继承于这个类。 Error,Exception是异常类的两个大分类。 Error Error是非程序异常,即程序不能捕获的异常,一般是编译或者系统性的错误,如OutOfMemorry内存溢出异常等。 Exc…

环境变量和进程地址空间

目录 环境变量: env:显示所有的环境变量: echo $环境变量名表示查看环境变量的值 理解环境变量: getenv:显示环境变量的值 export set命令:显示所有变量 unset取消变量: pwd:当…

Django框架之模型查询-关联查询

关联查询 查询书籍为1的所有人物信息 查询人物为1的书籍信息由一到多的访问语法&#xff1a; 一对应的模型类对象.多对应的模型类名小写_set 例&#xff1a; >>> book BookInfo.objects.get(id1) >>> book.peopleinfo_set.all() <QuerySet [<Peopl…

buntu18 安装 openpose(GPU)环境

openpose环境 搭建 很费劲&#xff0c; 需要装软件也多&#xff0c; 还必须要考虑版本的问题。我主要是参考链接 ubuntu18安装openpose详细步骤_litbo的博客-CSDN博客_ubuntu安装openpose 其中&#xff0c;我的实验中 有如下需要更改。 1、我的是 cuda-10.2 2、gcc 和g 必…

Linux下Socket编程利用多进程实现一台服务器与多台客户端并发通信

文章目录前言一、服务器 server二、客户端 client三、并发通信演示四、程序源码前言 前些日子同“ Linux应用编程 ”专栏中发布过的TCP及UDP在Linux或Windows下的通信都为单进程下的Socket编程&#xff0c;若还存在一些套接字相关函数模糊不清&#xff0c;读者可移步“Socket编…

整合K8s+SpringBoot+gRpc

本文使用K8s当做服务注册与发现、配置管理&#xff0c;使用gRpc用做服务间的远程通讯一、先准备K8s我在本地有个K8s单机二、准备service-providerpom<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.…

Python3 模块实例及演示

在前面的几个章节中我们基本上是用 python 解释器来编程&#xff0c;如果从 Python 解释器退出再进入&#xff0c;那么定义的所有的方法和变量就都消失。 为此 Python 提供了1个办法&#xff0c;把这些定义存放在文件中&#xff0c;为一些脚本或者交互式的解释器实例使用&…

[oeasy]python0085_ASCII之父_Bemer_COBOL_数据交换网络

编码进化 回忆上次内容 上次 回顾了 字符编码的 进化过程 IBM 在数字化过程中 作用 非常大IBM 的 BCDIC 有 黑历史 &#x1f604; 6-bit的 BCDIC 直接进化成 8-bit的 EBCDIC补全了 小写字母 和 控制字符 在ibm就是信息产业的年代 ibm的标准 怎么最终 没有成为 行业的标准 呢…

OCR标注方法

虽然说标注工作不是由算法工程师负责的&#xff0c;但是如何标注&#xff0c;标注要求却是由算法工程师指导标注人员去实施的&#xff0c;如果标注工作人员标注的数据有问题&#xff0c;就会出现模型训练不收敛的问题&#xff0c;导致很多问题的出现&#xff0c;所以标注要求很…

MySql调优基础知识

MySql调优 调优金字塔 系统设计&#xff1a;数据不适合放入mysql&#xff0c;es、MQ、Redis、读写分离。 mysql调优&#xff1a;主要是索引且要熟悉业务。 mysql导致慢查询的原因是因为数据太多了。 1.sql查询 1.1尽量使用覆盖索引 1.2数据表结构&#xff0c;统计汇总&am…

普通单双面板的生产工艺流程之图形转移,华秋一文告诉你

衔接上文&#xff0c;继续为朋友们分享普通单双面板的生产工艺流程。 如图&#xff0c;第五道主流程为图形转移。 图形转移的目的为&#xff1a; 利用光化学原理&#xff0c;将图形线路的形状转移到印制板上&#xff0c;再利用化学原理&#xff0c;将图形线路在印制板上制作出…

Tomcat- AJP协议文件读取/命令执行漏洞(CVE-2020-1938 / CNVD-2020-10487)

CVE-2020-1938 1.概述1.1 tomcat概述1.2 gostcat概述 - 漏洞概述2. 漏洞成因2.1 前置基础2.1.1 Tomcat Connector(连接器)2.1.2 Servlet(服务程序)2.1.3 Tomcat内部处理请求流程2.2 源码追踪分析两个利用方案的执行流程2.2.1 获取利用poc2.2.2 文件读取漏洞关键点1&#xff1a;…

CSDN城市开发者联盟、C友会期待你的加入

文章目录&#x1f31f; 课前小差&#x1f31f; chatGPT&#x1f31f; CSDN中的持续学习&#x1f31f; 23年原力计划&#x1f31f; C友会、CDC&#x1f31f; 如何关联本地的开发者&#xff1f;&#x1f31f; 写在最后&#x1f31f; 课前小差 哈喽&#xff0c;大家好&#xff0c…

2月datawhale组队学习:大数据

文章目录一、大数据概述二、 Hadoop2.1 Hadoop概述2.2 su:Authentication failure2.3 使用sudo命令报错xxx is not in the sudoers file. This incident will be reported.2.4 创建用户datawhale&#xff0c;安装java8&#xff1a;2.5 安装单机版Hadoop2.5.1 安装Hadoop2.5.2 修…

excel报表技巧:几个关于汇报演示方面的小功能

年终了&#xff0c;总结汇报避免不了。如果你的PPT还不够好&#xff0c;那就直接用Excel做汇报吧~这里有5条小技巧&#xff0c;可以帮助你最高效地展示自己的成绩报表&#xff01;想象一下&#xff0c;用SHIFTCTRLF1全屏显示你的工作表&#xff0c;配合上CtrlPageDown进行工作表…

WMS系统解决方案,数据从“人工采集”转为“自动采集”

今年以来&#xff0c;新冠疫情危机促使国内企业重新审视自我发展&#xff0c;加速了行业转型的步伐。很多制造企业放慢了规模扩张的脚步&#xff0c;应需而变&#xff0c;从规模速度型向质量效率型转型升级。纵观市场现状&#xff0c;很多制造企业面临产能过剩、成本上升、库存…

CHAPTER 4 监控全网服务器

监控全网服务器4.1 需求说明4.2 规划方案4.2.1 api接口使用&#xff08;curl&#xff09;4.3 具体实施规划4.3.1 硬件、系统、网络监控4.3.2 应用服务监控4.3.3 监控服务通用方法4.4 实施全网监控4.4.1 使用自动发现规则4.4.2 监控备份服务器1. 添加模板2. 添加应用集3. 添加监…

【观察】Solidigm P44 Pro SSD评测:原厂品质+软硬兼施=性能怪兽

众所周知&#xff0c;目前SSD&#xff08;固态硬盘&#xff09;已取代HDD&#xff08;机械硬盘&#xff09;成为电脑中常见的存储设备&#xff0c;特别是在技术创新的持续推动下&#xff0c;如今SSD的速度和效率都在不断地提高&#xff0c;从SATA2 3GB发展到SATA3 6GB&#xff…

计算机组成原理学习笔记:循环冗余校验码

循环冗余校验码 CRC 码 循环冗余校验码 (cyclic redundancy Check, CRC) 十进制除法 从熟悉的十进制出发&#xff0c;假设现在你要给另一个人传送882这样的一个10进制数据&#xff0c;为了防止传送数据的过程中某一个数据发生错误你可以和你的另一个小伙伴约定一个除数&…

英文论文(sci)解读复现【NO.5】让RepVGG再次变得更强大:一种量化感知方法

此前出了目标检测算法改进专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读发表高水平学术期刊中的SCI论文&am…