浅谈MySQL数据库

mysql的基础应用

  • 数据库的基本应用
    • 一.链接数据库
    • 二.数据库的SQL语句
    • 三.数据库具体操作
      • 1.创建数据库
      • 2.删除书库
      • 3.查看当前数据库中所有的数据库
      • 4.使用指定的数据库
      • 5.查看当前选择的数据库
      • 6.查看当前数据库所有的表
      • 7.创建数据库表(原生语句)
      • 8.查看表的字段
      • 9.追加表的字段
      • 10.删除表的字段
      • 11.修改表的字段
    • 五.数据库的约束
      • 1.主键primary key
      • 2.非空字段的设置 not null
      • 3.唯一 unique
      • 4.默认值 default
    • 六.数据的CRUD
      • 1.查询语句 select
        • 2>查找指定的字段
        • 2>按照指定条件查询数据--where
        • 3>模糊查询like
        • 4>范围查找
        • 5>数据排序
        • 6>聚合函数(对查询结果做的操作)
        • 7>分组
        • 8>分组之后的条件筛选
        • 9>链接查询---内链接
        • 10>查询一个常量
        • 11>查询函数
        • 12>起别名
        • 13>+号的作用
        • 14>concat拼接
      • 2.插入语句
      • 3.删除语句
      • 4.修改语句
    • 十四.关键词记忆
    • 七.数据库的备份与恢复
      • 1.备份
      • 2.恢复
    • 八.数据库的设计原则
      • 1.第一范式
      • 2.第二范式
      • 3.第三范式
    • 九.ER模型
      • 1.一对一
      • 2.一对多
      • 3.多对多
    • 十.Mysql的语句规范
    • 十一.mysql与python的交互
      • 1.创建连接
      • 2. 获取可操作对象
      • 3.查询语句
      • 执行数据库指令返回值是受影响的行数
        • 获取所有数据
        • 2. 获取一条数据
        • 3.获取指定个数
    • 十三.执行顺续
      • 执行顺序
    • 多表查询的三种方式
    • 十二.函数对表格数据的操作
    • 四..数据库的数据类型
      • 1.整数
      • 2.小数
      • 3.字符串
      • 4.枚举类型
      • 5.日期
      • 6.数据类型的选择

数据库的基本应用

一.链接数据库

python@ubuntu:~$ mysql -uroot -p
Enter password: 

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.26-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> 

二.数据库的SQL语句

1.数据查询语言(DQL)

用于对数据的查询------select

2.数据操作语言(DML)

修改数据库中的数据,包括插入---insert,更新---update,和删除---delete;

3.数据控制语言(DCL)

用于对数据的访问,:
	1.给用户授予访问权限---grant(授予);
	2.取消用户访问权限-----revoke;

4.数据定义语言(DDL)

用于创建,修改,和删除数据库内的数据结构
	1,创建和删除数据库(create database || drop database);
	2.创建,修改,重命名,删除表(create table || alter table || rename table || drop table);
	3.创建和删除索引(create index || drop index);

5.重启数据库的服务端
注意:要退出了服务器才能重启

python@ubuntu:~$ sudo service mysql restart;
[sudo] python 的密码: 

三.数据库具体操作

1.创建数据库

mysql> create database student(数据库名) charset=utf8;
Query OK, 1 row affected (0.10 sec)
注意:创建数据库的时候,指定编码格式

2.删除书库

mysql> drop database student(数据库名);
Query OK, 0 rows affected (0.23 sec)

3.查看当前数据库中所有的数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| shanghuiyoupin     |
| student            |
| student1           |
| student2           |
| student3           |
| student4           |
| sys                |
+--------------------+
10 rows in set (0.00 sec)

4.使用指定的数据库

mysql> use student(数据库名);
Database changed

5.查看当前选择的数据库

mysql> select database();
+----------------+
| database()     |
+----------------+
| shanghuiyoupin |
+----------------+
1 row in set (0.00 sec)

6.查看当前数据库所有的表

mysql> show tables;
+--------------------------+
| Tables_in_shanghuiyoupin |
+--------------------------+
| brande                   |
| cate                     |
| goods                    |
| oder                     |
| user                     |
+--------------------------+
5 rows in set (0.00 sec)

7.创建数据库表(原生语句)

mysql> create table users(
    ->    id int unsigned primary key auto_increment,
    ->    name varchar(32)  not  null,
    ->    password varchar(16)  not  null
    -> );
Query OK, 0 rows affected (0.18 sec)

8.查看表的字段

mysql> desc goods(表名);
+-----------+------------------+------+-----+---------+----------------+
| Field     | Type             | Null | Key | Default | Extra          |
+-----------+------------------+------+-----+---------+----------------+
| id        | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name      | varchar(20)      | NO   |     | NULL    |                |
| price     | decimal(8,2)     | YES  |     | NULL    |                |
| is_delete | int(11)          | YES  |     | 0       |                |
| is_show   | int(11)          | YES  |     | 1       |                |
| is_selt   | int(11)          | YES  |     | 0       |                |
| cate_id   | int(10) unsigned | YES  | MUL | NULL    |                |
| brande_id | int(10) unsigned | YES  | MUL | NULL    |                |
+-----------+------------------+------+-----+---------+----------------+
8 rows in set (0.27 sec)

9.追加表的字段

alter table   表名   add 	 列名 	  类型 约束;
alter table students add father_phone int not null;

10.删除表的字段

alter table   表名   drop     列名;
alter table students drop father_phone;

11.修改表的字段

alter table 表名 change 原来的名字 现在的名字 类型以及约束;
alter table students change father_phone mother_phone char(11) not null unique;

五.数据库的约束

1.主键primary key

物理上储存的顺序

2.非空字段的设置 not null

当前字段不允许出现空值

3.唯一 unique

当前字段不允许重复
删除唯一性
浅谈MySQL数据库_第1张图片
Alter table students drop index xxxxx
注意:xxxx不是列名,是key_name

4.默认值 default

在当前的字段存在默认值,如果不写,就用默认值,如果写,就用写的数据

六.数据的CRUD

1.查询语句 select

mysql> select * from students(表名);
Empty set (0.00 sec)

mysql>

如果没有数据,展示空集

2>查找指定的字段

查询多个指定字段,并且distinct可以做去重操作,注意点:只是在展示的过程中做去

select 字段1,字段2 from users;
去重:select distinct 字段1,字段2 from users;
浅谈MySQL数据库_第2张图片

2>按照指定条件查询数据–where

语法结构:
select 查询字段
from 表名
where 条件筛选
在这里插入图片描述
浅谈MySQL数据库_第3张图片
浅谈MySQL数据库_第4张图片
总结:比较运算符
= > < >= <=
不等于 != 或者 <>
浅谈MySQL数据库_第5张图片

逻辑运算符(两个条件之间的关系)
And(&&) or(||) not

3>模糊查询like

浅谈MySQL数据库_第6张图片
浅谈MySQL数据库_第7张图片

4>范围查找

浅谈MySQL数据库_第8张图片
包含临界值

5>数据排序

在这里插入图片描述
默认升序
查找所有的字段,按照单价来排序,计算总价,如果count为null,则设置为0
浅谈MySQL数据库_第9张图片

6>聚合函数(对查询结果做的操作)

Max min avg sum count
在这里插入图片描述
浅谈MySQL数据库_第10张图片

7>分组

浅谈MySQL数据库_第11张图片
分组之后,进行数据展示拼接的过程中,可以加入指定的链接符号
浅谈MySQL数据库_第12张图片

8>分组之后的条件筛选

9>链接查询—内链接

浅谈MySQL数据库_第13张图片
当我们需要的数据来源于多张表的时候,将多张表连接成一个大的集合
Select * from 表1 inner join 表二 on 表1的字段=表二的字段
Select * from student inner join classes on student.cls_id=classes.id;
Select * from student left join classes on student.cls_id=classes.id;
浅谈MySQL数据库_第14张图片
左连接:
查询结果为两个表匹配到的数据,对于左表中特有的数据,如果右表没有对应的数据,则用null填充
浅谈MySQL数据库_第15张图片
右连接
浅谈MySQL数据库_第16张图片

10>查询一个常量

浅谈MySQL数据库_第17张图片

11>查询函数

浅谈MySQL数据库_第18张图片

12>起别名

作用:便于理解,提高可读性;如果需要查询的字段有重名,可以区分开(链接查询时)
方法1:使用as 关键字
浅谈MySQL数据库_第19张图片
方法2:不需要as,直接写
浅谈MySQL数据库_第20张图片
注意:当别名有关键字或者特殊符号时,建议将别名加引号,单和双都行,但是建议写双引

13>+号的作用

连接成一个字段
仅仅一个功能,是运算符
两个操作数都是数值型,则为加法运算;其中一个数据为字符型,试图将字符型转成数值型,转换成功做加法;如果转换失败,则将字符变为0计算;只要一方为null,那结果肯定为null
浅谈MySQL数据库_第21张图片
案例:
浅谈MySQL数据库_第22张图片
浅谈MySQL数据库_第23张图片
浅谈MySQL数据库_第24张图片
浅谈MySQL数据库_第25张图片

14>concat拼接

浅谈MySQL数据库_第26张图片

2.插入语句


在这里插入图片描述
1、全列插入(全字段插入)
注意点:插入数据与字段顺序一一对应
浅谈MySQL数据库_第27张图片
效果图:
浅谈MySQL数据库_第28张图片
总结:首先id ,设置的是自增,需要占位,0 、null 、default都可以
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、部分字段插入的方式

浅谈MySQL数据库_第29张图片
浅谈MySQL数据库_第30张图片
注意点:
字段过长
浅谈MySQL数据库_第31张图片

3.删除语句

浅谈MySQL数据库_第32张图片

4.修改语句

浅谈MySQL数据库_第33张图片
效果图:
浅谈MySQL数据库_第34张图片

十四.关键词记忆

SQL 动词 解释
数据查询 select 选择
数据定义 create,drop,alter 创建,删除表索引数据库等,修改
数据操作 insert,update,delete 插入,修改,删除
数据控制 grant,revoke 授权,撤销授权

七.数据库的备份与恢复

注意点:数据库的备份与恢复,必须在退出数据库的基础上

1.备份

在这里插入图片描述

2.恢复

先创建一个新的数据库
在这里插入图片描述

八.数据库的设计原则

1.第一范式

强调字段的原子性 一个字段不可以再切分字段
浅谈MySQL数据库_第35张图片

2.第二范式

1、一个表必须有一个主键
2、没有包含在主键中的字段必须完全依赖于主键
浅谈MySQL数据库_第36张图片

3.第三范式

不能传递依赖
解决冗余问题的
浅谈MySQL数据库_第37张图片

九.ER模型

1.一对一

浅谈MySQL数据库_第38张图片

2.一对多

浅谈MySQL数据库_第39张图片

3.多对多

浅谈MySQL数据库_第40张图片

十.Mysql的语句规范

1、不区分大小写,但是建议关键字大写,表名 列名小写
2、每一条命令用分号结尾
3、每条命令根据需要,进行缩进或者换行
4、注释
	单行注释#注释文字
	-- 注释(注意需要有空格)
	多行注释: /* 注释文字   */

十一.mysql与python的交互

1.创建连接

浅谈MySQL数据库_第41张图片

2. 获取可操作对象

cur = connect_obj.cursor

3.查询语句

sql = 'select * from student'

执行数据库指令返回值是受影响的行数

浅谈MySQL数据库_第42张图片

获取所有数据

ret = cur.fetchall
print(ret)

注:返回一个大元组,包含各个小元组,如果查询的是不存在的id,fetchall()反会一个空集合

2. 获取一条数据

浅谈MySQL数据库_第43张图片

3.获取指定个数

在这里插入图片描述
不指定的话,默认打印一行
3.插入语句
浅谈MySQL数据库_第44张图片
4.修改和删除
浅谈MySQL数据库_第45张图片
注意点:凡是通过修改的数据或者删除或者插入新数据,都需要提交,提交指令看情况书写位置

十三.执行顺续

执行顺序

浅谈MySQL数据库_第46张图片

多表查询的三种方式

十二.函数对表格数据的操作

1.查找生鲜商品的价格平均值
在这里插入图片描述
2.查找所有种类的平均值
round(数据,保留位数)
as 起别名,不影响数据库的数据,只是修改展示字段名
在这里插入图片描述
3.找出每一种类型的商品中最便宜,最贵,平均价格和数量
在这里插入图片描述
4.三表联查
在这里插入图片描述

四…数据库的数据类型

1.整数

int bit

数据类型 说明 储存需求
tinyint 很小的整数 1个字节
smallint 小的整数 2个字节
mediumint 中等大小的整数 3个字节
int(integer) 普通大小的整数 4个字节
bigint 大整数 8个字节

2.小数

decimal

类型名称 说明 存储需求
float 单精度浮点数 4个字节
double 双精度浮点数 8个字节
decimal(m,d) 压缩的"严格"定点数 m+2个字节

3.字符串

char(固定长度),char(4)‘as’------‘as’
Varchar(可变长度字符串),varchar(4)—‘as’—‘as’
text(文本存储)字符>4000

类型名称 说明 存储需求
char(m) 固定长度非二进制字符 m字节,1<=m<=255
varchar(m) 变长非二进制字符串 L+1字节,L<=m和1<=m
tinytext 非常小的非二进制字符串 L+1字节,L<2^8
text 小的非二进制字符串 L+2字节,L<2^16
mediuntext 中等大小的非二进制字符 L+3字节,L<2^24
longtext 大的非二进制字符 L+4字节,L<2^32
enum 枚举类型,只能有一个枚举字符串值 一或两个字节,取决于枚举值的数目,最大值为65535
set 一个设置,字符串对象可以有零个或多个set成员 1,2,3,4,或8个字节,取决于聚合成员的数量,最多64个成员

4.枚举类型

enum

5.日期

date
time
Datetime

类型名称 日期格式 日期范围 储存需求
year yyyy 1901~2155 1字节
time hh:mm:ss -838:59:59~838:59:59 3字节
date yyyy:mm:dd 1000-0101~9999-12-3 3字节
datetime yyyy:mm:dd hh:mm:ss 1000-01-01 00:00:00~9999-12-31 23:59:59 8字节
timestamp yyyy:mm:dd hh:mm:ss 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC 4字节

6.数据类型的选择

1、整数和浮点数
    如果不需要小数部分,则使用整数来保存数据,并且根据整数的大小,来选择合适的整数类型,如果需要小数部分,则使用浮点数类型,浮点数类型中,有float和double,如果需要精度高一点,则选择double。根据自己的需求来决定选什么。
2、浮点数和定点数
   浮点数FLOAT、DOUBLE相对应定点数DECIMAL的优势在于:在长度一定的情况下,浮点数能表示更大的数据范围,但是浮点数容易产生误差,因此在精度比较高时,建议使用DECIMAL,比如货币这一类东西,就用DECIMAL比较合理,注意浮点数在进行加减运算时也容易出现问题。如果进行数值比较,也建议用DECIMAL
3、日期与时间类型
   可以看上面详解时的图,根据各种格式,选择自己所需要的数据类型,注意TIMESTAMP和DATETIME的区别,一个是跟时区有关,一个无关,其他没什么大的区别。
4、CHAR与VARCHAR之间的特点与选择
   区别:
      CHAR是固定长度字符、VARCHAR是可变长度字符。CHAR会自动删除插入数据的尾部空格,VARCHAR不会。 
      CHAR是固定长度,处理速度比VARCHAR更快,缺点很明显,浪费存储空间,所以对存储不大,但在速度上有要求的可以使用CHAR类型,反之用VARCHAR。
5、ENUM和SET
 	ENUM只能取单值,也就是从枚举类型中选取其中一个值,但是SET可以取多值,
 	ENUM最多能存放65535个成员,SET只能65个
 	空字符串也能在SET中存储,要存储一个人的喜爱时,最好使用SET类型,其实最重要的是看具体的情况在选取最为合适的把
6、BLOB和TEXT
 	BLOB是二进制字符串,TEXT是非二进制字符串,两者均可存放大容量的信息,BLOB主要存储图片、音频信息,而TEXT只能存储纯文本文件。分清楚两者的用途
 
7、BINARY和VARBINARY
     这两个的区别和CHAR与VARCHAR的区别差不多,BINARY是固定长度、VARBINARY是可变程度,这两个的作用就是为了区分大小写的,注意这两个是字节字符串。

你可能感兴趣的:(浅谈MySQL数据库)