目录:
Mysql(Python相关) day01
MySQL概述
什么是数据库
数据库是存储数据的仓库
哪些公司在用数据库
金融机构、游戏网站、购物网站、论坛网站 … …
提供数据库服务的软件
- 软件分类
MySQL、SQL_Server、Oracle、DB2、MongoDB、Mariadb … … - 在生产环境中,如何选择使用哪个数据库软件
- 是否开源
开源软件:MySQL、MongoDB、Mariadb
商业软件:Oracle、DB2、SQL_Server - 是否跨平台
不跨平台:SQL_Server
跨平台:MySQL、MongoDB、Oracle、DB2、Mariadb - 公司的类型
商业软件:政府部门、金融机构
开源软件:游戏网站、购物网站、论坛网站 …
- 是否开源
MySQL特点
关系型数据库特点
1、数据是以行和列的形式去存储的
2、表中的每一行叫一条记录
3、表中的每一列叫一个字段
4、表和表之间的逻辑关联叫关系
示例
1. 关系型数据库存储
1. 表1、学生信息表
姓名 年龄 班级
星矢 25 三班
水冰月 26 六班
2. 表2、班级信息表
班级 班主任
三班 大空翼
六班 松人
非关系型数据库存储
{"姓名":"星矢","年龄":25,"班级":"三班"}
{"姓名":"水冰月","年龄":26,"班级":"六班","班主任":"松人"}
跨平台
可以在Unix、Linux、Windows上运行数据库服务
支持多种编程语言
python、java、php …
数据库软件、数据库、数据仓库
- 数据库软件
是一种软件,可以看得见,可操作,用来实现数据库逻辑功能 - 数据库
是一种逻辑概念,用来存储数据的仓库,侧重存储 数据仓库
从数据量来说,数据仓库要比数据库庞大的多,主要用于数据挖掘和数据分析数据库:user表 验证
数据仓库:哪个时间段用户登录量最多,哪个用户一年购物最多,……
MySQL安装
Ubuntu安装MySQL
- 安装服务端
sudo apt-get install mysql-server - 安装客户端
sudo apt-get install mysql-client - Ubuntu安装软件
- sudo apt-get update
- sudo apt-get -f install
修复依赖关系
Windows安装MySQL服务
- 下载MySQL安装包
mysql-installer***5.7.*.msi - 双击、按照教程安装即可
启动和连接
- 服务端启动
1、sudo /etc/init.d/mysql start
2、sudo /etc/init.d/mysql status | stop | restart - 客户端连接
- 命令格式
mysql -h主机地址 -u用户名 -p密码
mysql -hlocalhost -uroot -p123456 - 本地登录可省略-h选项
mysql -uroot -p123456
- 命令格式
表库基本操作
基本SQL命令
- SQL命令的使用规则
- 每条命令必须以 ; 结尾
- SQL命令不区分字母大小写
- 使用 \c 终止当前命令的执行
库的管理
- 库的基本操作
- 查看已有的库
show databases; - 创建库(指定字符集)
create database 库名 [character set utf8]; - 查看创建库的语句
show create database 库名; - 查看当前所在库
select database(); - 切换库
use 库名; - 查看库中已有表
show tables; - 删除库
drop database 库名;
- 查看已有的库
- 练习
- 创建库testdb,指定字符集为utf8
create database testdb character set utf8; - 进入到库testdb
use testdb; - 查看当前所在库
select database(); - 创建库testdb2,指定字符集为latin1
create database testdb2 character set latin1; - 进入到库testdb2
use testdb2; - 查看testdb2的默认字符集
show create database testdb2; - 删除库testdb
drop database testdb; - 删除库testdb2
drop database testdb2;
- 创建库testdb,指定字符集为utf8
- 库名的命名规则
- 可以使用数字、字母、_,但是不能为纯数字
- 库名区分字母大小写
- 库名具有唯一性
- 不能使用特殊字符和mysql关键字
表的管理
- 表的基本操作
- 创建表
create table 表名(
字段名1 数据类型,
字段名2 数据类型,
字段名3 数据类型
); - 查看创建表的语句(字符集、存储引擎)
show create table 表名; - 查看表结构
desc 表名; - 删除表
drop table 表名;
- 创建表
- 练习
1、创建库python1
2、在 python1 库中创建表 pymysql并指定字符集为utf8,字段有三个:id name age 数据类型自己定义
3、查看表pymysql的默认字符集和存储引擎
4、查看表 pymysql 的表结构
5、删除表 pymysql
6、删除库 python1
7、创建库 python2
8、在库python2中创建表 t1 指定字符集utf8,字段有 id name score三个,数据类型自己定义
9、查看t1的表结构 - 注意
- 所有的数据都是以文件的形式存放在数据库目录下
- 数据库目录:/var/lib/mysql(默认安装路劲)
表记录的管理
- 在表中插入记录
- insert into 表名 values(值1),(值2),…;
- insert into 表名(字段名1,字段名2,…) values(值1),(值2),…;
- 查询表记录
1、select * from 表名 [where 条件];
2、select 字段名1,字段名2,… from 表名 [where 条件]; - 练习
- 查看所有库
- 创建一个新库 studb
- 在 studb 中创建一张表 tab1,指定字符集utf8,表中字段有 id name age score 四个
- 查看tab1的表结构
desc tab1; - 在 tab1 中随意插入2条记录
insert into tab1 values
(1,”Tom”,22,100),(2,”Lucy”,23,80); - 在 tab1 的name,age两个字段插入2条记录
insert into tab1(name,age) values
(“Bob”,30),(“Green”,33); - 查看 tab1 中的所有记录
select * from tab1; - 查看 tab1 中所有人的名字和成绩
select name,score from tab1;
如何更改库的默认字符集
- 方法
通过更改MySQL的配置文件实现 - 步骤
- 获取root权限
sudo -i - 备份mysql的配置文件
cd /etc/mysql/mysql.conf.d/
cp mysqld.cnf mysqld.cnf.bak - 修改配置文件
subl mysqld.cnf
在[mysqld]下面添加:
character_set_server = utf8 - 重启MySQL服务/重新加载配置文件(reload?????)
/etc/init.d/mysql restart | reload????? - 创建库验证默认字符集是否为utf8
- 获取root权限
客户端把数据存储到数据库服务器上的过程
- 连接到数据库服务器 mysql -h … -u … -p …
- 选择库 use 库名
- 创建表/修改表
- 断开与数据库服务器的连接 exit | quit | \q
数据类型
数值类型()
- 整型
- int 大整型(4个字节)
取值范围:0 ~ 2**32 -1(42亿多) - tinyint 微小整型(1个字节)
1、有符号(signed默认) :-128 ~ 127
2、无符号(unsigned) : 0 ~ 255 - smallint 小整型(2个字节)
4、bigint 极大整型(8个字节) 0 ~ 2**64 -1
- int 大整型(4个字节)
浮点型
- float(4个字节,最多显示7个有效位)
- 用法
字段名 float(m,n) m:总位数 n:小数位位数
float(5,2) 取值范围? -999.99 ~ 999.99 - 注意
1、浮点型插入整数时会自动补全小数位
2、小数位如果多于指定的位数,会对下一位四舍五入
- 用法
- double(8个字节,最多显示15个有效位)
decimal(最多显示28个有效位)
- 字段名 decimal(m,n)
存储空间(整数部分和小数部分分开存储)
规则:将9位数字的倍数包装成4个字节
即:对于每个部分,需要4个字节来存储9位数的每个倍数,剩余数字所需的存储空间如下表:剩余数字 字节
0 0
1-2 1
3-4 2
5-6 3
7-9 4
示例:decimal(19,9) —>9字节
整数部分:10/9=商1余1 4字节+1字节=5字节
小数部分:9/9=商1余0 4字节+0字节=4字节
- float(4个字节,最多显示7个有效位)
字符类型
- char(定长)
- 宽度取值范围:1~255
- 不给定宽度默认为1
- varchar(变长)
- 取值范围:1~65535
- char 和 varchar 的特点
- char:浪费存储空间,但是性能高
- varchar:节省存储空间,但是性能低
- text / longtext(4G) / blob / longblob(4G)
- 字符类型的宽度和数值类型的宽度的区别
- 数值类型的宽度为显示宽度,仅仅用于select查询时显示,和占用的存储空间大小无关,可用zerofill查看效果
- 字符类型的宽度超过则无法存储
- 练习
- 创建一个库studb2,在studb2库中创建表tab,字段如下:
学号:id 要求显示宽度为2,位数不够用0填充
姓名:name 变长,宽度20
年龄:age 微小整型,不能输入负数
身高:height 浮点型,小数位为2位
工资:salary 浮点型,最大为 9999 9999 . 99
create table tab(
-> id int(2) zerofill,
-> name varchar(20),
-> age tinyint unsigned,
-> height float(5,2),
-> salary decimal(10,2)
-> ); - 查看 tab 的表结构
- 在表中插入 1 条记录
- 查询所有学生的 id 、name 、height 和 salary
- 创建一个库studb2,在studb2库中创建表tab,字段如下:
枚举类型(字段值只能在列举的范围内选择)
- 单选(最多65535个不同值)
字段名 enum(值1,值2,…,值N) - 多选(最多64个不同值)
字段名 set(值1,值2,…,值N)
插入记录时 “girl,python,mysql”
日期时间类型
- year : 年 YYYY
- date : 日期 YYYYMMDD
- time : 时间 HHMMSS
- datetime
timestamp : 日期时间 YYYYMMDDHHMMSS
## 插入记录时datetime不给值默认返回NULL,而timestamp字段默认返回系统当前时间 - 示例
mysql> create table t11(
-> id int,
-> name char(15),
-> birth_year year,
-> birthday date,
-> class time,
-> meeting datetime
-> )character set utf8;
作业:
- 面试题
- MySQL中的数据类型有:_ _ _ _
- 关系型数据库的核心内容是 关系 即 二维表
- 简述客户端把数据存储到数据库服务器上的过程
- char和varchar的区别,各自的特点
- 创建一个学校的库 school
- 在库中创建一个表 students 存储学生信息,字段如下
学号(显示宽度为3,不够用0填充)、姓名、年龄(不能为负数)、手机号、成绩(浮点型)、性别(单选)、爱好(多选)、入学时间(年月日) - 查看students的表结构
- 在表中随意插入1条记录
- 在表中的 姓名、手机号、成绩 三个字段插入3条记录
- 查看所有学生的姓名、手机号和成绩