11MYSQL数据库基本操作

数据库的概念和作用

图1

特殊格式数据文件的集合就是数据库

图2

我们网页看到的数据展示,其实在数据库里存储如上面的显示

数据库特点简介

图3

数据库分类及特点

图4

数据库某年排行榜,可以看到几种数据库的排名,关系型数据库排前

关系型数据库

通过二维表的方式存储数据

图5
图6

常见如上的关系型数据库,我们学习MySQL数据库,免费(商业版低收费),而ORACLE全套部署近百万(安全性高),SQLite是移动端,嵌入式设备数据库,可以不联网运行,最后微软的SQL Server是收费的而且只能跑在微软的windows服务器上。MySQL体积小,速度快,成本低,很多中小型企业都在使用。

非关系型数据库

图7

使用Key-value方式存储,也成NoSQL,常见mongoDB,redis

数据库管理系统

图8

DBMS数据库管理系统分3部分,数据库文件集合,服务端,客户端,每个功能如上,关系图如下

图9
图10

客户端给服务端发送语句,必须是其听得懂的SQL语句

图11

SQL结构化查询语言,几乎适用于所有关系型数据库,但是某系细节有差异

图12

SQL语句主要分如上5类,DQL数据查询,DML数据操作,TPL事务处理,DCL数据控制,DDL数据定义,我们学习重点是DQL,DML,DDL

图13

上图又简介了几种关系型数据库,简单了解下

图14

关系型数据库,由多张数据表构成,数据表由多个数据行构成(数据行也叫一条数据记录)。按列来看,把每个元素成为属性或者字段(每列数据类型一致)

MYSQL环境搭建

linux安装,终端sudo apt-get install mysql-server

启动MySQL,终端sudo server mysql start(如果是重启,关闭start分别换成restart,stop)

查看进程是否有mysql, 终端ps ajx|grep mysql (利用管道过滤,常常查看是否启动成功)

图15

配置环境

图16

配置文件可以在/etc/mysql/mysql.conf.d下找到文件mysqld.cnf,可以用cat等命令查看

图17

默认配置如上,暂时不用修改,默认端口3306,ip默认本机ip127.0.0.1

注意啦!以下出现了中坑,本人经查询解决

坑1

视频提出安装mysql-server,其实mysql-client也需要一起安装,

于是我们需要sudo apt-get install mysql-client给虚拟机安装上客户端。

于是我们兴冲冲的使用mysql -uroot -p然后输入密码,哎?怎么不是视频中的密码,也不是网上有人说的为空。

/etc/mysql/debian.cnf.我们可以使用cat查看这个文件,找到password的内容,然后复制,是个很长很恶心的密码,然后用mysql -uroot -p后粘贴这个密码,登录成功后,在mysql shell下,执行如下命令

> use mysql;

>update mysql.user set authentication_string=password('123456') where user='root'

比如想修改密码为123456,可以使用如上,或者替换字符串'123456'

最后退出,使用sudo service mysql restart就可以使用自定义的简单代码登录了。

坑2

视频告诉我们可以按照可视化客户端navicat,这个浏览器搜索安装就行了,我分别给虚拟机和windows都安装了一个,先说虚拟机问题吧。选择下载64位Linux版本安装,

切换到压缩文件目录cd xxx

使用tar -zxvf xxx.gz把文件解压,然后切换到解压目录,使用./start_navicat运行安装,记得要点2次取消,然后出现试用界面,视频说会出现乱码,然后就真的出现了,点开菜单栏倒数第3个的最后一个项目,这个就是选项,将字体设置为AR PL UKai ZN,同时也要把字体调大点,关闭,再进入就没乱码了。

坑3

我给笔记本和台式都安装了navicat客户端,然后连接虚拟机的mysql,密码明明是对的,却发现无法连接,之前的虚拟机上的navicat却可以连接。

我们进入虚拟机终端客户端mysql -uroot  -p

->GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;                      (123456根据你的密码对应上)

->FLUSH PRIVILEGES; (刷新防火墙)

quit或exit退出

打开/etc/mysql/mysql.conf.d/mysqld.cnf,将bind-address=127.0.0.1改为bind-address=0.0.0.0保存

重启mysql     sudo service mysql restart

然后navicat客户端就可以连上mysql了

数据库完整性(了解)

为了保证数据的正确性,要求数据的约束条件

图18
图19

记录识别唯一,主键不为空

图20

域完整性,同一列,数据类型一致,要求非空或默认值

图21

参照完整性,比如2个表格,一个存的是张三相关,另一个存的是小张相关,如果删除了张三,小张也应该被删除

自定义完整性:比如性别只能是‘男’或者‘女’,而不能是其他

图22

NAVICAT客户端使用

图23

连接数据库

图24

我们之前已经做过连接了,这里再次介绍下连接的界面,然后连接创建完毕,但是要想连接成功,我们还必须双击左侧,让其灰色变绿色,表示真正连接成功

默认情况下会在下面显示4个数据库

图25

创建数据库

右键点击绿色图标点击新建数据库

图26

弹出新建窗口

图27

我们有3个空可以填,第一个数据库名自己起,但是不要和已有的库重名,我们起名python,

字符集我们使用utf8,排序规则使用general ci(以后讲),点确定数据库就建立完毕

图28

数据库创建完是灰色的,因为我们并没有打开,双击打开,此时数据库就变成了绿色

图29

我们在新建的python库表位置右键新建表,出现如下图

图30

比如说我们创建一个字段,名id(注意这里字段名不能用中文),类型int,是不是null勾选作为域完整性约束,我们点了键那里,会出现一个钥匙,此时null也会被自动勾选,这时为主键约束,比如该id是自增的,我们还会下面勾选自动递增

图31

我们选中一行,再加入字段时,按光标↓就可以添加,我们输入字段名name,会发现自动设置了类型varchar,长度255表示最多该项有255个字符。

图32

我们点击保存起名classes,在表下面双击就会发现如下图,即创建了2列的表

图33

如果我们想修改表,可以使用右键-设计表,又回归到之前的界面

查看数据,我们双击表就行

增加数据,我们输入内容,就可以添加数据,由于id设置了自动添加,所以我们可以不填,填入name和size,想新出现一行数据就按光标↓,id自动出现

图34

修改数据,双击属性单元格,输入就行

保存表格,点下面√或者CTRL+S

图35

删除数据,点击减号图标

图36

备份数据库

右键点击数据库转储--结构和数据

图37

我们存储到桌面,就会看见python.sql文件

图38

此时我们可以将文件拷贝给其他工作组同事或者留作备份使用。

如果我们数据库数据丢失了,比如我们先在navicat上删除python数据库,我们可以再新建一个数据库,但是因为是空的,我们可以右键点击数据库选择运行SQL文件

图39

选择桌面上的python.sql文件点击开始,然后需要右键关闭数据库,再双击打开,此时会发现之前的数据已经成功添加进来

MYSQL数据类型

图40
图41

数值

图42

整形类型

不同数据类型存储长度不一样(常用TINYINT,INT)

TINYINT 1字节  -128到127      无符号0-255

SMALLINT 2字节-2**15到2**15-1  无符号0到2**16-1

MEDIUMINT 3字节

INT 4字节

BIGINT 8字节

图43

浮点型

float和double,分别4到8字节,float到小数点后6位,double到16位

定义方法float或者double加(总位数,小数位数) 如float(5,3) 12.345

图44

定点数

decimal(总位数,小数位)需要精确计算小数时,比如价格等


字符串

图45

char 255个字符

varchar65535个字节(常用varchar)其他如上图(第二行应该为字符)

text相关的都是按字节统计

char和varchar区别

比如我们使用char(5)和varchar(5)存储‘he’,char会使用5个字符空间,而varchar只占用2个字符空间

图46

text类型,存储量大

图47

类型选择原则

图48

枚举类型 

字段名 enum(枚举值用逗号分隔)

图49

时间类型

图50

datetime和timestamp区别,范围和存储大小不同

图51

MYSQL数据库----登录和退出命令

图52

登录(mysql -uroot -p)

图53

退出(exit或quit或ctrl+d)

图54

我们已经登录了,可以查看版本和当前时间(记得大部分命令开始要结尾;)

图55

数据库操作

图56

create datebase 数据库名;           创建数据库

drop datebase 数据库名 ;          删除数据库

use 数据库名;           切换数据库

select database();    查看当前选择的数据库

(MYSQL命令大小写不敏感)

图57

上图为刚登陆,查询数据库,因为没有选择,提示NULL

图58

显示所有数据库,show databases;

图59

我们使用use python;切换到python数据库,这时再select database();就可以看到当前选择了python数据库

图60

我们尝试创建一个数据库,比如python_db名字,创建成功,会显示Query OK。否则会出现一行提示,比如我们输错命令就会上图后面的提示。

我们也可以用show create database 数据库名  (可以卡看到数据库创建过程,数据库必须已存在)

图61

上图我们会发现python_db数据库,过程语句和编码及排序,我们会发现编码不是utf8而是utf8mb4,而且排序也不是我们用的utf8_general_ci

图62

我们可以指定编码创建数据库create database python_db1 charset=utf8;

python_db1是我们给新数据库起的名字,可以看出编码已经被设置好,我们一般都设置为utf8否则你打开就是乱码

删除数据库  drop database 数据库名,删除要慎重(找不回来)!!!

表结构创建

图63

为了把数据保存到数据库,我们需要表格,上节学了创建数据库,这节学习创建表

图64

比如与我们打开进入到数据库python_db1,然后先检查有哪些表show tables;因为没创建过,所以是空的

图65

创建表格create table classes(

 id int unsigned primary key auto increment,

name varchar(10) not null,

num tinyint unsigned not null

);

语句分析:create table 表格名();基本sql创建表格语句,在括号里添加语句字段,字段间用逗号分隔,最后一个结尾不用逗号。字段用字段名 字段类型(之前讲过)约束条件

比如第一个id我们设置为整数,想要是无符号的用unsigned跟在int后面,约束条件,主键约束(唯一非空),递增(auto_increment)

第二个字段name,我们使用varchar,设定最长10个字符,约束非空

第三个字段num,使用tinyint,约束非空

整体注意结构和语法写法!

应用上述语句,就实现了创建表格

图66

查看表结构

图67

desk 表名;                         可以看到表结构和设置,如上图

图68

我们接着再创建一个学生表,结构要求如上

alter database my_db character set 'gbk';(这里需要注意的是,我们输入汉字内容,需要给数据库指定默认编码gbk),否则enum那里会报错,修改完毕后OK,记得每次有中文项目的内容,修改数据库编码

表格创建成功海口可以用show create table 表名 来显示创建过程

图69

我们会发现结果是比较乱的,这是因为尝试将所有内容一行写下,但是屏幕不够长。。。

我们可以给命令改成show create table 表名 \G;效果如下

图70

表结构修改

图71

增加字段

图72

alter table 表名 add 列名 类型;

图73

比如我们给students条件birthday列,语句alter table students add birthday datetime;输入完成功可以desc查看到添加了birthday列

图74

重命名字段

字段已有,但是命名类型或者约束想修改

图75

alter table 表名 change 原名 新名 新类型约束;

比如我开门把birthday改成birth而且要求非空,使用

alter table students change birthday birth datetime not null;

同样修改后可以查看下

修改字段类型和约束

不修改命名,只修改类型和约束(比上一个功能简单点)

图76

alter table 表名 modify 列名 类型及约束;

比如我们把birth类型换成date使用

alter table students modify birth date not null;(需要注意的是之前的约束如果修改没有写进去就是默认,不会继承之前的,上面的change也是,所以约束都要重写)


删除字段

图77

alter table 表名 drop 列名;

如给students删掉birth使用alter table students drop birth;

desc删除后发现drop自段没有了

删除表

图78

drop table 表名;   

所有表的增删改查要严格规划,谨慎修改

表数据的增删查改

图79

本节学习表数据的创建,更新,读取,删除

图80

查询所有列 select * from 表名;

图81

之前没有添加数据,所以我们没有得到结果

插入数据insert into 表名 values(字段值用逗号分割,字符串要加引号!!!);

图82

添加数据后就可以查看到数据了

图83

我们可以试试主键效果,如果再插入重复的id,会提示重复错误

图84

我们之前删了students,再创建出来,这回添加一行数据如下图1行插入,然后我们知道有些值可以非空的,我们想给指定列插入内容,可以使用下图最后一行代码,

图85

多行插入 insert students values()()()();插入几行用几个括号

图86

修改数据

图87

我们尝试给表students的age列赋值age=38,使用update students set age=38;

图88

设置后会发现age列的所有数据都被改成了38

图89

我们想只改一列,比如给第二行age设成88,使用update students set age=88 where name='司马狗剩';结果如下

我们也可以设置多列修改,所以一般模式为

update 表名 set 列名1=参数1, 列名2=参数2 ...where 属性=xxx;(注意set属性逗号分割)

图90

查询数据

我们之前学了查询表格select * from 表名;现在我们也可以加条件,比如查询students中name=‘司马狗剩’的数据,效果如上图。

图91

我们还可以进一步拓展,想查看某些列数据,如上(同理即可查询where指定条件的某些列数据)

图92

我们想显示中文列名,可以使用select 列名 as‘中文列名’ from 表名;效果如上(其实as也可以省略)

删除

图93

delete from 表名 where 条件约束;这种删除后数据不可恢复,是物理删除

我们可以使用逻辑删除,用alter table students add is_delete bit default 0;给表格设置默认为0,

当我们想做逻辑删除,使用update students set is_delete 1 where id=3;给指定数据设置删除;

这样我们就可以通过where is_delete=0;来过滤掉数据(但是数据库还有这条数据)


数据库备份和恢复

我们之前用过navicat实现数据库备份转储,导入。现在我们用命令行来实现数据备份和恢复。

首先,数据库备份不用进mysql环境,进入终端界面输入如下命令即可

mysqldump -uroot -p python_db1>python_db1.sql就会在命令行当前目录导出一个python_db1.sql文件(得输入密码,因为-p后面没写),我们可以ls -l查看到,我们备份了数据库,就可以删除数据库再导入,登陆mysql, mysql -uroot -p,  然后drop database python_db1;删除成功后,我们同样需要创建一个数据库以备导入,使用create database python_db charset=utf8;创建。然后我们exit退出mysql到终端,输入mysql -uroot -p python_db <python_db1.sql然后输入密码,就可以实现数据库的导入


最后对本章的内容说下总结,命令很多,需要多用多记!!!

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