昨日内容回顾

  • 数据存储的演变
# 方向:
朝着更加统一和方便管理
  • 数据库的发展史
# 由本地保存逐步演变为线上保存
  • 数据库的本质
# 本质上就是一款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. spring cloud bus 消息总线 动态刷新配置文件 【actuator 与 RabbitMQ配合完成】

    1.前言 单机刷新配置文件,使用actuator就足够了 ,但是 分布式微服务 不可能是单机 ,将会有很多很多的工程 ,无法手动一个一个的发送刷新请求, 因此引入了消息中间件 ,常用的 消息中间件 是 ...

  2. centos7 date时间命令

    date "+%F %T" %F     full date; same as %Y-%m-%d  --相当于年月日格式 %T     time; same as %H:%M:%S ...

  3. CSS中inherit指定继承的使用方法和auto的区别

    CSS中的每个属性都有一个特定值"inherit",其含义是指定继承父元素的相应属性,使用inherit一方面在代码上能地表明要继承于父元素的样式属性,另一方面也使子元素继承了那些 ...

  4. FFT 傅里叶万岁

    FFT --- Fast Foulier Transformation 以 $O(n \log n)$ 的速度计算 $\forall k=1,2,\dots,n, c[k]=\sum\limits_{ ...

  5. Android官方文档翻译 九 2.2Adding Action Buttons

    Adding Action Buttons 增加动作按钮 This lesson teaches you to 这节课教给你 Specify the Actions in XML 在XML中指定动作 ...

  6. Git 基本操作指南

    Git 基本操作指南 内容概要 这个作业属于哪个课程 2022面向对象程序设计 这个作业要求在哪里 2022面向对象程序设计寒假作业1 这个作业的目标 Git & Github 作业正文 如下 ...

  7. 2月3日 体温APP开发记录

    1.阅读构建之法 现代软件工程(第三版) 2.观看Android开发视频教程最新版 Android Studio开发 3.回返地址学习,下载导入相关jar包

  8. [Vue] Vue2 + @vue/composition-api 的一个坑

    Vue2 + @vue/composition-api 和 Vue3 composition api 不一致的地方(待验证) <div v-for="item in arr" ...

  9. Tomcat-默认访问的工程和默认访问的资源

    Tomcat(默认访问的工程和默认访问的资源) ROOT的工程的访问,以及默认index.html页面的访问 当我们在浏览器地址栏中输入访问地址如下: http://ip:port/   ====== ...

  10. 洛谷P1002过河卒java100分题解

    题目描述如图: 这道题我以前以回溯的方法做,只能拿到60分 现在才发现是道动态规划题 解题思路: 创建一个(0,0)到终点打小的二维数组表示棋盘 每个坐标的值为此位置到终点的路数 最下方一排和最右方一 ...