第五十九篇 数据库配置文件以及数据类型 一、配置文件解析模块 二、配置数据库加载文件 三、SQL基本语句 四、表的分类以及数据库引擎 五、约束 六、MySQL中的数据类型

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各类引擎特点

第五十九篇 数据库配置文件以及数据类型
一、配置文件解析模块
二、配置数据库加载文件
三、SQL基本语句
四、表的分类以及数据库引擎
五、约束
六、MySQL中的数据类型

3.mysql系统架构

第五十九篇 数据库配置文件以及数据类型
一、配置文件解析模块
二、配置数据库加载文件
三、SQL基本语句
四、表的分类以及数据库引擎
五、约束
六、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());