DBA成长之路---mysql数据库服务基础(二)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

管理表记录 


增加

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

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

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


查询

单表查询

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


条件匹配的表示方法

数值比较

        字段名 符号 值 符号:>  >=  <  <=  =  !=

        字符比较

        字段名 符号 "值"  符号: =  !=

        范围内匹配

        字段名 in (值列表)在...里

        select id,name from user where name in ("apache","root","bob");

        select id,name,uid from user where uid in (1,2,3,4);

        字段名 not in(值类表)不在...里

        select name from user where uid not in(0,1,2,3,4,5);

        字段名 between 值  and 值 在...之间(数值类型)

        select * from user where id between 10 and 15;

        select name from user where uid between 1 and 10;

        

        匹配空  is null

        字段名 is null

        匹配非空  is not null

        字段名  is not null

        select id from user where name is null;


空的定义

        insert into user(name) values (""),("null"),(null);

        select id,name from user where name="";

        select id,name from user where name="null";

        select id,name from user where name is null;

        mysql> select id,name from user where id between 45 and 47;

        +-------+----------+

        | id      | name    |

        +-------+----------+

        |  45    |               |

        | 46     | null       |

        | 47     | NULL   |

        +-------+-----------+

        3 rows in set (0.00 sec)

    

        不显示重复值

        distinct 字段名

        select shell from user;

        select distinct shell from user;

        mysql> select distinct shell from user;

        +----------------------------+

        | shell                           |

        +----------------------------+

        | /bin/bash                   |

        | /sbin/nologin             |

        | /bin/sync                    |

        | /sbin/shutdown         |

        | /sbin/halt                    |

        | /bin/false                    |

        | NULL                          |

        +----------------------------+

        7 rows in set (0.00 sec)


逻辑匹配: 有多个条件时

        逻辑与  and  多个条件必须都成立

        逻辑或or多个条件有一个成立即可

        逻辑非  !取反

        select id,name from user where name="zhangsan"and uid=500 and shell="/bin/bash";


运算操作  +  -  *  /  %

        字段名 符号  字段名

        select uid+gid as heid from user where name='root';

        select uid+gid  heid from user where name='root';


模糊查询

        where 字段名 like '表达式'

        _匹配任意一个字符 % 0个或多个字符

        select name from user where name like '____' and uid <= 10;

        select name from user where name like '%a%';

        

正则匹配

        where 字段名 regexp '正则表达式';

        . ^  $   [ ]  *

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

         

函数

        简单筛选/统计

        avg() 集合平均值

        sum()对集合的各参数求和

        min() 集合中的最小值

        max() 集合中的最大值

        count() 记录的各数

        

查询排序 

        sql查询 order by 字段名 asc/desc(降序)

        select name,uid from user where uid between 10 and 50 order by uid ;


查询分组 

        sql查询 group by 字段名

        select shell from user where uid between 10 and 50 group by shell;

        和不显示重复相似


查询限制显示行数 limit

        select shell from user where uid between 10 and 50 limit 1;

        select * from user limit 1;#显示查询的前一行

        select * from user limit 2,3;#设置显示行范围  从第2行显示(行数开始为0行) 显示3行


多表查询

        select 字段名列表 from 表名列表;笛卡尔集

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

        create table studb.t1 select name,uid,shell from user limit 3;

        create table studb.t2 select name,uid,homedir from user limit 4;

        select t1.*,t2.homedir from t1,t2 where t1.uid =t2.uid;


嵌套查询

        where 嵌套查询:把内层的查询结果做为外层查询的查询条件

        select 字段名列表 from 表名 where 条件 (select 字段名列表 from 表名 where 条件)

        select name,uid from user where uid > (select avg(uid) from user);

        select name from user where name in (select user from mysql.user);


复制表:作用:快速建表,备份表

        create table 库.表 sql查询;

        复制表

        create database dbbak;

        create table dbbak.user2 select * from user;

        复制表没有源表的属性和键值


复制表结构

        create table dbbak.user3 select * from user where 1=2;

连接查询

        左连接查询

        select 字段列表 from  表A left join 表B on 条件

        右连接查询

        select 字段列表 from  表A right join 表B on 条件

        create table studb.t3 select name,uid,shell from user limit 3;

        create table studb.t4 select name,uid,shell from user limit 5;

        mysql> select * from t3 left join t4 on t3.uid=t4.uid;#以左为主 显示

        mysql> select * from t3 right join t4 on t3.uid=t4.uid; #以右为主 显示

        

修改

    批量修改

        update 库.表 set 字段名=值,字段名='值'

        mysql> update user set age="18";

        修改指定记录字段的值

        update 库.表 set 字段名=值,字段名='值' where 条件

        mysql> update user set name="zhangsan" where id=48;

        

删除

        以行为删除单位

        delete from 库.表 where 条件;

        mysql> delete from user where shell is NULL;

        


mysql 键值(限制如何给字段赋值)

普通索引 index

        什么是索引 : 类似“一个书的目录” 树型目录结构

        索引的优点 : 加快查询的速度

        索引的缺点 : 减慢写的速度 (insert update delete);占用物理存储空间

        


使用普通索引  索引index

        索引的使用规则

        默认可以重复,可以赋NULL值

        可以由多个index字段

        把查询条件做为索引

        查看decs 表名;

        show index from 表名;

        标志 MUL

        创建

        建表时创建索引:

        mysql> create table t25(

            -> name char(10),

            -> age int,

            -> sex enum("boy","girl"),

            -> index(sex)#索引名 默认和字段名相同

            -> index(name)

            -> );

        在已有表创建索引 create index 索引名 on 表名(被赋索引的字段名)

        mysql> create index age on t21(age);

        mysql> show index from t21\G;

        Table: t21

           Non_unique: 1

             Key_name: age

         Seq_in_index: 1

          Column_name: age

            Collation: A

          Cardinality: 4

             Sub_part: NULL

               Packed: NULL

         Null: YES

           Index_type: BTREE

              Comment: 

        Index_comment: 

        

        默认使用的索引类型(Index_type):BTREE(二叉树)

        还支持 hash B+TREE

        

        删除 drop index 索引名 on 表名;

        mysql> drop index a1 on t21;


fulltext 全文索引


unique 唯一索引

一个表中有多个unique字段

可以为空 但是有值不能重复

mysql> create table t211( stu_id char(9), name char(10), sex enum('boy','girl'), unique(stu_id) );

mysql> desc t211;

key标识是UNI 

mysql> alter table t211 modify stu_id char(9) not null;

mysql> desc t211;

key标志是PRI 但是不是主键

mysql> drop index stu_id on t211;

创建 unique index

mysql> create unique index stu on t211(stu_id);



主键

        主键使用规则

        一个表中只能有一个primary key

        不允许重复 不能为空

        查看 decs 表名;

        标志 PRI

        创建 建表时创建主键:

        mysql> create table t26(

            -> name char(10),

            -> age int,

            -> likes set("a","b","c"),

            -> primary key(name)

            -> );

        mysql> create table t22(

            -> id int primary key,

            -> name char(10)

            -> );

        在已有表创建主键:

        mysql> alter table t25 add primary key(name);

        删除 alter table 表名 drop primary key;

        mysql> alter table t25 drop primary key;

        

        复合主键 多个字段一起做主键 字段的值不允许同时重复

        查看

        mysql> desc t28;

        建表时创建主键:

        mysql> create table t28(

            -> cip char(15),

            -> port smallint,

            -> status enum("allow","deny") defualt "deny",

            -> primary key(cip,port)

            -> );

        在已有表创建主键:

        mysql> alter table t28 add primary key (cip,port);

        删除

        mysql> alter table t28 drop primary key;

        主键一般 与auto_increment 连用

            字段值自动增长

        满足条件 主键 数值类型

        创建表

        mysql> create table t27(

            -> id int(2) zerofill primary key auto_increment,

            -> name char(10),

            -> class char(4),

            -> index (name)

            -> );

        删除自动增长的主键

        mysql> alter table t27 modify id int(2) unsigned zerofill not null;

        mysql> alter table t27 drop primary key;

    

外键 

        作用:限制给字段赋值的。值必须在指定表中指定字段值的范围里选择

        表的存储引擎必须是 innodb

        字段类型要一致

        被参照字段必须要是索引类型的一种

        创建命令

        foreign key(字段名) references 表名(字段名) 

        on update cascade同步更新

        on delete cascade同步删除


        update 表名 set 字段名=值  where 条件;

        delete from 表名 where 条件

        删除外键

        mysql> show create table xsb;#查看建表命令

        可以查看外键名

        alter table 表名 drop foreign key 外键名

        

        在已经创建的表上添加外键

        alter table 表名 add foreign key(字段名) references 表名(字段名) 

        on update cascade同步更新

        on delete cascade同步删除


mysql 服务的体系结构:(8个功能模块)

        连接池:检查是否可以连接mysql

       sql接口: 执行的命令 传递给mysqld

        分析器:分析语法错误

        优化器:优化执行命令

        查询缓存:数据库的物理内存划分出的 每次查询 先找查询缓存

        存储引擎

        文件系统

      管理工具:安装mysql给提供的一些软件工具

        

mysql存储引擎:


存储引擎介绍

        mysql 数据库服务软件自带的程序。

        不同的存储引擎有不同的功能和数据存储方式

        查看数据库服务支持的存储引擎

        mysql> show engines;

        | InnoDB             | DEFAULT |#default 默认存储引擎

        | MyISAM             | YES     |

常用的存储引擎

    myisam

        表.frm 表结构

        表.MYI索引信息

        表.MYD数据

        支持表级锁(锁一张表)

        不支持事务 不支持事务回滚

   innodb

        表.frm 表结构

        表.ibd表结构 索引信息

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

        支持事务 事务回滚

        事务日志文件 :记录对innodb存储引擎的表执行过的操作

        /var/lib/mysql/ib_logfile*

        

   

        锁类型:读锁 select 

         写锁insert delete update

        锁粒度:行级锁  表级锁

        锁作用:解决并发访问冲突问题

        

 事务:一次从开始访问到访问结束的过程

        事务回滚:一次数据访问 任意一步执行失败,恢复所有操作。

        事务的特性:一致性,原子性,隔离性

        最典型的事务操作:银行转账

        

        工作如何决定表使用的存储引擎

        接收写操作多的表适合使用innodb存储引擎。(并发访问大)

        接收读操作多的表适合使用myisam存储引擎。(节省资源)

        

设置数据库服务的存储引擎

        

        设置服务的默认存储引擎

        [mysqld]

        defaulf-storage-engine=myisam

        

        mysql> create table tt1(id int(2));

        mysql> show create table tt1;

        ...

        | tt1   | CREATE TABLE `tt1` (

          `id` int(2) DEFAULT NULL

        ) ENGINE=MyISAM DEFAULT CHARSET=latin1 |

        ...

        修改表的存储引擎

        alter table 表名 engine=存储引擎;

        

        设置表的存储引擎

        creat table 表名(...)engine=存储引擎;

        










本文转自 Xuenqlve 51CTO博客,原文链接:http://blog.51cto.com/13558754/2057391,如需转载请自行联系原作者
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
20天前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
64 3
|
20天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
61 2
|
1月前
|
存储 NoSQL MongoDB
基于阿里云数据库MongoDB版,微财数科“又快又稳”服务超7000万客户
选择MongoDB主要基于其灵活的数据模型、高性能、高可用性、可扩展性、安全性和强大的分析能力。
|
1月前
|
关系型数据库 MySQL 数据库
vertx 的http服务表单提交与mysql验证
本文介绍了如何使用Vert.x处理HTTP服务中的表单提交,并通过集成MySQL数据库进行验证,包括项目依赖配置、表单HTML代码和完整的Vert.x服务代码。
19 2
|
22天前
|
SQL 关系型数据库 数据库连接
"Nacos 2.1.0版本数据库配置写入难题破解攻略:一步步教你排查连接、权限和配置问题,重启服务轻松解决!"
【10月更文挑战第23天】在使用Nacos 2.1.0版本时,可能会遇到无法将配置信息写入数据库的问题。本文将引导你逐步解决这一问题,包括检查数据库连接、用户权限、Nacos配置文件,并提供示例代码和详细步骤。通过这些方法,你可以有效解决配置写入失败的问题。
48 0
|
2月前
|
SQL JavaScript 关系型数据库
Node服务连接Mysql数据库
本文介绍了如何在Node服务中连接MySQL数据库,并实现心跳包连接机制。
43 0
Node服务连接Mysql数据库
|
3月前
|
SQL 数据管理 关系型数据库
SQL与云计算:利用云数据库服务实现高效数据管理——探索云端SQL应用、性能优化、安全性与成本效益,为企业数字化转型提供全方位支持
【8月更文挑战第31天】在数字化转型中,企业对高效数据管理的需求日益增长。传统本地数据库存在局限,而云数据库服务凭借自动扩展、高可用性和按需付费等优势,成为现代数据管理的新选择。本文探讨如何利用SQL和云数据库服务(如Amazon RDS、Google Cloud SQL和Azure SQL Database)实现高效的数据管理。通过示例和最佳实践,展示SQL在云端的应用、性能优化、安全性及成本效益,助力企业提升竞争力。
72 0
|
3月前
|
关系型数据库 MySQL Java
【Azure 应用服务】App Service 无法连接到Azure MySQL服务,报错:com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
【Azure 应用服务】App Service 无法连接到Azure MySQL服务,报错:com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
172 0
|
3月前
|
Kubernetes 关系型数据库 MySQL
k8s练习--通过NFS+PV+PVC+POD,部署一个MySQL服务,并将MySQL的数据进行持久化存储
本文档介绍了如何使用Kubernetes (K8s)、NFS、PersistentVolume (PV)、PersistentVolumeClaim (PVC)和Pod来部署并实现MySQL服务的数据持久化存储。Kubernetes是一个用于自动化部署、扩展和管理容器化应用的强大平台。NFS作为一种网络文件系统协议,能够使Kubernetes集群中的Pod跨节点访问共享文件。PV和PVC机制则提供了持久化的存储解决方案,确保数据即使在Pod生命周期结束后仍得以保留。
152 0
|
3月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用问题之连接到MySQL的从库时遇到其他服务也连接到了从库,该如何处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。