MYSQL数据库
字符编码与配置文件
# 1.查看MYSQL相关信息 \s 当前用户,版本,编码,端口号 mysql5.6前编码需要人为统一,之后默认是统一的 """ 想要永久修改编码配置,需要操作配置文件 """ # 2.默认的配置文件是my-dafault.ini 拷贝相同的一份并重命名为my.ini """字符编码相关配置直接拷贝写入文件即可""" [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_general_ci [client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 ps: 1.utf8mb4功能比utf8强大,可以存储表情 2.utf8与utf-8是有区别的 3.MYSQL中只有utf8 4.我们在修改了配置文件中关于客户端[mysqld]的配置,需要重启服务器 """ 我们可以在配置文件中写入账户名和密码,之后再使用mysql登录进去就好 [mysql] user='root' password=123 """
数据库存储引擎
1.存储引擎 : 数据库针对数据采取的多种存取方式 2.查看常见存储引擎方式 : show engines; 3.四个存储引擎: -1.MyISAM MySQL5.5之前默认的存储引擎 特点: 存取数据速度快,功能较少,安全性较低 -2.InnoDB MYSQL5.5之后默认的存储引擎 特点: 支持事务,行锁,外键等操作,存取熟读没有MyISAM快,但是安全性更高 -3.Memory 特点: 基于内存存取数据,仅用于临时表数据存取 -4.BlackHole 特点: 任何写入进去的数据都会立即丢失 4.了解不同存储引擎底层的文件个数 """ create database db2; use db2; create table t1(id int) engine=innodb; create table t2(id int) engine=myisam; create table t3(id int) engine=memory; create table t4(id int) engine=blackhole; insert into t1 values(1); insert into t2 values(1); insert into t3 values(1); insert into t4 values(1); # 再mysql中可以忽略大小写 """ -1.innodb两个文件 .frm 表结构 .ibd 表数据(表索引) -2.myisam三个文件 .frm 表结构 .MYD 表数据 .MYI 表索引 -3.memory一个文件 .frm 表结构 -4.blackhole一个文件 .frm 表结构
创建表的完整语法
# 语法: create table 表名( 字段名 字段类型(数字) 约束条件, 字段名 字段类型(数字) 约束条件, 字段名 字段类型(数字) 约束条件 ); # 注意事项: 1.字段名和字段类型是必须的 2.数字和约束条件是可选的 3.约束条件也可以写多个 空格隔开即可 4.最后一行结尾不能加逗号 ps:编写sql语句报错,根据提示定位分析
MySQL字段基本数据类型
整型
1.tinyint 1bytes 正负号(占1bit) 2.smallint 2bytes 正负号(占1bit) 3.int 4bytes 正负号(占1bit) 4.bigint 8bytes 正负号(占1bit)
验证整型是否带负号: create table t5(id tinyint); insert into t5 values(-129),(128); 结果: -128和127,结果自带正负号 如何取消正负号? create table t6(id tinyint unsigned); 验证: insert into t6 values(-129),(128),(1000); 结果: 0和255
# 类型后面的数字在很多地方都是用来表示限制存储数据的长度(整型除外) create table t12(id int(3)); # 不是用来限制长度 insert into t12 values(12345); create table t13(id int(5) zerofill); # 而是用来控制展示的长度 insert into t13 values(123),(123456789); create table t14(id int); """写整型的时候无需添加括号和数字"""
浮点型
# 第一个数表示总共多少位,第二个数表示小数占多少位 float 使用方式: float(255,30) double 使用方式: double(255,30) decimal 使用方式: decimal(65,30) # 验证精准度 1.验证float: 创建表: create table t4(id float(255,30)); 存入数据: insert into t4 values(1.1111111111111111111111111111111111); 查看数据: select * from t4; -结果:1.111111164093017600000000000000 2.验证double: 创建表: create table t5(id double(255,30)); 存入数据: insert into t5 values(1.1111111111111111111111111111111111); 查看数据: select * from t5; -结果:1.111111111111111200000000000000 3.验证decimal: 创建表: create table t11(id decimal(65,30)); 存入数据: insert into t11 values(1.1111111111111111111111111111111111); 查看数据: select * from t11; -结果: 1.111111111111111111111111111111 """ 三者的区别基于就是精度不同 float < double < decimal """
字符类型
1. char 定长 char()括号里是几,就最大能存储几个字符,超出范围报错
不超出范围,用空格填充到四个字符
2. varchar 变长 varchar()括号里是几,就最大能存储几个字符,超出范围报错
不超出范围,能有几位就存几位
验证区别:
超出范围二者都会报错,使用char_length()可以统计数据的长度
注意sql_mode='strict_trans_tables'
ps:两者感觉上并没有区别,默认情况下char存储的时候,没有满足长度会自动填充空格,读取时又会取消空格,所以看起来没区别
<取消该机制需要使用sql_mode> 下面目录是替换,不是新增,之前的配置也要写:
set global sql_mode='strict_trans_tables,pad_char_to_full_length';
# char与varchar哪个更好呢 char整存整取,速度快,但是浪费存储空间 varchar节省存储空间,但是速度比char慢 # 1.char(4): a son jacktom lili # 空格占位 # 2.varchar(4): 1bytes+a1bytes+son1bytes+jack1bytes+tom1bytes+lili ps:存取数据都需要操作报头(耗时)
"""
二者使用都很频繁,很多时候默认为varchar
"""
枚举与集合
# 1.枚举enum - 多选一 例:性别(男,女,其他) 我们只能选择一次性别 create table t15( id int, name varchar(32), gender enum('male','female','others') ); - 结果:只能选择枚举出来里面的一个,不在选择里面的写入会报错
# 2.集合set - 多选多(包含多选一) 例:爱好(唱,跳,rap,篮球) 我们可以选择多个爱好 create table t17( id int, name varchar(32), hobbies set('sing','jump','rap','basketball') ); - 结果:可以选择里面的多个或一个,不在选择里面的写入会报错
日期类型
date 年月日 datetime 年月日时分秒 time 时分秒 year 年 # 1.例: - 创建表: create table t18( id int, name varchar(32), birth date, reg_time datetime, study_time time, join_time year ); - 添加数据: insert into t18 values(1,'tom','2011-11-11','2000-11-11 11:11:11','11:11:11','1995'); - 查看数据: select * from t18;
实操:
结果:
严格模式
# 当我们在是使用数据库存储数据的时候,数据不符合规范,应该直接报错,不可以擅自修改数据(数据失真,没有意义), 如果没有报错就是我们之前修改配置文件的问题: show variables like '%mode%'; 可以通过修改来改回来 1.临时修改 set session sql_mode='strict_trans_tables'; 在当前客户端有效 set global sql_mode='strict_trans_tables'; 在当前服务端有效 2.永久修改 直接修改配置文件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律