DBA DAY01

一、数据库概述

1.1 什么是数据库

• DB , DataBase
– 数据库:依照某种数据模型进行组织并存放到存储器
的数据集合
• DBMS , DataBase Management System
– 数据库管理系统:用来操纵和管理数据库的大型服务
软件
• DBS , DataBase System
– 数据库系统:即 DB+DBMS ,指带有数据库并整合
了数据库管理软件的计算机系统

1.2 常见的数据库服务软件

                   类型

                      厂商

Oracle Database

Oracel(甲骨文)

MySQL/MariaDB

Oracel(甲骨文)

SQL Server

Microsoft(微软)

Access

Microsoft(微软)

DB2

IBM

Sybase

Sybase

PostgreSQL

加州大学伯克利分校

1.3 MySQL 的特点及应用

• 主要特点
– 适用于中小规模、关系型数据库系统
– 支持 Linux/Unix 、 Windows 等多种操作系统
– 使用 C 和 C++ 编写,可移植性强
– 通过 API 支持 Python/Java/Perl/PHP 等语言
• 典型应用环境
– LAMP 平台,与 Apache HTTP Server 组合
– LNMP 平台,与 Nginx 组合

二、构建 MySQL 服务器

2.1 MySQL 安装

1.装包

    从官网下载RPM包

    https://dev.mysql.com/downloads/mysql/

mysql一体化数据库 mysql数据库服务器_日期时间

1.1 删除系统自带mariadb mysql数据库软件
#rpm   -qa  |  grep   -i  mariadb
#systemctl  stop  mariadb

  • 先采用  rpm -e 删除查询出来的mysql包,如果要删除的包被其他软件依赖可加 --nodeps.

#rpm -e mysql包

# rpm -e --nodeps mariadb-libs    //忽略依赖关系,并删除mariadb-libs包

  • 删除包的过程不会删除mysql主配置文件,需要手动删除.

#rm  -rf  /etc/my.cnf        //mysql主配置文件

  • 删除mysql工作目录

#rm  -rf  /var/lib/mysql    //mysq的工作目录
1.2 安装mysql软件
# tar  -xf  mysql-5.7.17-1.el7.x86_64.rpm-bundle.tar
#  ls  *.rpm
#  rm  -rf   mysql-community-server-minimal-5.7.17-1.el7.x86_64.rpm

#  yum   -y   install    perl-JSON      //安装mysq需要的依赖包
#  rpm  -Uvh    mysql-community-*.rpm    (U:是升级) (以前i:是安装)
#  rpm  -qa   | grep  -i   mysql

2.修改配置文件(不需要修改配置文件 按默认配置运行即可)
ls  /etc/my.cnf

3.启动服务

systemctl   start  mysqld

# systemctl   enable  mysqld

4.查看服务进程和端口号

[root@mysql51 mysql]# ps   -C   mysqld
  PID TTY          TIME CMD

 3252 ?        00:00:00 mysqld

[root@mysql51 mysql]# netstat  -utnlp  | grep  mysqld

tcp6       0      0 :::3306                 :::*                    LISTEN      3252/mysqld         

服务名  mysqld

服务的主配置文件  /etc/my.cnf

数据目录  /var/lib/mysql

日志文件   /var/log/mysqld.log

二、数据库服务的基本使用

2.1 使用初始密码在本机连接数据库服务

• 默认的数据库管理账号
– root ,允许从 localhost 访问
– 首次登录密码在安装时随机生成
– 存储在日志文件里

grep password /var/log/mysqld.log
mysql   -hlocalhost   -uroot   -p'hqToPwaqf5,g!><'

2.2 重置本机连接密码

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

# mysql   -hlocalhost   -uroot   -p123456
mysql>  show   databases;

让密码策略永久生效
#vim  /etc/my.cnf
[mysqld]
validate_password_policy=0
validate_password_length=6
:wq
#systemctl   restart  mysqld

修改管数据库理员root本机登录密码(操作系统管理员有权限修改)
1.直接在命令行修改 
]# mysqladmin  -hlocalhost -uroot  -p   password  "新密码"

]# mysqladmin  -hlocalhost -uroot -p password   "123qqq...A"
Enter password:    当前登录密码

2.在mysql终端修改

2.1  mysql > SET PASSWORD FOR 'username'@'localhost' = PASSWORD('pass');

2.2  alter user user() identified by '密码'

3. 恢复数据管理员root本机登录密码(操作系统管理员有权限恢复)

]# systemctl  stop  mysqld
]#  vim /etc/my.cnf
[mysqld]
skip_grant_tables
:wq
]# systemctl  start  mysqld
]# mysql
mysql> 
select  host,user,authentication_string from mysql.user;

mysql> update  mysql.user   set  authentication_string=password("123456")  where  user="root"  and  host="localhost";

mysql> flush privileges;   //执行insert,update,delete操作的时候需要flush privileges
mysql> quit;

]# systemctl  stop  mysqld
]#  vim /etc/my.cnf
[mysqld]
#skip_grant_tables
:wq
]# systemctl  start  mysqld
]#mysql  -uroot  -p123456
mysql>
 

2.3 把数据存储到数据库服务器上的过程

数据存储流程
• 客户端把数据存储到服务器上的步骤
– 连接数据库服务器    
– 建库                    // 类似于系统文件夹
– 建表                    // 类似于系统文件
– 插入记录             // 类似于文件里的行
– 断开连接

2.4 sql命令分类 DDL   DML    DTL    DCL

DDL:数据库定义语言 (create、alter、drop)

DML:数据库操作语言 (insert、delete、update、select)

DCL:数据库控制语言   (grant、revoke)

DTL:数据库事物语言   (commit、rollback、savepoint)

2.5使用 mysql> 管理环境

• 操作指令类型
– MySQL 指令:环境切换、看状态、退出等控制
– SQL 指令:数据库定义 / 查询 / 操纵 / 授权语句
• 基本注意事项
– 操作指令不区分大小写(密码、变量值除外)
– 每条 SQL 指令以 ; 结束或分隔 
不支持 Tab 键自动补齐
\c 可废弃当前编写错的操作指令 

2.6 管理数据库的sql命令,及 库名的命名规则

• 库 类似于系统的文件夹
– Show databases; // 显示已有的库
– Use 库名 ;            // 切换库
– Select database(); // 显示当前所在的库
– Create database 库名 ; // 创建新库
– Show tables;                 // 显示已有的表
– Drop database 库名; // 删除库    库名的命名规则:

• 数据库的命名规则
– 可以使用数字 / 字母 / 下划线,但不能纯数字
– 区分大小写,具有唯一性
– 不可使用指令关键字、特殊字符

2.7 管理表的 sql命令

查看  mysql> show  tables;
创建  mysql> create  table  gamedb.stuinfo(
    -> name  char(10),
    -> addr  char(20)

    -> ) DEFAULT CHARSET=utf8;

永久设置:

[mysqld]

DEFAULT CHARSET=utf8

查看数据库/数据表默认编码:

mysql> show create database persondb;

mysql一体化数据库 mysql数据库服务器_数据库_02

mysql> show create table t1;

mysql一体化数据库 mysql数据库服务器_mysql一体化数据库_03

查看表记录  select   *  from   库名.表名 ;  
查看表结构  desc    库名.表名  ;

2.8  管理记录的sql命令

查看   select   *  from   库名.表名;

插入   insert    into   库名.表名  values(字段值列表);
insert into  gamedb.stuinfo values ("tom","beijing");

修改  update  库名.表名  set   字段名=值 where  条件;

update  gamedb.stuinfo  set  addr="shanghai" where name="tom";

删除
delete  from   库名.表名;
delete  from  gamedb.stuinfo;

三、mysql数据类型

3.1 常见的信息种类

• 数值型:体重、身高、成绩、工资
• 字符型:姓名、工作单位、通信住址
• 枚举型:兴趣爱好、性别
• 日期时间型:出生日期、注册时间

3.1  数值类型   (成绩  年龄   工资  )

每种类型的存储数据的范围都是固定

整数类型 (只能存储整数)

微小整型    小整型         中整型                   大整型    极大整型

tinyint      smallint      MEDIUMINT               INT         bigint

*****unsigned    使用数值类型有符号的范围。(数值类型的参数默认使用有符号的范围)

 

数值类型的宽度 是显示宽度,能不能存进变量是由字段类型决定。

int(2)=2561;是可以成功存放的。  int默认显示长度为11。可以修改为int(1)会节省内存。

数值类型:

mysql一体化数据库 mysql数据库服务器_日期时间_04

整数型字段

    --使用UNSIGNED修饰时,对应的字段只保存正数

    --数值不够指定宽度时,在左边填空格补位

    --宽度仅是显示宽度,存数值的大小由类型决定

    --使用关键字ZEROFILL时,填0代替空格补位

    --数值超出范围,报错。

create  database  studb;
use   studb;
create  table   t1(level  smallint,age  tinyint);
insert into  t1  values(1024,19),(9,21);   //插入多条记录用逗号隔开

insert into  t1  values(21.45,9.87);
select   * from  t1;

create  table   t2(
level   int     unsigned, 
age   tinyint   unsigned
);

desc   t2;
insert into  t2  values(-201,  -1);
insert into  t2  values(201,  0);
select  * from t2;

浮点型 (存储小数)

float(M,N)     

double(M,N)

M  设置总位数

N   设置小数位位数

正数.小数          总位数   整数位    小数位

18088.88            7           5             2                           

create  table   t3(
pay   float(5,2)  
);
xxx.xx
999.99
      0.00
-999.99

insert  into  t3  values(124);
insert  into  t3  values(1.24);
insert  into  t3  values(-999.99);
insert  into  t3  values(1000);
select  *  from  t3;

create  table   t4(
pay   double(7,2)  
);
xxxxx.xx
99999.99
-99999.99

3.2  字符类型

char  (255)   固定长度字符类型,不够指定字符数时在右边用空格补齐

varchar (65532)   变长字符类型

text/blob    大文本类型 (音频文件 视频文件  图片文件)

3.3 日期时间类型 

(注册时间    约会时间   开会时间   入职时间   生日)

年       year   YYYY                 2018

日期   date   YYYYMMDD     20180423

时间   time   HHMMSS          161958

日期时间 datetime/timestamp   

               YYYYMMDDHHMMSS     20180423161958

获取日期时间给对应的日期时间类型的字段赋值

获取日期时间函数

now();                    //获取当期系统的时间

year(日期时间)      //获取指定时间中的年

month(日期时间)  //获取指定时间中的月

date(日期时间)      //获取指定时间中的日期

day(日期时间)       //获取指定时间中的号(天)

time(日期时间)      //获取指定时间中的时间

 

YEAR年份的处理

默认使用4位数字表示

可以使用2位数字给year类型的字段赋值,规律如下:

01-69   20XX

70-99   19XX

datetime与timestamp 的区别?

  1. 当未给TIMESTAMP字段赋值时,自动以当前系统时间赋值,而DATETIME字段默认赋值为NULL
  2. 表结构不同    

mysql一体化数据库 mysql数据库服务器_数据库_05

3.4 枚举类型(插入记录 时 记录的值 在列举的范围内选择)

           性别    爱好    专业

enum(值列表)       单选

set(值列表)            多选     

create  table  t8(
name  char(15),
sex      enum("boy","girl","no"),
likes    set("woman","game","money","flim","eat")
);

desc   t8;
insert into t8  values
("guoxuehao","boy","game,flim,eat");
insert into t8  values("xierongyue",  3  ,"money,eat");
select   * from  t8;

#########################################################################

1  在主机 192.168.4.52~55 主机上运行mysql数据库服务并设

置数据库管理员本机登录密码123456

[root@host51 mysql]#  wget http://192.168.4.254/tool/mysql-5.7.17.tar
    [root@host51 mysql]#  tar -xf mysql-5.7.17.tar 
    [root@host51 mysql]# rpm -Uvh mysql-community-*.rpm
    [root@host51 mysql]# systemctl restart mysqld
    [root@host51 mysql]# vim  /etc/my.cnf
    [mysqld]
    validate_password_policy=0
    validate_password_length=6
    [root@host51 mysql]# systemctl   restart  mysqld
    [root@host51 mysql]# cat /var/log/mysqld.log | grep password
    [root@host51 mysql]# mysql -uroot -p'*)gw9znyU%q4'
    mysql> alter user root@'localhost' identified by '123456';
    mysql> exit
    Bye

2  在persondb库下,创建保存前任(女友或男友)信息的表,表名叫oldperson (字段定义表结构)

    mysql> create table oldperson (name char(10),sex enum("boy","girl"),height int,weight int,telephone char(11),address char(30),subject enum( "通信工程","财务管理"),likes set("跑步","篮球","瑜伽","睡觉"));

            mysql> insert into oldperson values("小绿","girl",165,45,"15270203398","江西省高安市","财务管理","睡觉,瑜伽");

            mysql> alter table oldperson rename to person;            //修改表名

            mysql> select * from person;

mysql一体化数据库 mysql数据库服务器_mysql一体化数据库_06