昨日内容回顾
朝着更加统一和方便管理
"""
数据库:
在不同场景可能对应不同的解释
"""
有固定的表结构
表与表之间可以可以建立代码层面的关系
MySQL Oracle PostgreSQL MariDB sqlite db2 access sql server...
没有固定的表结构
数据存储全部采用 K:V 键值对的形式
radis mongodb memcache...
5.6 Windows学习推荐
5.7 目前企业正在过度
8.0 Mac本可以直接安装
bin 文件夹
mysqld.exe 服务端
mysql.exe 客户端
data文件夹
mydefault.ini
readme
cd切换到bin 路径下
先启动服务端mysqld
在启动客户端mysql
1. 环境变量的添加
2. 系统服务制作(开机自启)
mysqld --install
net start mysql
net stop mysql
musqld --remove
create database 库名;
show databases;
show create database 库名;
alter database 库名 charset='gbk' ;
drop database 库名;
select database();
use 库名;
create table 表名(字段名1 字段类型,字段名2 字段类型);
show tables;
show create table 表名;
describe 表名;
desc 表名;
alter table 原表名 rename 新表名;
alter table 表名 change 原字段名 新字段名 新类型;
alter table 表名 modify 字段名 新字段类型;
drop table 表名;
insert into 表名 values(数据,数据,数据);
insert into 表名 values(),(),();
select * from 表名;
update 表名 set 字段名='新数据' where 筛选条件
delete from 表名 where 筛选条件;
主要以 mydefault.ini 及创建其副本并命名为 my.ini
具体配置内容直接拷贝
今日内容概要
内容详细
1.存储引擎
show engines;
MyISAM
MySQL5.5 之前默认的存储引擎
不支持事务、行级锁和外键 针对数据的操作较于InnoDB不够安全
但数据的存取速度较于InnoDB更快
InnoDB
MySQL5.5 之后默认的存储引擎
支持事务、行级锁和外键 针对数据的操作更加的安全
BLACKHOLE
写入其中的数据都会立刻消失 类似于垃圾处理站
MEMORY
基于内存存取数据
速度最快 但是一旦断电立刻丢失
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基本数据类型之整型与浮点型
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);
"""
float double decimal
float (255 ,30 )
double(255 ,30 )
decimal(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基本数据类型之字符类型
定长类型 最多只能存四个字符 多了报错少了自动空格填充至四个
变长类型 最多只能存四个字符 多了报错少了有几个则存几个
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慢
"""
char(5) 存五位 取五位
jasontony kevintom oscartank sean jerry
varchar(5)
1bytes+jason1bytes+tony1bytes+kevin1bytes+tom
存:先计算数据的长度
取:先获取报头的数据
"""
进了公司之后 会通过邮件告诉你每个字段的英文名和中文名及类型等项目的诸多信息
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.日期类型
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
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
所有的字段都可以设置默认值
用户不给该字段传值则使用默认的 否则使用传了的
create table t1(
id int default 911 ,
name varchar(16 ) default 'jason'
);
11.约束条件之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
单从约束层面上来说 相当于 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)
);
"""
"""
由于主键类似于数据的唯一标识 并且主键一般都是数字类型
我们在添加数据的时候不可能记住接下来的序号是多少 太麻烦
create table user1(
id int primary key auto_increment,
name varchar(32)
);
"""
13.自增的特性
delete from 无法影响自增
truncate 表名
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现