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

Linux数据库:【数据库基础】【库的操作】【表的操作】

目录

一.数据库基础

1.1什么是数据库

1.2基本使用

1.2.1连接服务器

1.2.2服务器,数据库,表关系

1.2.3使用案例

1.2.4数据存储结构

​编辑

 1.3MySQL架构

1.4SQL分类

1.5存储引擎

1.5.1什么是存储引擎

1.5.2查看存储引擎

 ​编辑

1.5.3存储引擎对比 

​编辑 二.库的操作

2.1创建和删除数据库

2.2创建数据库案例

2.3字符集和校验规则

2.3.1查看系统默认的字符集和校验规则

​编辑

2.3.2查看数据库支持的字符集

2.3.3查看数据库支持的字符集校验规则 

2.3.4校验规则对数据库的影响

2.4操纵数据库

2.4.1数据库删除 

2.4.2数据库查看

​编辑

 2.4.3数据库的修改

2.4.4备份和恢复

2.4.4.1备份 

 2.4.4.2恢复

2.4.4.3注意

2.4.5查看连接情况

三.表的操作

3.1创建表

3.2查看表结构

3.3修改表

3.3.1修改表名:

 3.3.2插入数据:

 3.3.3修改表里数据

3.4删除表


一.数据库基础

1.1什么是数据库

数据库是一个用于存储和管理数据的系统。它可以帮助用户组织、检索、更新和管理大量数据。

mysql是数据库服务的客户端,mysqld是数据库服务的服务端,它的本质就是基于CS模式的网络服务。 

文件保存数据有以下几个缺点:

文件的安全性问题

文件不利于数据查询和管理

文件不利于存储海量数据

文件在程序中控制不方便

比如我们在一个普通文件里写入大量的数据(十万行十亿行),那么多的数据在普通文件里,我们如果想要管理起来这是非常麻烦的一件事,比如我要修改十亿行数据里的第一百万行,怎么搞?

所以数据库本质就是:对数据库内容存储的一套解决方案。

1.2基本使用

1.2.1连接服务器

输入:mysql -h 127.0.0.1 -P 3306 -u root -p

或者:mysql -uroot -p

注意:

如果没有写 -h 127.0.0.1 默认是连接本地

如果没有写 -P 3306 默认是连接3306端口号

端口号我们自己也可以去改。打开/etc/my.cnf文件修改。

1.2.2服务器,数据库,表关系

所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多 个数据库,一般开发人员会针对每一个应用创建一个数据库。

为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。

数据库服务器、数据库和表的关系如下:

1.2.3使用案例

我创建一个helloworld:

使用数据库:

创建数据库表: 

此时在/var/lib/mysql/helloworld下会多出两个student:

 在表中插入和查询数据:

 

我们不会主动的去修改磁盘中的数据库文件,这些工作都是mysql帮我们去做的。 

1.2.4数据存储结构

 1.3MySQL架构

MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、 Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。

1.4SQL分类

DDL【data definition language】 数据定义语言,用来维护存储数据的结构 代表指令: create, drop, alter

DML【data manipulation language】 数据操纵语言,用来对数据进行操作 代表指令: insert,delete,update

        DML中又单独分了一个DQL,数据查询语言,代表指令: select

DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务 代表指令: grant,revoke,commit  

1.5存储引擎

1.5.1什么是存储引擎

存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。 MySQL的核心就是插件式存储引擎,支持多种存储引擎。

1.5.2查看存储引擎

 

1.5.3存储引擎对比 

 二.库的操作

2.1创建和删除数据库

drop datebase (名字):

删除之后:

 本质就是在/var/lib/mysql创建和删除一个目录(文件系统层面)。

所以说反过来在/var/lib/mysql目录下使用mkdir创建一个目录,也可以在数据库中使用show databases看到。(注意理解一下就行了,不要这么干)

在创建数据库层面我们还可以:

有了就不会再创建了,这是为了安全起见。

2.2创建数据库案例

 那么我们在创建数据库的时候当然可以使用默认的,我们还可以进行指定:

这三种方式都可以使用默认的字符集utf8: 

创建一个使用utf字符集,并带校对规则的 db3 数据库。

第四种:既指明字符集又指明检验规则:

 当然上面都是针对默认的字符集和校验规则,我们也可以换其他的字符集和校验规则:

换一下这种:

这里就可以看到: 

 

2.3字符集和校验规则

2.3.1查看系统默认的字符集和校验规则

字符集使用的是utf8

校验规则utf8_ general_ ci :

2.3.2查看数据库支持的字符集

上面写建的数据库我们都没有写明要使用哪一个字符集,所以系统就使用了默认的字符集,除了系统默认的utf8,还有以下的: 

 

2.3.3查看数据库支持的字符集校验规则 

2.3.4校验规则对数据库的影响

一个实验:使用utf8的字符集创建,但是使用不同的校验规则

不区分大小写  使用utf8_general_ci

create database test1 collate utf8_general_ci;  

create之后,用use使用test1: 

desc查看表结构: 

然后往表里插入(utf8): 

select查看表里有什么: 

 这里的校验规则是不区分大小写(utf8_general_ci):

区分大小写 使用utf8_bin

这里的步骤跟上面的差不多,先使用use,再创建creat table

之后还是insert into person 

这里使用select去查找就只有小写的a: 

 上面也就只是简单的区分了一下不同的校验规则查找的差别。

2.4操纵数据库

增删查改

增:create database +(名字) charset (字符集) collate(校验规则)

适当的取用字符集和校验规则 

2.4.1数据库删除 

删:DROP DATABASE [IF EXISTS] db_ name;

执行删除之后的结果:

数据库内部看不到对应的数据库

对应的数据库文件夹被删除,级联删除,里面的数据表全部被删

注意:不要随意删除数据库  

2.4.2数据库查看

查:show databases;

有时候会频繁的使用use,需要确认自己在哪一个数据库里

 2.4.3数据库的修改

对数据库的修改主要指的是修改数据库的字符集,校验规则

假如我们现在需要把它的字符集和校验规则改为gbk格式的:

2.4.4备份和恢复

2.4.4.1备份 

语法:

# mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径
# mysqldump -P3306 -u root -p123456 -B mytest > D:/mytest.sql

我想把test1数据库里的内容进行备份: 

此时再开一个终端:

在test1.sql里就是下面的内容,里面存储的就是数据库里的所有的数据(和操作),我们当然也可以直接对数据库进行复制,但是这种做法的话是不建议的。我们还是要使用mysqldump:

 2.4.4.2恢复
mysql> source D:/mysql-5.7.22/mytest.sql;

我们先把之前的数据库里的test1给删掉:

使用source 加上刚才在另一个终端上备份的地址: 

source /root/MySQL/test1.sql

 

此时:

还原成功:

2.4.4.3注意

如果备份的不是整个数据库,而是其中的一张表,怎么做?  

 # mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql

同时备份多个数据库

# mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径

如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据 库,再使用source来还原。

2.4.5查看连接情况

show processlist

可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。以后大家发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况。  

三.表的操作

3.1创建表

CREATE TABLE table_name (
 field1 datatype,
 field2 datatype,
 field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;

说明:

field 表示列名

datatype 表示列的类型

character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准

collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准

案例: 

此时的另一台终端上的mysql目录下的user_db里就会有: 

 不同的存储引擎,创建表的文件不一样。 

users 表存储引擎是 MyISAM ,在数据目中有三个不同的文件,分别是:

users.frm:表结构

users.MYD:表数据

users.MYI:表索引

 这里换一种engine: 

在另一个终端上只会多出来这两种: 

当我们不添加engine 的时候,会默认使用innodb:

因为在/etc/my.cnt里:

3.2查看表结构

desc 表名;

 

这个可以显示更详细的表信息: 

show create table+表名

这样看不太方便的话可以加上\G来清除不想要的信息: 

3.3修改表

在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型, 表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。

3.3.1修改表名:

alter table user1 rename to user;

to:可以省掉  

 3.3.2插入数据:

 3.3.3修改表里数据

添加新字段:

alter table user add image_path varchar(128) comment '用户的头像路径' after birthday;

after指明是在表的哪个位置: 

 

 修改name(修改大小):

原本的name大小是20,现在我想改为60:

alter table user modify name varchar(60);

 注意:这里的修改是覆盖的修改,我们之前在写name这个字段的时候有对字段的描述commend。但是在我们修改之后,commend就会不见了。

 删除password列:

alter table user drop password;

 修改列名称

把name改为xingming:

注意必须把属性带上。

3.4删除表

drop table t1;

http://www.dtcms.com/a/113282.html

相关文章:

  • [SAP SD] 常用事务码
  • Linux的/proc/sys/net/ipv6/conf/(all,default,interfaceName具体网络接口名称)/ 笔记250405
  • 国产系统统信uos和麒麟v10在线打开word给表格赋值
  • HTTP查询参数示例(XMLHttpRequest查询参数)(带查询参数的HTTP接口示例——以python flask接口为例)flask查询接口
  • ConstructorResolver
  • Day2-2:前端项目uniapp壁纸实战
  • HashMap 底层原理详解
  • C++学习之LINUX网络编程-套接字通信基础
  • JWT认证服务
  • [MySQL初阶]MySQL(9)事务机制
  • 基于springboot+vue的二手车交易系统
  • Supervisor的安装和使用
  • 0101安装matplotlib_numpy_pandas-报错-python
  • Business English Certificates (BEC) 高频词汇学习
  • 将MATLAB神经网络数据转换为C/C++进行推理计算
  • Linux网络状态监控利器:netstat与ping命令详解
  • Java的Selenium的特殊元素操作与定位之select下拉框
  • RocketMQ初认识
  • C,C++语言缓冲区溢出的产生和预防
  • 【2012】【论文笔记】太赫兹波在非磁化等离子体——
  • 【国产突围!致远电子ZXDoc如何打破Vector垄断,成为新能源车研发“神器”?】
  • Xshell Plus 6下载与安装
  • 【机器学习】机器学习工程实战-第4章 特征工程
  • LabVIEW商业软件开发注意问题
  • C语言-基础语法学习
  • 【Linux系统】linux下的软件管理
  • 大数据技术发展与应用趋势分析
  • `use_tempaddr` 和 `temp_valid_lft ` 和 `temp_prefered_lft ` 笔记250405
  • web性能检测工具lighthouse
  • k8s 1.23升级1.24