MySQL日常笔记第二讲
今日内容概要
存储引擎
MySQL的数据类型
约束条件
今日内容详细
存储引擎
"""
针对不同的数据可以有不同的存储方式
存储引擎就相当于针对数据采用不同的存储方式
"""
查看mysql内部所有的存储引擎
show engines;
需要了解的
MyISAM 是mysql5.5版本之前默认的存储引擎
优点:存取数据速度较于innoDB更快
缺点:数据安全性不高
blackhole 黑洞(往里面写什么都会自动消失)
memory 内存(数据会全部存在内存中 断电全部丢失)
innoDB mysql5.5版本之后默认使用的存储引擎
优点:管理数据更加的安全、更加丰富的功能
create table t1(id int)engine=innodb;
create table t2(id int)engine=myisam;
create table t3(id int)engine=blackhole;
create table t4(id int)engine=memory;
insert into t1 values(1);
insert into t2 values(1);
insert into t3 values(1);
insert into t4 values(1);
创建表的完整语法
create table 表名(
字段名1 字段类型[(宽度)约束条件],
字段名2 字段类型[(宽度)约束条件],
字段名3 字段类型[(宽度)约束条件],
...
)
1.[]包裹的都是可选参数(可写可不写,即不是必须的)
2.字段名和字段类型则是必须要写的
3.最后一个字段语句后不能有逗号
4.约束条件可以有多个 彼此之间空格隔开即可
create table t1(
id int,
name char,
password int #千万千万不要加逗号
);
字段类型
整型
tinyint 1个字节 可能包含正负数 也可以只是正数
smallint 2个字节 可能包含正负数 也可以只是正数
int 4个字节 可能包含正负数 也可以只是正数
bigint 8个字节 可能包含正负数 也可以只是正数
正负号需要一个比特位
"""
补充知识点
1个字节=8个比特位
(每一个比特位只能是数字0或者1)
00000000
10000000
11000000
"""
create table t2(id tintyint);
"""
默认是带正负号的
如果插入的数据超出了范围
1.5.6版本不会报错
会按照该字段最大限度存储
2.5.6版本之后由于严格模式的存在
会直接报错不让你插入数据
"""
如果你不想有正负号 你需要自己制定
create table t4(id int unsigned);
宽度唯独在整型部分表示的不是限制长度*******
了解即可
create table t5(x int(8) unsigned zerofill);
insert into t5 values(4294967296123);
insert into t5 values(66);
mysql> select * from t5;
+------------+
| x |
+------------+
| 4294967295 |
| 00000066 |
+------------+
2 rows in set (0.00 sec)
"""
针对整型括号里面的数字不是用来显示存储长度的
而是用来限制展示长度的
够位数正常显示
不够用0填充(空格填充)
"""
在定义整型字段的时候你不要考虑括号里面的数字**
create table t1(id int);
create table t1(id tinyint);
create table t1(id smallint);
create table t1(id bigint);
针对整型不要自己写宽度
严格模式
show variables like '%mode%';
+----------------------------+------------------------+
| Variable_name | Value |
+----------------------------+------------------------+
| binlogging_impossible_mode | IGNORE_ERROR |
| block_encryption_mode | aes-128-ecb |
| gtid_mode | OFF |
| innodb_autoinc_lock_mode | 1 |
| innodb_strict_mode | OFF |
| pseudo_slave_mode | OFF |
| slave_exec_mode | STRICT |
| sql_mode | NO_ENGINE_SUBSTITUTION |
+----------------------------+------------------------+
sql_mode严格模式
"""
能尽量少让数据库干活就尽量少干活
不在操作数据库的时候数据库只应该做存取数据的活
其他所有的活都不应该干
比如帮你修改数据长度
先计算当前数据类型最大能够存储的数据
之后按照最大的存储
在存储数据的时候,如果数据不合法数据库层面应该直接报错,而不是自己处理
"""
set global sql_mode ='STRICT_TRANS_TABLES';
要退出客户端重新登录即可
浮点型
小数
float(255,30) # 总共255位小数占30位
double(255,30) # 总共255位小数占30位
decimal(65,30) # 总共65位小数占30位
"""
三者的区别在于精确度不一样
float<double<decimal
针对精确度的问题,有时候数字类型都会有点偏差
有时候我们会将看似应该用数字存储的数据用字符串存储
"""
字符类型
在mysql中字符类型只有两类
1.char 定长(长度是固定的)
2.varchar 不定长(长度是可变的)
charI(4)#只能存四个字符,多了直接报错少了默认用空格补全
varchar(4)#只能存四个字符,多了直接报错少了有几个就存几个
"""
针对char不够位数用空格填充,但是你在将数据取出来的时候会自动帮你将之前的空格再异常掉
char_length 统计字符串长度
如果你想取消自动填充自动移除的功能 需要修改严格模式
"""
set global
sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";
一定要退出当前客户端再加入
"""
char与varchar的使用区别
"""
char
优点:存取数据的速度都很快(暴力 存取都是按照固定的长度)
缺点:浪费存储空间
varchar
优点:节省存储空间
缺点:存取速度较于char慢
"""
jason eva egon wusir
char(5)
jasoneva egon wusir
varchar(5)
1bytes+jason1bytes+eva1bytes+egon1bytes+wusir
先取1bytes里面包含了Jason数据的长度5 然后我就读5位
之后再读1bytes里面包含了eva数据的长度3 然后我就读3位
"""
后面我们在使用的时候用char还是用varchar
以前基本上用的都是char
现在varchar用的更加普遍
一般情况下用varchar具体可以根据业务情况而定
日期类型
分类
-date:2019-05-01 年月日
-time:11:11:11 时分秒
-datetime:2019-01-02 11:11:11 年月日时分秒
-Year:2019 年
create table student(
id int,
name char(16)
born_year year,
birth date,
study_time time,
reg_time datertime
);
insert into student values(1,'jason','2019','2019-05')
枚举与集合
枚举 单选
create table user(
id int,
name char(16),
gender enum('male','female','others')
);
在插入数据的时候针对enum字段 只能插入括号内列举的
集合 多选
create table teacher(
id int
name char(16),
hobby set('read','sleep','sanna','abj')
);
约束条件
约束条件其实就是对字段额外的限制
not null 该字段不能为空
create table t17(id int,name varchar(4)not null);
insert into t17 values(1,null);#报错 不能插入null
"""在往表中插入数据的时候可以指定字段插入"""
insert into t17(id)values(666);#报错 name字段必须给支
2.default 默认值
"""
你不给值就用默认的,如果你给了就用你给的
"""
3.unique 唯一
"""
该字段在整个表中都不能有重复的数据出现
"""
联合唯一
单个字段可以出现重复,但是多个字段联合起来的结果必须是唯一的
约束条件之primary key
primary key 主键
"""
在限制层面上的效果等价于
not null+nnique
但是它除了上述效果之外还有特定的功能
类似于书的目录,能够加快数据的查询速度
"""
create table t20(id int primary key);
1.在innoDB存储引擎中规定所有的表都必须有且只有一个主键
2.如果你没有指定的话,那么InnoDB会自己用一个隐藏字段作为主键
以后我们正儿八经的创建表的时候就需要加上主键
并且我们通常都是将表的ID字段作为主键
create table t22(id int primary key auto_increment,name varchar(16));
结论
以后主键都是固定写法
in int primary key auto_increment
扩展
1.一张表中必须有且只有一个主键,如果你没有设置主键,那么会从上到下搜索直到遇到一个非空且唯一的字段
自动将其设置为主键
2.联合主键 使用较少
多个字段组合到一起形成一个主键,其本质其实还是一个主键
HTML 5196 字节 465 单词 276 行
MySQL日常笔记第二讲的更多相关文章
- mysql 学习笔记 第二天
插入表格数据: Insert into table_name set columns_1=value1,columns_2=value2,对于没有赋值的列,将会取默认值,并且这个方法只能一次插入一个数 ...
- mysql日常笔记(持续更新)
常用场景 sql_mode问题:http://blog.csdn.net/ccccalculator/article/details/70432123 连续日期补全/数据补零操作 在不使用存储过程和函 ...
- MySQL实战45讲学习笔记:日志系统(第二讲)
一.重要的日志模块:redo log 1.通过酒店掌柜记账思路刨析redo log工作原理 2.InnoDB 的 redo log 是固定大小的 只要赊账记录在了粉板上或写了账本上,之后即使掌柜忘记了 ...
- 基于微信公众平台的开发(清华大学第二讲)_Alien的笔记
基于微信公众平台的开发(清华大学第二讲)_Alien的笔记 基于微信公众平台的开发(清华大学第二讲)
- MySQL日常使用笔记
逍遥山人的MySQL使用笔记,持续更新中 表结构 新建表以及添加表和字段的注释 create table t_user( ID INT(11) primary key auto_increment c ...
- mysql basic operation,mysql总结,对mysql经常使用语句的详细总结,MySQL学习笔记
mysql> select * from wifi_data where dev_id like "0023-AABBCCCCBBAA" ; 1.显示数据库列表.show d ...
- 数据库MySQL学习笔记高级篇
数据库MySQL学习笔记高级篇 写在前面 学习链接:数据库 MySQL 视频教程全集 1. mysql的架构介绍 mysql简介 概述 高级Mysql 完整的mysql优化需要很深的功底,大公司甚至有 ...
- MySQL提升笔记(3)日志文件详解
在MySQL数据库和InnoDB存储引擎中,有很多种文件,如:参数文件.日志文件.socket文件.pid文件.MySQL表结构文件.存储引擎文件. 本节重点关注日志文件,MySQL的复制.事务等重要 ...
- Mysql学习笔记(三)对表数据的增删改查。
正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...
随机推荐
- 如何在pyqt中实现win10亚克力效果
亚克力效果的实现思路 上一篇博客<如何在pyqt中实现窗口磨砂效果> 中实现了win7中的Aero效果,但是和win10的亚克力效果相比,Aero还是差了点内味.所以今天早上又在网上搜了一 ...
- ApacheCN NodeJS 译文集 20211204 更新
Node API 开发入门指南 零.前言 一.Node.js 简介 二.构建 API--第 1 部分 三.构建 API--第 2 部分 React TypeScript Node 全栈开发 零.序言 ...
- 支付宝同步请求检查appid,以及公钥,私钥是否正确
第一步:下载支付宝Demo 下载地址:https://opendocs.alipay.com/open/270/106291#%E8%BF%90%E8%A1%8C%E8%AF%B4%E6%98%8E ...
- 还在做廉价的劳动力?部署PXE实现Kickstart无人值守安装
搭建PXE实现Kickstart无人值守安装 1.搭建PXE远程安装服务器 2.实现kicstart无人值守安装 1.PXE介绍及搭载: PXE是有Intel公司开发的网络引导技术,工作在Client ...
- An incompatible version 1.1.1 of the APR based Apache Tomcat Native library is installed, while Tomcat requires version 1.1.17
[问题现象]: 启动Tomcat时报如下类似错误信息: An incompatible version 1.1.12 of the APR based Apache Tomcat Native lib ...
- Feign 动态URL 解决记录
Feign中使用动态URL请求 (应当是spring-cloud-starter-openfeign,不知道和一般的feign有何差别) 在spring项目下,假设有这样个Feign的消费接口,原来写 ...
- 框架3--backup结构(rsync复制指令)
目录 框架3--备份结构(rsync复制指令) 一.3个复制指令 二.rsync介绍 三.rsync特性 四.rsync应用场景 4.1 全量备份 4.2 增量备份 五.rsync的传输方式(推+拉) ...
- Solution -「AGC 036D」「AT 5147」Negative Cycle
\(\mathcal{Descriprtion}\) Link. 在一个含 \(n\) 个结点的有向图中,存在边 \(\lang i,i+1,0\rang\),它们不能被删除:还有边 \(\l ...
- 利用shell脚本[带注释的]部署单节点多实例es集群(docker版)
文章目录 目录结构 install_docker_es.sh elasticsearch.yml.template 没事写写shell[我自己都不信,如果不是因为工作需要,我才不要写shell],努力 ...
- suse 12 编译部署Keepalived + nginx 为 kube-apiserver 提供高可用
文章目录 编译部署nginx 下载nginx源码包 编译nginx 配置nginx.conf 配置nginx为systemctl管理 分发nginx二进制文件和配置文件 启动kube-nginx服务 ...