day66-数据库(第二部分)

1.每日复盘与今日内容

1.1复盘

  • 数据库安装
  • 数据库运行(启动、管理等)

1.2今日内容

  • 数据库多实例构建
  • 数据库语句

2.数据库服务多实例构建

介绍:

通俗理解:

一个程序软件在一个系统环境中,可以运行启动多个不同的进程。

专业角度:

数据库占用内存和cpu,以及磁盘资源的情况,就称为一个实例资源

数据库多实例作用:

- 数据库多实例可以实现充分利用硬件资源,节省硬件或云主机购买成本

- 数据库多实例可以实现数据资源信息隔离,可以便于进行监控管理,同时增加业务稳定性

1.数据库多实例构建:

#相同版本数据库构建多实例:
#1.安装数据库服务程序
mysql 8.0.36 二进制

#2.创建多实例数据目录
mkdir -p /data/3306/data   -- mysql01实例数据目录
mkdir -p /data/3308/data   -- mysql02实例数据目录
mkdir -p /data/3309/data   -- mysql03实例数据目录
chown -R mysql.mysql /data 

#3.对每个数据库实例需要做初始化
rm -f /etc/my.cnf 
mysqld --initialize-insecure --user=mysql  --basedir=/usr/local/mysql  --datadir=/data/3306/data
mysqld --initialize-insecure --user=mysql  --basedir=/usr/local/mysql  --datadir=/data/3308/data 
mysqld --initialize-insecure --user=mysql  --basedir=/usr/local/mysql  --datadir=/data/3309/data 

#4.编写不同数据库实例配置文件
cat >/data/3306/my.cnf<<eof
[mysqld]
port=3306
user=mysql
datadir=/data/3306/data
basedir=/usr/local/mysql
socket=/tmp/mysql3306.sock
eof 

cat >/data/3308/my.cnf<<eof
[mysqld]
port=3308
user=mysql
datadir=/data/3308/data
basedir=/usr/local/mysql
socket=/tmp/mysql3308.sock
eof 

cat >/data/3309/my.cnf<<eof
[mysqld]
port=3309
user=mysql
datadir=/data/3309/data
basedir=/usr/local/mysql
socket=/tmp/mysql3309.sock
eof

#5.实现数据库多实例服务运行
mysqld --defaults-file=/data/3306/my.cnf &  
mysqld --defaults-file=/data/3308/my.cnf & 
mysqld --defaults-file=/data/3309/my.cnf &

2.不同版本数据库构建多实例:

mysql 5.7  https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.42-linux-glibc2.12-x86_64.tar.gz
mysql 5.6  https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.48-linux-glibc2.12-x86_64.tar.gz

#1.安装数据库服务程序
root@db01 ~# tar xf mysql-5.6.48-linux-glibc2.12-x86_64.tar.gz 
root@db01 ~# tar xf mysql-5.7.42-linux-glibc2.12-x86_64.tar.gz

#2.创建多实例数据目录
mkdir -p /data/3356/data   
mkdir -p /data/3357/data   
mkdir -p /data/3380/data   
chown -R mysql.mysql /data

#3.实现多实例初始化
mysqld --initialize-insecure --user=mysql  --basedir=/usr/local/mysql  --datadir=/data/3380/data
/usr/local/mysql57/bin/mysqld --initialize-insecure --user=mysql  --basedir=/usr/local/mysql57  --datadir=/data/3357/data
/usr/local/mysql56/scripts/mysql_install_db  --user=mysql  --basedir=/usr/local/mysql56  --datadir=/data/3356/data

#4.编写不同数据库实例配置文件
cat >/data/3356/my.cnf<<eof
[mysqld]
port=3356
user=mysql
datadir=/data/3356/data
basedir=/usr/local/mysql56
socket=/tmp/mysql3356.sock
eof 

cat >/data/3357/my.cnf<<eof
[mysqld]
port=3357
user=mysql
datadir=/data/3357/data
basedir=/usr/local/mysql57
socket=/tmp/mysql3357.sock
eof

cat >/data/3380/my.cnf<<eof
[mysqld]
port=3380
user=mysql
datadir=/data/3380/data
basedir=/usr/local/mysql
socket=/tmp/mysql3380.sock
eof

#5.实现数据库多实例服务运行
mysqld --defaults-file=/data/3356/my.cnf &  
mysqld --defaults-file=/data/3357/my.cnf & 
mysqld --defaults-file=/data/3380/my.cnf &

3.数据库服务语句

SQL,英文全称为Structured Query Language,中文意思是结构化查询语言(属于编程语言);

它是一种对关系数据库中的数据进行定义和操作的语言,是大多数关系数据库管理系统所支持的工业标准语言

SQL语句分类:

名称

作用

语句

DDL(Data Definition Language 数据定义语言)

针对数据库和数据表进行增删改查操作

create alter drop show

DCL(Data Control Language 数据控制语言)

针对数据库服务中的用户和权限信息进行管理

grant revoke

DML(Data Manipulation Language 数据操控语言)

针对数据表中的数据进行管理操作

insert update delete

DQL(Data Query Language 数据查询语言)

可以查询数据库中数据信息(表数据)

select

SQL语句基础知识:

1)数据类型

创建数据表时,需要根据表中的字段,给每个字段指定类型(可以限制录入数据合理性/可以有效利用磁盘空间资源)

数值类型:整数类型-int tinyint 浮点类型-float

字符类型:char-定长数据类型 varchar-变长数据类型

时间类型:yyyy-mm-dd hh:MM:SS

2)约束属性

约束信息(约束录入数据的内容)

-- 主键约束(PK约束):限制某个列中的数据不能为空,并且唯一 (便于检索)

-- 唯一约束(UQ约束):限制某个列中的数据不能重复,可以为空 (便于检索)

-- 非空约束(NN约束):限制某个列中的数据不能为空 (便于检索)

-- 外键约束(FK约束):限制多个表中数据操作顺序性 (操作业务数据表逻辑合理性)

属性信息(对约束中和数据类型定义后,未来录入数据合理性做补充)

default -- 默认属性信息设置,可以保证非空约束列,有默认值录入

auto_increment -- 实现某个数值列字段列,里面的数值信息实现自动增长录入

comment -- 给字段或表信息添加注释

unsigned -- 进行非负数据信息设置

3)数据库服务语句实践练习

DDL语句实践练习

1.数据库相关操作

#创建库 
create database 库名;
create SCHEMA 库名;
CREATE DATABASE `oldboy` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;

DEFAULT CHARACTER SET utf8mb4 -- 设置字符集(保证中文信息合理显示/影响数据存储空间占用)
COLLATE utf8mb4_0900_ai_ci;   -- 校对规则设置(可以实现大小字母信息查询/影响数据信息排序)

#查看库
show create database oldboy; -- 查看数据库完整创库语句
show databases;              -- 查看所有数据库信息(管理员)
show databases like "xiao%"; -- 过滤查看指定数据库信息
show databases like "xiao_"; -- 过滤查看指定数据库信息

修改库(了解)
alter database oldboy CHARACTER SET gbk; 

删除库(慎用)
drop database oldboy;   #删根/删库 

2.数据表相关操作

#创建数据表 
create table 名称 (
  字段01 数据类型  约束属性,
  字段02 数据类型  约束属性,
  ...
  字段n  数据类型  约束属性,
  索引信息
)引擎信息设置 字符集 校对规则信息;

CREATE TABLE `student` (
  `id` int NOT NULL COMMENT '学号信息',
  `name` varchar(45) NOT NULL COMMENT '学生名',
  `age` tinyint unsigned NOT NULL COMMENT '学生年龄',
  `gender` enum('M','F','N') NOT NULL DEFAULT 'N' COMMENT '学生性别',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='学生表';
PS:创建数据表时,需要切换数据库后才能创建,或者在创建表时在表名称前面写好库名称,用点分隔

#查看数据表 
show tables;             # 查看库中所有表信息
show create table 表名称  # 查看表的详细创建语句
desc 表名称;                    # 查看表结构信息

#修改数据表
#1.修改表名称信息
rename table t1 to waibibabu;
alter table waibibabu rename t1;
#2.修改表字段信息
#添加字段 
alter table student add column telno char(11) not null unique key comment '手机号';
#删除字段:
alter table student drop column gender telno;
#修改字段:(理解看懂语句)
ALTER TABLE student CHANGE COLUMN gender ssex ENUM('M', 'F', 'N') NOT NULL DEFAULT 'N' COMMENT '学生性别' ;
ALTER TABLE student ADD UNIQUE INDEX `gender_UNIQUE` (`gender` ASC) VISIBLE;
ALTER TABLE student CHANGE COLUMN `gender` `gender` CHAR(20) NOT NULL DEFAULT 'N' COMMENT '学生性别' ;
PS:在某些数据表中,如果已经存储了大量数据信息,可能需要先将数据迁移做修改

#删除数据表
#方式一:将表和数据都删除
drop table student;  # 会逻辑删除表,也会物理删除表文件

#方式二:将表中数据删除
truncate table student; # 先把表和数据都删除,然后重新创建新的数据表(更快速清理数据)
delete from student;  # 读取数据表中每行数据信息,逐行将读取数据信息删除(清理数据表信息效率慢)

DML语句实践练习

#插入数据(insert into)
insert into student (id,name,age,gender) values (01,'xiaoA',20,'m');
#灵活插入方式:
insert into student (name,age,telno) values ('xiaoB',20,333);
#添加数据设置字段信息时,如果字段信息可以为空、或者可以有默认值,或者设置了自增功能,相应字段信息可以省略
insert into student values (05,'xiaoC',20,'f',444);
insert into student values (07,'xiaoC',21,'f',555),(08,'xiaoD',22,'f',666);

#修改数据(update ... set)
update student set 字段01=修改信息,字段02=修改信息 where(条件子句)设置条件信息
update student set name='xiaoAA',gender='f' where id=3;

#删除数据(delete from)
delete from student where(条件子句) 
delete from student where id=1 or id=7 or id=8;
delete from student where id in (1,7,8);

DQL语句实践练习

#创建测试数据信息:
mysql -uroot -p123123 -S /tmp/mysqlabc.sock<world.sql  -- 导入测试数据
mysql> desc city;
+-------------+----------+------+-----+---------+----------------+
| Field       | Type     | Null | Key | Default | Extra          |
+-------------+----------+------+-----+---------+----------------+
| ID          | int      | NO   | PRI | NULL    | auto_increment |
| Name        | char(35) | NO   |     |         |                |
| CountryCode | char(3)  | NO   | MUL |         |                |
| District    | char(20) | NO   |     |         |                |
| Population  | int      | NO   |     | 0       |                |
+-------------+----------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

#方式一:实现单表数据信息查询
#基础方式查询
#需求01:查询中国的所有城市信息,中国代码信息 ”CHN”
select CountryCode,Name from city where countrycode='chn'; -- 等值条件查询数据
#需求02:
#查询大于700万人的所有城市信息
select Name,Population from city where Population>7000000;
#查询大于500万人到700万人数之间的所有城市信息
select Name,Population from city where Population>5000000 and Population<7000000; 
#and语句表示,根据第一个条件先将数据信息过滤,然后将过滤后的数据信息做后面条件进一步过滤
#or 语句表示,根据每个条件信息分别进行数据过滤,最后将过滤后的结果进行合并整合
select Name,Population from city where population between 5000000 and 7000000; 
# 范围条件查询数据 范围符号 逻辑符号 and or 数值区间关键字 between xxx and xxx;
#需求03:
#将中国的城市名称是A字母开头的信息做输出显示
select countryCode,name from city where name like "a%";
# 实现条件信息模糊查询
#需求04:
#将中国的北上广深四个城市的人口信息做输出显示
select name,population from city where name in ('Peking','shanghai','shenzhen','guangzhou');
# 某个列多个信息查询,可以使用in/not in实现列表方式查询
#需求05:
#获取中国境内有多少个省份信息
select distinct District from city where countrycode='chn';
# 某个列信息可以实现去重查询

4.今日总结

  • 数据库多实例构建
  • 数据库语句

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值