Python-mysql数据库基础

描述

数据库基本介绍

RDBMS(Relational Database Managerment System) :关系型数据库管理系统

**关系型数据库的主要产品如下

**

  • mysql:web时代使用最广泛的关系型数据库
  • oracel:大型项目使用较多,如银行、电信等
  • ms sql server:普遍用于微软的项目
  • db2:IBM 的产品,主要用于大型项目
  • sqlite:轻量级数据库,主要应用于移动平台

SQL(Structured Query Language)

SQL是结构化查询语言,是一种用来操作 RDBMS的数据库语言,当前的关系型数据库都支持使用SQL语言进行操作

  • SQL语句主要分为
    • DQL:数据库查询语言,用于对数据进行查询

    • DML:数据库操作语言,用于对数据进行增加、修改、删除等操作

    • TPL:事务处理语言,对事务进行处理

    • DCL:数据库控制语言,进行授权与权限回收

    • DDL:数据库定义语言,进行数据库、表的管理

    • CCL:指针控制语言,通过控制指针完成对表的操作

      注:对于程序员来讲,最重要的就是对数据的curd(增、删、改、查),即DQL和DML

**MySQL 简介

**

  • 直接查看MySQL官方网站(https://www.mysql.com/)
  • MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,后来被Sun公司收购,之后又被Oracle收购,目前 属于Oracle旗下产品

MySQL的特点

  • 使用c和c++编写,并使用了多种编译器进行测试,保证源代码的可移植性
  • 支持多种操作系统,如Linux、Windows、MacOS... 等
  • 为多种编程语言提供了API,如C、C++、JAVA、Python ... 等
  • 支持多线程,充分利用 CPU资源
  • 多编码支持 GB2312、UTF-8 等
  • 支持多种存储引擎
  • MySQL 采用双授权政策,分为社区版和商业版,并且源码开源
  • 复制全局事务标识
  • 复制无崩溃从机
  • 复制多线程从机
  • ...

最主要的是 ** 开源,免费、不要钱,并且使用范围广,跨平台支持性好,是学习数据库开发的首选**

MySQL服务器与客户端的安装步骤较多,请自行百度(注,不同的操作系统,对应的mysql版本不一样)

Navicat

  • Navicat 是数据库管理工具 ,专为简化数据库的管理及降低系统管理成本而设。Navicat 是以直觉化的图形用户界面而建的,让你可以以安全并且简单的方式创建、组织、访问并共用信息
  • Navicat提供多达 7 种语言供客户选择,被公认为全球最受欢迎的数据库前端用户界面工具。
  • 它可以用来对本机或远程的 MySQL、SQL Server、SQLite、Oracle 及 PostgreSQL 数据库进行管理及开发

**Navicat 的安装及基本使用,请自行百度

**

**安装完成之后,可以自己创建数据库

**

结构化

数据库中表的数据类型与约束

  • 常用的数据类型
    • 整数:tinyint、int、bigint
    • 小数:decimal
    • 字符串:varchar、char
    • 日期时间:date、time、datetime
    • 枚举类型:enum
    • 类型说明
      • decimal表示浮点数,如decimal(5,2)表示共存5位数,小数占2位
      • char表示固定长度的字符串,如char(3),如果填充 'ab' 时会补一个空格为 'ab '
      • varchar表示可变长度的字符串,如varchar(3),填充'ab'时,就只会存储'ab'
      • 字符串text表示存储大文本,当字符串大于4000时推荐使用
  • 约束
    • 主键索引primary key:物理上存储的顺序(默认是唯一索引)
    • 非空not null:此字段不允许填写空值
    • 唯一索引 unique:此字段的值不允许重复
    • 默认default:当不填写此值时会使用默认值,如果填写,则以填写为准
    • 外键foreign key:对关系字段进行约束,当为关系字符填写值时,会到关联的表中查询此值是否存在
    • 说明:虽然外键约束可以保证数据的有效性,但是在进行数据的crud时(增、删、改、查)时,都会降低数据库的性能,所以一般不推荐使用。在实际开发中,一般是通过业务逻辑控制数据的有效性

常用数据类型

类型 字节大小 有符号范围 无符号范围
TINYINT 1 -128~127 0~255
SMALLINT 2 -32768~32767 0~65535
MEDIUMINT 3 -8388608~8388607 0~16777215
INT/INTEGER 4 -2147483648~2147483647 0~4294967295
BIGINT 8 -9223372036854775808~9223372036854775807 0~18446744073709551615

字符串

类型 字节大小 示例
CHAR 0~255 char(3) ,输入'ab',存储为'ab',输入'abcd',存储为'abc'
VARCHAR 0~255 varchar(3),输'ab',存储为'ab',输入'abcd',存储为'abc
TEXT 0~65535 大文本

日期

类型 字节大小 示例
DATE 4 ’2021-01-01‘
TIME 3 '23:59:59'
DATETIME 8 '2021-01-0123:59:59'
YEAR 1 '2021'
TIMESTAMP 4 '1991-01-01 00:00:59' UTC - '2033-01-0100:00:59' UTC

数据库操作

通过命令行操作数据库

连接数据库

  • mysql -u用户名 -p密码

结构化

退出数据库连接

  • exit/quit/ctrl+c

查看所有数据库

  • show databases;

结构化

显示时间

  • select now();

查看数据库版本

  • select version();

创建数据库并指定编码为utf8

  • create database python01 charset=utf8;

结构化

删除数据库

  • drop database python01;

使用数据库

  • use python01;

查看当前使用的数据库

  • select database();

结构化

数据表的操作

创建表

  • create table 表名字(字段 类型 约束)
  • 例:create table person(id int,name varchar(50));

结构化

查看所有的表

  • show tables;

查看表结构

  • desc person;

结构化

修改表-添加字段

  • alter table 表名 add 列名 类型;
  • 例:alter table person add age int;

修改表-修改字段

  • alter table 表名 change 原名 新名 类型及约束;
  • 例:alter table person change age sex int not null;

修改表-删除字段

  • alter table 表名 drop 列名;
  • 例:alter table person drop sex;

删除表

  • drop table 表名;
  • 例:drop table person;

数据********表的基本增删改查(curd)

  • 添加数据两种方式
    • 方式一:insert into person(id,name) values(1,'zs');
    • 方式二:insert into person values(2,'ls');
  • 查询全部表数据
    • select * from person;

结构化

  • 修改表数据
    • update person set name='ww' where id=2;

结构化

  • 删除表数据
    • delete from person where id=2;

结构化

数据表的查询

  • ****使用********as ****给字段起别名
    • select name as 姓名,age from person;

结构化

结构化

  • ****使用********as ********给表起别名 ****
    • select p.name ,p.age from person as p;

结构化

结构化

  • ****去除重复的年龄 ****(DISTINCT )
    • SELECT DISTINCT age from person;

结构化

结构化

  • **查询大于30岁的人; 小于30岁的人; 不等于32岁的人; ** (>,<,<>)
    • SELECT * from person where age > 30;
    • SELECT * from person where age<30;
    • SELECT * from person where age<>32;

结构化

结构化

结构化

结构化

  • 查询年龄在 24到40之间的人 ** (> ,<)**
    • SELECT * from person where age > 24 and age < 40;

结构化

结构化

  • 查询年龄是22或43的人 ** (or 或 in)**
    • 方式一: SELECT * from person where age=22** or** age=43**;**
    • 方式二: SELECT * from person where age** in** (22,43);

结构化

结构化

  • 查询名字前面是李 开头的 ** ( like 'xxx%' ) ;查询后面是八 结尾的 ( like '% xxx ' ) ;查询名字中间有八的**** ( like '%xxx%' ) **
    • select *from person where name like '李%';
    • select *from person where name like '%八';
    • select from person where name * like '%八%';**

结构化

结构化

结构化

结构化

  • **查询年龄为null的人 ** (is null)
    • select *from person where age is null;

结构化

结构化

  • 询年龄不为null的人 ( is not null )
    • select *from person where age is not null;

结构化

结构化

  • 按年龄从大到小排序 (order by xxx desc) **;按年龄从小到大排序 ** (order by xxx asc)
    • select from person where age is not null order by age * desc;**
    • select *from person where age is not null **order by age **asc;

结构化

结构化

结构化

  • **查询所有人年龄的总和 ** ( sum )
    • select **sum(age) **as 年龄总和 from person;

结构化

结构化

  • **查询总共有多少人 ** (count)
    • select count(*) as 总人数 from person;
  • **查询最大的年龄 ** ( max ) **;查询最小的年龄 ** ( min )
    • select max(age) as 最大年龄 from person;
    • select** min(age) **as 最小年龄 from person;
  • **按年龄分组统计人数 ** (group by)
    • select age,count(*) from person GROUP BY age;

结构化

结构化

  • 按年龄分组统计人数 ,**并统计相同年龄人数有2个的 ( HAVING ** )
    • select age,count(*)total from person GROUP BY age **HAVING **total=2;

结构化

结构化

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分