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

一、配置文件解析模块

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());
原文地址:https://www.cnblogs.com/itboy-newking/p/11185372.html