• 第五十九篇 数据库配置文件以及数据类型


    一、配置文件解析模块

    1.通过configparser模块中的ConfigParser类实例化一个配置对象,这个对象中的read方法可以读取.cfg文件,get方法可以获取分区中选项的具体内容

    # a.cfg
    
    # 1.只能包含section(分区)和 option(选项、使用)
    # 2.option必须包含在section中
    # 3.所有option的值都是字符串类型(因此都不用加引号)
    # 4.注意:同一个cfg文件中不能有相同的section;同一个分区中不能有相同的option
    
    [mysqld]   # 分区(section)
    user = root  # 使用和值
    password = 222  # 使用和值
    
    [mysql]  # 分区
    user = helloworld   # 使用&值
    
    # test.py
    
    import configparser
    
    cfg = configparser.ConfigParser()  # 实例化一个配置对象
    cfg.read('a.cfg', encoding='utf-8')  # 读取文件
    
    val = cfg.get('mysqld', 'user')   # 获得分区中选项的值
    print(val)  # 
    

    2.获取内容的类型:

    # 字符串
    cfg.get()
    
    # 整型
    cfg.getint()
    
    # float浮点型
    cfg.getfloat()
    
    # 转为bool类型
    cfg.getboolean()
    

    二、配置数据库加载文件

    1.将数据库安装目录下的“my-default.ini”文件复制一份放在同级目录下,并改名为"my.ini"

    2.将里面的数据换成自己需要的配置

    3.服务器分区配置后,需要重启服务器

    4.客户端分区配置后,需要重连服务端

    # my.ini
    
    # 客户端分区可以写成mysql,也可以写成client
    # client适用于各种语言连入,包含mysql
    [client]
    user = root
    password = 123
    default-character-set = utf8  # 设置建库时默认的编码格式
    
    # 服务器分区配置
    [mysqld]
    character-set-server = utf8
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES  
    

    三、SQL基本语句

    1.库相关(文件夹)

    # 查看字符编码及其他数据
    s;
    
    # 获取当前库名
    select database();
    
    # 增
    create database 库名 charset 编码;
    create database mydb charset utf8;
    
    # 删
    drop database 库名;
    drop database mydb;
    
    # 改
    alter database 库名 charset 编码;   # 更改库的编码格式
    alter database mydb charset gbk;
    
    # 查
    show databases;   # 查看全部库名
    show create database 库名;  # 查看指定库名
    

    2.表相关(文件)

    # 切换文件夹(选择数据库)
    use 库名;
    use mydb;  # 这个可以不写分号(为了不诱导犯错,推荐写)
    
    # 创建表的完整写法
    create table 表名(字段名 字段数据类型 约束) charset utf8;
    create table tree(age smallint unsigned) charset utf8; # 无符号,可以输入两个字节大小的数字作为age的值
    
    
    # 增
    # 创建新表
    create table 表名(字段名 字段的数据类型) charset 编码;  # 设置多个字段可以用逗号隔开
    create table student(name text, age int, gender text,...) charset utf8;
    
    # 增加表中的字段
    alter table 表名 add 字段名 字段数据类型;
    alter table student add height int;
    
    # 删 
    # 删除表
    drop table 表名;   
    drop table student;
    
    # 删除表中的字段
    alter table 表名 drop 字段名;  
    alter table student drop gender; 
    
    # 改
    # 改表名
    rename table 旧表名 to 新表名;
    rename table student to person;
    
    # 改表的字符编码
    alter table 表名 default character set 表名;
    alter table student default character set gbk;
    
    # 改字段名和其数据类型
    alter table 表名 change 旧字段名 新字段名 数据类型;
    alter table student change age idcard int;
    
    # 改字段数据类型
    alter table 表名 modify 字段名 新数据类型;
    alter table student modify idcard tinyint;
    
    # 查
    # 查看库中所有表名
    show tables;
    
    # 查看库的结构(包含哪些字段)
    desc 库名;
    desc student;
    
    # 查看库的语句(书写规范)
    show create table 表名;
    show create table student;
    

    3.记录相关(一行数据)

    # 增
    # 插入数据:插入的数据与表格字段一一对应
    insert into 表名 values(值);  # 插入对多个数据可以用逗号隔开
    insert into student values('king', 26, 'male', 173);
    
    # 按字段插入数据:值必须和字段一一对应
    insert into 表名(字段名) values(值); # 插入对多个数据可以用逗号隔开
    insert into student(name, age, gender) values('king', 20, 'male'),('tom', 18, 'male'),('jojo', 26, 'male');
    
    # 删
    # 删除所有数据
    delete from 表名;
    
    # 删除满足条件的数据
    delet from 表名 where 条件;
    delet from student where name='king';
    
    # 清空所有数据(字段不变,可以重新插入数据)
    truncate table 表名;
    truncate table student;
    
    # 改
    # 修改表中的数据
    update 表名 set 字段名=值 where 条件;  # 如果不写条件则会修改所有记录
    update student set age='26' where name='king'; 
    
    # 可以修改多个值
    update student set age='26',gender='famale' where name='tom'; 
    
    # 查
    # 查看表中所有记录
    select * from 表名;
    
    # 查看特定字段的记录
    select 字段名 from 表名;  # 查看多个字段记录时,用逗号隔开字段名
    select name, age from student;
    

    4.相关规范

    • 1.库名、表名、字段名:由字母、数字、特殊符号组成
    • 2.不能是纯数字,不推荐数字或特殊符号开头
    • 3.不能是MySQL关键字,比如,create、char等等

    四、表的分类以及数据库引擎

    1.数据存储引擎

    什么是引擎?
    如汽车的发动机
    引擎就是一个系统的核心部分
    
    为什么需要分类呢?
    发动机分类呢?
    分柴油 汽油 电动
    
    各自的使用场景不同
    mysql支持的引擎
    show engines
    
    不同引擎效果测试 插入数据
    

    2.MySQL各类引擎特点

    3.mysql系统架构

    4.mysql5.6版本与5.7版本对比

    • 1.需要初始化 mysqld --initialize-insecure

    • 2.密码字段变成了authentication_string

    • 3.界面安装的配置文件放到了C:ProgramData中

    五、约束

    1.相关概念

    1.约束(constraint):表中数据的限制条件

    2.约束的作用:为了保证表中的记录完整、有效

    2.约束的种类

    1.非空约束(not null):用not null约束的字段不能为null值,必须给定具体的数据

    create table student(name text not null);
    

    2.唯一性约束(unique):unique约束的字段,具有唯一性,不可重复,但可以为null

    create table student(name text unique);
    

    3.主键约束(PK:primary key) :表设计时一定要有主键

    **4.外键约束(FK:foreign key) **

    5.检查约束(目前MySQL不支持、Oracle支持)

    六、MySQL中的数据类型

    1.整型

    tinyint:1个字节(无符号的8bit,最大255;有符号7个bit,最大127,最小-128)
    
    smallint:2个字节
    
    mediumint:3个字节
    
    int:4个字节(最常用,如果你的数据超过10个十进制位,则用bigint才不会丢失数据)
    
    bigint:8个字节  
    
    # 注意:
    # 1.默认情况整数是有符号的(signed)      
    
    # 1.1设置为无符号:(字段名 数据类型 unsigned)
    
    # 1.2修改字段的数据类型为无符号
    alter table t2 modify age tinyint unsigned;
    
    # 1.3创建表时,设置字段就规定为无符号
    create table t2(age tinyint unsigned);
    
    # 2. mysql5.6中存储数据默认是非严格模式, 如果插入的数据超出范围,会自动取最大值(不推荐,会丢失数据)
    
    # 2.1查看当前的sql模式: 
    select @@sql_mode;   # @表示全局变量    @@表示会话级变量(局部)
    
    # 2.2临时设置sql_mode   
    set  @@sql_mode = "STRICT_TRANS_TABLES"
    
    # 2.3建议直接修改配置文件:
    # my.ini
    [mysqld]
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
    
    # 3.指定长度   
    # 3.1int(10):如果你的数据不足10位,用0填充  (需要添加zerofill,这个约束)
    create table t1(age int(10) zerofill);
    
    # 3.2对于整数和小数而言,都是用控制(约束?)显示填充的最小长度
    

    2.浮点型

    # 1.两种不精确的小数
    
    float:大约精确到小数点后5位 
    
    double:比float更精确  
    
    # 2.如果对精确度要求比较高 需要使用decimal 类型  
    decimal:需要指定总位数和小数位数 
    decimal(65,30):总长最大65 小数30 
    # 注意:位数不包括小数点  
    

    3.字符串型

    # char
    char:定长字符串
    char(10) 存储字符串会占10个字符长度
    优点:读取存储速度快于varchar
    缺点: 浪费与磁盘空间
    char 最大范围 255(1个字节)
    
    # varchar
    varchar:长度可变的字符串  
    varchar(10):假设插入abc,则会占用3个字符长度外加一个bit(这个bit用于存储字符长度)  
    优点:节省空间  
    缺点:速度慢于char类型
    varchar最大 65535
    
    # 如果字符长度不大 建议使用char类型 反之则选择varchar
    
    # 如果varchar不够那就采用text,最大可以存储2的32次方
    
    # text  
    text:具备编码的大字符串
    
    # blob  
    没有编码的大二进制(可以用来存储 多媒体数据  视频 音频等.....,但是一般不会存这些数据,都是建一个文件服务器,数据库只保存文件的地址信息)  
    
    # 字符串类型中 需要掌握的 char varchar   text  blob也不常用  
    
    # 注意: mysql会自动将字符串后面的空格删掉 所以你的数据在存储前应该先把空格处理掉  
    
    # 枚举和集合  
    # 枚举是提前规定一个范围,你的值只能是其中之一(多选一)
    alter table student modify gender enum('famale', 'male');
    insert into student(gender) values('famale');
    
    # 集合是提前规定一个范围,你的值可以是其中的多个(多选多)
    # 集合在插入数据时 ,多个值之前用逗号隔开,但他们必须包含在同一个字符串内!
    alter table student add hobby set('car', 'read', 'sport');
    insert into student(hobby) values('read, sport');
    

    日期和时间类型

    # year(只输入年份)
    alter table student add y year;
    insert into student(y) values(99);
    
    # date (必须要输入年份)
    alter table student add d date;
    insert into student(d) values(9910000);
    insert into student(d) values('9910000');
    
    # time 
    alter table student add t time;
    insert into student(t) values(222222);
    insert into student(t) values(2222222);
    
    # year date time 都可以用字符串或数字两种方式输入值
    
    # datetime
    alter table student add dt datetime;
    insert into student(dt) values(11111111111111);
    
    # timestamp(之前为空的数据会全部变成输入第一个数据时的当前时间)
    alter table student add ts timestamp;
    insert into student(ts) values(11111111111111);
    
    # ?datetime和timestamp ?只能使用字符串输入(可以用数字输入)
    
    # 上述所有类型的年份都可以是两位数   
    # MySQL中规定:0-69 翻译为 2000-2069;  70-99 翻译为1790-1999
    
    # 时间相关的函数和常量
    # CURRENT_TIME:获取当前时间
    insert into student(ts) values(current_time);
    
    # now():获取当前时间
    insert into student(dt) values(now());
    
  • 相关阅读:
    Codeforces Round #544 (Div. 3) F2. Spanning Tree with One Fixed Degree
    2020ICPC·小米 网络选拔赛第二场 I Subsequence Pair
    BJTU 1867. try a try, ac is OK
    Codeforces Round #667 (Div. 3) E. Two Platforms
    Educational Codeforces Round 94 (Rated for Div. 2) D. Zigzags
    Educational Codeforces Round 94 (Rated for Div. 2) B. RPG Protagonist
    Codeforces Round #665 (Div. 2) E. Divide Square
    Codeforces Round #665 (Div. 2) D. Maximum Distributed Tree
    [洛谷] P1801 黑匣子
    面向对象中return和break的区别
  • 原文地址:https://www.cnblogs.com/itboy-newking/p/11185372.html
Copyright © 2020-2023  润新知