文章目录
一.数据库服务
1.数据库
- CPU —>内存 —>磁盘 —>数据库
- 存放数据的数据: 元数据metadata(数据的描述信息)
2.常用软件SQL & NOSQL
- 主流操作系统: Unix、Linux、Windows
- SQL: 关系型数据库
MySQL、Oracle、SQL server、DB2 - NOSQL: 基于内存的数据库
Redis、Memcached、Mongodb
3.术语
- DB:数据库
- DBMS:数据库管理系统
- DBS:数据库系统(DB+DBMS)
4.MySQL
- Mysql:
-应用最广泛的开源数据库软件
-适用于中小规模、关系型数据库系统
-应用于: LAMP或LNMP平台 - Mariadb:
-为应付MySQL可能会闭源的风险而诞生
-与mysql保持最大程度兼容
二.构建Mysql服务器
1.基础环境
主机名称: mysql50 eth0网卡:192.168.4.50
真机软件包: mysql-5.7.17.tar 关闭防火墙、SELinux
官网rpm包: http://dev.mysql.com/downloads/mysql
2.步骤
01.安装mysql软件包
tar -xf mysql-5.7.17.tar
yum -y install *.rpm
02.启动mysqld服务
systemctl start/enable mysqld
systemctl status mysqld
ss -anptu |grep :3306 ps -C mysqld #查进程
03.mysql主要参数
04.配置MySQL管理员(默认root)密码
- 首次启动服务,mysql会自动为root账户配置随机密码
grep password /var/log/mysqld.log #日志查询随机密码
- 密码策略参数:
mysql -uroot -p'密码' #使用随机密码登录,修改密码
>set global validate_password_policy=0; #只验证长度
>set global validate_password_length=6; #修改密码默认长度6
>alter user user() identified by "123456"; #修改登陆密码
#永久设置:
vim /etc/my.cnf
[mysqld]
validate_password_policy=0
validate_password_length=6
三.Mysql数据库基本管理
1.数据库操作基本流程
-连接登陆数据库 -创建数据库 -创建数据表
-插入数据记 -断开连接
- 连接 MySQL 的方法:
命令行、Web 网页(phpmysqladmin)、安装图形软件(navicat)、编写脚本(PHP、java…) - 命令:
mysql [-h服务器IP或域名 -u用户名 -p密码 数据库名称]
如: mysql -h127.0.0.1 -uroot
quit 或者 exit 退出数据库
- mysql注意事项:
操作指令不区分大小写(密码和变量除外)
每条SQL语句都以分号;结束
默认不支持Tab键补齐
\c 可以取消书写错误的命令 - 常用的SQL命令分类:
DDL数据定义语言: create创建 alter修改 drop删除 #库
DML数据操作语言: insert增 update更新 delete删 #数据
DCL数据控制语言: grant设权限 revoke回收
DTL数据事务语言: commit rollback savepoint
2.数据库指令练习
mysql -uroot -p123456
> show databases; #查看数据库
> use mysql; #切换数据库
> select database(); #查看当前数据库(所处数据库位置)
> select user(); #查看当前登录用户
> create database haha character set utf8mb4; #创建数据库
> drop database haha; #删除数据库
- 例:创建下图数据表,数据库名称为 school,数据表名称为 student
A.创建数据库、表(字段)
> show character set; #查看所有可用编码
> create database school character set utf8mb4;
> create table school.student(学号 char(20),姓名 char(20),性别 char(5),手机号 int(11),通信地址 char(50));
#查看数据表结构: desc数据表名称
> desc school.student;
B.插入数据、查看
格式: insert into 数据库名称.数据表名称 values (值列表);
> insert into school.student values('NSD181001','葫芦娃','男',1388888888,'北京');
> insert into school.student values('NSD181002','蛇精','女',1389999999,'上海'),('NSD181003','爷爷','男',1387777777,'长白山');
C.更新数据、删除
update 数据库名称.数据表名称 set 字段=值 [where条件]
> update school.student set 性别='女'; #更新所有数据
> update student set 性别='男' where 姓名='葫芦娃';
> delete from school.student where 学号='NSD181003';
> delete from school.student; #删除表中所有数据
> drop table school.student; #删除整个数据表
四.Mysql数据类型
1.数据类型
- 字符型: 姓名、地址、单位、邮箱
- 数值型: 体重、身高、成绩、工资、金额 (可计算:整数型、浮点型)
- 枚举型: 爱好、性别、专业 (选择型:单选、多选)
- 日期时间型: 出生日期、注册时间…
2.字符类型
- char(字符数):
固定长度,最大长度255字符
姓名 char(4)—>固定4字符,不够指定字符空格代替 - varchar(字符数):
可变长度,根据实际大小分配存储
姓名 char(4)—>实际大小字符,但最大4字符 - text/blob:
字符数大于65535时使用
注:字符串需要使用引号
> create table school.info(name char(4),email varchar(30));
> desc school.info; #查看表结构
> insert into school.info values('tom','tom@163.com'); #成功
> select * from school.info;
> insert into school.info values('tarena','tarena@163.com'); #tarena超过4字符,写入数据失败
3.数值类型
> create table school.num1(id tinyint,age int(3),score float(4,2));
> insert into school.num values(255,22,11.2);
#报错,tinyint:默认有符号-128~127(0~255)
> insert into num values(-126,22,14.266);
#注:范围内,写入成功;年龄3位表不够时补足:22-->022
> insert into school.num values(-125,22,143.434);
#报错,总长度 4 位(整数2 位,小数为2 位)
> insert into school.num values(-125,22,14.436); --->14.44
#整数位合法,小数位超出,系统会进行四舍五入
> create table school.num2(id tinyint unsigned,age int(3),score float(4,2)); #unsigned 无符号类型0~255
> insert into school.num2 values(255,22,22.34); #写入成功
4.日期时间类型
- datetime日期时间类型:
范围:1000-01-01 00:00:00:000000~9999-12-31 23:59:59.999999
如果不给该类型的数据赋值,则默认为NULL - timestamp日期时间类型:
范围:1970-01-01 00:00:00:000000~2038-01-19 03:14:07.999999
如果不给该类型的数据赋值,则mysql自动为其分配当前的系统时间 - 时间格式:
YYYYmmddhhmmss,或者"YYYY-mm-dd hh:mm:ss"
- date日期类型:
范围:0001-01-01~9999-12-31
默认使用4位数字表示,当只用2位数字赋值时:
01~69--->2001-2069 70~99--->1970-1999
- year年份类型:
范围:1901-2155
- time时间类型:
范围:HH:MM:SS
例: 创建学员信息表:姓名、出生日期、入学年份、上课时间、下课时间
> create table school.stuinfo(name char(5),birth datetime,
start year,begin time,end time);
> insert into schomysqlol.stuinfo
values ('tom',20011010121200,2018,0800,1800);
> insert into school.stuinfo
values ('tom','2018-01-01 21:20:00',2019,0800,1800);
> insert into school.stuinfo values ( 'lucy',20011010121200,2555,0800,1800); #报错,year范围是1901-2155
- MySQL服务内置命令:
可以使用时间函数给字段赋值
> select year(now()),month(now()),day(now());
> select now(),sysdate();
> select date("2019-12-11 22:23");
> select time("2019-12-11 22:23");
5.枚举类型(选择类型)
-enum(值1,值2,值3...) #单选项
-set(值 1,值 2,值 3...) #多选项
> create table school.tea(name char(5),
gender enum('boy','girl'),
interest set('book','film','music','football'));
> desc school.tea;
> insert into school.teavalues('tom','boy','book,film') #正常写入