一、配置文件解析模块
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());