昨日内容回顾

  • 数据存储的演变
# 方向:
朝着更加统一和方便管理
  • 数据库的发展史
# 由本地保存逐步演变为线上保存
  • 数据库的本质
# 本质上就是一款CS架构的软件

"""
数据库:
在不同场景可能对应不同的解释
"""
  • 数据库的分类
# 1.关系型数据库
有固定的表结构
表与表之间可以可以建立代码层面的关系
MySQL Oracle PostgreSQL MariDB sqlite db2 access sql server... # 2.非关系型数据库
没有固定的表结构
数据存储全部采用 K:V 键值对的形式
radis mongodb memcache...
  • MySQL的下载与使用
# MySQL版本:
5.6 Windows学习推荐
5.7 目前企业正在过度
8.0 Mac本可以直接安装 # 直接访问官网一步步下载 bin文件夹
mysqld.exe 服务端
mysql.exe 客户端 data文件夹 mydefault.ini readme # 简单的试试
cd切换到bin路径下
先启动服务端mysqld
在启动客户端mysql
  • MySQL基本配置
1.环境变量的添加

2.系统服务制作(开机自启)
mysqld --install
net start mysql
net stop mysql
musqld --remove
  • 重要概念
# 库:文件夹

# 表:文件

# 记录:文件内的一行行数据
  • 基本SQL语句
# 1.针对库的
create database 库名; # 创建库
show databases; # 查看所有库
show create database 库名; # 定向查看某个库
alter database 库名 charset='gbk'; # 修改库编码
drop database 库名; # 删除库 select database(); # 查看当前所在的库名
use 库名; # 切换到指定库 # 2.针对表的
create table 表名(字段名1 字段类型,字段名2 字段类型); # 创建表
show tables; # 查看当前库下所有的表
show create table 表名; # 查看指定的表
describe 表名; # 查看表的具体信息
desc 表名; # 查看表的具体信息(简写)
alter table 原表名 rename 新表名; # 修改表名
alter table 表名 change 原字段名 新字段名 新类型; # 同时修改字段名和类型
alter table 表名 modify 字段名 新字段类型; # 单独修改字段类型
drop table 表名; # 删除表 # 3.针对记录的
insert into 表名 values(数据,数据,数据); # 添加单条数据
insert into 表名 values(),(),(); # 添加多条数据
select * from 表名; # 查看表中的所有数据内容
update 表名 set 字段名='新数据' where 筛选条件
delete from 表名 where 筛选条件; # 删除记录内容
  • 配置文件
# \s 查看基本配置信息

# MySQL5.6版本默认的内部编码不是统一的 可能会造成乱码问题

# 解决乱码问题:
主要以 mydefault.ini 及创建其副本并命名为 my.ini
具体配置内容直接拷贝

今日内容概要

  • 存储引擎
  • MySQL基本数据类型
  • 约束条件

内容详细

1.存储引擎

# 1.存储引擎可以堪称是处理数据的不同方式

# 2.查看存储引擎的方式
show engines; # 3.需要掌握的四个存储引擎
MyISAM
MySQL5.5之前默认的存储引擎
不支持事务、行级锁和外键 针对数据的操作较于InnoDB不够安全
但数据的存取速度较于InnoDB更快 InnoDB
MySQL5.5之后默认的存储引擎
支持事务、行级锁和外键 针对数据的操作更加的安全 BLACKHOLE
写入其中的数据都会立刻消失 类似于垃圾处理站 MEMORY
基于内存存取数据
速度最快 但是一旦断电立刻丢失 # 4.存储引擎创建表的不同点
create table t1(id int) engine=myisam;
create table t2(id int) engine=innodb;
create table t3(id int) engine=memory;
create table t4(id int) engine=blackhole;
"""
MyISAM会创建三个文件:
.frm 表结构文件
.MYD 表数据文件
.MYI 表索引文件(索引是用来加快数据查询的) InnoDB会创建两个文件:
.frm 表结构文件
.ibd 表数据和表索引文件 memory会创建一个文件:
.frm 表结构文件 blackhole会创建一个文件:
.frm 表结构文件
"""

2.MySQL基本数据类型之整型与浮点型

# 1.整型
tinyint smallint int bigint
不同的int类型能够存储的数字范围是不一样的
"""
1.要注意是否存负数(正负号需要占一个比特位)
2.针对手机号码只能用bigint 3.是否需要正负号
create table t5(id tinyint);
insert into t5 values(-999),(999);
结论:所有的int类型默认都需要正负号 create table t6(id tinyint unsigned); # 移除正负号
insert into t6 values(-999),(999);
""" # 2.浮点型
float double decimal
float(255,30) # 总共255位 小数位占30位
double(255,30) # 总共255位 小数位占30位
decimal(65,30) # 总共65位 小数位占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(2.222222222222222222222222);
insert into t8 values(2.222222222222222222222222);
insert into t9 values(2.222222222222222222222222);
结论:三者的精确度不一样
float < double < decimal 至于到底使用哪个:
一般情况下 小数点后面只保留两位 float就足够了
如果从事高精密行业 可以考虑更高精确度 有时候很多看似需要用数字存储的数据 可能都是存的字符串
字符串没有精确度一说 python本身对数字的精确度很低 之所以能够从事人工智能和数据分析完全得益于功能强大的模块
"""

3.MySQL基本数据类型之字符类型

# char(4)
定长类型 最多只能存四个字符 多了报错少了自动空格填充至四个 # varchar(4)
变长类型 最多只能存四个字符 多了报错少了有几个则存几个 # 多了报错特性
create table t10(id int, name char(4));
create table t11(id int, name varchar(4));
insert into t10 values(111,'jason')
insert into t11 values(222,'jason') 针对5.6版本超出范围不会报错 而是自动帮你截取并保存(此行为不合理)
解决方式1:修改配置文件(永久 不推荐)
解决方式2:命令修改(暂时)
1. show variables like '%mode%';
2. set global sql_mode = 'strict_trans_tables';
set session # 当前窗口有效
set global # 当前服务端有效
修改完毕后退出客户端重新进入即可 再次执行插入文本指令 直接报错 # 定长与变长特性
insert into t1o values(333,'k');
insert into t11 values(444,'l');
"""
此时看不出不同
可以利用统计某个字段数据的长度 char_length()
select char_length(name) from t10 where id=333;
底层确实会填充 但是取出来的时候又会自动去除
加上下面指令后 退出重新进入客户端再进行验证即可:
set global sql_mode = 'strict_trans_tables,pad_char_to_full_length';
"""

4.char与varchar的对比

# char
优势:整存整取 速度快
劣势:浪费存储空间 # varchar
优势:节省存储空间
劣势:存取数据的速度较char慢
"""
char(5) 存五位 取五位
jasontony kevintom oscartank sean jerry varchar(5)
1bytes+jason1bytes+tony1bytes+kevin1bytes+tom
存:先计算数据的长度
取:先获取报头的数据
""" # 以前几乎都是char 现在很多情况下使用varchar
进了公司之后 会通过邮件告诉你每个字段的英文名和中文名及类型等项目的诸多信息 # 补充:在创建字段的时候可以加上相应的注释
create table t12(
id int comment '序号',
name char(4) comment '姓名'
);

5.整型中括号内数字的作用

create table t13(id int(3));
insert into t13 values(555555555);
"""
在整型中括号内的数字并不是用来限制存储的长度 而是用来控制展示的长度 我们以后在定义整型字段的时候 不需要自己添加数字 使用默认的就可以
""" create table t14(id int(3) zerofill);
insert into t13 values(4);
# 结论:整型比较的特殊 括号中的数字是唯一一个不是用来限制存储长度的类型

6.枚举与集合类型

# 枚举
多选一 关键字:enum()
create table user(
id int,
name varchar(32),
gender enum('male','female','others')
);
insert into user values(1,'jason','男'); # 报错
insert into user values(2,'jason','male'); # 正常 # 集合
多选多(包含多选一) 关键字:set()
create table userinfo(
id int,
name char(16),
hobby set('ball','girl','man','others')
);

7.日期类型

# date	年月日

# datetime	年月日时分秒

# time	时分秒

# year	年份

create table client(
id int,
name varchar(36),
reg_time date,
bieth datetime,
study_time time,
join_time year
);
insert into client values(1,'jason','2021-11-11','2021-12-12 12:12:00','12:12:00',2022);

8.创建表的完整语法

create table 表名(
字段名1 字段类型(数字) 约束条件,
字段名2 字段类型(数字) 约束条件,
字段名3 字段类型(数字) 约束条件
);
"""
1.字段名和字段类型时必须的
2.数字和约束条件是可选的 并且 约束条件可以有多个 中间空格隔开即可
3.最后一个语句的结尾一定不要加逗号!!!
"""

9.约束条件之not null

# 约束条件相当于是在字段类型的基础之上 添加的额外约束
例:id int unsigned # unsigned 让数字没有正负号 # zerofill 多余的使用数字0填充 # not null 非空
ceeate table t2(
id int,
name varchar(36) not null
); """
新增表数据的方式:
方式一:
按照字段顺序一一传值
insert into t1 values(1,'jason'); 方式二:
自定义传值顺序 或者不传值
insert into t1(name,id) values('jason',1);
insert into t1(id) values(1)
在MySQL中不传数据 会使用关键字NULL填充意思就是空 类似于python的None
"""

10.约束条件之default

# default	默认值
所有的字段都可以设置默认值
用户不给该字段传值则使用默认的 否则使用传了的 create table t1(
id int default 911,
name varchar(16) default 'jason'
);

11.约束条件之unique

# unique	唯一值

# 单列唯一
create table t2(
id int,
name varchar(32) unique
);
"""添加重复的name值时就会报错""" # 联合唯一
create table t3(
id int,
host varchar(32),
port int,
unique(host,port)
);
"""
host 和 port两项合在一起值不能重复
"""

12.约束条件之primary key与auto_increment

# primary key	主键
单从约束层面上来说 相当于 not null + unique # 非空且唯一
在此基础之上还可以加快数据的查询 """
# InnoDB存储引擎规定了 一张表必须有且只有一个主键
因为InnoDB是通过主键的方式来构造表的
如果没有设置主键 情况1:没有主键和其他约束条件
InnoDB会采用隐藏的字段作为主键 不能加快数据的查询 情况2:没有主键但是有非空且唯一的字段
自动将该字段升级为主键
create table t4(
id int,
age int not null unique,
pwd int not null unique
);
# 结论:
以后我们在创建表的时候一定要设置主键
并且主键字段一般都是表的id字段(例:uid sid pid cid)
例如:
create table user(
id int primary key,
name varchar(32)
);
""" # auto_increment 自增(只能给主键用)
"""
由于主键类似于数据的唯一标识 并且主键一般都是数字类型
我们在添加数据的时候不可能记住接下来的序号是多少 太麻烦 create table user1(
id int primary key auto_increment,
name varchar(32)
);
"""

13.自增的特性

# 自增不会因为删除操作而回退
delete from无法影响自增 # 如果想要重置需需要使用truncate关键字
truncate 表名 # 清空表数据并且重置主键值

MySQL基本数据类型与约束条件的更多相关文章

  1. mysql数据库 --数据类型、约束条件

    今日内容 表的详细使用 1.创建表的完成语法 2.字段类型 整型.浮点型.字符类型.日期类型.枚举与集合类型 3.约束条件 primary key.unique.not null.default 一. ...

  2. MySQL数据库:SQL语句基础、库操作、表操作、数据类型、约束条件、表之间的关系

    数据库相关概念: 1. 数据库服务器:运行数据库管理软件的计算机 2. 数据库管理软件:MySQL.Oracle.db2.slqserver 3. 库:文件夹,用来组织文件/表 4. 表:文件(类似于 ...

  3. MySQL存储引擎、基础数据类型、约束条件

    MySQL存储引擎 存储引擎 # 存储引擎可以堪称是处理数据的不同方式 # 查看存储引擎的方式 show engines; # 需要掌握的四个存储引擎 MyISAM MySQL5.5之前的默认的存储引 ...

  4. MySQL--表操作(innodb表字段数据类型、约束条件)、sql_mode操作

    一.创建表的完整语法 #[]内的可有可无,即创建表时字段名和类型是必须填写的,宽度与约束条件是可选择填写的.create table 表名(字段名1 类型[(宽度) 约束条件],字段名2 类型[(宽度 ...

  5. MYSQL中数据类型介绍

    一.MySQL的数据类型 主要包括以下五大类: 主要包括以下五大类: 整数类型:bit.  int . bit int . small int . tiny int . medium int .boo ...

  6. MySQL学习——数据类型

    MySQL学习——数据类型 摘要:本文主要学习了MySQL数据库的数据类型. 整数类型 MySQL主要提供的整数类型有tinyint.smallint.mediumint.int.bigint,其属性 ...

  7. mysql字段数据类型、设置严格模式

    表操作 今日内容 1.数据类型 建表的时候,字段都有对应的数据类型 整型 浮点型 字符类型(char与varchar) 日期类型 枚举与集合 2.约束条件 primary key unique key ...

  8. Mysql基础(三):MySQL基础数据类型、完整性约束、sql_mode模式

    目录 2.MySQL基础数据类型.完整性约束.sql_mode模式 1. MySQL常用数据类型 2. 完整性约束 3. MySQL的sql_mode模式说明以及设置 2.MySQL基础数据类型.完整 ...

  9. 数据库02 /MySQL基础数据类型、完整性约束、sql_mode模式

    2.MySQL基础数据类型.完整性约束.sql_mode模式 目录 2.MySQL基础数据类型.完整性约束.sql_mode模式 1. MySQL常用数据类型 MySQL常用数据类型预览 1. 1 数 ...

随机推荐

  1. SYCOJ1717负二进制

    题目-负二进制 (shiyancang.cn) 进制的实质在于对于进制数的选择,选择不满足的填入当前的位置,然后除掉,继续开始选择.但是对于本题,是负数,但是进制上的数字为正数,所以就要调整,借位,因 ...

  2. Presto 在字节跳动的内部实践与优化

    在字节跳动内部,Presto 主要支撑了 Ad-hoc 查询.BI 可视化分析.近实时查询分析等场景,日查询量接近 100 万条.本文是字节跳动数据平台 Presto 团队-软件工程师常鹏飞在 Pre ...

  3. Mysql的存储过程摘要

    MySQL 5.0 版本开始支持存储过程. 存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象. 存储过程是为了完成特定功能的SQL语句集,经编 ...

  4. Hybrid App(混合开发) 移动端开发调试

    1.下载项目,npm install安装依赖 本地运行 npm run dev(根据具体packjson配 置而定) 2.局域网访问:http://172.20.9.35:8080/ 3.手机端访问: ...

  5. mysql数据库优化1

    目录 数据库结构的设计优化 1.数据库结构的设计 2.针对大型的数据量提前进行分库和分表 3.分库分表带来的问题 4.表结构设计注意的问题 查询优化 1.查询语句的注意事项 2.应尽量避免在 wher ...

  6. Golang 基准测试Benchmark

    基准测试 Go语言标准库内置的 testing 测试框架提供了基准测试(benchmark)的能力,实现了对某个特定目标场景的某项性能指标进行定量的和可对比的测试. 基本规则 基准测试的代码文件必须以 ...

  7. Solon Web 开发,五、数据访问、事务与缓存应用

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  8. jsp标签 formatNumber、formatDate、parseNumber、parseDate的使用

    引用本文的有关标签需要引用对应的标签库 <%--引入格式化动作标签库--%> <%@taglib prefix="fmt" uri="http://ja ...

  9. 【源码阅读】vm-insert与vm-storage之间的通讯

    先说结论 vm-insert与vm-storage之间采用极其简单的通讯协议 对于简单的场景,越简单性能越高 vm-insert连接到vm-storage后,先发送字符串vminsert.02,vm- ...

  10. manjaro20软件商店无法链接下载

    软件商店如果无法链接下载 解决方案1 可以使用terminal慢慢下载,.bashrc中配置代理 如果依然不行,检查网络设置代理是否为自动或者手动设置正确. 解决方案2 检查是否未设置中国社区源或者重 ...