当前位置: 首页 > news >正文

【MySQL】数据库基础


 

目录

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】增删改操作(基础篇)

相关文章:

【MySQL】数据库基础

目录 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.…...

Microsoft Office 2021 / 2019 Direct Download Links

前言 微软Office在很长一段时间内都是最常用和最受欢迎的软件。从小型创业公司到大公司,它的使用比例相当。它可以很容易地从微软的官方网站下载。但是,微软只提供安装程序,而不提供完整的软件供下载。这些安装文件通常比较小。下载并运行后,安装的文件将从后端服务器安装M…...

XX 系统oracle RAC+ADG 数据库高可用容灾演练记录

停止备库监听,避免强制关机时切换到备库 su - grid lsnrctl stop 主库高可用重启测试 /u01/app/19c/grid/bin/crsctl stop crs sync;sync;reboot --/u01/app/19c/grid/bin/crsctl start crs 机器重启后自动起的 /u01/app/19c/grid/bin/crsctl stat res -t 主库容…...

JSP与Servlet

一、什么是JSP? JSP(java Service Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的动态技术标准。 在传统的HTML文件(*.htm 、 *.html)中加入Java程序片段(Scriptlet)和JSP标签,构成了JSP网页。 1.1 JSP页面的运行原理 客户…...

C++之迭代器

迭代器C中&#xff0c;迭代器就是类似于指针的对象&#xff0c;但比指针的功能更丰富&#xff0c;它提供了对对象的间接访问&#xff0c;每个迭代器对象代表容器中一个确定的地址。举个例子&#xff1a;void test() {vector<int> vv{1,2,3,4,5};for(vector<int>::i…...

2023-02-16:干活小计

数学公式表示学习&#xff1a; 大约耗时&#xff1a;2 hours 在做了一些工作后重读论文&#xff1a;MathBERT: A Pre-Trained Model for Mathematical Formula Understanding 这是本篇论文最重要的idea&#xff1a;Current pre-trained models neglect the structural featu…...

Linux上安装LaTeX

Linux上安装LaTeX1. 安装1.1 下载安装texlive1.2 配置中文1.3 安装XeLatex1.4 安装编辑器1.5 设置默认支持中文编译1.6 配置环境路径2. latex配置2.1 latex自动安装宏包2.2 latex手动安装宏包2.2.1. 查找包2.2.2. 生成.sty文件2.2.3. 复制到配置文件夹3. 更新包3. 卸载参考链接…...

webpack -- 无法将“webpack”项识别为 cmdlet

webpack : 无法将“webpack”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后再试一次。 1.检测是否是版本太高而只能使用脚手架进行打包 webpack4.x的打包已经不能用webpack 文件a …...

对齐与非对齐访问

对齐与非对齐访问 什么是非对齐访问 在机器指令层面&#xff0c;当尝试从不能被 N 整除 (addr % N ! 0) 的起始地址读取 N 字节的数据时即发生了非对齐内存访问。举例而言&#xff0c;从地址 0x10004 读取 4 字节是可以的&#xff0c;然而从地址 0x10005 读取 4 字节数据将会…...

基于感知动作循环的层次推理用于视觉问答

title&#xff1a;Hierarchical Reasoning Based on Perception Action Cycle for Visual Question Answering 基于感知动作循环的层次推理用于视觉问答 文章目录title&#xff1a;[Hierarchical Reasoning Based on Perception Action Cycle for Visual Question Answering](…...

python中的.nc文件处理 | 05 NetCDF数据的进一步分析

​ NetCDF数据的进一步分析 比较不同数据集、不同季节的气候数据 import os import numpy as np import pandas as pd import matplotlib.pyplot as plt import cartopy.crs as ccrs import cartopy.feature as cfeature import seaborn as sns import geopandas as gpd import…...

GGX发布全新路线图,揭示具备 Layer0 特性且可编程的跨链基建生态

据彭博社报道&#xff0c;具备跨链通信且可编程的 Layer0 基础设施协议 Golden Gate (GGX) 已进行了 两年的线下开发&#xff0c;于近日公开发布了最新的路线图&#xff0c;该路线图不仅显示了该生态在过去两年的发展历程&#xff0c;也披露了 2023 年即将实现的重要里程碑。 G…...

taro+vue3 搭建一套框架,适用于微信小程序和H5

这里写tarovue3 搭建一套框架&#xff0c;适用于微信小程序和H5TaroVue3 搭建适用于微信小程序和 H5 的框架的大致步骤&#xff1a;TaroVue3 搭建适用于微信小程序和 H5 的框架的大致步骤&#xff1a; 安装 Taro。可以在终端输入以下命令进行安装&#xff1a; npm install -g…...

C++:模板初阶(泛型编程、函数模板、类模板)

文章目录1 泛型编程2 函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则3 类模板3.1 类模板的定义格式3.2 类模板的实例化1 泛型编程 所谓泛型&#xff0c;也就是通用型的意思。 在以往编写代码时&#xff0c;我们常常…...

把数组排成最小的数 AcWing(JAVA)

输入一个正整数数组&#xff0c;把数组里所有数字拼接起来排成一个数&#xff0c;打印能拼接出的所有数字中最小的一个。 例如输入数组 [3,32,321][3,32,321]&#xff0c;则打印出这 33 个数字能排成的最小数字 321323321323。 数据范围 数组长度 [0,500][0,500]。 样例&#x…...

4.3 PBR

1. 实验目的 熟悉PBR的应用场景掌握PBR的配置方法2. 实验拓扑 PBR实验拓扑如图4-8所示: 图4-8:PBR 3. 实验步骤 (1) IP地址的配置 R1的配置 <Huawei>system-view...

hmac — 加密消息签名和验证

hmac — 加密消息签名和验证 1.概述 它的全称叫做Hash-based Message Authentication Code: 哈希消息认证码&#xff0c;从名字中就可以看出来这个hmac基于哈希函数的&#xff0c;并且还得提供一个秘钥key&#xff0c;它的作用就是用来保证消息的完整性&#xff0c;不可篡改。…...

AWS攻略——使用ACL限制访问

文章目录确定出口IP修改ACL修改主网络ACL修改入站规则修改子网ACL创建子网ACL新增入站规则新增出站规则关联子网假如我们希望限制只有公司内部的IP可以SSH登录到EC2&#xff0c;则可以考虑使用ACL来实现。 我们延续使用《AWS攻略——创建VPC》的案例&#xff0c;在它的基础上做…...

【已解决】关于 luckysheet 设置纯文本,解决日期格式回显错误的办法

目录 一、现象 二、分析 三、思考过程 五、解决 六、参考链接 一、现象 在excel里面输入内容&#xff0c;如 2023-2-17 12:00 保存后&#xff0c;传回后端的数据被转化成了 数值类型&#xff0c;这显然是一种困扰。 如图所示 二、分析 查阅了文档和一些博客发现 Lucky…...

Jackson

first you need to add dependence: gradle: implementation com.fasterxml.jackson.core:jackson-databind:2.13.1 implementation com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.1原生Jackson的使用示例: /*** 原生Jackson的使用示例*/ public class Jacks…...

字节软件测试岗:惨不忍睹的三面,幸好做足了准备,月薪19k,已拿offer

我今年25岁&#xff0c;专业是电子信息工程本科&#xff0c;19年年末的时候去面试&#xff0c;统一投了测试的岗位&#xff0c;软件硬件都有&#xff0c;那时候面试的两家公司都是做培训的&#xff0c;当初没啥钱&#xff0c;他们以面试为谎言再推荐去培训这点让我特别难受。后…...

vue使用axios发送post请求携带json body参数,后端使用@RequestBody进行接收

前言 最近在做自己项目中&#xff0c;做一个非常简单的新增用户场景&#xff0c;但是使用原生axios发送post请求的时候&#xff0c;还是踩了不少坑的。 唉&#xff0c;说多了都是泪&#xff0c;小小一个新增业务&#xff0c;在自己前后端一起开发的时候&#xff0c;硬是搞了好…...

【python百炼成魔】python之列表详解

文章目录一. 列表的概念1.1 列表是什么&#xff1f;1.2 为什么要使用列表&#xff1f;1.3 列表的定义二. 列表的增删改查操作2.1 列表的读取2.2 列表的切片2.3 列表的查询操作2.3.1 not in ,in 表达式2.3.2 列表元素遍历2.4 列表元素的增加操作2.4.1 append()的相关用法2.4.2 e…...

如何学习 Web3

在本文中&#xff0c;我将总结您可以采取的步骤来学习 Web3。从哪儿开始&#xff1f;当我们想要开始新事物时&#xff0c;我们需要一些指导&#xff0c;以免在一开始就卡住。但我们都是不同的&#xff0c;我们有不同的学习方式。这篇文章基于我学习 Web3 的非常个人的经验。路线…...

大数据框架之Hadoop:MapReduce(一)MapReduce概述

1.1MapReduce定义 MapReduce是一个分布式计算框架&#xff0c;用于编写批处理应用程序&#xff0c;是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序&#xff0c;并发运行在一…...

一文搞定python语法进阶

前言前面我们已经学习了Python的基础语法&#xff0c;了解了Python的分支结构&#xff0c;也就是选择结构、循环结构以及函数这些具体的框架&#xff0c;还学习了列表、元组、字典、字符串这些Python中特有的数据结构&#xff0c;还用这些语法完成了一个简单的名片管理系统。下…...

2019蓝桥杯真题数列求值(填空题) C语言/C++

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 给定数列 1,1,1,3,5,9,17,⋯&#xff0c;从第 4 项开始&#xff0c;每项都是前 3 项的和。 求第 20190324 项的最后 4 位数字。 运行限制 最大运行时间&#xff1a…...

spring中@Autowire和@Resource的区别在哪里?

介绍今天使用Idea写代码的时候&#xff0c;看到之前的项目中显示有warning的提示&#xff0c;去看了下&#xff0c;是如下代码?Autowire private JdbcTemplate jdbcTemplate;提示的警告信息Field injection is not recommended Inspection info: Spring Team recommends: &quo…...

算法训练营DAY54|583. 两个字符串的删除操作、72. 编辑距离

583. 两个字符串的删除操作 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/delete-operation-for-two-strings/这道题也是对于编辑距离的铺垫题目&#xff0c;是可以操作两个字符串的删除&#xff0c;使得两个字符串的字符完全相同&#xff0c;这道题可…...

【Ctfshow_Web】信息收集和爆破

0x00 信息收集 web1 直接查看源码 web2 查看不了源码&#xff0c;抓包即可看到&#xff08;JS拦截了F12&#xff09; web3 抓包&#xff0c;发送repeater&#xff0c;在响应包中有Flag字段 web4 题目提示后台地址在robots&#xff0c;访问/robots.txt看到Disallow: /fl…...

外贸都是在哪些网站做/seo排名优化方式

在《Server 层混杂信息字典表 | 全方位认识 information_schema》中&#xff0c;我们详细介绍了information_schema下的状态变量、系统变量、进程状态、字符集和校对规则等字典表&#xff0c;本期我们将为大家带来系列第五篇《InnoDB 层系统字典表 | 全方位认识 information_sc…...

在网站上做教育直播平台多少钱/淘特app推广代理

另外%f标识的数会被当成double读取&#xff0c;即取出8个字节读取。...

网站改版设计要多久/百度图片搜索

日常使用手机或电脑&#xff0c;安装卸载软件已成为家常便饭。但是&#xff0c;有木有细心的小伙伴注意过&#xff0c;手机端卸载一个几G的软件通常都是瞬间完成的&#xff0c;而电脑端却要很久的时间&#xff0c;很多时候还不能及时的卸载干净呢&#xff1f;理论上来讲&#x…...

建设优化网站/百度浏览器手机版

添加依赖 implementation "com.github.MZCretin:AutoUpdateProject:2.0.5"进行初始化 //更新库配置val updateConfig: UpdateConfig = UpdateConfig().setDebug(true) //是否是Debug模式.setBaseUrl(BaseUrl.getBaseUrl()) //当dataSourceType为DATA_SOURCE_TYPE_U…...

chinacd.wordpress.som/西安网站建设哪家好

1、持久化对象的状态 【1】临时对象&#xff08;Transient&#xff09; 在使用代理主键的情况下, OID 通常为 null不处于 Session 的缓存中在数据库中没有对应的记录 【2】持久化对象(也叫”托管”)&#xff08;Persist&#xff09; OID 不为 null位于 Session 缓存中若在数…...

淘宝客网站做的好的/网站优化排名资源

四种隔离机制不要忘记:(1,2,4,8)1.read-uncommitted:能够去读那些没有提交的数据(允许脏读的存在)2.read-committed:不会出现脏读&#xff0c;因为只有另一个事务提交才会读取来结果&#xff0c;但仍然会出现不可重复读和幻读现象。4.repeatable read:MySQL 默认。可重复读&…...