Python学习第十七天——MySQL搜索引擎与数据类型、约束

存储引擎:

​ 可以理解为存储数据的方式不一样

​ 查看所有的存储引擎

​ show engines;

​ 需要掌握的

​ MyISAM

​ MySQL5.5及之前版本默认的存储引擎。

​ 存取数据的速度都非常快,但是功能较少,安全性低。

​ InnoDB

​ MySQL5.6及之后版本默认的存储引擎

​ 存储数据的速度没有MyISAM快,但是功能多,安全性高。

​ 事务 行锁 外键

​ BlackHole

​ 类似于垃圾场,往里面写入的任何数据都会消失。

​ Memory

​ 内存存储数据

​ 验证:

​ create table t1(id int) engine = InnoDB;

​ create table t2(id int) egine = MyISAM;

​ create table t3(id int) egine = BlackHole;

​ create table t4(id int) egine = Memory;

​ #文件个数不一致

​ InnoDB

​ .frm 表结构

​ .ibd 表数据和索引

​ MyISAM

​ .frm 表结构

​ .MYD 表数据

​ .MYII 索引

​ BlackHole

​ .frm 表结构

​ Memory

​ .frm 表结构

MySQL基本数据类型:

​ 整型

​ tinyint smallint int bigint

​ 1.不同类型能存储的数字范围不一样

​ 2.验证是否自带符号

​ create table t5(id tinyint);

​ insert into t5 values(-129),(256);

​ 结论:所有的整型都是自带符号的

​ create teble t6(id tinyint unsigned);

​ 针对整型字段 括号里面的数字不是用来限制存储长度而是用来控制展示长度

​ 定义整形字段无需自己写括号和数字。

​ 验证

​ create table t12(id int(4) zerofill);

​ insert into t12 values(1),(111111);

​ 浮点型

​ float(255,30)

​ 总共255位,小数占30位

​ double(255,30)

​ 总共255位,小数占30位

​ decimal(65,30)

​ 总共63位,小数30位

​ create table t7(id float(255,30) );

​ create table t8(id double(255,30) );

​ create table t9(id decimal(65,30) );

​ insert into t7 values();

​ insert into t8 values();

​ insert into t9 values();

​ 精确度不一样

​ float < double < decimal

​ 在实际开发过程中 很多时候看似需要用数字存储的数据,其实我们可以用字符串存储。

​ 字符类型

​ char(4)

​ 最大存储4个字符,超出直接报错,不超出空格填充至4位。

​ varchar(4)

​ 最大存储4个字符,超出直接报错,不超出有几位存几位。

​ create table t10(id int,name char(4));

​ create table t11(id int,name varchar(4));

​ insert into t10 values(1,‘jason’)

​ insert into t11 values(1,‘jason’)

​ 5.6通过设置严格模式,通过设置配置修改sql_mode,自定义设置时可能忘记设置。

​ 查看sql_mode

​ show variables like ‘%mode%’;

​ 修改

​ set global sql_mode = ‘strict_trans_tables’;

​ 推出客户端重启

​ 统计字段长度

​ selcet char_length(name) from t10

​ 设置严格模式查看空格,验证是否自动填充。

​ set global sql_mode = ‘strict_trans_tables,pad_chat_to_full_length’;

​ char

​ 优点:整存整取,速度快。

​ 缺点:浪费硬盘空间

​ varchar 加bytes包头记录数据长度

​ 优点:节省硬盘空间

​ 缺点:速度没有char快。

​ 日期类型

​ datatime 年月日 时分秒

​ time 时分秒

​ date 年月日

​ year 年

​ create table t13(

​ id int,

​ name varchar(32),

​ reg_time datetime,

​ study_time time,

​ birth date,

​ r_time year

​ );

​ 枚举与集合类型

​ 枚举 多选一

​ create t14 (

​ id int,

​ name char(16),

​ gender enum(‘male’,‘female’,‘other’)

​ )

​ 集合 多选多(多选一)

​ create t14 (

​ id int,

​ name char(16),

​ hobby set(‘read’,‘study’,‘music’,‘tea’)

​ )

补充思想:
乐观锁悲观锁

​ 悲观并发控制实际上是“先取锁再访问”的保守策略,为数据处理的安全提供了保证。但是在效率方面,处理加锁的机制会让数据库产生额外的开销,还有增加产生死锁的机会;另外,在只读型事务处理中由于不会产生冲突,也没必要使用锁,这样做只能增加系统负载;还有会降低了并行性,一个事务如果锁定了某行数据,其他事务就必须等待该事务处理完才可以处理那行数

乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。实现数据版本有两种方式,第一种是使用版本号,第二种是使用时间戳。一般的实现乐观锁的方式就是记录数据版本。乐观并发控制相信事务之间的数据竞争(data race)的概率是比较小的,因此尽可能直接做下去,直到提交的时候才去锁定,所以不会产生任何锁和死锁。

公钥私钥

公钥用来加密,私钥用来解密。

冷数据与热数据

访问频次层面

热数据:是需要被计算节点频繁访问的在线类数据。

冷数据:是对于离线类不经常访问的数据,比如企业备份数据、业务与操作日志数据、话单与统计数据。

数据分析层面
独有的数据技术引擎:冷数据、温数据和热数据。

冷数据——性别、兴趣、常住地、职业、年龄等数据画像,表征“这是什么样的人”;
温数据——近期活跃应用、近期去过的地方等具有一定时效性的行为数据,表征“最近对什么感兴趣”;
热数据——当前地点、打开的应用等场景化明显的、稍纵即逝的营销机会,表征“正在哪里干什么”。

创建表的完整语法:

​ create table 表名(

​ 字段名1 字段类型(宽度) 约束条件,

​ 字段名2 字段类型(宽度) 约束条件,

​ 字段名3 字段类型(宽度) 约束条件

​ );

​ 1.字段名与字段类型是必须的,宽度和约束条件是可选的。

​ 2.约束条件可以有多个。

​ 字段名 字段类型(宽度) 约束条件1 约束条件2 约束条件3;

​ 3.最后不需要加,

约束条件:

​ 在字段类型的基础上添加额外的约束

​ zerofill 填充

​ unsigned 无符号类型

​ not null 非空

​ default 默认

​ unique 唯一

​ porimary key 主键

​ auto_increment 自增

​ foreign key 外键

​ 1.unsigined 无符号

​ 2.zerofill 填充

​ 3.not null 非空

​ create table t2(

​ id int,

​ name varchat(32) not null

​ );

​ 4.default 默认值

​ create table t3(

​ id int,

​ name char(32),

​ gender enum(‘male’,‘female’,‘others’) default ‘male’

​ );

​ 5.unique 唯一

​ 单列唯一

​ create table t4(

​ id int,

​ name varchar(32) unique

​ );

​ 多列唯一

​ create table t5(

​ id int,

​ host varchar(32),

​ port int,

​ unique(host,port)

​ );

​ 6.primary key 主键

​ 1.单从限制上来看,主键相当于是非空且唯一的约束。

​ create table t6(

​ id int primary key

​ );

​ 2.InnoDB存储引擎规定了在创建表的时候必须有且只有一个主键。

​ ①为什么之前创建表的没有主键也可以?

​ 当表中没有任何的约束条件字段,为了能够顺利地创建出表,InnoDB存储引擎会采用内部隐藏的字段作为主键。

​ 隐藏意味着我们无法使用到,主键可以帮助我们加快数据的查询速度。

​ ②没有主键但是存有非空且唯一的字段,那么会自动将该字段升级为主键

​ create table t7(

​ id int,

​ age int not unll unique,

​ pwd int not null unique

​ );

​ 结论:我们在创建表的时候一般都会创建一个id字段(序号\编号),并且我们会将该字段设置为主键。

​ 联合主键

​ create table t8(

​ id int,

​ nid int,

​ primary key(id,nid)

​ );

7.auto_increment 自增

​ 专门用来给key键使用的 -> primary key

​ 主键的固定写法:

​ create table t8(

​ id int primary key auto_increment

​ );

​ InnoDB引擎自增是有限制的

​ there can be only one auto column and it must be defined as a keym

主键的特征:

​ delete from 不影响主键的自增。

​ truncate 清空表数据并且充值逐渐。

添加数据的两种方式:

​ insert into t1 values(); #按字段顺序一一传值。

​ insert into t1(name) values(); #指名道姓的传值。

外键 foreign key(dep_id) references dep(id)

​ 问题:

​ 1.表结构不明确(忽略)

​ 到底是员工表还是部门表。

​ 2.浪费存储空间(忽略)

​ 硬盘不花我的钱。

​ 3.表扩展性不足(不能忽略)

​ 拆分:

​ 上述三个问题都可以解决,但员工与部门之间的联系消失。

​ 外键字段

​ 用来建立表与表之间的关系的字段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值