数据库 01day
7台机器 50-56
[root@room9pc01 ~]# clone-vm7
Enter VM number: 1
IP:192.168.4.50 /51 /52 /53 /54 /55 /56
===============================================
服务器CPU 内存 存储
操作系统的版本:W L U
rhel7
5.7
装包: 源码 RPM 包的来源 软件的版本
RDBMS NoSQL Redis Mongodb
主流数据库服务软件:Oracle DB2 MySQL MariaDB
SQL SERVER
开源软件
商业软件
跨平台
开源软件不等于免费!
------------------
关系型数据库 : 关系型数据库软件提供的数据库服务存储数据的时候必须按照预先设计好的结构去存储数据,按预定义的数据存储结构去存储数据,并且数据之间可以关联操作查询。
关系型数据库RDBMS:Oracle DB2 MySQL MariaDB SQL SERVER
非关系型数据库 : 非关系型数据库软件提供的数据库服务存 往数据库里存储数据的时候,可以不事先定义存储数据的格式,想怎么存就怎么存。(比方说我存几个值,这几个值类型都不是固定的,不用预先设定数据存储的格式! 可以自用灵活的根据你现在数据的产生的数据去存储数据)
非关系型数据库NoSQL: Redis Mongodb
NoSQL:不仅仅是SQL
开源软件
商业软件
跨平台:
Oracle DB2 跨平台,不开原
MySQL MariaDB 既开源 又跨平台!
SQL SERVER:不开原,不跨平台 纯商业软件!
rhel7 是14年发行的
在生产环境下,包不追求最新,追求最稳定版!
软件包: 生产环境中,系统ios光盘中 会把发行系统当年用到的各个常用的软件包 像apache但是没有nginx
源码 : 自定义安装,想用什么功能自己就调用什么选项,但是缺点就是你在配置的时候 想装这个包提供什么功能,你当前的操作系统 必须有对应提供功能的软件 必须装上,必须需要解决依赖关系,解决依赖关系比较麻烦。
RPM : 安装卸载比较方便,但是软件安装什么功能,安装路径等配置文件,都是别人封装好的,编译好的,直接用rpm命令安装卸载!
--------------------------------------------------
本次实验用的是 社区开原版,5.7的!
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一搭建数据库服务器
在IP地址是192.168.4.50 主机 上运行mysql数据库服务。
#####################################################
[root@room9pc01 ~]# scp '/root/桌面/mysql-5.7.17-1.el7.x86_64.rpm-bundle.tar' 192.168.4.50:/root/
[root@host50 ~]# tar -xvf mysql-5.7.17-1.el7.x86_64.rpm-bundle.tar
[root@host50 ~]# ls *.rpm
[root@host50 ~]# rm -rf mysql-community-server-minimal-5.7.17-1.el7.x86_64.rpm
[root@host50 ~]# yum -y install perl-JSON
[root@host50 ~]# rpm -Uvh mysql-community-*.rpm
[root@host50 ~]# systemctl start mysqld
[root@host50 ~]# systemctl enable mysqld
[root@host50 ~]# systemctl status mysqld
[root@host50 ~]# ps -C mysqld
[root@host50 ~]# netstat -utnlp | grep mysqld
++++【【【查看mysql服务是否起来 ,可以查看三个命令。 】】】
[root@host51 ~]# systemctl status mysqld
[root@host51 ~]# ps -C mysqld
[root@host51 ~]# ps aux | grep mysqld
主:不管什么服务 不能只根据"systemctl status XXX" 来判断!!
[root@host50 ~]# rpm -qa | grep -i mysql
[root@host50 ~]# which mysql
/usr/bin/mysql
[root@host50 ~]# rpm -qf /bin/mysql
mysql-community-client-5.7.17-1.el7.x86_64
[root@host50 ~]# ls /var/log/mysqld.log
/var/log/mysqld.log
[root@host50 ~]# grep -i password /var/log/mysqld.log
.....@localhost: uqf=pod?p3ZC #//uqf=pod?p3ZC 为初始密码 5.7版本以后都有初始密码
[root@host50 ~]# mysql -hlocalhost -uroot -p'uqf=pod?p3ZC' //通过初始密码进入数据库
.. .. ..
mysql> show databases; //通过初始密码无法进行操作,需要修改密码
mysql> set global validate_password_policy=0; 只检查密码的长度
mysql> set global validate_password_length=6; 密码长度不能小于6个字符
mysql> alter user root@"localhost" identified by "123456";
mysql> quit
Bye
[root@host50 ~]# mysql -hlocalhost -uroot -p123456 //修改后的密码再次进入数据库,验证一下。
.. ... ....
【让密码策略永久生效】
[root@host50 ~]# vim /etc/my.cnf
[mysqld]
validate_password_policy=0
validate_password_length=6
[root@host50 ~]# systemctl restart mysqld
为数据库账号修改密码:
mysqladmin [-u用户名] [-p[旧密码]] password '新密码'
=========================================
mysql> show database \c
mysql> show database/c
-> \c
mysql>
mysql> '
'> \c
'> '
-> \c
mysql>
==================================================
2.4 sql命令使用规则?
2.5 sql命令分类?
#命令不区分大小写! 以分号结尾; 默认不支持table补齐 (可以网上下载插件,不建议用)
2.6 管理数据库的sql命令
查看 show databases;
创建 create database 库名;
切换 use 库名;
删除 drop database 库名;
显示当前所在的库 select database();
– Show databases; // 显示已有的库
// 切换库
– Use 库名 ;
– Select database(); // 显示当前所在的库
– Create database 库名 ; // 创建新库
// 显示已有的表
– Show tables;
– Drop database 库名; // 删除库
库管理命令 ( 续 1)
• 数据库的命名规则
– 可以使用数字 / 字母 / 下划线,但不能纯数字
– 区分大小写,具有唯一性
– 不可使用指令关键字、特殊字符
+++++++++++++++++++++++++
++++++++++++++++++++++++++
2.7 管理表的 sql命令###
表管理命令
• 新建指定名称的表
– create table 库名 . 表名 (
字段名 1 字段类型 ( 宽度 ) 约束条件 ,
字段名 2 字段类型 ( 宽度 ) 约束条件 ,
.. ..
字段名 N 字段类型 ( 宽度 ) 约束条
);
表管理命令 ( 续 1)
• 表 类似于系统的文件
– Desc 表名 ; // 查看表结构
– Select * from 表名; // 查看表记录
– Drop table 表名 ; // 删除表
记录管理命令
• 记录 类似于文件里的行
– Select * from 表名 ; // 查看表记录
– Insert into 表名 values( 值列表 );// 插入表记录
– Update 表名 set 字段 = 值 ; // 修改表记录
– Delete from 表名 ; // 删除表记录
+++++++++++++++++++++++++++
案例
mysql> create database db1;
mysql> use db1;
Database changed
mysql> create table t1(
-> name char(15),
-> class char(7)
-> );
Query OK, 0 rows affected (0.58 sec)
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| t1 |
+---------------+
1 row in set (0.00 sec)
mysql>
mysql> desc t1;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| name | char(15) | YES | | NULL | |
| class | char(7) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.01 sec)
mysql> select * from t1;
Empty set (0.00 sec)
mysql>
mysql> insert into t1 values("libai","nsd1803"),("dufu","nsd1803");
mysql> select * from t1;
mysql> update t1 set class="nsd1809";
mysql> select * from t1;
mysql> delete from t1;
mysql> select * from t1;
mysql> show tables;
mysql> desc t1;
mysql> drop table t1;
mysql> select * from t1;
mysql> show tables;
mysql>
=======================================================
--------------------------------------------------------------------------
==============================================
mysql> show databases;
mysql> use db1;
Database changed
mysql> create table 学生信息表2(
-> 姓名 char(15),
-> 班级 char(7)
-> ) DEFAULT CHARSET=utf8;
mysql> insert into 学生信息表2 values("崔志伟","nsd1802");
mysql> select * from 学生信息表2 ;
=================================================================
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
数值类型
整数型 //默认 范围(有符号)
例如 tinyint
create table db1.t2( //范围(有符号
level tinyint
);
insert into t2 values(25);
create table db1.t3(
level tinyint unsigned /unsigned 范围(无符号)
);
insert into t3 values(251);
【浮点型】
create table db1.t4(
pay double(5,2)
);
insert into t4 values(999);
insert into t4 values(111.223);
select * from db1.t4;
整数.小数 总位数
字段名 类型
float(m,n)
++++++++++++++++++++++++++++++++++++++++++++++
字符类型】】】】】】
• 定长: char( 字符数 ) # 如果不指定字符数 默认就是1位
– 最大长度 255 字符
– 不够指定字符数时在右边用空格补齐
– 字符数断超出时,无法写入数据。
• 变长: varchar( 字符数 ) ## 如果不指定字符数 语法错误
– 按数据实际大小分配存储空间
– 字符数断超出时,无法写入数据。
65532 ??
• 大文本类型: text/blob
– 字符数大于 65535 存储时使用
char处理效率高
varchar 节省空间, 但在生产环境中多用char 少用varchar
-------------------------------------------------------------
t1 t2
name varchar () name char()
lucy lili
le le
a a
---------------------------------------------------------------------------------
create table t5(
name char(15),
emali varchar(30)
);
insert into t5 values("bob","bob@163.com"),("lucy","lucy@sina.com.cn");
select * from db1.t5;
=========================================================================
枚举类型】】】】】】】】】】
• 从给定值集合中选择单个值, ENUM
– 定义格式: enum( 值 1, 值 2, 值 N)
知
识
讲
解
• 从给定值集合中选择一个或多个值, SET
– 定义格式: set( 值 1, 值 2, 值 N)
create table t6(
name char(15),
age tinyint unsigned,
pay float(7,2),
sex enum("boy","girl","no"),
likes set("woman","money","game","eat")
);
mysql> desc db1.t6;
mysql> insert into t6 values("bob",21,2000,"no","eat,game");
Query OK, 1 row affected (0.08 sec)
mysql> select * from db1.t6;
+------+------+---------+------+----------+
| name | age | pay | sex | likes |
+------+------+---------+------+----------+
| bob | 21 | 2000.00 | no | game,eat |
| bob | 21 | 2000.00 | no | game,eat |
+------+------+---------+------+----------+
2 rows in set (0.00 sec)
mysql>
============================================================
【【【日期时间类型】】】】】
mysql> create table t7(
-> name char(15),
-> syear year,
-> birthday date,
-> up_class time,
-> party datetime
-> );
mysql> insert into t7 values("yaya",1990,20181120,083000,20180618213000);
Query OK, 1 row affected (0.05 sec)
mysql> desc db1.t7;
mysql> select * from db1.t7;
【【MySQL 内置时间函数的使用】】
使用时间函数获取数据给日期时间类型字段赋值
mysql> select now();
mysql> select year(now());
mysql> select date(now());
mysql> select month(now());
mysql> select day(now());
mysql> select time(now());
mysql> select year(20191120);
mysql> select date(20191120);
mysql> select time(20191120);
mysql> select month(20191120);
mysql> select curdate();
mysql> select curtime();
mysql>
案例: 使用函数给 t7表 赋值 (使用时间函数获取数据给日期时间类型字段赋值)
mysql> create table t7(
-> name char(15),
-> syear year,
-> birthday date,
-> up_class time,
-> party datetime
-> );
mysql> desc t7;
mysql> insert into t7 values("jing",year(19901120),date(now()),083000,now());
mysql> select * from t7;
3 rows in set (0.00 sec)
mysql>
【【【 datetime 与 timestamp的区别 】】】】
——(如果不给timestamp 赋值 默认自己写入 系统默认日期时间, datetime如果不给值,那就为空NULL)
案例::::
mysql> create table t8(
-> name char(5),
-> meetting datetime,
-> party timestamp
-> );
Query OK, 0 rows affected (0.21 sec)
mysql> desc t8;
mysql> insert into t8 values ("bob",now(),now());
mysql> select * from t8;
mysql> insert into t8(name,meetting) values ("lucy",20191120214858); 『//指定给某些字段赋值时,可以列出来 只给name,meetting 写值』
Query OK, 1 row affected (0.05 sec)
mysql> select * from t8;
mysql> insert into t8(name,party) values ("lucy",20191120214858); //指定给某些字段赋值时,可以列出来 只给name,party 写值』
Query OK, 1 row affected (0.34 sec)
mysql> select * from t8;
mysql>
注意: NULL 为空
---------------------------------------------------------------------------
数值类型宽度数 字符类型宽度 的区别
int 默认是11位宽度数
age int(2)
默认用空格补位
name char(2)
案例::::
mysql> create table t12(
-> name char(5),
-> level int(3) zerofill, //zerofill 意思是用0补位
-> money int(5) zerofill
-> );
mysql> desc t12;
mysql> insert into t12 values("swk",18,29);
Query OK, 1 row affected (0.03 sec)
mysql> select * from t12;
mysql> insert into t12 values("zbj",8,222229);
Query OK, 1 row affected (0.31 sec)
mysql> select * from t12;
mysql> insert into t12 values("ts",888,2222);
Query OK, 1 row affected (0.05 sec)
mysql> select * from t12;
mysql>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
安装 MySQL (续 2 ) 准备工作
– 停止 mariadb 服务
– 删除文件 /etc/my.cnf
– 删除数据
– 卸载软件包
[root@localhost ~]# systemctl stop mariadb
[root@localhost ~]# rm -rf /etc/my.cnf
[root@localhost ~]# rm -rf /var/lib/mysql/*
[root@localhost ~]# rpm -e --nodeps mariadb-server mariadb
警告: /var/log/mariadb/mariadb.log 已另存为 /var/log/mariadb/
mariadb.log.rpmsave
注意注意注意注意::如果mysql数据库也坏了,可以用rpm -e --nodeps跟 包 名字 》 一个一个的把包删除了,然后再重新安装。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~