常见的软件
主流操作系统:Unix,Linux,Windows
软件名 | 开源 | 跨平台 | 厂商 |
orcale | 否 | 是 | 甲骨文 |
MySQL | 是 | 是 | 甲骨文 |
sql server | 否 | 否 | 微软 |
DB2 | 否 | 是 | IBM |
Redis | 是 | 是 | 开源软件 |
Memcache | 是 | 是 | 开源软件 |
MongoDB | 是 | 是 | 开源软件 |
专业术语
DB(BataBase):数据库,依照某种数据模型进行组织并存放到存储器的数据集合
DBMS(DataBase Management System):数据库管理系, 用来操纵和管理数据库的服务软件
DBS(DataBase System):数据库系统,即DB+DBMS,指带有数据库并整合了数据库管理软件的计算机系统
起源与发展
应用最广泛的开源数据库软件,最早隶属于瑞典的MYSQL AB公司,2008年1月,MYSQL AB被Sun收购,2009年4月,Sun被Oracle收购。
崭新的开源分支MariaDB 为应付mysql可能闭源的风险而诞生,由mysql原作者Widenius主导开发,与mysql保持最大程度兼容
特点及应用
主要特点:适用于中小规模,关系型数据库,支持Linux,unix,windows等多种操作系统,支持python,Java,Perl,php等编程语言
典型应用环境:LAMP平台,与Apache HTTP Server组合。 LNMP平台,与nginx组合。
------------------------------------------------------------------------------
MySQL安装 :准备环境,安装软件,启动服务,相关参数
构建MySQL服务器
MySQL初始化配置:初始密码登录,修改root密码,修改密码策略
--------------------------------------------------- -------------------------------------------------
MySQL安装
准备环境--基本需求:
1,创建centos系统虚拟机1台
2,配置ip地址192.168.4.50
3,关闭firewalld
4,禁用selinux
5,拷贝软件 mysql-5.7.17.tar
6,配置yum源
安装软件
从官网下载rpm包
--http://dev.mysql.com/downloads/mysql
mysql-community-client //客户端应用程序
mysql-community-common //数据库和客户端库共享文件
mysql-community-devel //客户端应用程序的库和头文件
mysql-community-embeddeb //嵌入式函数库
mysql-community-embedded-compat //嵌入式兼容函数库
mysql-community-embedded-devel //头文件和库文件作为mysql的嵌入式库文件
mysql-community-libs //mysql 数据库客户端应用程序的共享库
mysql-community-libs-compat //客户端应用程序的共享兼容库
安装软件(续一)
必须安装的软件包server,client ----yum安装自动解决软件依赖
]#tar -xvf mysql-5.7.17.tar
]#yum -y install mysql-community-*.rpm
]#rpm -qa | grep -i mysql
启动服务--首次启动服务,会执行数据初始化
]#systemctl start mysqld //启动服务
]#systemctal enable mysqld //开机运行
]#systemctl status mysqld //查看运行状态
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since 日 2021-06-27 04:25:50 CST; 1min 23s ago
]#netstat -utnlp | grep :3306 查看服务器信息
]#ps -C mysqld //查看进程
相关参数--软件安装后自动创建相关目录与文件
文件 | 说明 |
/etc/my.cnf | 主配置文件 |
/var/lib/mysql | 数据库目录 |
默认端口号 | 3306 |
进程名 | Mysqld |
传输协议 | tcp |
进程所有者 | Mysql |
进程所属组 | Mysql |
错误日志文件 | /var/log/mysqld.log |
MySQL初始配置
初始密码登录
数据库管理员名为root
--默认仅允许root本机连接
--首次登录密码在安装软件时随机生成
--随机密码存储在日志文件/va/log/mysqld.log里
--连接命令 ]#mysql -h数据库地址 -u用户 -p密码
]# grep 'password' /var/log/mysqld.log //查看随机密码
2021-04-18T01:31:32.750331Z 1 [Note] A temporary password is generated for root@localhost: w-JyI#sdN8iQ
]# mysql -hlocalhost -uroot -p'w-JyI#sdN8iQ' //连接
修改密码
具体操作如下
使用alter user 命令修改登录密码
新密码必须满足密码策略
管理员root使用新密码连接服务
//修改登录密码
mysql>alter user root@"localhost" identified by "密码";
]#mysql -hlocalhost -uroot -p密码 //使用新密码登录
mysql> alter user root@"localhost" identified by "123qqq...A" //修改密码
[root@localhost ~]# mysql -uroot -p123qqq...A //用修改的密码登录
修改密码策略
策略名称 | 验证方法 |
0 or LOW | 长度 |
1 or MEDIUM | 长度;数字,小写/大写,和特殊字符 |
2 or STRONG | 字典文件 |
mysql>show variables like "%password%"; //查看变量
mysql>set global validate_password_policy=0; //修改密码策略
mysql>set gloab varidate_password_length=6; //修改密码长度
]# vim /etc/my.cnf //把策略写进配置文件,会永久有效
[mysql]
validate_password_policy=0
varidate_password_length=6
:wq
连接MySQL服务 ---连接方式
---数据存储流程
---MySQL管理环境
数据库基本权限
MySQL基本操作 ---库管理命令
---表管理命令
---记录管理命令
连接MySQL服务
连接方式
客户端连接MySQL服务的方法
1,命令行, 2,web页面, 3,安装图形软件, 4,编写脚本(php,java,python)
使用MySQL命令
--mysql -h服务器IP -u用户名 -p密码 [数据库名]
--quit或exit退出
数据存储流程
客户端把数据存储到数据库服务器上的步骤
1.连接数据库服务器 2.建库 3.建表 4.插入记录 5.断开连接
MySQL管理环境
SQL命令使用规则
--SQL命令不区分字母大小写(密码,变量值除外)
--每条SQL命令以 ; 结束
--默认命令不支持tab键自动补齐
-- \c 终止SQL命令
常用SQL命令分类
管理数据库使用SQL(结构化查询语言)
1,DDL 数据定义语言 如:create, alter, drop
2,DML 数据操作语言 如:insert,update,delete
3,DCL 数据控制语言 如:grant,revoke
4,DTL 数据事务语言 如:commit,rollback,savepoint
mysql基本操作
库管理命令
库类似于文件夹,用来存储表
--可以创建多个库,通过库名区分
--show databases; //显示已有的库
--select user(); //显示连接用户
--use 库名; //切换库
--select databases(); //显示当前所在的库
--create database 库名; //创建新库
--show tables; //显示已有的表
--drop database 库名; //删除库
库名的命名规则
--仅可以使用数字,字母,下划线,不能纯数字
--区分字母大小写,具有唯一性
--不可使用指令关键字,特殊字符
mysql> create database DB1;
Query OK, 1 row affected (10.01 sec)
mysql> create database db1;
Query OK, 1 row affected (0.00 sec)
表管理命令
建表
--表存储数据的文件
mysql>create table 库名.表名(
字段名1 类型(宽度),
字段名2 类型(宽度),
......
)DEFAULT CHARSET=utf8; //指定中文字符集,可以给字段赋值中文
mysql> create database db1;
Query OK, 1 row affected (0.00 sec)
mysql> create table db1.stuinfo(name char(15),
-> homeaddr char(20)
-> );
Query OK, 0 rows affected (0.02 sec)
表类似于文件
--desc 库名.表名; //查看表结构
--drop table 库名.表名;
mysql> desc db1.stuinfo;
+----------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| name | char(15) | YES | | NULL | |
| homeaddr | char(20) | YES | | NULL | |
+----------+----------+------+-----+---------+-------+
2 rows in set (0.08 sec)
记录管理命令
记录 类似于文件里的行
--select * from 库名.表名; //查看表记录
--insert into 库名.表名 values(值列表); //插入表记录
--update 库名.表名 set 字段=值; //修改表记录
--delete from 表名; //删除表记录
mysql> insert into db1.stuinfo values("jim","usa"),("lilei","china);
Query OK, 2 rows affected (0.02 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from db1.stuinfo;
+-------+----------+
| name | homeaddr |
+-------+----------+
| jim | usa |
| lilei | china |
+-------+----------+
2 rows in set (0.00 sec)
mysql> update db1.stuinfo set homeaddr="beijing";
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> select * from db1.stuinfo;
+-------+----------+
| name | homeaddr |
+-------+----------+
| jim | beijing |
| lilei | beijing |
+-------+----------+
2 rows in set (0.00 sec)
常见信息种类--信息种类
字符类型---定长char,变长varchar
MySQL数据类型 数值类型--整数型,浮点型
日期时间类型---类型,时间函数
枚举类型--enum,set
常见信息种类
数值型:体重,身高,成绩,工资
字符型:姓名,工作单位,通讯住址
枚举型:兴趣爱好,性别,专业
日期时间型:出生日期,注册日期
字符类型
定长char
定长:char(字符个数)
最大字符个数255
不够指定字符个数时在右边用空格键补齐
字符超出个数时,无法写入数据
mysql> create table db1.t1(
-> name char(5),
-> homeaddr char(50)
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> insert into db1.t1 values("bob","USE");
Query OK, 1 row affected (0.01 sec)
mysql> select * from db1.t1;
+------+----------+
| name | homeaddr |
+------+----------+
| bob | USE |
+------+----------+
1 row in set (0.00 sec)
mysql> desc db1.t1;
+----------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| name | char(5) | YES | | NULL | |
| homeaddr | char(50) | YES | | NULL | |
+----------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
变长varchar
变长:varchar(字符个数)
--按数据实际大小分配存储空间
--字符超出个数时,无法写入数据
大文本类型:text/blob
--字符数大于65535存储时使用
mysql> create table db1.t2( name char(5), email varchar(30) );
Query OK, 0 rows affected (0.02 sec)
mysql> insert into db1.t2 values("lucy","lucy@tedu.cn");
Query OK, 1 row affected (0.01 sec)
mysql> desc db1.t2;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name | char(5) | YES | | NULL | |
| email | varchar(30) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> select * from db1.t2;
+------+--------------+
| name | email |
+------+--------------+
| lucy | lucy@tedu.cn |
+------+--------------+
1 row in set (0.00 sec)
数值类型
整数型
只能存储整数
类型 | 名称 | 有符号范围 | 无符号范围 |
tinyint | 微小整数 | -128~127 | 0~255 |
smalint | 小整数 | -32768~32767 | 0~65535 |
mediumint | 中整数 | -2^23 ~ 2^23-1 | 0 ~ 2^24-1 |
int | 大整数 | -2^31 ~ 2^31-1 | 0 ~ 2^32-1 |
bigint | 极大整数 | -2^63 ~ 2^63-1 | 0 ~ 2^64-1 |
unsigne | 使用无符号存储范围 |
浮点型
格式1:字段名 类型;
格式2:字段名 类型(总宽度,小数位数)
类型 | 名称 | 有符号范围 | 无符号范围 |
float | 单精度 | -3.402823466E+38到-1.175494351E-38 | 1.175494351E-38到3.402823466E+38 |
double | 双精度 | -1.7976931348623157E+308到-2.2250738585072014E-308 | 2.2250738585072014E-308到1.7976931348623157E+308 |
mysql> create table db1.t3(pay float,id double);
Query OK, 0 rows affected (0.01 sec)
mysql> create table db1.t4(pay float(5,2),id double(4,2));
Query OK, 0 rows affected (0.01 sec)
mysql> desc db1.t3;
+-------+--------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------+------+-----+---------+-------+
| pay | float | YES | | NULL | |
| id | double | YES | | NULL | |
+-------+--------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> desc db1.t4;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| pay | float(5,2) | YES | | NULL | |
| id | double(4,2) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
日期时间型
类型
日期时间:datetimetime
--范围:1000-01-01 00:00:00 ~ 999-12-31 23:59:59
--格式:yyyymmddhhmmss
日期时间 timestamp
--范围:1970-01-01 00:00:00 ~ 2038-01-19 00:00:00
--格式:yyyymmddhhmmss
日期 date
--范围:0001-01-01 ~ 9999-12-31
--格式:yyyymmdd
年 year
--范围:1901~2155
--格式:yyyy
时间 time
--格式:HH:MM:SS
mysql> create table db1.t7(name char(10),up_class time,start year,party datetime);
Query OK, 0 rows affected (0.02 sec)
mysql> insert into db1.t7 values("bob",090000,1990,20200913183000);
Query OK, 1 row affected (0.00 sec)
mysql> select * from db1.t7;
+------+----------+-------+---------------------+
| name | up_class | start | party |
+------+----------+-------+---------------------+
| bob | 09:00:00 | 1990 | 2020-09-13 18:30:00 |
+------+----------+-------+---------------------+
1 row in set (0.00 sec)
关于日期时间字段
--当未给timestamp字段赋值时,自动以当前系统时间赋值,而datetime值为NULL(空)
mysql> create table db1.t8(meetting datetime,pary timestamp);
Query OK, 0 rows affected (0.03 sec)
mysql> insert into db1.t8 values(20200813091525,20210728223000);
Query OK, 1 row affected (0.00 sec)
mysql> insert into db1.t8(meetting) values(20191120223000);
Query OK, 1 row affected (0.00 sec)
mysql> insert into db1.t8(pary) values(20191120223000);
Query OK, 1 row affected (0.00 sec)
mysql> select * from db1.t8;
+---------------------+---------------------+
| meetting | pary |
+---------------------+---------------------+
| 2020-08-13 09:15:25 | 2021-07-28 22:30:00 |
| 2019-11-20 22:30:00 | 2021-07-03 09:36:36 |
| NULL | 2019-11-20 22:30:00 |
+---------------------+---------------------+
3 rows in set (0.00 sec)
year的类型
--要求使用四位数赋值
--当时用2位数赋值时:
--01 ~ 69视为 2001 ~2069
--70 ~99视为 1970 ~ 1999
mysql> insert into db1.t7 values("tom",190000,58,20200813100000);
Query OK, 1 row affected (0.00 sec)
mysql> insert into db1.t7 values("tomA",190000,88,20200813100000);
Query OK, 1 row affected (0.00 sec)
mysql> select * from db1.t7;
+------+----------+-------+---------------------+
| name | up_class | start | party |
+------+----------+-------+---------------------+
| bob | 09:00:00 | 1990 | 2020-09-13 18:30:00 |
| tom | 19:00:00 | 2058 | 2020-08-13 10:00:00 |
| tomA | 19:00:00 | 1988 | 2020-08-13 10:00:00 |
+------+----------+-------+---------------------+
3 rows in set (0.00 sec)
时间函数
MySQL服务内置命令
可以使用时间函数给字段赋值
类型 | 用途 |
curtime() | 获取当期系统时间 |
curdate() | 获取当期系统日期 |
now() | 获取当期系统日期和时间 |
year() | 获取年 |
month() | 获取月 |
day() | 获取日 |
date() | 获取日期 |
time() | 获取时间 |
mysql> select curtime();
+-----------+
| curtime() |
+-----------+
| 09:19:25 |
+-----------+
1 row in set (0.00 sec)
枚举类型
enum
enum单选
--格式:字段名 enum(值1,值2,值n)
--仅能选择一个值
--字段值必须在列表里选择
set
set多选
--格式:字段名 enum(值1,值2,值n)
--选择一个或多个值
--字段值必须在列表里选择