数据库 MySQL

                                                            数据库

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.0windows不用改这一项。--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就大概的这些了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343