020 MySQL概述及基本操作

前言:

        简单地介绍一下MySQL的应用场景以及如何启动、连接MySQL;还有其他相关的表操作、表记录操作、库操作等MySQL语句。

一、MySQL概述

1.  什么是数据库?

    存储数据的仓库

2.  谁在用数据库?

    金融机构,银行,游戏网站,购物网站,论坛 …

3. 数据库软件

    a.MySQL(目前是社区开源,被Oracle收购,Oracle是闭源);

    b.Mariadb(基本和MySQL一模一样);

    c.mangoDB,sql_Server,Oracle, DB2

    Linux操作系统:Ubuntu,CentOS,RedHat

4. 数据库的选择

生产环境中,如何选择使用哪个数据库?

a.是否开源

开源软件:不一定免费,MySQL、Mariadb、MongoDB

商业软件:Oracle、DB2、sql_server、

b.是否跨平台

跨平台:可在不同os上部署,一般部署在Linux、Unix;

不跨平台:sql_server

c.公司类型

开源软件:游戏网站、购物网站、论坛等中小型民营企业

商业软件:政府部门、金融机构、大公司(京东…)

5. MySQL特点

a.是关系型数据库,(会对比的问,MySQL的特点,和mangoDB)

b.跨平台

可以在Unix、Linux、Windows部署、运行数据库

c.支持多种编程语言

Python、Java、PHP、…

6. 关系型数据库的特点

1.数据是以行和列的形式存储

2.表中每一行叫一条记录

3.表中每一列叫一个字段;列名叫字段名;

4.表和表之间的逻辑关联叫关系

 

1.关系型数据库存储

表1、 学生信息表

姓名

年龄

班级

星矢

25

3

水冰月 

25

  6

表2、班级信息表

班级

班主任

3

大空翼

6

松人

查找:水冰月的班主任是谁?

通过2张或多张表进行查询;有相同的字段使得多张表有关联;

2.非关系型数据库存储(ManogoDB)

以键值对的方式存储

{‘姓名’:‘星矢’,‘年龄’:25,‘班级’:‘三班’,‘班主任’:‘大空翼’}

{‘姓名’:‘水冰月’,‘年龄’:25,‘班级’:‘六班’,‘班主任’:‘松人’}

性能特别高,高于关系型数据库,省去解析过程;

有‘班主任’,才能找到;没有,就找不到。

 

6. 三个名词

数据库软件、数据库、数据仓库

a.数据库软件

可以操作数据库的软件,看得见,可操作;

用来实现数据库的逻辑功能;

b.数据库

是一种逻辑概念,用来存放数据的仓库;

通过数据库软件来实现,侧重存储数据,不会分析数据;

c.数据仓库

比数据库庞大,主要用于数据挖掘和数据分析;

网购:

  数据库:user表——存储用户名和密码

  数据仓库:哪个时间段用户登陆量最多,哪个用户一年购物最多,…

7. 数据存储过程

客户端把数据存储到数据库服务器的过程:

1.先连接到数据库服务器

2.选择库

3.创建或修改表  insert

4.断开与数据库的连接  exit; | quit; |\q;

 

二、MySQL安装

1.Ubuntu安装MySQL服务

a.安装服务端

Sudo apt-get install mysql-server

b.安装客户端

Sudo apt-get install mysql-client

 

如果安装失败,需要安装软件

更新源文件

Sudo apt-get update

修复依赖关系

Sudo apt-get –f install

安装软件包

Sudo apt-get install

2.Windows安装 MySQL服务

a.官网下载安装包

Mysql-installer***5.7.***.msi

b.双击,按教程安装

环境变量,各个路径用分号‘;’隔开

3.启动和连接MySQL服务

a.服务端启动

Sudo /etc/init.d/mysql start

Sudo /etc/init.d/mysql stop  

Sudo /etc/init.d/mysql restart  #重启

Sudo /etc/init.d/mysql status  #查看当前状态

Sudo /etc/init.d/mysql reload  #重新加载配置文件

b.客户端连接

mysql  –h主机地址  -u用户名  –p密码

mysql  –hlocalhost  -uroot    –p123456

主机地址:(数据库服务器地址)(127.0.0.1)

本地连接可省略-h选项

Mysql  -uroot    –p123456

c.退出

Exit;    quit;   \q

4.如何更改默认字符集

方法

通过更改MySQL配置文件来实现

步骤

1.获取root权限

sudo -i

2.备份配置文件

cd /etc/mysql/mysql.conf.d/

cp mysqld.cnf mysqld.cnf.bak

3.更改mysqld.cnf配置

[mysqld]

character_set_server = utf8

4.重启MySQL服务

sudo /etc/init.d/mysql restart

 

三、基本的sql命令

a.使用规则

1.每条命令必须以‘;’结尾

2.sql不区分大小写

3.使用\c终止当前命令的执行

b.库的命名规则

1.数字、字母、_,但不能只有数字

2.库名区分字母大小写

3.库名具有唯一性

4.不能使用特殊字符和MySQL关键字

c.库的管理

1.查看已有的库

show databases

2.创建库

create database 库名;

create database 库名 character set utf8

Latin1默认的字符集,习惯用utf-8。创建时,指定字符集

3.查看创建库的语句

show create database 库名; (查看字符集)

4.查看当前所在库

select database()

5.切换库

use 库名;

6.查看库中已有表

show tables

7.删除库

drop database 库名;

d.表的管理

1.创建表(指定字符集)

create table 表名(

字段名1 数据类型,

字段名2 数据类型

)character set utf8

ps:库默认什么字符集,表就默认什么字符集;

2.查看创建表的语句

show create table 表名;(查看字符集)

3.查看表结构

desc 表名;

4.删除表

drop table 表名;

5.注意

1.所有数据都是以文件的形式存放在数据库目录 /var/lib/mysql

2.基于硬盘存储

e.表记录的管理

1.插入记录

a.insert into 表名 values(值1),(值2),…;

Insert into t1 values(1,‘Bob’,20)

b.insert into 表名 (字段名1,字段名2) values(值1),(值2),…;

insert into t1(name) values ("jinmao");

2.查询记录

a.select  *  from 表名 [where 条件];

b.select 字段名1,字段名2,… from 表名 [where 条件];

select  name,age from t2 where id < 4

删除表记录delete

delete from 表名 where 条件;

必须有where

更新表记录update

update 表名 set 字段1=值1,字段2=值2,...where 条件;

必须有where


四、数据类型

a.    数值类型

(有符号 和 无符号unsigned)

1.整型

int 

大整型

4个字节

有符号:正21亿多

无符号:0~2**32-1(42亿多)

Tinyint

微小整型

1个字节

有符号:-128~127

无符号(unsigned):0~255

age tinyint unsigned,(只能写正数)

bigint

极大整型

8个字节

极少用,可用于手机号

2.浮点型

会自动补全

float

4个字节,最多显示7个有效位

字段名 float(m,n)

m:总位数,n:小数位位数

Float(5,2):-999.99~999.99

Insert的是:1234567890.12

Select的是:1234567936.00

只能显示7个有效位

decimal

最多显示28个有效位,精度高

字段名 decimal(m,n)

多用于对精度要求高的场合,such as 金额

存储空间

整数部分和小数部分分开存储

规则

将9的倍数包装成4个字节;

 

余数       字节

1~2         1

3~4         2

5~6         3

7~8         4

示例

decimal(19,9):

整数部分:10/9=1 … 1      4字节+1字节

小数部分:9/9=1 … 0       4字节+0字节

一共9个字节

b.   字符类型

        1.分类

Char(定长)

char(宽度值),范围:1-255,必须填宽度

Varchar(变长)

varchar(宽度值),范围:1-65535,必须填宽度

示例

“A” (是字符的宽度)

Name char(20)存的是: “A           ”

(会自动补上19个空)

Name varchar(20)存的是:“A”

Text/ longtext(4G)

 

        2.特点(char&varchar)

Char和varchar特点

1.char:定长,浪费存储空间,性能高

2.varchar:变长,节省存储空间,性能低

        3.  宽度区别

(数值类型&字符类型)

数值类型

a.显示宽度,超过宽度也能正常存储;

b.只用于select查询显示,和存储空间没有关系;

c.用zerofill来显示效果;id int(3) zerofill

字符类型

a.    超过宽度,则无法正常存储;

b.   和存储空间有关;

示例

Create的时候,int(3)

Insert的时候,values(1),(2)(3);

Select的时候,001,002,003

不够位数,补0;c.

超过宽度,一样显示;a.

不管存几位的数,都是4字节; b.

c. 枚举类型

定义

字段的值只能在列举的范围内选择

分类

单选:字段名 enum(值1, 值2,…)

多选:字段名 set(值1,值2,…)

插入记录时,用一个引号:“girl,Python,Study”

d. 日期时间类型

Date

日期"YYYY-MM-DD"

time

时间"HH:MM:SS"

datetime

日期时间"YYYY-MM-DD HH:MM:SS"

默认返回:NULL

timestamp

日期时间"YYYY-MM-DD HH:MM:SS"

默认返回:系统当前时间

        日期时间函数

now()

返回服务器当前时间,年月日时分秒

curdate()

返回当前日期

curtime()

返回当前时间

 

sql命令行中

select now() | curdate() | curtime();

sql语句中

inesrt into t1 values(2,"吕老师",25,curdate(),curtime(),now());

        日期时间运算

语法

select ... from 表名 where 字段名 运算符(时间 - interval 时间间隔单位);

时间间隔单位

1 day | 2 hour | 1 minute | 1 year | 3 month (都是单数)

示例

where meeting > (now() - interval 1 day);

现在 -  1天的时间    =    1天前的时间点

 

五、表字段的操作

1.语法

alter table 表名 执行动作

2.执行动作

添加字段add

alter table 表名 add 字段名 数据类型;(添加到末尾)

alter table 表名 add 字段名 数据类型 first;(添加到表首)

alter table 表名 add 字段名 数据类型 after 字段名;(添加到表中)

删除字段drop

alter table 表名 drop 字段名;

修改字段数据类型modify

alter table 表名 modify 字段名 新数据类型;

修改字段名 change

alter table 表名 change 原字段名 新字段名 数据类型;

 六、运算符操作

 

1.数值比较 &

字符比较 &

逻辑比较

数值:=  !=  >  >=  <  <=

字符:=  !=

逻辑:and  or 

2.范围内比较

between 值1 and 值2                      (值为数字)

in (值1,值2,...)

not in (值1,值2,...)

3.匹配空、非空

1.空: where 字段名 is null

2.非空: where 字段名 is not null

注意:

1.null:空值,必须用 is 或 is not 去匹配

2.""  :空字符串,只能用 = 或 != 去匹配

4.模糊比较

where 字段名 like 表达式

表达式

1._:匹配单个字符

2.%:匹配0到多个字符

            

七、sql查询

1.总结

            3.select ... 聚合函数 from 表名

            1.where ...

            2.group by ...

            4.having ...

            5.order by ...  

            6.limit ...;

avg,count,sum,…

 

查询结果分组

查询结果筛选

查询结果排序,asc | desc

限制记录个数

2.order by

作用

给查询的结果进行排序

语法

order by 字段名 排序方式

排序方式

1.升序:ASC,默认

2.降序:DESC

3.limit(永远放在sql语句最后)

作用

限制显示查询记录的个数

用法

1.limit n                -->显示前n条记录

2.limit m,n                  -->从m+1条记录开始显示,显示n条(从0开始计数)

分页

每页显示5(n)条记录,显示第4(m)页

limit (m-1)*n,n;

4.聚合函数

分类

avg(字段名):平均值

max(字段名)

min(字段名)

sum(字段名)

count(字段名):统计该字段记录的个数

ps

1:可以加上'as 别名',下次可以继续用

2: null不会被count统计到

3:可以用count(*)统计所有记录,不会漏掉null

5.group by

作用

给查询的结果进行分组

Tips

先分组-----再聚合---去重

显示谁,就先select谁

注意

select的字段名 必须 要么group by一下,要么聚合一下!!!

group by的字段名 必须 select一下;

6.having

作用

对查询结果进一步筛选

注意

1.having语句通常和group by联合使用,过滤由group by语句返回的记录集

2.where只能操作表中实际存在的字段名, having操作由聚合函数生成的显示列

7.distinct

作用

不显示字段的重复值(去重)

注意

1.多个字段名时,不加括号,加逗号

2.处理distinct和from之间的所有字段,所有字段值必须全部相同才可以去重

8.约束

作用

保证数据完整性、一致性、有效性的规则

分类(desc 查看时)

1.默认约束(default)

2.非空约束(not null)

ex.

sex enum('M','F','S') not null default 'S'

性别不能为空,默认为'S'



你可能感兴趣的:(Python高级网络编程)