数据库
1.数据库(Database):就是一个存放数据的仓库,而这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织、存储的,我们可以通过数据库提供的多种方式来管理数据库数据。------》简单形象的解释:就比如数据库和我们生活中存放杂物的储物间或仓库性质一样,区别就在于只是两者存放的东西不同,储物间存放的是实体物件,而数据库里存放的是数据。
2.数据库的种类:在当今的互联网中,主要是两种最常用的数据库模型,即关系型数据库,和非关系型数据库。 --关系型数据库模型是把复杂的数据结构归结为简单的二元关系,即(二维表格形式)。-- 非关系型数据库也被称为NoSQL数据库,NoSQL的产生并不是要彻底地否定非关系型数据库,而是作为传统关系型数据库的一个有效补充,NoSQL数据库在特定的场景下可以发挥出难以想象的高效率和高性能。
要说的是 MySQL数据库
1.MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于Oracle(甲骨文公司)旗下产品。-- 在WEB 应用方面,MySQL是最好的PDBMS(Relational Database Management System,关系数据库管理系统)应用软件。--MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,设置对应的外键联系,而不是将所有的数据存放在一个大仓库中,这样做就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库最常用的标准化语言,MySQL软件采用了双授权的政策,分为社区版和商业版,由于体积小,速度快,总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。
2.MySQL社区版和企业版区别:--企业版只包含稳定之后的功能,而社区版包含所有MySQL的最新功能。也就是说,社区版是企业版的测试版,但是前者的功能比后者多。--官方的支持服务只针对企业版,即用户在使用社区版出现的问题,MySQL官方概不负责。--至于管理工具,MySQL官方提供的工具都是免费的,从官方网站都可以下载到,同样可以用在社区版的MySQL上。
--MySQL的安装 >1 .MySQL安装配置。>1.1 Windows安装配置,数据库的安装通常有可执行文件和压缩安装两种方式。>1.2Ubuntu安装配置 ---1.安装: sudo apt-get install mysql-server mysql-client ,然后按照提示输入。--2:设置root密码:unbuntu系统新版本mysql安装是没有提供root密码设置引导,需要在bin目录下运行mysql_sencure_installation --sudo mysql_sencure_installation 然后,根据提示运行设置,设置完毕重启mysql服务,启动时需要使用--sudo mysql -u root -p --3:管理服务,启动--service mysql start ,在Windows上启动时是 -- net start mysql .停止 --service mysql stop ,在Windows上停止时是 --net stop mysql. 重启--service mysql restart --4 :允许远程连接, 找到MySQL配置文件并修改--sudo vi/etc/mysql.conf.d/mysqld.cnf 将bind-address =127.0.0.1 。注意,Linux中改为0.0.0.0。windows不用改这一项。--5.卸载 --sudo apt-get -- purge remove mysql-server mysql - common mysql-client
3.基础概念: 3.1 .主键和外键 ,主键是比如一个记录中有若干个属性,其中一个能唯一标识该记录。该属性就是主键。外键是与另一张表的关联,能确定另一张表的记录。举例:有客户表,商品表,订单表三张表。客户表:记录客户自己的信息,如客户编号,客户名,年龄,地址,联系方式等等。商品表:记录商品的信息,如商品编号,商品名,单价,品牌,库存数量等。订单表:则是订单信息。一条订单信息里,包括订单编号,客户编号,商品编号,商品数量,金额等属性。则表明,客户编号是客户表的主键,及商品编号是商品表的主键。它们两就是订单表的外键。-----约束:一种限制,通过对表的行或列的数据做出限制,来确保数据完整性、唯一性。比如,在订单记录中,指定客户编号,必须是客户表存在的客户,商品编号,必须是商品表中存在的商品。3.2 .表字段约束:主键primary key, 非空not null,唯一unique,默认default,外键foreign key。 表字段类型 :在MySQL里包含的数据类型很多,这里主要列出常用的几种,数字:int,decimal,float。字符串:varchar,text。日期:datetime。布尔:bit。3.3.图形化界面:在学习数据库初期,使用一款方便的图形化管理界面是非常有利于数据辅助学习,可以选用mysql自带的MySQL workbench或者Navicat 。
4.数据库设计:4.1数据库的三大范式:为了建立冗余较小,结构合理的数据库,设计数据库时必须遵循一定的规则。这被称为范式。 第一范式(是关系数据库的基础每列保持原子性),属性(表中的字段)不可分割,已经为最小单位,不能再分成成最小单位了。举例:学生信息组成的学生信息表,有姓名,年龄,性别,学号等等,姓名,年龄,性别,学号,已经不可拆分,所以可以作为该表的字段。第二范式(要有主键(唯一性),要求其他字段依赖主键或者与主键相关。)重要的是其他地段组成的这行记录与主键表示同一个东西,而主键时唯一的。举例:学生信息组成学生信息表,学生不能作为主键,如同名就不唯一了,所以需要学号这个编号为主键,比如姓名张三,则年龄和性别等字段,必须是自己的,由主键学号已经决定了。第三范式:就是确保每列表字段与主键直接相关,而不是间接相关。举例:比如大学分了很多系,这个系管理信息表,用系编号,系主任,系简介,等等,所以,系编号为系管理信息的主键,这些与学生信息表的主键间接相关,而不是直接。
5.MySQL命令: 5.1连接命令,使用命令连接,打开终端(windows,cmd)运行(前提需要配置好mysql环境变量)--mysql -u root-p 回车输入密码,当前设置的密码为mysql,完整命令mysql -h 192.168.10.123 -p 3306 -u root -p 其中- h参数为主机地址, -p为端口值 ,退出登录:quit或者exit 。5.2, 数据库操作:-显示数据库列表show databases;-创建数据库 create database 数据库名 charset utf8; -删除数据库 drop database 数据库名;-使用(切换)数据库,use 数据库名;查看当前选择的数据库,select database(); 5.3,表操作:-查看当前数据库中的所有表 show tables;-创建表 create table 表名(列及类型);create table students(id int auto_increment primary key not null,name varchar(10) not null,phone varchar(11) not null,); -修改表 alter table 表名 add|change|drop 列名 类型;# 添加某一列 - alter table 表名 add 列名 类型;#修改表的列属性名 -alter table 表名 change 原列名 新列名 类型;# 删除表的某一列 -alter table 表名 drop 列名; #修改表名 -alter table 表名 rename 新表名;-删除表 drop table 表名;-查看表结构 desc 表名; 5.4 数据操作CURD -查询 select *from 表名;-增加 全列插入:insert into表名 values(.....);同时插入多条数据:insert into 表名 values(.....),(.....)..; 缺省插入:insert into 表名(列1,...)values(值1,....) 主键是自动增长,但是在全列插入时需要占位,通常使用0,插入成功后以实际数据为准。-修改 (更新数据) update 表名 set 列1=值1,...where 条件。-删除 delete from 表名 where 条件。5.5 外键:MySQL数据表建立外键。MySQL建立关联表可以理解为两个表之间有个外键关系,但是这两个表必须满足三个条件1,两个表必须是lnnoDB数据引擎,2,外键列必须建立了索引,MySQL4.1.2以后的版本建立外键时会自动建立索引,较早版本则需要显示建立。3,外键关系的两个表的列必须数据类型相似,也就是可以互相转换类型的列,比如int和tinyint可以,而int和char则不可以。外键的好处:可以实现两张表关联,保证数据的一致性和实现一些级联操作。定义外键- constraint FK_TABLE foreign key ( teaid)当前表字段)references tea (id ) 关联表字段) ON DELETE RESTRICT ON UPDATE RESTRICT; 添加外键:alter table stu add constraint FK_TEAID foreign key(teaid) references tea(id); -删除外键 :约束功能消失情况,-alter table stu drop foreign key FK_TEAID; --关键字:CASCADE -删除包含与已删除键值有参照关系的所有记录;SET NULL -修改包含与已删除键值有参照关系的记录,使用NULL值替代(不能用于已标记为NOT NULL的字段) ,RESTRICT -拒绝删除要求,直到使用删除键值的辅助表被手工删除,并且没有参照时(这是默认设置,也是最安全的设置);NOACTION -如果子表中没有匹配的记录,则不允许对父表对应候选键进行update/delest操作。 5.6,数据的备份与恢复, 进入mysql库目录,运行MySQLdump命令,-MySQLdump -u root -p 数据库名>~/Desktop/备份文件.sql;按提示输入mysql密码。数据恢复,连接mysql,创建数据库,退出连接,执行如下命令mysql -u root -p 数据库名 < ~/Desktop/备份文件.sql,根据提示输入mysql密码。5.7.数据库的授权:grant all on *.* to zzy@localhost identified by '1234'; grant select on db.stu to zzy@localhost identified by '1234'; 收回权限:REVOKE SELECT on dn.stu FROM zzy@localhost;
6.知识进阶:,6.1,as--在select后面的列名部分,可以使用as为列起别名,别名出现在结果集中。6.2,distinct--消除重复行,在select后面列钱使用distinct可以消除重复行--select distinct gender from student;6.3,where--使用where字句对表中的数据筛选,结果为True的出现在结果集中,select * from 表名 where 条件; --比较运算符,等于=,大于>,大于等于>=,小于<,小于等于<=,不等于!=或者<> 。.比如1,查询编号大于3的学生--select * from students where id >3; 比如2,查询编号不大于4的科目--select * from subjects where id <=4; 比如3,查询姓名不是"黄蓉"的学生,--select * from students shere sname !='黄蓉'; 比如4,查询没被删除的学生,--select * from students whrere isdelete=0; 逻辑运算符:and,or,not --查询编号大于3 的女同学-select *from where id>3 and gender=0; 模糊查询 :like %表示任意多个任意字符,_表示一个任意字符。--查询姓黄的学生--select * from students where sname like '黄%'; --查询姓黄且名字是一个字的学生,select * from students where sname like '黄_'; 范围查询:in表示在一个非连续的范围内,查询编号是1,或3,或8 的学生---select * from students where id in (1,3,8); between...and...表示在一个连续的范围内,--查询学生是3至8的男生,-select * from students where id between 3 and 8 and gender =1; 空判断 : 判空is null ,查询没有填写地址的同学--select * from students where address is null;。判断非空 is not null ,查询填写了地址的学生,--select * from students where address is not null; 查询填写地址的女生--select * from students where address is not null and gender = 0; 优先级:小括号,not ,比较运算符,逻辑运算符,and 比or 先运算,如果同时出现并希望先算or ,需要结合()使用。6.4 聚合 ,为了快速得到统计数据,提供了5个聚合函数。-1,count(*)表示计算总行数,括号中写*和列,结果相同的,-查询学生总数,select count(*) from students; -2,- max(列) 表示求此列的最大值, ,查询女生编号最大值,-select max(id) from students where gender =0; -3,-min(列)表示求此列最小值 -4 -sum(列)表示求此列的和,例如:查询男生编号之和 select sum(id) from students where gender=1; - 5 -Avg(列) 表示求此列的平均值 例如:查询女生编号的平均值 -select avg(id) from students where gender=0; 6.5 分组 :按照字段分组,表示此字段相同的数据会被放到一个组中,分组后,只能查询出相同的数据列,对于有差异的数据无法出现在结果集中。例如:查询男女生总数:select gender as 性别,count(*) from students group by gender; -查询各城市的人数:select hometown as 家乡 ,count(*) from students group by hometown; 6.6 排序: 为了方便查看数据,可以对数据进行排序--select * from 表名 order by 列1 asc|desc, 列2 asc|desc,.... 小到大 即 升序 asc ;大到小,即降序 desc 例如: 查询学生的学生信息,按学号降序排序 ---select * from students where gender =1 order by id desc; 6.7分页 :获取部分行,当数据数量大时,在一页中查看数据时非常麻烦的事情,--select * from 表名 limit start,count,从start 开始,获取count条数据,start 索引从0 开始,例如:分页,已知每页显示m条数据,当前显示第n页, 求第n页的数据-- select * from students limit (n-1)*m,m
7.关联查询: 很多需求要涉及到多表查询,总结一下mysql 多表关联查询。* 内连接查询:是指所有查询出的结果都是在连接的表中有对应记录的。--select e.empName,d.deptName from t_employee e INNER JOIN t_dept d ON e.dept = d.id; * 左外连接: 是指以左边的表的数据为基准,去匹配右边的表的数据,如果匹配到就显示,匹配不到就显示为Null。SELECT e.empName,d.deptName from t_employee e LEFT JOIN t_dept d on d.id =e.dept; *右外连接:右外连接是同理的,只是基准表位置变化了而已。SELECT e.empName,d.deptName from t_employee e RIGHT JOIN t_dept d on d.id =e.dept; *全外连接:顾名思义,把两张表的字段都查出来,没有对应的值就显示Null,但是注意:mysql是没有全外连接的(mysql中没有full outer join 关键字),想要达到全外连接的效果,可以使用union关键字连接左外连接和右外连接。select e.empName,d.deptName FROM t_employee e LEFT JOIN t_dept d ON e.dept =d.id UNION select e.empName,d.deptName FROM t_employee e RIGHT JOIN t_dept d ON e.dept = d.id;
8.1.python 与 mysql的交互:-8.1,安装,python3安装pymysql--》pip install pymysql ,引入pymysql ,import pymysql ----8.2 ,puthon 与数据库的连接:connection 对象用于建立与数据库的连接,--*创建连接,调用connect()方法,方法里面要传的参数是 1.host:连接的mysql主机,如果本机是‘localhost'。2.port:连接的mysql主机的端口号,默认3306. 3.db:传数据库的名称。4.user:要连接的数据库用户名,例'root‘。5.password:设置的要连接的数据库的密码。6.charset:通信 采用的编码方式,'utf8'.--* 对象的方法,close()关闭连接,commit()事务,必须提交才会生效。rockback()事务,放弃之前的操作,cursor()返回cursor对象,用于执行sql语句并获得结果。--*创建对象:调用connection对象的cursor()方法。--cursor1=conn.cursor() --*对象的方法:close()关闭 ,execute( )执行语句。返回受影响的行数。fetchone():执行查询语句时,获取查询结果集的第一个行数据,返回一个元组。fetchall():查询语句时,获得结果集的所有行,一行构成一个元组,再将这些元组组装入一个元组返回。
9 .CURD( Create Update Read Delete) (增删改查) :这就是的核心,数据库的最终就是玩数据,所以就是将一条条数据记录向数据库里增删改查。当然,增删改查的话,查询数据是运用最多,也是最难的,所以要熟练怎么查询数据库数据。通过python与数据库交互,python连接数据库,来增删改查数据库。增删改查:首先:增:增加数据-->增加数据的语句:INSERT INTO 数据表名(表字段) VALUES("要增加的数据");删: 删除数据-->删除数据的语句:(DELETE FROM 表名 WHERE id =1);此表明是要删除id是1的记录。改:修改数据,也就是更新数据。 -->更新数据的语句:(UPDATE 表名 SET name='刘邦' WHERE id=6);此句是更新数据库的表里的id是6的记录的表字段name 改为刘邦。查:查询数据--->使用最多,也是很复杂的,需熟练。因为单表的查询,还有需要更多表的查询,需要的就是此篇前面写的表的关联,数据库需要多个表。所以就是多个表的关联查询,是很复杂的。查询语句是:(SELECT * FROM 表名 WHERE id = '7');此查询是查询表里id等于7的记录的所以信息。*在select后面是代表查询所有信息。查询语句还有嵌套查询,还有多个表的查询。需要不断的练习,才能掌握。
MySQL就大概的这些了。