My First Post

MySql 数据库学习笔记

数据库管理系统 DBMS,主要用于帮助实现对文件夹中的文件进行操作。

https://blog-imges.vercel.app/img/202111270106404.png

本质就是对于文件的管理,计算机发送指令给 mysql,mysql 再去解析指令,进行相应的操作。

mysql 的学习路径

  1. 创建数据库
  2. 创建表结构
  3. 创建账号并且授权
  4. 基于 pymysql 链接数据库
  5. 基于 pymtsql 像 mysql 发送指令

类比

数据库管理(类似文件夹)

表管理(类似 excel 中的表)

数据行管理(类似 excel 中的数据行)

  • 查看所有数据库

    show databases;
    
  • 创建数据库并且指定字符集

    create database testdb default charset utf8 collate utf8_general_ci;
    
  • 删除数据库

    drop database testdb;
    
  • 进入数据库

    use testdb;
    
  • 查看表

    show tables;
    
  • 查看表结构

    desc testdb;
    
  • 查看字符集

    show charset;
    
  • 创建表结构

    create table 表名 (
    	列名 类型,
        列名 类型,
        列名 类型
    ) default charset=utf8
    

    类型后面可以跟着多个参数

    primary key 主键

    not null 不允许为空

    default <value> 给与默认值

    auto_increment 自增

  • 删除表

    drop table tb1; -- 删除表
    delete from tb1; -- 清空表数据
    truncate table tb1; -- 清空表数据,无法回滚
    
  • 修改表

    • 添加列

      alter table tb1 add 列名 类型;
      alter table tb1 add 列名 类型 default 默认值;
      alter table tb1 add 列名 类型 not null default 默认值;
      alter table tb1 add 列名 类型 not null primary key auto_increment;
      
    • 删除列

      alter table tb1 drop column 列名;
      
    • 修改列类型

      alter table tb1 modify column 列名 类型;
      
    • 修改类型和名称

      alter table tb1 change 原列名 新列名 类型;
      
    • 修改默认值

      alter table tb1 alter 列名 set default 默认值;
      
    • 删除默认值

      alter table tb1 alter 列名 drop default;
      
  • 常见数字列类型

    • int[m][unsigned][zerofill]

      int 可以是有符号的,取值范围是 -2147483648 - 2147483647,unsigned 表示无符号 zerofill 表示前方补多少个 0

    • tinyint[m][unsigned][zerofill]

      有符号,取值范围:-128 - 127

      无符号,取值范围:0 - 255

    • bigint[m][nusigned][zerofill]

      长数字

    • decimal[m[,d]][unsigned][zerofill]

      准确的小数值,m 是数字总个数,d 是小数点后个数,m 最大值为 65,d 最大值为 30 。

  • 字符串类型

    • char(m)

      定长字符串,最多可以存放 255 个字符。

    • varchar(m)

      变长字符串,最多可以存放 65535 个字节。

    • text

      用于保存长文本和大字符串。

  • 时间类型

    • datetimetimestamp

      格式:YYYY-MM-DD HH:MM:SS

      Datetime 不会对输入的时间做任何改变,timestamp 会把客户端插入的时间转换成 utc 进行存储,查询的的时候又转化为客户端的时区进行返回。

    • timedate

      时间和年月日

  • 新增数据

    insert into 表名(列名) values(对应的值),(对应的值);
    
  • 删除数据

    delete from 表名;
    delete from 表名 where 条件;
    delete from 表名 where 条件 and 条件;-- 条件支持布尔运算
    
  • 修改数据

    update 表名 set 列名=值;
    update 表名 set 列名= where 条件;
    

    Concat() 函数可以用于拼接字符串

  • 查询数据

    select * from 表名;
    select * from 表名 where 条件;
    

在开发中,不要使用字符串格式化,建议使用 pymysql 的一个方法。

cursor.execute("select * from user where name=%s and passwd=%s", [name, passwd])

可以使用 fetchone() 或者 detchall() 获取返回值。