字符编码

查看MySQL默认编码命令:\s
"""
如果是5.X系列 显示的编码有多种
latin1
gbk
如果是8.X系列 显示的统一是utf8mb4
utf8mb4是utf8优化版本 支持存储表情
"""

统一字符编码

第一种方式(临时的)

1.首先连接到MySQL : mysql -uroot -proot
2.输入\s,即可查看数据库的字符编码
3.查看数据库的详细编码,输入:show variables like '%char%';
4.设置编码如:
set character_set_database=utf8; set character_set_server=utf8; 当我们打开新窗口时,新窗口不生效,只会在当前窗口生效。关闭再打开,也不生效。

第二种方式,设置全局的数据库字符编码(临时的)

当重启MySQL服务的时候,编码依然会变为原来的字符编码
1.首先连接到MySQL : mysql -uroot -proot
2.查看数据库的详细编码,输入:show variables like '%char%';
3.设置编码
set global character_set_database=gbk; set global character_ser_server=gbk;
打开新的窗口,关闭再打开窗口,都生效,但是当我们重启了MySQL服务后就不生效了,又得重新设置编码。

第三种方式,设置永久的字符编码(永久)

在配置文件中修改数据库的字符编码。
在MySQL安装目录下面,找到my.ini配置文件,如果没有我们可以手动创建一个。
添加固定的配置信息即可
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
最后我们还需要重启一下服务就可以了。

存储引擎

什么是存储引擎

    存储引擎是MylSQL的核心,是数据库底层软件组织,数据库使用存储引擎进行创建、查询、更新和删除
数据。不同的存储引擎提供不同的存储机制、索引技巧、锁级别、事务等功能。存储引擎是基于表的,而非数据库。

查看存储引擎

    show engines;

需要了解的引擎

1、InnoDB存储引擎:

   特点:有诸多功能 安全性较高 存取速度没有MyISAM快
InnoDB是MySQL5.5版本之后的默认存储引擎,它是为了达到处理巨大数据量的最大性能而设计的,其CPU
效率可能是任何其他基于磁盘的关系型数据库引擎锁不能匹敌的。 InnoDB支持事务、提供行级锁,每个表的主键不能为空且支持主键自增长,支持外键完整性约束;

2、MyISAM存储引擎:

    特点:存取数据的速度快 但是功能很少 安全性较低
不支持事务、也不支持外键,使用表级锁控制并发的读写操作,支持全文索引。MyISAM引擎强调快速读取
操作,主要用于高负载的select,对事务完整性没有要求的应用可以用这个引擎来创建表。
MyISAM类型的表支持三种不同的存储结构:静态型、动态型、压缩型:
(1)静态型:指定义的表列的大小是固定(即不含有:xblob、xtext、varchar等长度可变的数据类
型)。使用静态格式的表的性能比较高,因为在维护和访问以预定格式存储的数据时,需要的开销比较低,但
这种高性能是以空间为代价换来的,因为在定义的时候是固定的,所以不管列中的值有多大,都会以最大值为
准,占据了整个空间。优点存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多。 (2)动态型:如果列定义为动态的(xblob, xtext, varchar等数据类型),这时MyISAM就自动使
用动态型,虽然动态型的表占用了比静态型表较少的空间,但带来了性能的降低,因为如果某个字段的内容发
生改变,则其位置很可能需要移动,这样就会导致碎片的产生,随着数据变化的增多,碎片也随之增加,数据
访问性能会随之降低。
'''
对于因碎片增加而降低数据访问性这个问题,有两种解决办法: ① 尽可能使用静态数据类型; ② 经常使用optimize table table_name语句整理表的碎片,恢复由于表数据的更新和删除导致的
空间丢失。如果存储引擎不支持 optimize table table_name则可以转储并重新加载数据,这样也可以减少碎片;
'''
(3)压缩型:如果在数据库中创建在整个生命周期内只读的表,则应该使用MyISAM的压缩型表来减少空
间的占用,因为每个记录是被单独压缩的,所以只有非常小的访问开支。

3、Memory存储引擎:

    以内存作为数据存取地 速度快但是断电立刻丢失。
Memory存储引擎通过在内存中创建临时表来存储数据。每个表实际对应一个磁盘文件,该文件的文件名
和表名是相同的,类型为.frm。该磁盘文件只存储表的结构,而数据存储在内存中,所以使用该种引擎的表拥
有极高的插入、更新和查询效率。由于所存储的数据保存在内存中,如果mysqld进程发生异常、重启或计算机
关机等等都会造成这些数据的消失。 默认使用Hash 索引,也可以使用B树型索引。 Memory存储引擎主要用于内容变化不频繁,或者作为统计操作的中间结果表,便于高效地对中间结果进
行分析并得到最终的统计结果。

4、BLACKHOLE(黑洞引擎)

    该存储引擎支持事务,而且支持mvcc的行级锁,写入这种引擎表中的任何数据都会消失,主要用于做日志
记录或同步归档的中继存储,这个存储引擎除非有特别目的,否则不适合使用。

自定义选择存储引擎

    create table t1(id int)engine=myisam;
create table t2(id int)engine=innodb;
create table t3(id int)engine=blackhole;
create table t4(id int)engine=memory;

创建表的完整语法

    create table 表名(
字段名1 字段类型(数字) 约束条件,
字段名2 字段类型(数字) 约束条件,
字段名3 字段类型(数字) 约束条件
);
'''
1.字段名和字段类型是必须的
2.数字和约束条件是可选的
3.约束条件可以写多个 空格隔开即可
字段名1 字段类型(数字) 约束条件1 约束条件2 约束条件3
4.最后一行字段结尾不能加逗号
极其容易被忽略!!!
'''

字段类型之整型

按能够存储的数字范围的大小分为:
tinyint 1bytes
smallint 2bytes
int 4bytes
bigint 8bytes

    需要考虑正负数的问题 如果需要存储负数 则需要占据一个比特位
create table t5(id tinyint);
insert into t5 values(-129),(256);
# 如果是在5.6版本不会报错 会自动处理成最大范围(没有意义)
步骤1:set global sql_mode = 'STRICT_TRANS_TABLES';
步骤2:退出客户端 重新登录即可 整型默认是有符号的,若只需存储无符号值,可增加 unsigned 属性。
create table t6(id tinyint unsigned); int(M)中的 M 代表最大显示宽度,并不是说 int(1) 就不能存储数值10了,不管设定了显示宽度是多少个字
符,int 都是占用4个字节,即int(5)和int(10)可存储的范围一样。

字段类型之浮点型

float    4个字节  单精度浮点数值
double 8个字节 双精度浮点数值
decimal 对DECIMAL(M,D),如果M>D,为M+2字节否则为D+2字节 精确小数值
上述浮点型从上往下精确度越来越高
float(255,30) 总共255位 小数位占30位
double(255,30) 总共255位 小数位占30位
decimal(65,30) 总共65位 小数位占30位 对于声明语法 DECIMAL(M,D) ,自变量的值范围如下: M是最大位数(精度),范围是1到65。可不指定,默认值是10。 D是小数点右边的位数(小数位)。范围是0到30,并且不能大于M,可不指定,默认值是0。 例如字段 salary DECIMAL(5,2),能够存储具有五位数字和两位小数的任何值,因此可以存储在salary列中
的值的范围是从-999.99到999.99。

字段类型之字符类型

    其中 char 和 varchar 是最常用到的。char 类型是定长的,MySQL 总是根据定义的字符串长度分配足够的
空间。当保存 char 值时,在它们的右边填充空格以达到指定的长度,当检索到 char 值时,尾部的空格被删
除掉。varchar 类型用于存储可变长字符串,存储时,如果字符没有达到定义的位数,也不会在后面补空格。如果字符超出了定义的位数,会报错。 char(M) 与 varchar(M) 中的的 M 表示保存的最大字符数,单个字母、数字、中文等都是占用一个字符。 """
课外扩展研究
char_length() 获取字段数据的长度
该方法无法直接获取到定长的真实长度
因为MySQL在存数据的时候会自动填充空格在取数据的时候又会自动移除空格 能不能让MySQL在取数据的时候不自动移除空格
单次修改
set session sql_mode = 'pad_char_to_full_length'
"""

数字的含义

字段类型括号内的数字大部分情况下是用来限制存储的长度
但是在整型中并不是用来限制长度 而是用来控制展示长度 create table t12(id int(3));
insert into t12 values(1111); # 不会报错 create table t13(id int(3) zerofill); # 位数不够用0填充
insert into t13 values(1); # 001
insert into t13 values(1111); # 有几位就展示几位
"""
结论
以后涉及到整型字段 都无需自己定义长度 直接使用自带的即可
而针对其他类型的字段 则需要自己添加数字
"""

字段类型之枚举与集合

enum

枚举的使用方式

定义:enum(可能出现的元素列表); //如enum(‘男’,‘女’)
使用:存储数据,只能存储上面定义好的数据 枚举型是利用整数进行管理的,能够2个字节进行管理!每个值,都是一个整数标识,从第一个选项开始为
1,逐一递增! create table my_enum( gender enum(‘男’,‘女’,‘保密’) )charset utf8; 作用之一:规范数据格式,数据只能是规定的数据中的其中一个 作用之二:节省存储空间(枚举通常有一个别名:单选框),枚举实际存储的是数值,而不是字符串本身 – 插入数据
insert into my_enum values(‘男’),(‘保密’); – 数值插入枚举元素
insert into my_enum values (1),(2); – 错误数据
insert into my_enum values(‘male’); – 错误:没有该元素

set

    SET是一个字符串对象,可以有零或多个值,其值来自表创建时规定的允许的一列值。指定包括多个SET
成员的SET列值时各成员之间用逗号(‘,’)间隔开。这样SET成员值本身不能包含逗号。set的容纳范围为64个不
同的成员..set其实和枚举差不多,set指定了一个集合范围,在我们插入数据的时候,需要插入在set范围之
内的元素,如果插入了未被包含的元素,那么就会发出警告。 CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));//新建表格 INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d'); select col from myset;//索引值全部显示'a,d'; insert into myset (col) values('a,b,s');//会发出警告,并且s不会被插入到表格当中

字段类型之日期类型

MySQL支持的日期和时间类型有 YEAR 、TIME 、DATE 、DATETIME 、TIMESTAMP

date				年月日
datetime 年月日时分秒
time 时分秒
year 年 关于 DATETIME 与 TIMESTAMP 两种类型如何选用,可以按照存储需求来,比如要求存储范围更广,则推荐
使用 DATETIME ,如果只是存储当前时间戳,则可以使用 TIMESTAMP 类型。不过值得注意的是,
TIMESTAMP 字段数据会随着系统时区而改变但 DATETIME 字段数据不会。总体来说 DATETIME 使用范
围更广。

约束条件

无需正负号(一般用于整型字段)

unsigned

零填充

zerofill

非空

not null
字段值不能为空

默认值

default
create table t19(id int,name varchar(32) default '1111');
插入数据时该字段给了值,就用输入的值,没给值则使用默认值。

唯一值

unique
create table t1(
id int unique,
);
该字段的值是唯一的,不可重复。 '''多列唯一:多个字段下对应的数据组合到一起的结果不能重复 是唯一的'''
create table t1(
id int,
name varchar(32),
unique(id,name)
);
id和name组合在一起的值唯一。
(1,'张三')(1,'李四') (2,'张三')可以

主键

primary key(非空且唯一)
create table t1(
id int primary key,
name varchar(32)
);
将id字段设置为主键,那么id不能为空且值不能重复。

自增

auto_increment 自动增加
专门配合主键一起使用 用户以后在添加数据的时候就不需要自己记忆主键值
create table t1(
id int primary key auto_increment,
name varchar(32)
);
之后我们添加数据就不需要写id的值,它会自动增长。

字符编码,存储引擎,MySQL字段类型,MySQL字段约束条件的更多相关文章

  1. MySQL基础day03 存储引擎和外键MySQL 5.6

    MySQL基础day03_存储引擎和外键-MySQL 5.6 外键的条件: 1,表的存储引擎为innodb存储引擎 2,表中外键字段的类型要与参考表的字段类型一致 3,外键字段要是索引类型中的一种 M ...

  2. MySQL技术内幕InnoDB存储引擎(一)——MySQL体系结构和存储引擎

    1.数据库和实例 数据库(database)和实例(instance)不能混淆. 什么是数据库 数据库是物理操作系统文件或其他文件类型的集合.说白了,就是存储着的文件,不会运行起来,只能被实例增删改查 ...

  3. java获取mysql数据库表、字段、字段类型、字段注释

    最近想要写一个根据数据库表结构生成实体.mapper接口.mapping映射文件.service类的简单代码生成工具,所以查阅了一些资料,怎样获取数据库的表.表中字段.字段类型.字段注释等信息. 最后 ...

  4. Java查询MySQL数据库指定数据库中所有表名、字段名、字段类型、字段长度、字段描述

    1,查询方法 public static List<Map<String, String>> getColumnInfoByTableName(String databaseN ...

  5. powerdesigner12.5 设置表字符集和存储引擎

    powerdesigner12.5在做建模的时候发现没有找到哪儿设置表的字符集和存储引擎.于是研究了一番. 在菜单上方选择 Database => Edit Current DBMS   然后选 ...

  6. oracle,如何查看视图结构,获得视图中的字段名称、字段类型、字段长度等。

    需要获得一个视图中的字段名称.字段类型.字段长度等信息,该如何编写sql语句.通过select * from user_views可以获得给定用户下所有的视图名称了,但是没找到如何获取视图结构的解决方 ...

  7. sqlserver查询当前库下,一张表的表名,字段名,字段类型,字段长度

    sqlserver版: 查询当前数据库下所有表名: select * from sys.tables; 查询当前库下,一张表的表名,字段名,字段类型,字段长度: select a.name 表名,b. ...

  8. Oracle查询一个命名空间下所有表和视图的表名、字段名、字段类型、字段大小,是否可为NULL,主键和注释信息

    使用SQL查询Oracle一个命名空间下所有表和视图的表名.字段名.字段类型.字段大小,是否可为NULL,主键和注释信息. SQL如下,注意需要将'CDFLOOD'更换为您要查询的命名空间: sele ...

  9. 浅谈MySql的存储引擎(表类型)

    来源:http://www.cnblogs.com/lina1006/archive/2011/04/29/2032894.html 什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到 ...

  10. 浅谈MySql的存储引擎(表类型) (转)

    什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合. 我们通常说的MySql数据库,sql server数据库等等其实是 ...

随机推荐

  1. 一个 Spring 的应用看起来象什么?

    一个定义了一些功能的接口.这实现包括属性,它的 Setter , getter 方法和函数等.Spring AOP.Spring 的 XML 配置文件.使用以上功能的客户端程序.

  2. C++ | 虚函数产生条件

    虚函数产生的条件 能否成为虚函数主要有以下两种判断依据,如果以下两种条件均满足,则具有成为虚函数的条件. 1.虚函数机制为动多态提供支持,而虚函数表中存放着虚函数的地址.因此虚函数必须是可以取地址的函 ...

  3. 【Matlab】简单的滑模控制程序及Simulink仿真

    文章: [控制理论]滑模控制最强解析 滑模控制程序及Simulink仿真 这篇文章仿真和输出U的推到有些问题,博主根据此篇文章进行修改进行对sin(t)曲线的追踪(使用滑模控制) 使用滑模控制对sin ...

  4. IPhoneX网页布局简介

    IPhoneX全面屏是十分科技化的,但是由于其圆角和摄像头刘海位置以及操控黑条的存在使得我们需要去对其样式做一些适配,没有X的同学可以开启 Xcode 9 的iPhone X 模拟器作为学习和调试. ...

  5. H5扇形

    使用H5 canvas绘制的可交互扇形 requestAnimationFrame() 现有动画实现方式的不足 setTimeout和setInterval都不十分精确.为它们传入的第二个参数,实际上 ...

  6. 深入理解ES6之《扩展对象》

    属性初始值的简写 当对象字面量只有一个属性的名称时,JS引擎会在可访问作用域中查找其同名变量:如果找到则该变量的值被赋给对象字面量里的同名属性 function createPerson(name, ...

  7. Sentry前端部署拓展篇(sourcemap关联、issue关联、release控制)

    原文首发于我的个人博客: https://lonhon.top/ 之前的<基础篇>主要介绍了Sentry和基本部署流程,在实际使用过程中你会发现Sentry受欢迎的原因:除了单纯的监控异常 ...

  8. Java JDK 动态代理实现和代码分析

    JDK 动态代理 内容 一.动态代理解析 1. 代理模式 2. 为什么要使用动态代理 3. JDK 动态代理简单结构图 4. JDK 动态代理实现步骤 5. JDK 动态代理 API 5.1 java ...

  9. 【零碎小bug系列】安卓开发是遇到空指针异常java.lang.NullPointerException: Attempt to invoke...

    安卓开发是遇到空指针异常 java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable ...

  10. JavaSE常用类之Object类

    1. hashCode方法 代码: package NeiBuLei; public class hashCode { public static void main(String[] args) { ...