|
一、 数据库发展历史
1. 数据概念?
以目前互联网角度认为计算机上存储的所有内容都可以是数据。文字可以是数据,文件可以是数据,视频可以是数据。但是总体上可以把数据分为:
二进制数据是计算机发展后才出现的。而文本数据是从古代就有的。
2. 数据发展历史
数据记录发展历史:
- 1) 以纸质媒介作为载体(记录在纸上,例如:面试时在前台签到)
- 2) 随着计算机的发展,可以把数据记录在计算机中文件上。如:word、excel、XML等文件。但是文件中数据又不具备安全性,同时对于应用程序进行操作又不方便。
- 3) 关系型数据库管理系统出现了。它具备数据的安全性,同时支持SQL这种非常方便的操作方式。
- 4) 随着互联网的发展,对于性能要求越来越高,出现了No-SQL数据库,它是专门解决关系型数据在分布式项目或大型应用中数据读取效率低或关系型数据库管理系统不易扩展的问题。但是在目前市场上,No-SQL数据库只能作为关系型数据库的补充,而不能替代关系型数据库。
3. 市场上主流数据库
关系型数据库:
- 1) Oracle:使用免费,服务收费。功能比较多,体积比较大。
- 2) MySQL:开源、免费、体积小。
- 3) SQL Server : Microsoft 公司的。
- 4) SQLite:小巧的数据库,集成在手机中。
- 5) DB2:IBM公司的数据库。
非关系型数据库(No-SQL):
- 1) HBase(Hadoop Database): 常用在大数据中的面向列的数据库
- 2) MemCached:内存型键值对数据库
- 3) Redis:支持内存型和持久化策略的数据库系统
- 4) MongoDB:面向文档的数据库
二、 MySQL简介
1. 数据库管理系统
数据库管理系统(DBMS- Database Management System)是整个数据库系统的统称。可以建立、管理、维护数据库。
MySQL中符合下面关系:

2. MySQL简介
MySQL由瑞典公司MySQL AB公司研发出的开源、免费的关系型数据库管理系统(RDBMS Relational Database Management System)。以小型、轻便、支持多线程的特点成为目前最流行的关系型数据库之一。
2008年Sun以10亿美金收购MySQL AB公司。2010年Oracle公司以74亿美金收购Sun公司。所以目前MySQL属于Oracle公司产品。
3. MySQL简易架构
MySQL属于C/S模型项目,平时所说的安装MySQL实际上就是指的的安装MySQL 服务端(即C/S中的S)

4. MySQL常用客户端
1) MySQL自带客户端工具mysql.exe
MySQL安装后自带的客户端工具。一种纯命令的方式。
2) Navicat
经典好用的第三方可视化管理工具
3) SQLyog
功能强大的第三方可视化管理工具
三、 MySQL文件目录解释
在MySQL 5.7 中安装时是不允许修改路径的,默认会安装到C盘(Windows系统)中,分别安装到两个文件夹内

1. 应用程序目录解释
Program Files中是MySQL的应用程序所在目录。文件夹名称叫做MySQL,MySQL中又包含了如下的子目录

其中MySQL Server 5.7是程序的目录,其他文件夹是额外模块功能所在文件夹。里面包含如下的子文件夹


2. 数据文件目录
MySQL 5.7 数据文件和应用程序文件并没有在一起,而是存放在了C:\ProgramData\MySQL\MySQL Server 5.7 目录中,包含了下面信息:

其中Uploads是上传信息,而my.ini就是MySQL数据的实际配置文件,如果希望修改MySQL的全局配置信息(配置后重启生效)就在这个文件中进行配置。
而Data文件夹中就是数据库中数据所在的目录,包含下面信息

其中文件夹对应的是数据库。而文件夹中内容跟随不同的存储引擎而有不同的文件扩展名。默认情况下有如下几个
- 1) .opt 数据库的编码信息
- 2) .frm 表结构
- 3) .ibd 数据和索引
综合上面内容可以得出:
数据库本质就是一组文件集
四、 Navicat 连接MySQL
1. 启动Navicat后点击连接

2. 填写信息
1) 连接名:名称任意,没有实际意义,辅助开发人员记忆本次新建的连接名称
2) 主机名或IP地址: MySQL所安装的主机IP
localhost表示本机。MySQL安装后默认只能被本机连接,如果希望MySQL允许其他主机上客户端连接可以通过修改mysql/user中数据进行控制。修改Host为%表示任意主机都可以连接。

五、 MySQL 5.7 默认数据库
连接上MySQL 5.7 后默认有四个数据库

- information_schema:它提供了访问数据库 元数据 的方式.所谓的元数据就是数据库表名、列名、列类型、约束等信息
- mysql:所有系统表。例如用户登录的账户和密码的信息
- performance_schema: 系统参数
- sys:是performance_schema的简化
六、 MySQL数据存储单元
MySQL已经安装完成后,如果希望把姓名”张三”存储到MySQL中需要有哪些准备?
1. 数据库 Database
数据库是MySQL中数据存储的最大单位。MySQL中可以有多个数据库。
在实际开发时一般一个数据库对应一个项目,大型分布式项目中多个数据库对应一个项目。很少出现多个项目的信息存储到一个数据库中。
数据库本质就是一个文件夹:创建一个新的数据库实际上就是在C:\ProgramData\MySQL\MySQL Server 5.7\Data中新建一个指定名称的文件夹。
数据库在创建时应该包含下面必要信息
- 1) 数据库名称
- 2) 字符集。默认是utf8
- 3) 排序规则。默认utf8_general_ci,不区分大小写,校对速度快,但是准确率可能稍微差一些。
可视化新建数据库步骤
Navicat中可视化新建数据库可以右键点击连接名--> 新建数据库

在弹出框中输入自定义数据库名,字符集和排序规则默认即可

2. 表 Table
表是MySQL中数据存储的最基本单元。所有的数据都存储在表中。
表是一种结构,和平时所接触的表格是一样的,也可以理解成excel的另一种形式。

需要先创建表,让后向表中录入数据。
在创建表时要设定表的结构,包含下面信息
- 1) 表名
- 2) 列名
- 3) 列的类型
- 4) 列的约束
可视化创建表的步骤
右键表--> 新建表

在弹出框中输入信息
- 名:类名
- 类型:这一列的类型
- 长度:字符长度
- 允许空值:这列中是否允许null(null和’’是不一样的)

输入完成后点击保存按钮或Ctrl+S进行保存,在弹出框中输入表名

3. 数据录入
右键表 --> 打开表 准备编辑数据

输入自己想要的数据后Ctrl+S保存数据

七、 SQL简介
SQL 英文全称Structured Query Language,中文全称结构化查询语言。
它是一套数据库操作语言,通过SQL可以让数据知道需要做什么。
应用程序和数据库进行交互就是通过SQL

1. SQL发展历史
从1986年 ANSI(American National Standards Institute 美国国家标准化组织)规定了SQL标准后,每过几年推出一次标准。
1986年,ANSI X3.135-1986,ISO/IEC 9075:1986,SQL-86
1989年,ANSI X3.135-1989,ISO/IEC 9075:1989,SQL-89
1992年,ANSI X3.135-1992,ISO/IEC 9075:1992,SQL-92(SQL2)
1999年,ISO/IEC 9075:1999,SQL:1999(SQL3)
2003年,ISO/IEC 9075:2003,SQL:2003
2008年,ISO/IEC 9075:2008,SQL:2008
2011年,ISO/IEC 9075:2011,SQL:2011
2. SQL组成
1) DDL(Data Definition Language)数据定义语言
负责数据库对象的定义的语言。一些以create 、 alter 、 drop等开头的命令都是DDL
2) DML(Data Manipulation Language)数据操纵语言
对数据进行改变的的命令集。包含insert、update、delete
3) DQL(Data Query Language)数据查询语言
对数据进行查询的命令集。包含select
4) DCL(Data Control Language)数据控制语言
对数据库访问权限控制的指令集。包含grant、revoke等
3. SQL 不区分大小写
SQL是不区分大小写的
4. SQL作用
SQL是外部对数据库进行操作的唯一途径。
所有可视化操作软件的本质也是把操作转换为SQL发送给数据库。
八、 mysql.exe 使用方式
在mysql安装路径C:\Program Files\MySQL\MySQL Server 5.7\bin 下有mysql.exe,是mysql的命令行形式的客户端工具。
如果使用带有图形界面的系统时mysql工具没有图形化界面工具(如navicat)方便好用,但是如果系统不带有图形界面mysql工具是一个不错的选择。
使用办法:
1. 启动命令行

2. 输入命令: mysql -u 用户名 -p 回车后输入密码

上面的方式也可以使用:mysql -u 用户名 -p密码,注意-p和密码之间没有空格,这样可以知道自己输入的密码是什么

3. 注意:编写命令时一定要以分号结尾,否则回车后会认为sql命名输入完整,希望继续输入。
九、 SQL-数据库操作
1. 创建数据库
create database 数据库名 [default charset utf8 COLLATE utf8_general_ci ]在可视化操作时已经知道utf8和utf8_general_ci是默认值,所以可以省略。

如果第二次执行此命令会提示数据库已经存在(通过键盘的上下可以调出命令记录)

所以常在create xxx命令后跟随if not exists表示如果不存在才去创建
create database if not exists 数据库名

2. 查看数据库创建时命令
show create database 数据库名可以反馈出数据库创建时命令和一些自动生成的参数。

3. 查看存在的数据库名称
show databases可以查看目前已经创建的数据库名称。一定要注意命令中database后面有s

4. 删除数据库
drop database 数据库名称可以删除数据库。

如果删除时数据库不存在,会提示数据库不存在

5. 使用数据库
新建的数据库不能直接进行建表等操作。要使用use命令告诉mysql建表等操作是针对的哪个数据库
use 数据库名如果使用navicat,则选中的是哪个数据库,表示use的哪个数据库。如果希望操作别的数据库也需要使用use命令
十、 SQL-表操作
从本知识点开始,后面的所有操作都使用Navicat进行演示
1. 创建表
create table 表名(
列名 类型 [约束] [COMMENT '备注'],
列名 类型 [约束] [COMMENT '备注']
) [ENGINE=InnoDB] [DEFAULT CHARSET=utf8] [COMMENT '备注'] ;所有[]中内容都是可以省略的内容,所以创建表最简单的写法:
create table stu(
id int,
name varchar(20)
);在以后的学习或工作过程中给表添加备注是一个非常不错的习惯。
create table stu(
id int comment '主键',
name varchar(20) comment '姓名'
) comment '学生';可以通过命令show create table 表名;显示定义表时备注,这对于表比较多时是十分必要的。
也可以通过可视化操作,右键点击表-->对象信息-->DDL

在弹出的界面中点击DDL进行查看

2. 修改表名称
rename table 旧表名 to 新表名

3. 查看表结构
desc 表名

4. 添加列
alter table 表名 add column(列名 类型 约束,列名 类型 约束);

5. 修改列类型
alter table 表名modify column 列名 新类型;

6. 修改列名或类型
alter table 表名change column 原列名 新列名 新列类型;

7. 删除列
alter table 表名 drop column 列名;

8. 删除表
drop table 表名;

9. 查看数据库中表
show tables;

十一、 SQL-新增
对于下面的表结构进行新增

无论使用下面哪种新增,如果新增成功都会返回受影响的行数。
DML中 操作数据库返回的都是受影响的行数。
1. 标准新增
insert into 表名[(列名,列名)] values(值,值);其中表名后的列和values后面的值要顺序及类型要严格对应,如果表名后面没有列名相当于把所有的列按照顺序写一遍。
列名不是必须包含所有列,如果只包含部分列表是其它列默认值

2. 插入多条数据
insert into 表名 values(值,值),(值,值),(值,值);可以使用多个insert into插入多条数据。但是如果希望使用一条SQL命令一次插入多条数据就要使用上面的命令。

3. 从外部txt文档新增
load data local infile "D:/data.txt" into table 表名需要注意的是,如果是直接使用windows新建的记事本默认编码ANSI,在导入时会出现编码问题,无法支持中文。而直接另存为UTF-8格式的文件会带有BOM(在文件前面多多几个字节),windows系统可以识别,但是MySQL无法识别,所以需要使用文本编辑工具(例如:Notepad)修改文件为无BOM的UTF-8

文件中内容是否制表符(tab)分割,null使用\n表示

直接输入命令导入即可

4. 把表数据新增到另一个表中
insert into 新表 select 列,列 from 旧表;新增时要注意新表是已经存在的,且select后面的列和新表中列的顺序、类型等是否一致。

十二、 pymysql安装
在python3.x中不支持python2中mysql连接模块mysqldb。
在python3.x中可以使用PyMySQL,oursql,myconnpy等。
1. 确认是否已经安装PyMySQL
pymysql在python3的库中默认是没有的,在程序中import pymysql会提示下面的错误信息

2. 确定pip是否可以使用
启动命令行输入pip后查看是否已经有pip,如果提示下面信息则表示已经安装并配置pip

3. 安装pymysql
在命令行输入: pip install pymysql 进行安装

安装成功后会在:%python%\Lib\site-packages下出现pymysql文件夹
如果已经下载,会直接使用pip缓存,windows系统缓存目录如下:
C:\Users\Administrator\AppData\Local\pip
4. 确认是否已经安装成功
在命令行输入:pip list 查看是否有pymysql

5. 再次运行
再次运行包含import pymysql 的文件,如果不报错说明安装成功。
备注:如果已经提示没有pymysql模块,请考虑pycharm引用的库路径是否是本机中python库路径。

如果不是,通过菜单File --> Settings --> Project:xxx --> Project Interpreter切换到本地python库的路径

十三、 PyMySQL使用
1. 查询
import pymysql
conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='smallming', db='test123')
cur = conn.cursor()
try:
cur.execute('select * from student')
data = cur.fetchall()
for d in data:
print("id:" + str(d[0]) + ",name:" + d[1])
finally:
cur.close()
conn.close()2. 增加删除修改
import pymysql
# 获取连接
conn = pymysql.connect(host="localhost",port=3306,user="root",passwd="smallming",db="bjsxt")
# 获取游标
# 后面从数据库角度进行讲解
# 理解成数据的指向
cur = conn.cursor()
try:
# 准备执行sql
cur.execute("insert into student values(997,'997的姓名')")
# 提交事务
# 让sql生效,可视化的运行
conn.commit()
except:
# 回滚
conn.rollback()
finally:
cur.close()
conn.close()
# 受影响的行数
if cur.rowcount > 0:
print("新增成功")
else:
print("失败")
十四、 SQL-修改
update 表名 set 列=新值,列=新值 where 条件修改语法比较简单,平时使用时也就这一种形式。如果没有where表示修改表中所有行的数据。如果有where可以过滤条件,明确指定哪些行数据需要修改
1. 修改全部行
修改后所有行的name列都变成了张三

2. 修改指定行
修改id为12行中name为李四

十五、 SQL-删除
MySQL的删除就是从数据文件中删除数据。
1. 使用delete删除
delete from 表 where 条件如果有where表示删除的条件,如果没有where表示删除全部数据。
使用delete时要明确的知道,无论删除多少行数据,MySQL在执行删除时都是一行一行删除的。
2. 使用truncate 清空表数据
truncate table 表名truncate会清空表(不是逐条删除),同时也会重置主键计数器等内容。可以理解成truncate后的这个表是新建的表。
 |
|