疫情环境下的网络学习笔记 python 5.4 数据库基础

5.4

上节课复习

  • 数据库的概念

    本质是一款基于网络通信的应用程序
    关系型:MySql,oracle,sqlite
    数据彼此之间有约束或着联系
    非关系型:redis,mongodb
    通常以k v值对形式存储
    
  • 重要概念

    库-----文件夹
    表-----文件
    记录---文件内一行行数据
    表头---表格的第一行字段
    字段---字段名+字段类型
    
  • 安装问题

    1. 不使用最新的版本:兼容性问题。目前用的多是5.6
    
  • 启动mysql

    mysqld -uroot -p
    
  • 配置文件

    my.ini
    
  • 基本语句

    增删改查
    create,show,drop,alter
    

今日正课

存储引擎

Mysql主要存储引擎

  • Innodb:mysql5.5之后默认的存储引擎1
  • myisam:mysql5.5版本之前默认的存储引擎
  • memory:内存引擎,数据存放在内存中,断电数据丢失
  • blackhole:无论存什么都立即消失

查看所有的存储引擎:show engines;
区别:
innodb:2个文件,表结构,表数据
myisam:三个文件;表结构,表数据,索引
memory,blackhole:只有表结构

创建表的完整语法

create table 表名(
	字段名1 类型(宽度) 约束条件,
	字段名2 类型(宽度) 约束条件,
	字段名3 类型(宽度) 约束条件
)

# 注意
# 1. 在同一张表中字段名不能重复
# 2. 宽度和约束条件是可选的,字段名和类型是必须的
# 3. 最后一行不能有逗号
# 4. 不指定长度,int默认是11位,char是1位。5.6默认没开启严格模式,存多了自动截取,5.7以上开启严格模式,超出范围直接报错
# 约束条件,不为空:not null
create table t1(id int, name char not null);

严格模式

# 如何查看严格模式
show variables like "%mode"
模糊查询
	关键词 like:
	% 匹配任意多个字符
	_ 匹配单个字符
上面那句话的意思是,匹配所有variables中以mode结尾的字符
# 修改严格模式
set session # 只在当前窗口有效
set global # 全局有效
set global sql_mode = 'STRICT_TRANS-TABLES';
# 修改完之后退出再重新进入

基本数据分类

整型

tinyint,smallint,bigint

总结

  • 针对整型字段,不需要加括号指定宽度,因为它默认的宽度已经足够显示所有的数据了,因为做大

浮点型

#分类
float,double,decimal
#存储限制
float(255,30) # 总共255位,小数占30位
double(255,30) # 总共255位,小数占30位
decimal(65,30) # 总共65位,小数占30位
# 方向键可以返回上一条命令,方便操作,但是前期学习不要用
# 每种类型精确度不同
# float < double < decimal
# 三种类型各有使用类型

字符类型

# 定长char
char(4) # 数据超过4个直接报错,不够四个字符空格补全
# 变长varchar 
varchar(4) # 数据超过四个直接报错,不够有几个存几个
create table t18(name char(4))
insert into t18 values('a')

# 介绍一个方法 char_length:统计字段长度
select char_length(name) from t18;
# char 在硬盘上存的是真正的数据,四位带空格。显示的时候MYSql会自动将多余的空格去除
# 可以修改sql_mode 让MYSQL不做自动剔除操作

char 与 varchar对比

  • char
    • 缺点:浪费空间,比真实的数据多存了空格
    • 优点:存取简单,直接按照固定的字符存取数据即可
  • varcahr
    • 缺点:不知道一次取几位,存取较为麻烦
    • 优点:节省空间

以前很多用char,现在用varchar也很多。以后在公司里不需要考虑这些东西

时间类型

date # 年月日
datetime # 年月日时分秒 2020-5-4 12:02:00
time # 时分秒
Year # 年份
# 年份必须大于1970
create table student(
	id int,
	name varchar(16),
	birth_year year,
	birth_date date,
	study_time time
);
insert into student values(1,'aaa','2000','2000-11-11','11:11:11');

枚举与集合类型

枚举:enum,多选一

集合:set,多选多

使用

creater table user(
	id int,
	name char(16),
	gender enum('male','female','other')
);
insert into user values(1,'aaa','male');
insert into user values(2,'bbb','female');
# 枚举的字段,在存储的时候只能从枚举中选一个存储

create table teacher(
	id int,
    name char(16),
    hobby set('read','music','guitar')
);
insert into teacher values(1,'aaa','read,music')
insert into teacher values(1,'aaa','read,music,bass')
# 集合可以只写一个或多个,但是不能写没用列举的内容,欧否则报错

总结

  • 字段类型

  • 严格模式

  • 约束条件

    not null
    zerofill
    unsigned
    
原文地址:https://www.cnblogs.com/telecasterfanclub/p/12826691.html