文章目录
Mysql
MySQL介绍
特点及应用
- 主要特点
- 适用于中小规模的关系型数据库系统
- 支持Linux Unix Windows等多种操作系统
- 支持Python Java Perl PHP等编程语言
- 典型应用环境
- LAMP平台, 与Apache HTTP Server 组合
- LNMP平台, 与Nginx组合
常见的MySQL管理工具
类型 | 界面 | 操作系统 | 说明 |
---|---|---|---|
mysql | 命令行 | 跨平台 | MySQL官方bundle包自带 |
MySQL-Workbench | 图形 | 跨平台 | MySQL官方提供 |
MySQL-Front | 图形 | Windows | 开源,轻量级客户端软件 |
Navicat | 图形 | Windows | 专用 功能强大 商业版 |
phpMyAdmin | 浏览器 | 跨平台 | 开源,需LAMP平台 |
安装部署MySQL
tar -xf mysql-5.7.17.tar
yum -y install mysql-community*
systemctl start mysqld # 启动服务
systemctl enable mysqld # 开机运行
systemctl status mysqld # 查看状态
netstat -ntulp | grep :3306 # 查看服务信息
ps -C mysqld # 查看进程
Mysql 相关参数
软件安装后自动创建相关目录与文件
文件 | 说明 |
---|---|
/etc/my.cnf | 主配置文件 |
/var/lib/mysql | 数据库目录 |
默认端口号 | 3306 |
进程名 | mysqld |
传输协议 | TCP |
进程所有者 | mysql |
进程所属组 | mysql |
错误日志文件 | /var/log/mysqld.log |
MySQL初始配置
初始密码登录
- 数据库管理员名为 root
- 默认仅允许root本机连接
- 首次登录密码在安装软件时随机生成
- 随机密码存储在日志文件 /var/log/mysqld.log 里
- 连接命令 : mysql -h数据库地址 -u用户 -p密码
grep 'password' /var/log/mysqld.log # 查看随机密码
mysql -u root -p密码
- 修改root密码
- 使用alter user 命令修改登录密码
- 新密码必须满足密码策略
- 管理员 root 使用新密码连接服务
密码策略
策略名称 | 验证方式 |
---|---|
0 or LOW | 长度 |
1 or MEDIUM(默认) | 长度; 数字, 小写/大写, 和特殊字符 |
2 or STRONG | 长度; 数字, 小写/大写, 和特殊字符; 字典文件 |
# 进入数据库后
show variables like "%password%"; # 查看变量
set global validate_password_policy=0; # 修改密码策略
set global validate_password_length=6; # 修改密码长度
# 修改密码
alter user user() identified by "密码";
set password for root@localhost=password("密码");
# 配置永久密码策略
vim /etc/my.cnf
... ...
[mysqld]
validate_password_policy=0
validate_password_length=6
连接mysql服务
-
连接方式 :
- 客户端连接MySQL服务的方法
- 命令行
- WEB页面
- 安装图形软件
- 编写脚本(php java python)
- 使用mysql命令
- mysql -h服务器IP -u 用户名 -p密码 [数据库名]
- quit或exit退出
- 客户端连接MySQL服务的方法
-
数据库存储流程
- 客户端把数据存储到数据库服务器上的步骤
- 连接数据库服务器
- 建库(类似于文件夹)
- 建表(类似于文件)
- 插入记录(类似于文件内容)
- 断开连接
- 客户端把数据存储到数据库服务器上的步骤
-
MySQL管理环境
- SQL命令使用规则
- SQL命令不区分字母大小写(密码、变量值除外)
- 每条SQL命令以 ; 结束
- 默认命令不支持Tab键自动补全
- \c 终止sql命令
- 常用SQL命令分类(管理数据库使用SQL 结构化查询语言)
- DDL 数据定义语言 如 : create alter drop
- DML 数据操作语言 如 : insert update delete
- DCL 数据控制语言 如 : grant revoke
- DTL 数据事务语言 如 : commit rollback savepoint
- SQL命令使用规则
MySQL基本操作
库管理命令
- 库 类似于文件夹, 用来存储表
- 可以创建多个库, 通过库名区分
- 库命名规则
- 仅可以使用数字、字母、下划线、不能纯数字
- 区分字母大小写, 具有唯一性
- 不可使用指令关键字、特殊字符
show databases; # 显示已有的库
select user(); # 显示连接用户
use 库名; # 切换库
select database 库名; # 显示当前所在的库
create database 库名; # 创建新库
show tables; # 显示已有的表
drop database 库名; # 删除库
表管理命令
# 建表 表类似于存储数据的文件
create table 库名.表名(
字段名1 类型(宽度) 约束条件,
字段名2 类型(宽度),
....)DEFAULT CHARSET=utf8; # 指定中午字符集, 可以给字段赋值中文
desc 库名.表名; # 查看表结构
drop table 库名.表名; # 删除表
记录管理命令
# 查看表记录
select * from 库名.表名;
# 插入表记录
insert into 库名.表名 values(值列表);
insert into db1.stuinfo values("jim","usa"),("lilei","china");
# 修改表记录
update 库名.表名 set 字段=值;
update db1.stuinfo set homeaddr="beijing";
# 删除表记录
delete from 表名;
MySQL 数据类型
常见信息种类
- 信息种类
- 数值型 : 体重、身高、成绩、工资
- 字符型 : 姓名、工作单位、通信住址
- 枚举型 : 兴趣爱好、性别、专业
- 日期时间型 : 出生日期、注册时间
字符类型
- 定长 : char(字符个数)
- 最大字符个数255
- 不够指定字符个数时在右边用空格补全
- 字符个数超过时, 无法写入数据
- 变长 : varchar(字符个数)
- 按数据类型时间大小分配存储空间
- 字符个数超出时, 无法写入数据
- 大文本类型 : text/blob
- 字符大于65535存储时使用
数字类型
- 整数型
类型 | 名称 | 有符号范围 | 无符号范围 |
---|---|---|---|
tinyint | 微小整数 | -128~127 | 0~255 |
smallint | 小整数 | -32768~32767 | 0~65535 |
mediumint | 中整型 | -2^23 ~ 2^23 -1 | 0~2^24 -1 |
int | 大整型 | -231~231 -1 | 0~2^32 -1 |
bigint | 极大整型 | -263~263-1 | 0~2^64-1 |
unsigned | 使用无符号存储范围 |
- 浮点型
- 格式1 : 字段名 类型;
- 格式2 : 字段名 类型(总宽度,小数位数)
类型 | 名称 |
---|---|
float | 单精度 |
double | 双精度 |
日期时间类型
-
日期时间datetime
- 范围 : 1000-01-01 00:00:00 ~ 9999-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
-
关于日期时间自段
- 当未给timestamp字段赋值时, 自动以当前系统时间赋值, 而 datetime 值为NULL
-
year类型
- 要求使用4位数赋值
- 当使用两位数赋值时 :
- 01~69 视为 2001 ~ 2069
- 70~99 视为 1970 ~ 1999
-
时间函数
- MySQL服务内置命令
- 可以使用时间函数给字段赋值
- MySQL服务内置命令
类型 | 用途 |
---|---|
curtime() | 获取当前的系统时间 |
curdate() | 获取当前的系统日期 |
now() | 获取当前系统日期和时间 |
year() | 获取年 |
month() | 获取月 |
day() | 获取日 |
date() | 获取日期 |
time() | 获取时间 |
枚举类型
-
enum 单选
- 格式 : 字段名 enum(值1,值2,值N)
- 仅能选择一个值
- 字段值必须在列表里选择
-
set 多选
- 格式 : 字段名 set(值1,值2,值N)
- 选择一个或多个
- 字段值必须在列表里选择