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.今日总结
- 数据库多实例构建
- 数据库语句


被折叠的 条评论
为什么被折叠?



