1.MySQL概述
1.什么是数据库
数据库是一个存储数据的仓库
2.都有那些公司在用数据库
金融机构、游戏网站、购物网站、论坛网站...
3.提供数据库服务的软件
1) 软件分类
MySQL、Mariadb、SQL_Server、Oracle、DB2、MongoDB...
2)生产环境中,如何选择使用哪个数据库
1.是否开源
开源软件:MySQL、Mariadb MongoDB
商业软件:Oracle、DB2 SQL_Server
2.是否跨平台
1.跨平台:
不跨平台:SQL_Server
3.公司的类型
商业软件:政府部门,金融机构
开源软件:游戏网站,购物网站,论坛网站
4.MySQL特点
1.关系型数据库
1.关系型数据库的特点
1.数据是以行和列的形式存储
2.表中的每一行叫一条记录
3.表中的每一列叫一个字段
4.表和表之间的逻辑关联叫关系
示例
1.关系型数据库存储
表1 学生信息表
姓名 年龄 班级
星矢 25 三班
水冰月 25 六班
表2 班级信息表
班级 班主任
三班 大空翼
六班 松人
2.非关系型数据库存储
{"姓名":"星矢","年龄":25,"班级":"三班","班主任":"大空翼"}
{"姓名":"水冰月","年龄":25,"班级":"六班","班主任":"松人"}
2.跨平台
可以在Unix Linux windows上运行数据库服务
3.支持多种编程语言
python java php ...
5.数据库软件 数据库 数据仓库
1.数据库软件
是一种软件,可以看得见,可操作,来实现数据库逻辑功能
2.数据库
是一种逻辑概念,用来存放数据的仓库,通过数据库软件来实现,侧重存储
3.数据仓库
数据仓库主要用于数据挖掘和数据分析
网购:
数据库: user --> 用户名和密码
数据仓库:哪个时间段用户登录量最多,哪个用户一年购物最多...
2.MySQL安装
1.Ubuntu安装MySQL服务
1.安装服务段
sudo apt-get install mysql-server
2.安装客户端
sudo apt-get install mysql-client
3.Ubuntu安装软件
sufo apt-get update
sufo apt-get -f install 修复依赖关系
sufo apt-get install 软件包
2.windows安装MySQL服务
1.下载MySQL安装包(windows)
mysql-installer***5.7.***.msi
2.双击 按照教程安装
3.启动和连接MySQL服务
1.服务端启动
sudo /etc/init.d/mysql start #启动
sudo /etc/init.d/mysql stop #停止
sudo /etc/init.d/mysql reststart #重启
sudo /etc/init.d/mysql status #查看当前状态
sudo /etc/init.d/mysql reload #重新加载配置文件
2.客户端连接
1.命令格式
mysql -h主机地址 -u用户名 -p密码
mysql -hlocalhost -uroot -p123456
2.本地连接可省略 -h 选项
mysql -uroot -p123456
4.基本SQL命令
1. SQL命令的使用规则
1.每条SQL命令必须以 ; 结尾
2.SQL命令不区分字母大小写
3.使用 \c终止当前命令的执行
2.库的管理
1.库的基本操作
1.查看已有的库
show databases;
2.创建库
create database 库名 [character set utf8];
3.查看创建库的语句(字符集)
show create database 库名;
4.查看当前所在库
select database();
5.切换库
use 库名;
6.查看库中已有表
show tables;
7.删除库
drop database 库名;
2.库的命名规则
1.数字 字符 __ 但是不能是纯数字
2.库名区分字母大小写
3.不能使用特殊字符和mysql关键字
3.表的管理
1.表的基本操作
1.创建表(指定字符集)
create table 表名(
字段名1 数据类型,
字段名2 数据类型,
字段名3 数据类型
)character set utf8;
2.查看创建表的语句(字符集)
show create table 表名;
3.查看表结构
desc 表名;
4.删除表
drop table 表名;
4.注意
1.所有的数据都是以文件的形式存放在数据库目录
/var/lib/mysql
5.表记录的管理
1.在表中插入记录
1.insert into 表名 values(值1),(值2),(值3),...;
2.insert into 表名(字段名1,字段名2)values(),(),...;
2.查询表记录
1.select * from 表名 [where 条件];
2.select 字段名1,字段名2 from 表名 [where 条件];
5.如何更改默认字符集
1.方法
通过更改MySQL配置文件实现
2.步骤
1.获取root
sudo -i
2.备份配置文件
cd /etc/mysql/mysql.conf.d/
cp mysqld.cnf mysqld.cnf.bak
3.更改mysqld.cnf配置
sub1 mysqld.cnf
[mysqld]
character_set_server = utf8
4.重启mysql服务
sudo /etc/init.d/mysql restart
6.客户端把数据存储到数据库服务器上的过程
1.先连接到数据库服务器
2.选择库
3.创建或者修改表
4.断开与数据库的连接 exit; | quit; | \q ;
7.数据类型
1.数值类型
1.整型(有符号 和 无符号unsigned)
1. int 大整型(4个字节)
0~2 ** 32 -1 (42亿多)
2.tinyint 微小整形(1个字节)
1.有符号(signed)
2.无符号(unsigned) : 0~255
age tinyint unsigned
3. bigint 极大整型(8个字节)
2.浮点型
1.float(4个字节,最多显示7个有效位)
1.用法
字段名float(m,n) m:总位数,n:小数位位数
float(5,2) 取值范围??? -999.99 ~ 999.99
2.decimal(最多显示28个有效为)
1.用法
字段名 decimal(m,n)
2.存储空间(整数部分和小数部分分开存储)
规则:将9的倍数包装成4个字节
余数 字节
1-2 1
3-4 2
5-6 3
7-8 4
decimal(19,9)
整数部分: 10/9=商1 4字节+1字节=5字节
小数部分: 9/9=商1 4字节+0字节=4字节
2.字符类型
1.char(定长)(1-255)
char(宽度值)
2.varchar(变长)(1-65535)
varchar(宽度值)
3.char和varchar的特点
1.char : 浪费存储空间,性能高
2.varchar : 节省存储空间,性能低
4.text / longtest(4G)
3.数值类型的宽度和字符类型的宽度区别
1.数值类型宽度为显示宽度,只用于select查询显示,和占用存储空间大小无关,用zerofill来显示效果
id int(3) zerofill,
2.字符类型的宽度超过则无法存储
4.枚举类型
1.定义
字段值只能在列举的范围内选择
2.字段名 enum(值1,值2,...) #单选
字段名 set(值1,值2,...) #多选 "值1,值2,值3..."
插入记录的时候:"girl,Python,Study"
5.日期时间类型
8.表字段操作
1.语法:alter table 表名 执行动作;
2.添加字段(add)
alter table 表名 add 字段名 数据类型; #添加到表末尾
alter table 表名 add 字段名 数据类型 first; #添加到表首位
alter table 表名 add 字段名 数据类型 after 字段名; #添加到指定位置
3.删除字段(drop)
alter table 表名 drop 字段名;
4.修改字段数据类型(modify)
alter table 表名 modify 字段名 新数据类型;
alter table 表名 change 原字段名 新字段名 数据类型;
作业:
1.MySQL中的数据类型有 _数值_ _字符_ _枚举_ _日期时间_
2.关系型数据库的核心内容是 关系 即 二维表
3.char 和 varchar的区别,各自的特点
4.
1.创建一个库 school
2.在库中创建一个表 students来存储学生信息
id 显示宽度为3,位数不够用0填充
name age(要求不能输入负数) score(浮点) 性别(单选) likes(多选)
3.查看students的表结构
4.在students中添加一个字段height,加在age字段之后
5.将score字段的数据类型改为decimal
6.在student中插入3条完整记录
7.查看所有学生的姓名和成绩
8.查看没有及格的学生的信息
create database school;
use school;
create table students(id int,
name char(20),
age tinyint unsigned,
score float(5,2),
sex enum("boy","girl"),
likes set("girl","Python","Study"));
desc students;
alter table students add height int after age;
alter table students modify score decimal;
insert into students values((1,"喜洋洋",24,88,170,'boy','Study,Python'),
(2,"懒洋洋",22,30,180,'boy',"girl,Python"),
(1,"美羊羊",20,98,150,"girl","Python,girl"));
select name,score from students;
select * from students where score < 60;