python — mysql基础知识

1 . 数据库的介绍

1.为什么要用数据库?

  • 很多功能如果只是通过操作文件来改变数据是非常繁琐的,程序员需要做很多事情
  • 对于多台机器或者多个进程操作用一份数据,程序员自己解决并发和安全问题比较麻烦
  • 自己处理一些数据备份,容错的措施

2.数据库的优势:

数据库是C/S架构的、操作数据文件的一个管理软件。

  • 1.帮助我们解决并发问题
  • 2.能够帮助我们用更简单更快速的方式完成数据的增删改查
  • 3.能够给我们提供一些容错、高可用的机制
  • 4.权限的认证

3.数据库管理系统 DBMS

  • 数据库管理系统是专门用来管理数据文件、帮助用户更简洁的操作数据的系统软件。

  • 数据 — data :描述事物的符号记录称为数据

  • 文件

  • 数据库 — database (简写:db) ,即文件夹

    数据库即存放数据的仓库,只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的

  • 数据库管理员 — DBA

4.数据库管理系统的两种类型:

  • 1.关系型数据库:

    • 1.sql server

    • 2.oracle 收费、比较严谨、安全性比较高

      主要用于:a.国企 事业单位 b.银行 金融行业

    • 3.mysql 是开源的,因为开源这个数据库是免费的,他现在是甲骨文公司的产品。

      主要用于:a.小公司 b.大型互联网公司

    • 4.sqllite(小的数据库)

  • 2.非关系型数据库

    • redis
    • mongodb

5.数据库的下载、安装

安装mysql遇到的问题:

  • 1.操作系统的问题:

    缺失dll文件

  • 2.安装路径:

    • 不能有空格
    • 不能有中文
    • 不能带着有转义的特殊字符开头的文件夹名
  • 3.安装之后发现配置有问题,再修改配置往往不能生效

  • 4.卸载之后重装:

    mysqld remove ==> 把所有的配置、环境变量修改到正确的样子 ==> 重启计算机 - 清空注册表 ==> 再重新安装

2. mysql

2.1 mysql的CS架构

  • mysqld install 安装数据库服务
  • net start mysql 启动数据库的server端
  • net stop mysql 停止数据库的server端
  • 客户端可以是python代码也可以是一个程序
    • mysql.exe是一个客户端
    • mysql -u用户名 -p密码 ,默认为:mysql -uroot -p(密码为空)回车+空格

2.2 mysql中的用户和权限

1.在安装数据库之后,有一个最高权限的用户root

  • mysql -uroot -p

2.我们的mysql客户端不仅可以连接本地的数据库,也可以连接网络上的某一个数据库的server端

  • mysql 192.168.12.87 eva/123
  • mysql -h192.168.12.87 -uroot -p123

3.常用语句:

  • 查看当前用户是谁 :mysql>select user();

  • 设置密码 :mysql>set password = password('密码')

  • 创建用户 :create user '用户名'@'网段.%' identified by '密码';

    • create user '用户名'@'%' 表示网络可以通讯的所有ip地址都可以使用这个用户名

    • create user '用户名'@'192.168.12.%' 表示192.168.12.0网段的用户可以使用这个用户名

    • create user '用户名'@'192.168.12.87' 表示只有一个ip地址可以使用这个用户名

      create user 's21'@'192.168.12.%' identified by '123';
      用户连接:mysql -us21 -p123 -h192.168.12.87
      
  • 数据库授权:
    grant all on day37.* to 's21'@'192.168.12.%';

  • 授权并创建用户
    grant all on day37.* to 'alex'@'%' identified by '123';

  • 查看文件夹 :show databases;

  • 创建文件夹 :create database day37;

4.SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,。

  • SQL语言分为3种类型:

    • 1.DDL :数据库定义语言,创建库、创建表
    • 2.DML :数据库操纵语言,存数据,删除数据,修改数据,查看
    • 3.DCL :数据库控制语言,grant/revoke
  • 库操作:

    • 创建库 :create database 数据库名;
    • 查看当前有多少个数据库 :show databases;
    • 查看当前使用的数据库 :select database();
    • 切换到这个数据库(文件夹)下 :use 数据库的名字;
  • 表操作

    • 查看当前文件夹中有多少张表 :show tables;

    • 创建表 :create table 表的名字(字段名 数据类型(长度),字段名 数据类型(长度),……);

      create table student(id int,name char(4));  # char()默认为放1个字符
      
    • 删除表 :drop table student;

    • 查看表结构 :desc 表名;

  • 操作表中的数据

    • 数据的增加 :insert into 表名字 values (数据格式);

      insert into student values (1,'alex');
      
      insert into student values (2,'wusir');
      
    • 数据的查看 :select * from 表名字;

      select * from student;
      
    • 修改数据 :update 表名字 set 字段名=值

      update student set name = 'yuan'; # 会全部被修改
      
      update student set name = 'wusir' where id=2;
      
    • 删除数据 :delete from 表名字;

      delete from student where id=1;
      

show与select哪个后面加'()' ?

  • mysql中的函数:database(),user(),now(),concat(),password() —— 都是可以select的
  • show 后面跟的都不用加'()'

2.3 存储引擎

1.存储引擎

  • 什么是存储引擎?

    MySQL中的数据用各种不同的技术存储在文件(或者内存)中,这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。

  • 常用存储引擎及其特点:

    • MyISAM :适合做读、插入数据比较频繁的、对修改和删除涉及少的,不支持事务、行级锁和外键,有表级锁,索引和数据分开存储的,mysql5.5版本以下默认的存储引擎

    • InnoDB :适合并发比较高的、对事务一致性要求高的,相对更适应频繁的修改和删除操作,有行级锁,外键且支持事务,索引和数据是存在一起的,mysql5.6版本以上默认的存储引擎

    • Memory :数据存在内存中,表结构存在硬盘上,查询速度快,重启数据丢失

2.表的存储方式:

  • 存储方式1:MyISAM 5.5版本以下 默认的存储方式

    • 存储的文件个数(3个):表结构、表中的数据、索引
    • 支持表级锁
    • 不支持行级锁 不支持事务 不支持外键
  • 存储方式2:InnoDB 5.6版本以上 默认的存储方式

    • 存储的文件个数(2个):表结构、表中的数据

    • 支持行级锁、支持表级锁

      行级锁 — 能够更好的处理并发的修改问题。

      注:在修改的数据行数比较多时,优先选择使用表级锁。

    • 支持事务

      把几句代码变成一个不可再分的原子型数据

      应用场景:用于与支付、金融相关

    • 支持外键

  • 存储方式3: MEMORY 存储到内存

    • 存储的文件个数(1个):表结构
    • 优势 :增删改查都很快
    • 劣势 :mysql服务端重启后数据消失、容量有限

索引(index) — 数据库的目录

查看配置项:show variables like '%engine%';

创建表:

  • create table t1 (id int,name char(4));
  • create table t2 (id int,name char(4)) engine=myisam; # 使用MyISAM存储引擎
  • create table t3 (id int,name char(4)) engine=memory; # 使用MEMORY存储引擎

2.4 数据类型

数据类型的种类:

  • 1.数值类型
  • 2.日期时间类型
  • 3.字符串类型
  • 4.ENUM和SET类型
2.4.1 数值类型

数值类型分为:整数 、小数

1.整数 int

create table t4 (id1 int(4),id2 int(11));

  • int默认是有符号的
  • 它能表示的数字的范围不被宽度约束
  • 它只能约束数字的显示宽度 ,如:显示范围—(-2 147 483 648,2 147 483 647)

create table t5 (id1 int unsigned,id2 int); # unsigned表示id1是没有符号的int

2.小数

<1.>float 是以二进制类型存储的

float(a,b) —— a:(不包含小数点)共保留几位 b:小数点后保留几位小数

create table t6 (f1 float(5,2),d1 double(5,2));
create table t7 (f1 float,d1 double);
create table t8 (d1 decimal,d2 decimal(25,20));

<2.>decimal 是以字符串的类型存储的

decimal 默认存储整数,所以一般会在后面加条件

2.4.2 日期时间类型

类型:

  • year 年
  • date 年月日
  • time 时分秒
  • datetime、timestamp 年月日时分秒

timestamp 默认不能为空,会自动填充时间

create table t9(
y year,d date,
dt datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
# 加上这句代码可以让datetime具有‘默认不能为空,会自动填充时间’的功能    
ts timestamp);

2.4.3 字符串类型

常用字符串类型:

  • char(15) 定长的单位 (范围:0-255字节)
    alex:alex + 11个空(补够15位)
    alex 读取时会自动将空格去掉
  • varchar(15) 变长的单位 (范围:0-65535字节)
    alex:alex4 — 字符串后面跟一个字符串的长度,一共占用了5个字符

哪一个存储方式好?

  • varchar :节省空间、存取效率相对低,用于长度变化大的情况
  • char :浪费空间,存取效率相对高,用于长度变化小的情况

例:手机号码、身份证号 — 用 char
用户名、密码(限制在几位-几位之间,区间小) — 用 char
评论 、微博 、说说 、微信状态 — 用 varchar

create table t11 (name1 char(5),name2 varchar(5));

2.4.4 enum 和 set类型

enum:枚举类型,单选

set:多选、去重

create table t12(
name char(12),
gender enum('male','female'),
hobby set('抽烟','喝酒','烫头','洗脚')
);

insert into t12 values('alex','不详','抽烟,喝酒,洗脚,洗脚,按摩');
posted @ 2019-08-26 21:10  一直努力的小羊  阅读(367)  评论(0编辑  收藏  举报