百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

数据库管理入门之三(数据库管理基础知识)

nanshan 2024-10-15 11:28 12 浏览 0 评论

一、数据导入、导出

1.1定义:把系统文件的内容存储到数据库的表里

1.2步骤:

1.2.1创建存储文件内容的表

1.2.2执行导入数据的sql命令,要求文件在指定路径下才可以导入成功

1.3相关指令:

1.3.1.在数据库里执行系统命令只需要在命令前加system即可,如:

system cp /etc/passwd /var/lib/mysql-files

1.3.2产看默认使用目录(需要导入的文件所存放的的位置)以及目录是否存在

show variables like “secure_file_priv”;

1.3.3导入数据到表的基本格式:

load data infile “目录名/文件名” into table 库名.表名 fields terminated by “列分隔符“ lines terminated by “\n(换行符)”;

ps:字段分隔符与文件内的必须一致,路径为绝对路径,导入数据的表字段类型要与文件字段匹配,需要禁用selinux。

1.3.4为导入的数据增加编号,方便管理(非必要操作)

alter table 表名 add id int(2) primary key auto_increment first;

1.3.5eg:

mysql> create table user(

-> name char(30),

-> password char(1),

-> uid int(2),

-> gid int(2),

-> cooment char(100),

-> homedir char(150),

-> shell char(50),

-> key name(name))engine=innodb default charset=latin1;

mysql> show variables like "secure_file_priv";

mysql> system cp /etc/passwd /var/lib/mysql-files

mysql> load data infile "/var/lib/mysql-files/passwd" into table user

-> fields terminated by ":"

-> lines terminated by "\n";

mysql> alter table user add

-> id int(2) primary key auto_increment first;

mysql> select * from user;

1.4修改导入目录

[root@localhost ~]# mkdir /myload ; chown mysql /myload

[root@localhost ~]# vim /etc/my.cnf

[mysqld]

secure_file_priv="/myload"

[root@localhost ~]# systemctl restart mysqld

mysql> show variables like "secure_file_priv";

1.5表记录导出(表记录存储到系统文件里,不包括字段名)

导出时无需先建立文件名,直接指定即可,不然会重复冲突导不出;

基本用法:select xx from 表 into outfile “目录名/文件名” fields terminated by “分隔符” lines terminated by “换行符”;

ps:导出的内容由sql查询语句决定,需要禁用selinux,分隔符及换行符可不设置,默认为tab;

eg:

mysql> select * from user into outfile

-> "/var/lib/mysql-files/user1.txt";

mysql> select id ,name,password from user where id <=3

-> into outfile "/var/lib/mysql-files/user2.txt"

-> fields terminated by ":"

-> lines terminated by "\n";

二、管理表记录(增删改查)

2.1插入

2.1.1基本用法:

insert into 库.表 valules (字段值列表);

2.1.2一次插入多条记录:

insert into 库.表 valules (字段值列表1),(字段值列表2)...;

2.1.3给指定字段赋值,其他字段默认为空:

insert into 库.表(字段1,字段2...) values(值1,值2...);

2.1.4注意事项:

– 字段值要与字段类型相匹配;

– 对于字符类型的字段,要用双或单引号括起来;

– 依次给所有字段赋值时,字段名可以省略;

– 只给一部分字段赋值时,必须明确写出对应的字段名称。

2.2查

2.2.1基本用法:

select 字段名列表 from 库.表 where 条件;

ps:字段名列表决定显示哪些列,条件决定显示哪些行

2.3改

2.3.1基本用法:

update 库.表 set 字段名=”值“ where 条件;

ps:不加条件即为批量改1

2.4删

2.4.1基本用法:

delete from 库.表 条件;

ps:条件可不加,即删除表内所有记录。

三、匹配条件

3.1数值比较(= > >= < <= !=)

基本格式:

where 字段名 符号 值

where 字段名 符号 字段名(两个字段的字段值都是数值)

eg:

mysql> select * from user where id = 3;

mysql> select name,uid,gid from user where uid=gid;

mysql> update user set password="F",homedir="/student" where uid < 10;

3.2字符比较(只有两种,要么等,要么不等,= !=)

基本格式:

where 字段名 符号 “值”

where 字段名 is null //匹配空

where 字段名 is not null //匹配非空

eg:

mysql> select name from user where shell="/bin/bash";

mysql> select name,shell from user where shell != "/bin/bash";

mysql> select * from user where name="mysql";//查询是否有名字为mysql的用户;

mysql> insert into user values (89,"yaya","S",null,null,"MySQL_ Server","/var/lib/mysql","/bin/false");

mysql> select name,uid from user where uid is null;

mysql> update user set uid=4008 where uid is null and name="yaya";

mysql> select name,uid from user where name="yaya";

3.3逻辑比较

逻辑与 and 多个条件必须同时成立;

逻辑或 or 多个条件中某一个成立即可;

逻辑非 ! not 取反

eg:

mysql> select name,uid,shell from user where name="root" and uid=0 and shell ="/bin/bash";

mysql> select name,uid,shell from user where name="root" or uid=7 or shell="/sbin/nologin";

ps:逻辑判断默认顺序是从前往后执行,若要优先执行,可用“()”括起要优先判断的部分;

eg:

mysql> select name,uid from user where name="root" and uid=1 or uid=3;

mysql> select name,uid from user where uid=0 or uid=3 and name="root"的结果等于:

mysql> select name,uid from user where name="root" and (uid=0 or uid=3);

3.4范围内匹配

基本用法:

where 字段名 in (值1,值2...); //与其中的值匹配的都挑出来

where 字段名not in (值1,值2,...); //不包括值1,值2...其中任何一个值

where 字段名 between 10 and 20; //在10-20的范围内,包括10和20

eg:

mysql> select name from user where name in("apache","mysql","adm","bin");

mysql> select name,shell from user

-> where shell not in ("/bin/bash","/sbin/nologin");

mysql> select name,uid from user where uid in (10,20,30,40);

mysql> select name,uid from user where uid between 1 and 10;

3.5去重显示

当实际工作中只想查看字段下的值有多少种,可以不显示字段的重复值,只显示第一次出现时的值。

基本用法:

selsect distinct shell from ....

eg:

mysql> select distinct shell from user where uid<=10;

3.6高级查询条件

3.6.1模糊匹配

基本用法:

where 字段名 like ‘通配字串’

通配符:

“_”:匹配单个字符,匹配多个则输入相应数量的“_”;

“%”:匹配0~N个字符

ps:null是空值,指没有任何数据,不算0个字符,“”算0个字符;

eg:

mysql> select name,uid from user where name like "___";//“”里为3个_;

mysql> select name,uid from user where name like "r__";

mysql> select name,uid from user where name like "a%t";

mysql> select name ,uid from user where name like '__%__';//__为2个”_”;

//条件为name至少为4个字符才符合条件;

3.6.2正则匹配

基本用法:

where 字段名 regexp ‘正则表达式’;

常用正则符号:

“.”:单个字符;

“*”:任意个字符;

“^”:以什么开头;

“$”:以什么结尾;

“[]”:范围内;

eg:

mysql> select name ,uid from user where uid regexp '....';

条件为含有4个字符的,由于正则是包含即成立,因此包括了4个字符以上的,要严格匹配4个字符,可参考如下命令:

mysql> select name ,uid from user where uid regexp '^....

;

mysql> select name,uid from user where name regexp 't

;

匹配以t结尾的;

mysql> insert into user(name) values("yaya1"),("ys32"),("ya2ya");

mysql> select name from user where name regexp '[0-9]';

匹配字段值中含有数字的;

mysql> select name from user where name regexp '[0-9]

;

匹配以数字结尾的;

3.6.3四则运算

前提:字段必须是数值类型

基本用法

select 字段名 +/-/*/除/% [as] 新字段名 where ...

update 表名 set 字段名=字段名运算方式;

eg:

mysql> alter table user add age tinyint(2) unsigned default 18 after name;

mysql> select name ,age from user;

mysql> select name,age,2018 - age as syear from user where name="root";

mysql> update user set age=age+1;

mysql> select name ,uid,gid,(uid+gid)/2 pjz from user where uid>=10 and uid<=30;

3.6.4聚集函数

mysql内值数据统计函数

前提:字段类型为数值类型

基本用法:

select 函数名(字段名) from 表名....;

函数名:

avg:求平均值;

sum:求和;

min:统计最小值;

max:统计最大值;

count:统计个数;常用于统计行号,因为字段值有多少个相当于有多少行;

eg:

mysql> select avg(uid) from user where id <=10;

mysql> select sum(uid) from user;

mysql> select min(uid) from user;

mysql> select max(uid) from user;

mysql> select count(id) from user;

mysql> select count(name) from user;

mysql> select count(gid) from user;

mysql> select count(*) from user;

ps:使用count函数时,可用*代表所有列,结果显示有值的数量,可对比最后三条命令找规律。

四、操作查询结果

4.1查询结果排序

sql查询 order by 字段名(通常时数值类型字段) [asc(升序,默认)|desc(降序)];

eg:

mysql> select uid,name from user where uid>=10 and uid <=1000 order by uid desc;

4.2查询结果分组

sql 查询 group by 字段名(通常时字符类型字段);

eg:

mysql> select shell from user where uid>=10 and uid <=1000 group by shell;

效果类似于去重;

4.3查询结果过滤(将查询得到的结果再进行抓取)

用法有3种:

sql 查询 having 条件表达式;

sql 查询 where 条件 having 条件表达式;

sql 查询 group by 字段名 having 条件表达式;

eg:

mysql> select name from user having name="mysql";

mysql> select id ,name from user where name like '%' having name is null;

mysql> select shell from user group by shell having shell="/bin/bash";

4.4 限制查询结果显示行数

sql 查询 where 条件 limit n; //显示查询结果的前n调记录;

sql 查询 where 条件 limit n,m; //从第n+1条记录开始显示m调记录;

eg:

mysql> select name,id from user where uid<=10 limit 3;

mysql> select name,id from user where uid<=10 limit 3,2;

ps:当使用n,m显示行数时,n=0时表示第一行;

五、mysql存储引擎

5.1mysql体系结构

5.2什么是mysql存储引擎?

作为可插拔式的组件提供,是mysql服务软件自带的功能程序,是处理表的处理器,在mysql服务中,不同的存储引擎有不同的功能和数据存储方式。

不同的存储引擎所建立的表在数据库目录下所建立的文件数也不一样。

5.3默认的存储引擎

mysql 5.0/5.1--->myisam;

mysql 5.5/5.6--->innodb;

5.4相关指令

mysql> show engines;//列出可用的存储引擎类型,support字段下值为default对应的引擎是默认引擎;

设置默认引擎:

修改/etc/my.cnf配置文件添加如下行然后重启服务:

[mysqld]

default-storage-engine=xxx

创建表时指定存储引擎类型eg:

mysql> create table t2(id int) engine=innodb;

查看表的存储引擎:

mysql> show create table t2;

修改表的存储引擎:

mysql> alter table t1 engine=innodb;

5.5存储引擎的特点

5.5.1 myisam特点:

1)一个表使用3个文件存储,分别是:

-.FRM存储表结构的文件

-.MYI 存储索引信息的文件

-.MYD 存储表记录(数据)的文件

2)不支持外键和事务

3)支持表级锁(给当前被访问的表加锁)

5.5.2 innodb特点:

1)一个表使用2个文件存储,分别是:

-.ibd存储数据+索引

-.frm 表结构

2)支持外键和事物和事务回滚

3)支持行级锁(只给当前被访问的那些行加锁)

5.5.3 memory特点:

数据不存储在硬盘上,存储在内存中,是一个临时表,在数据库目录下只有一个表结构文件

5.6 mysql锁机制

5.6.1 什么是mysql锁

为了解决并发访问冲突问题,对正在进行操作的表进行不同程度的上锁,限制他人访问;

5.6.2锁粒度

-行锁:对正在进行操作的行上锁,用不到的行不上锁;

-表锁:一次直接对整张表进行加锁;

-页级锁:对整个页面(mysql管理数据的基本存储单位)进行加锁;(给内存里面的东西加锁,内存里面1m为1页)

5.6.3锁类型:

-读锁:又叫共享锁,支持并发读操作,即一个客户端在进行select操作时,另一个客户端-同时访问,mysql发现该表是读锁,则说明该客户端也可以去读该表;

写锁,又叫排他锁,互斥锁,多用于insert/update/delete操作中,即一个客户端对某个表进行操作时,另一个客户端无法同时对该表进行读或修改,只能等上一个客户端操作完成,写锁自动解锁,才可以进行操作;

ps:

执行查询操作多的表适合使用myisam存储引擎,这样可以节省系统操作资源,因为myisam支持表级锁;

执行写操作多的表时则使用innodb存储引擎,这样可以加大并发访问,因为innodb支持行级锁,可以多人同时对不同行操作,但是由于上锁次数多,会消耗系统操作资源。

5.7mysql事务

5.7.1什么是事务?

一次sql操作的开始到结束的过程称为事务

5.7.2 事物回滚

在事务执行过程中,任意一步操作失败,恢复所有的操作。

5.7.3事务日志:

记录事务过程中对表执行过的每一步操作,当需要回滚时,可以通过事务日志进行回滚操作;

事务日志有3个文件,分别是:

-ibdate1:记录所有未提交的sql命令,执行回滚时就是还原这些未提交的sql命令,一旦正确提交,则被记录到ib_logfile中,无法再回滚

-ib_logfile0:所有已提交的sql命令;

-ib_logfile1所有已提交的sql命令;

典型例子:银行转账,转账任何一部操作不成功,钱都会返回账户

5.7.4事务的4个特性:

atomic:原子性

-事务的整个操作是一个不可分割的整体,要么全部成功,要么全部失败;

consistency:一致性

事务操作的前后,表中的记录没有变化;

lsolation:隔离性

事务操作是相互隔离不受影响的;

durabulity:持久性

数据一旦提交,不可改变,永久改变表数据

ps:

mysql默认设置了自动提交,设置后当用户敲下回车的瞬间,操作即被提交,因此在另一个客户端会立刻看到数据被写入,看不到提交前的隔离性,可通过自主设置不自动提交检验;

当指令报错,相当于操作失败,数据就进行回滚,返回到没有操作之前,在取消了自动提交后,也可以通过rollback进行数据回滚;

5.8相关指令及演示

5.8.1创建不同存储引擎的表,对比数据库目录下锁产生的文件

mysql> create database db3; use db3;

mysql> create table t1(id int)engine=innodb;

mysql> create table t2(id int)engine=myisam;

5.8.2 验证事务的隔离性

[root@host50 db3]# ls /var/lib/mysql/db3

db.opt t1.frm t1.ibd t2.frm t2.MYD t2.MYI

mysql> show status like 'table_lock%';

查看当前的锁状态

mysql> show variables like "%auto%";

显示与auto相关的变量,找到autocommit值为on,此为开启自动提交;

mysql> set autocommit=off;

关闭自动提交

mysql> insert into t1 values(3),(2),(10);

mysql> select * from t1;

得到结果:

此时再开一个终端进入数据库进行查看:

[root@host50 db3]# mysql -uroot -p123456 db3

在第一个终端上执行提交:

mysql> commit;

在第二个终端上进行查看:

5.8.3 验证事务回滚功能

mysql> delete from t1;

mysql> select * from t1;

Empty set (0.00 sec)

mysql> rollback;

mysql> select * from t1;

...

3 rows in set (0.00 sec)

ps:

回滚一定要发生在commit前,若提交了则无法回滚;

同样的操作在myisam存储引擎上无法实现,因为其不支持事务及事务回滚功能。

相关推荐

如何为MySQL服务器和客户机启用SSL?

用户想要与MySQL服务器建立一条安全连接时,常常依赖VPN隧道或SSH隧道。不过,获得MySQL连接的另一个办法是,启用MySQL服务器上的SSL封装器(SSLwrapper)。这每一种方法各有其...

Mysql5.7 出现大量 unauthenticated user

线上环境mysql5.7突然出现大量unauthenticateduser,进mysql,showprocesslist;解决办法有:在/etc/hosts中添加客户端ip,如192.16...

MySQL 在 Windows 系统下的安装(mysql安装教程windows)

更多技术文章MySQL在Windows系统下的安装1.下载mysql和Framework链接链接:百度网盘请输入提取码提取码:6w3p双击mysql-installer-communit...

MySql5.7.21.zip绿色版安装(mysql数据库绿色版安装)

1、去网上下载满足系统要求的版本(mysql-5.7.21-winx64.zip)2、直接解压3、mysql的初始化(1)以管理员身份运行cmd,在mysql中的bin目录下shift+右键-在...

MySQL(8.0)中文全文检索 (亲测有效)

在一堆文字中找到含有关键字的应用。当然也可以用以下语句实现:SELECT*FROM<表名>WHERE<字段名>like‘%ABC%’但是它的效率太低,是全盘扫描。...

新手教程,Linux系统下MySQL的安装

看了两三个教程。终于在哔哩哔哩找到一个简单高效的教程,成功安装,up主名叫bili逍遥bili,感兴趣可以去看看。下面这个是我总结的安装方法环境:CentOS764位1.下载安装包,个人觉得在...

麒麟服务器操作系统安装 MySQL 8 实战指南

原文连接:「链接」Hello,大家好啊,今天给大家带来一篇麒麟服务器操作系统上安装MySQL8的文章,欢迎大家分享点赞,点个在看和关注吧!MySQL作为主流开源数据库之一,被广泛应用于各种业务...

用Python玩转MySQL的全攻略,从环境搭建到项目实战全解析

这是一篇关于“MySQL数据库入门实战-Python版”的教程,结合了案例实战分析,帮助初学者快速掌握如何使用Python操作MySQL数据库。一、环境准备1.安装Python访问Pytho...

安装MySQL(中标麒麟 安装mysql)

安装MySQL注意:一定要用root用户操作如下步骤;先卸载MySQL再安装1.安装包准备(1)查看MySQL是否安装rpm-qa|grepmysql(2)如果安装了MySQL,就先卸载rpm-...

Mysql最全笔记,快速入门,干货满满,爆肝

目录一、MySQL的重要性二、MySQL介绍三、软件的服务架构四、MySQL的安装五、SQL语句六、数据库相关(DDL)七、表相关八、DML相关(表中数据)九、DQL(重点)十、数据完...

MAC电脑安装MySQL操作步骤(mac安装mysqldb)

1、在官网下载MySQL:https://dev.mysql.com/downloads/mysql/根据自己的macOS版本,选择适配的MySQL版本根据自己需求选择相应的安装包,我这里选择macO...

mysql主从(mysql主从切换)

1、本章面试题什么是mysql主从,主从有什么好处什么是读写分离,有什么好处,使用mycat如何实现2、知识点2.1、课程回顾dubboORM->MVC->RPC->SOApro...

【linux学习】以MySQL为例,带你了解数据库

做运维的小伙伴在日常工作中难免需要接触到数据库,不管是MySQL,mariadb,达梦还是瀚高等其实命令都差不多,下面我就以MySQL为例带大家一起来了解下数据库。有兴趣的小伙伴不妨评论区一起交流下...

玩玩WordPress - 环境简介(0)(玩玩网络科技有限公司)

简介提到开源博客系统,一般都会直接想到WordPress!WordPress是使用PHP开发的,数据库使用的是MySQL,一般会在Linux上运行,Nginx作为前端。这时候就需要有一套LNMP(Li...

服务器常用端口都有哪些?(服务器端使用的端口号范围)

下面为大家介绍一下,服务器常用的一些默认端口,以及他们的作用:  21:FTP服务所开放的端口,用于上传、下载文件。  22:SSH端口,用于通过命令行模式远程连接Linux服务器或vps。  23:...

取消回复欢迎 发表评论: