• DB , DataBase
– 数据库:依照某种数据模型进行组织并存放到存储器
的数据集合
• DBMS , DataBase Management System
– 数据库管理系统:用来操纵和管理数据库的大型服务
软件
• DBS , DataBase System
– 数据库系统:即 DB+DBMS ,指带有数据库并整合
了数据库管理软件的计算机系统
类型 | 厂商 |
Oracle Database | Oracel(甲骨文) |
MySQL/MariaDB | Oracel(甲骨文) |
SQL Server | Microsoft(微软) |
Access | Microsoft(微软) |
DB2 | IBM |
Sybase | Sybase |
PostgreSQL | 加州大学伯克利分校 |
• 主要特点
– 适用于中小规模、关系型数据库系统
– 支持 Linux/Unix 、 Windows 等多种操作系统
– 使用 C 和 C++ 编写,可移植性强
– 通过 API 支持 Python/Java/Perl/PHP 等语言
• 典型应用环境
– LAMP 平台,与 Apache HTTP Server 组合
– LNMP 平台,与 Nginx 组合
1.装包
从官网下载RPM包
https://dev.mysql.com/downloads/mysql/
1.1 删除系统自带mariadb mysql数据库软件
#rpm -qa | grep -i mariadb
#systemctl stop mariadb
#rpm -e mysql包
# rpm -e --nodeps mariadb-libs //忽略依赖关系,并删除mariadb-libs包
#rm -rf /etc/my.cnf //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
• 默认的数据库管理账号
– root ,允许从 localhost 访问
– 首次登录密码在安装时随机生成
– 存储在日志文件里
grep password /var/log/mysqld.log
mysql -hlocalhost -uroot -p'hqToPwaqf5,g!><'
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>
数据存储流程
• 客户端把数据存储到服务器上的步骤
– 连接数据库服务器
– 建库 // 类似于系统文件夹
– 建表 // 类似于系统文件
– 插入记录 // 类似于文件里的行
– 断开连接
DDL:数据库定义语言 (create、alter、drop)
DML:数据库操作语言 (insert、delete、update、select)
DCL:数据库控制语言 (grant、revoke)
DTL:数据库事物语言 (commit、rollback、savepoint)
• 操作指令类型
– MySQL 指令:环境切换、看状态、退出等控制
– SQL 指令:数据库定义 / 查询 / 操纵 / 授权语句
• 基本注意事项
– 操作指令不区分大小写(密码、变量值除外)
– 每条 SQL 指令以 ; 结束或分隔
不支持 Tab 键自动补齐
\c 可废弃当前编写错的操作指令
• 库 类似于系统的文件夹
– Show databases; // 显示已有的库
– Use 库名 ; // 切换库
– Select database(); // 显示当前所在的库
– Create database 库名 ; // 创建新库
– Show tables; // 显示已有的表
– Drop database 库名; // 删除库 库名的命名规则:
• 数据库的命名规则
– 可以使用数字 / 字母 / 下划线,但不能纯数字
– 区分大小写,具有唯一性
– 不可使用指令关键字、特殊字符
查看 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> show create table t1;
查看表记录 select * from 库名.表名 ;
查看表结构 desc 库名.表名 ;
查看 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;
• 数值型:体重、身高、成绩、工资
• 字符型:姓名、工作单位、通信住址
• 枚举型:兴趣爱好、性别
• 日期时间型:出生日期、注册时间
每种类型的存储数据的范围都是固定
整数类型 (只能存储整数)
微小整型 小整型 中整型 大整型 极大整型
tinyint smallint MEDIUMINT INT bigint
*****unsigned 使用数值类型有符号的范围。(数值类型的参数默认使用有符号的范围)
数值类型的宽度 是显示宽度,能不能存进变量是由字段类型决定。
int(2)=2561;是可以成功存放的。 int默认显示长度为11。可以修改为int(1)会节省内存。
数值类型:
整数型字段
--使用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
char (255) 固定长度字符类型,不够指定字符数时在右边用空格补齐
varchar (65532) 变长字符类型
text/blob 大文本类型 (音频文件 视频文件 图片文件)
(注册时间 约会时间 开会时间 入职时间 生日)
年 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 的区别?
性别 爱好 专业
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;