-
字符编码与配置文件
-
数据库存储引擎
-
创建表的完整语法
-
MySQL字段基本数据类型
-
MySQL字段常见约束条件
字符编码与配置文件
# 查看MySQL相关信息
\s
当前用户、版本、编码、端口
MySQL5.6及之前的版本编码需要人为统一 之后的版本已经全部默认统一
# 如果想要永久修改编码配置 需要操作配置文件
默认的配置文件是my-default.ini
步骤1:拷贝一份 my-default.ini 配置文件,并修改名称为my.ini
步骤2:清空 my.ini 文件内的内容
步骤3:添加固定配置信息
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
步骤4:保存并重启服务端就可以了
net stop mysql
net start mysql
ps:
1.utf8mb4能够存储表情 功能更强大
2.utf8与utf-8是有区别的 MySQL中只有utf8
修改了配置文件中关于[mysqld]的配置 需要重启服务端
"""
利用配置文件我们可以偷懒
将管理员登录的账号密码直接写在配置文件中 之后使用mysql登录即可
[mysql]
user='root'
password=123
"""
数据库存储引擎
# 存储引擎含义
数据库针对数据采取的多种存取方式
# 查看常见的存储引擎方式
show engines;
# 需要了解的引擎
MyISAM
MySQL5.5之前默认的存储引擎
存取数据的速度快 但是功能较少 安全性低
InnoDB
MySQL5.5之后默认的存储引擎
支持事务、行锁、外键等操作 存取速度没有MyISAM快 但是安全性更高
Memory
基于内存存取数据 仅用于临时表数据存取
BlackHole
任何写进去的数据都会立刻消失
了解不同存储引擎底层文件个数
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;
"""
1.innodb两个文件
.frm 表结构
.ibd 表数据(表索引)
2.myisam三个文件
.frm 表结构
.MYD 表数据
.MYI 表索引
3.memory一个文件
.frm 表结构
4.balckhole一个文件
.frm 表结构
"""
insert into t1 values(1);
insert into t2 values(1);
insert into t3 values(1);
insert into t4 values(1);
ps:MySQL默认忽略大小写
创建表的完整语法
create table 表名(
字段名 字段类型(数字) 约束条件,
字段名 字段类型(数字) 约束条件,
字段名 字段类型(数字) 约束条件
);
1.字段名和字段类型是必须的
2.数字和约束条件是可选的
3.约束条件也可以写多个 空格隔开即可
4.最后一行结尾不能加逗号
ps:编写SQL语句报错之后不要慌 仔细查看提示 会很快解决
near ')' at line 7
字段类型之整型
tinyint 1bytes 正负号(占1bit)
smallint 2bytes 正负号(占1bit)
int 4bytes 正负号(占1bit)
bigint 8bytes 正负号(占1bit)
# 注意事项
1、需要考虑正负数的问题, 如果需要存储负数则需要占一个比特位
2、手机号如果使用整型存储, 需要使用bigint才可以
"""
工作小技巧:
有时候看似需要使用数字类型存储的数据其实可能使用的是字符串、
应为字符串可以解决不同语言对数字不精确的缺陷
"""
验证整型默认是否携带正负号
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);
严格模式
当我们在使用数据库存储数据的时候 如果数据不符合规范 应该直接报错而不是擅自修改数据 这样会导致失真(没有实际意义)
正常都应该报错 但是我们之前不小心改了配置文件
show variables like '%mode%';
1.临时修改
set session sql_mode='strict_trans_tables';
在当前客户端有效
set global sql_mode='strict_trans_tables';
在当前服务端有效
2.永久修改
直接修改配置文件
字段类型之浮点型
float(255,30)
double
decimal
上述浮点型从上往下精确度越来越高
float(m, d) 4字节,单精度浮点型,m总个数,d小数位
float(255,30) 总共255位 小数位占30位
double(m, d) 8字节,双精度浮点型,m总个数,d小数位
double(255,30) 总共255位 小数位占30位
decimal(m, d) decimal是存储为字符串的浮点数
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(1.111111111111111);
insert into t8 values(1.111111111111111);
insert into t9 values(1.111111111111111);
"""
使用范围:
正常业务精确度只要小数点三四位的样子的时候,使用float就可以
如果是科研业务,精确度要求极高,那么就使用decimal
"""
三者的核心区别在于精确度不同
float< double < decimal
字段类型之字符类型
# 定长
char
char(4) 最多存储四个字符 超出就报错 不够四个空格填充至四个
# 变长
varchar
varchar(4) 最多存储四个字符 超出就报错 不够则有几位存几位
create table t10(id int, name char(4));
create table t11(id int, name varchar(4));
insert into t10 values(1, 'jason');
insert into t11 values(1, 'jason');
"""
获取字段数据的长度
char_length()
这个方法无法直接获取到定长的真实长度,因为MySQL在存数据的时候会自动填充空格在取数据的时候又会自动移除空格
想要让MySQL在取数据的时候不自动移除空格
set global sql_mode='strict_trans_tables,pad_char_to_full_length';
"""
# 工作使用
char
整存争取 速度快(就是会造成一定存储空间的浪费)
可能会造成黏包形式的现象
'''
owenkevinmary tom
'''
varchar
节省存储空间
存取数据的速度没有char快
'''
varchar在存数据的时候会生成一个1bytes的报头 记录数据长度
varchar在取数据的时候先会读取1bytes的报头 从中获取真实数据长度
1bytes+owen1bytes+kevin1bytes+mary 1bytes+tom
'''
"""
两者都有使用场景
针对统一中国人的姓名,应该采取 ———— varchar
规模较小,数据量相对固定的字典 ———— char
char与varchar的使用需要结合具体应用场景
很多时候字段类型的选取和命名都会在邮件中标明
"""
数字的含义
字段类型括号内的数字大部分情况下是用来限制存储的长度
但在整型中并不是用来限制长度的,而是用来控制展示长度的
create table t12(id int(3)); # 不是用来限制长度
insert into t12 values(1111);
create table t13(id int(3) zerofill); # 而是用来控制展示的长度
insert into t13 values(1);
insert into t13 values(1111); # 有几位展示几位
"""
结论:
涉及到整型字段 都无需自己定义长度 直接使用自带的
针对其他类型的字段,则需要自己添加数字
"""
字段类型之枚举与集合
# 枚举
多选一模式
create table t15(
id int,
name varchar(32),
gender enum('male','femle','others')
);
insert into t15 values(1,'tony','男'); # 报错
insert into t15 values(2,'jason','male'); # 正确
'''
插入数据的时候,正对gender只能填写提前定义好的数值
'''
# 集合
多选多(也可以多选一)
create table t16(id int,name varchar(32);hobbies set('read','study','sleep'));
insert into t16 values(1,'jason','read')
insert into t16 values(2,'tony','study')
insert into t16 values(3,'tom','read,study')
字段类型之日期类型
datetime 年月日时分秒
date 年月日
time 时分秒
year 年
create table t17(
id int,
name varchar(32),
register_time datetime,
birthday date,
study_time time,
work_time year
);
insert into t17 values(1,'jason','2000-11-11 11:11:11','1998-01-21','11:11:11','2000');
ps:以后涉及到日期相关字段一般都是系统自动回去 无需我们可以操作
标签:约束条件,字符,insert,into,id,values,MySQL,table,create
From: https://www.cnblogs.com/super-xz/p/16920175.html