字符编码,存储引擎及MySQL字段类型相关知识点

一、字符编码

1.在终端输入\s,查看数据库的基本信息(当前用户,版本,编码,端口号)
2.默认的配置文件是my-default.ini
拷贝上述的文件,然后将文件程序命名为my.ini
添加字符编码相关配置:
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
配置文件中涉及到了MySQL相关的配置的修改,那么需要重启服务器才可以生效
ps:我们可以利用配置文件偷懒,将用户名和密码写入配置文件中 ,后续登录的时候就不需要进行输入密码了

二、数据库存储引擎

1.查看所有的存储引擎

我们可以理解存储引擎就是针对相同数据采取不同的存取策略
show engines;
ps:MySQL中默认忽略大小写

2.需要掌握 的存储引擎

1.MyISAM
MySQL5.5之前默认的存储引擎
存取速度快,但是功能少,安全性较低
2.InnoDB
MySQL5.5之后的默认存储引擎
支持事物,行锁,外键等操作,速度没有MyISAM快,但是安全性更高
3.Memory
基于内存的存储引擎,仅应用于临时表的数据存取,但是断电立刻丢失
4.BlackHole
任何写入的数据会立刻消失,类似于垃圾站

3.不同存储引擎之间底层文件的区别

mysql> create database db1;
Query OK, 1 row affected (0.00 sec) mysql> use db1;
Database changed mysql> create table t1(id int) engine=innodb;
Query OK, 0 rows affected (0.02 sec) mysql> create table t2(id int) engine=myisam;
Query OK, 0 rows affected (0.04 sec) mysql> create table t3(id int) engine=memory;
Query OK, 0 rows affected (0.01 sec) mysql> create table t4(id int) engine = blackhole;
Query OK, 0 rows affected (0.04 sec) mysql> insert into t1 values(1);
Query OK, 1 row affected (0.01 sec) mysql> insert into t2 values(1);
Query OK, 1 row affected (0.00 sec) mysql> insert into t3 values(1);
Query OK, 1 row affected (0.00 sec) mysql> insert into t4 values(1);
Query OK, 1 row affected (0.00 sec)

1.Innodb
.frm --->> 表结构
.ibd --->> 表数据(表索引)
2.myisam三个文件
.frm ---->> 表结构
.MYD ---->> 表数据
.MYI ---->> 表索引
3.memory一个文件
.frm ---->> 表结构
4.blackhole一个文件
.frm ----->> 表结构

三、创建表的完整语法

create table 表名(
字段名 字段类型(数字) 约束条件,
字段名 字段类型(数字) 约束条件,
字段名 字段类型(数字) 约束条件
);
1.字段名和字段类型是必须的
2.数字和约束条件是可选的(可有可无)
3.约束条件可以写多个,也可以一个,多个用逗号隔开就好了
4.最后一行不能加逗号

四、字段类型之整型

tinyint             1bytes
smallint 2bytes
int 4bytes
bigint 8bytes

1.验证整型是否自带负号
mysql> create table t5(id tinyint);
Query OK, 0 rows affected (0.04 sec) mysql> insert into t5 values(-129),(256);
Query OK, 2 rows affected, 2 warnings (0.04 sec)
Records: 2 Duplicates: 0 Warnings: 2 mysql> desc t5;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id | tinyint(4) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
1 row in set (0.01 sec) 2.自定义移除符号
# unsigned 约束条件,意思是说不需要负号
mysql> create table t6(id tinyint unsigned);
Query OK, 0 rows affected (0.02 sec) mysql> insert into t6 values(-129),(256);
Query OK, 2 rows affected, 2 warnings (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 2 mysql> select * from t6;
+------+
| id |
+------+
| 0 |
| 255 |
+------+
2 rows in set (0.00 sec)
插入的数据超出了数据类型的范围,不应该让其插入并自动修改,没有意义,数据库应该直接报错
我们可以修改my.ini配置文件就可以完成这样的设想
[mysqld]
sql_mode='strict_trans_tables' mysql> use db1;
Database changed
mysql> insert into t6 values(-8);
ERROR 1264 (22003): Out of range value for column 'id' at row 1

五、字段类型之浮点型

float,double,decimal三者都可以存储浮点型数据,但是各自的精确度不一致
mysql> create table t7(id float(60,20));
Query OK, 0 rows affected (0.02 sec) mysql> create table t8(id double(60,20));
Query OK, 0 rows affected (0.02 sec) mysql> create table t9(id decimal(60,20));
Query OK, 0 rows affected (0.02 sec) mysql> insert into t7 values(1.11111111111111111111);
Query OK, 1 row affected (0.01 sec) mysql> insert into t8 values(1.11111111111111111111);
Query OK, 1 row affected (0.01 sec) mysql> insert into t9 values(1.11111111111111111111);
Query OK, 1 row affected (0.04 sec) mysql> select * from t7;
+------------------------+
| id |
+------------------------+
| 1.11111116409301760000 |
+------------------------+
1 row in set (0.00 sec) mysql> select * from t8;
+------------------------+
| id |
+------------------------+
| 1.11111111111111120000 |
+------------------------+
1 row in set (0.00 sec) mysql> select * from t9;
+------------------------+
| id |
+------------------------+
| 1.11111111111111111111 |
+------------------------+
1 row in set (0.00 sec) # 精确度:float < double < decimal
# 一般情况下,float足够使用了,如果想要追求精确,可以用字符串代替

六、字段类型之字符类型

char:定长
char(4) 最多存储四个字符,超出就报错,不够四个,空格来填
varchar:变长
varchar(4) 最多存储四个字符,超出就报错,不够有几位存几位
mysql> insert into t10 values(1,'jason1');
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql> insert into t11 values(1,'jason1');
ERROR 1406 (22001): Data too long for column 'name' at row 1
# 位数超出就报错
char与varchar
char;整存整取,速度快,浪费存储空间
varchar:节省存储空间,存取数据的速度慢于char
默认情况下char在存储的时候针对没有满足固定位数的字符会自动填充空格,然后在读取的时候又会自动将填充的空格移除,如果想取消该机制,需要
sql_mode
set global sql_mode='strict_trans_tables,pad_char_to_full_length';
mysql> create table t16(id int,name char(4));
Query OK, 0 rows affected (0.02 sec) mysql> create table t17(id int,name varchar(4));
Query OK, 0 rows affected (0.01 sec) mysql> insert into t16 values(2,'J');
Query OK, 1 row affected (0.00 sec) mysql> insert into t17 values(1,'tom');
Query OK, 1 row affected (0.01 sec) mysql> select char_length(name) from t17;
+-------------------+
| char_length(name) |
+-------------------+
| 3 |
+-------------------+
1 row in set (0.00 sec)

七、数字的含义

数字在很多地方都是用来表示限制存储数据的长度
但是在整型中数字却不是用来限制存储长度,而是控制展示的长度
以后写整型无需添加数字
create table t18(id int(3));
insert into t18 values(1),(123),(123456); create table t19(id int(3) zerofill);
insert into t19 values(1),(123),(123456);
mysql> select * from t19;
+--------+
| id |
+--------+
| 001 |
| 123 |
| 123456 |
+--------+
3 rows in set (0.00 sec)

八、字段类型之枚举与集合

枚举(多选一):
mysql> create table t12(
-> id int,
-> name varchar(32),
-> gender enum('male','female')
-> );
Query OK, 0 rows affected (0.02 sec) mysql> insert into t12 values(1,'jason','male');
Query OK, 1 row affected (0.01 sec) mysql> select * from t12;
+------+-------+--------+
| id | name | gender |
+------+-------+--------+
| 1 | jason | male |
+------+-------+--------+
1 row in set (0.00 sec) 集合(多选多):
mysql> create table t13(
-> id int,
-> name varchar(13),
-> hobbies set('dance','sing','drew')
-> );
Query OK, 0 rows affected (0.02 sec) mysql> insert into t13 values(1,'jia','dance,sing,drew');
Query OK, 1 row affected (0.04 sec) mysql> select * from t13;
+------+------+-----------------+
| id | name | hobbies |
+------+------+-----------------+
| 1 | jia | dance,sing,drew |
+------+------+-----------------+
1 row in set (0.00 sec)

九、字段类型之日期类型

datetime    ---->>  年月日时分秒
date ---->> 年月日
time ---->> 时分秒
year ---->> 年 mysql> create table t15(
-> id int,
-> name varchar(32),
-> register_time datetime,
-> birthday date,
-> study_time time,
-> work_time year
-> );
Query OK, 0 rows affected (0.02 sec) mysql> insert into t15 values(1,'jia','2000-11-11 11:11:11','1998-01-21','11:11:11','2000');
Query OK, 1 row affected (0.01 sec) mysql> select * from t15;
+------+------+---------------------+------------+------------+-----------+
| id | name | register_time | birthday | study_time | work_time |
+------+------+---------------------+------------+------------+-----------+
| 1 | jia | 2000-11-11 11:11:11 | 1998-01-21 | 11:11:11 | 2000 |
+------+------+---------------------+------------+------------+-----------+
1 row in set (0.00 sec)

字符编码,存储引擎及MySQL字段类型相关知识点的更多相关文章

  1. 字符编码,存储引擎,MySQL字段类型,MySQL字段约束条件

    字符编码 查看MySQL默认编码命令:\s """ 如果是5.X系列 显示的编码有多种 latin1 gbk 如果是8.X系列 显示的统一是utf8mb4 utf8mb4 ...

  2. MySQL字段类型与操作

    MYSQL字段类型与操作 字符编码与配置文件 操作 代码 功能 查看 \s 查看数据库基本信息(用户.字符编码) 配置(配置文件层面) my-default.ini windows下MySQL默认的配 ...

  3. 存储引擎,MySQL中的数据类型及约束

    存储引擎,MySQL中的数据类型及约束 一.存储引擎 1.不同的数据应该有不同的处理机制 2.mysql存储引擎 ​ Innodb:默认的存储引擎,查询速度叫myisam慢,但是更安全 ​ 支持事务, ...

  4. (转)MySQL字段类型详解

    MySQL字段类型详解 原文:http://www.cnblogs.com/100thMountain/p/4692842.html MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间 ...

  5. MySQL 字段类型介绍

    MySQL 基础篇 三范式 MySQL 军规 MySQL 配置 MySQL 用户管理和权限设置 MySQL 常用函数介绍 MySQL 字段类型介绍 MySQL 多列排序 MySQL 行转列 列转行 M ...

  6. MySql 字段类型对应 Java 实体类型

    前言 MySQL Connector/J 对于 MySql 数据类型和 Java 数据类型之间的转换是很灵活的: 一般来讲,任何 MySql 数据类型都可以被转换为一个 java.lang.Strin ...

  7. MySQL技术内幕InnoDB存储引擎(三)——文件相关

    构成MySQL数据库和InnoDB存储引擎表的文件类型有: 参数文件:MySQL实例运行时需要的参数就是存储在这里. 日志文件:用来记录MySQL实例对某种条件做出响应时写入的文件. socket文件 ...

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

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

  9. 使用Merge存储引擎实现MySQL分表

    一.使用场景 Merge表有点类似于视图.使用Merge存储引擎实现MySQL分表,这种方法比较适合那些没有事先考虑分表,随着数据的增多,已经出现了数据查询慢的情况. 这个时候如果要把已有的大数据量表 ...

  10. 存储引擎:MySQL系列之七

    一.MyISAM存储引擎 缺点: 不支持事务 最小粒度锁:表级 读写相互阻塞,写入不能读,读时不能写 不支持MVCC(支持多版本并发控制机制) 不支持聚簇索引 不支持数据缓存 不支持外键 崩溃恢复性较 ...

随机推荐

  1. JMETER与BeanShell

    变量 Beanshell应用自定义变量有两种方法: #第一种方法,使用${key}格式,但是需要注意这是用应用的变量是没有定义数据类型的 #log.info(String Key)只能打印字符串,所以 ...

  2. Python基础部分:8、for循环和range的使用

    目录 一.while循环补充说明 1.死循环 2.嵌套及全局标志位 二.for...循环 1.for...循环特点 2.for...循环语法结构 三.range方法 1.什么是range 2.不同版本 ...

  3. JVM学习笔记——类加载和字节码技术篇

    JVM学习笔记--类加载和字节码技术篇 在本系列内容中我们会对JVM做一个系统的学习,本片将会介绍JVM的类加载和字节码技术部分 我们会分为以下几部分进行介绍: 类文件结构 字节码指令 编译期处理 类 ...

  4. 系统整理K8S的配置管理实战-建议收藏系列

    目录 一.ConfigMap 1.1.创建 1.1.1.from-file 1.1.2.from-env-file 1.1.3.from-literal 1.1.4.基于yaml文件创建 1.2.Po ...

  5. Go语言核心36讲33

    我们在前几次讲的互斥锁.条件变量和原子操作都是最基本重要的同步工具.在Go语言中,除了通道之外,它们也算是最为常用的并发安全工具了. 说到通道,不知道你想过没有,之前在一些场合下里,我们使用通道的方式 ...

  6. Java—猜数字

    package cn.day03.demo01; import java.util.Random; import java.util.Scanner; public class RandomGame ...

  7. Codeforces Round #833 (Div. 2)补题

    Codeforces Round #833 (Div. 2) D. ConstructOR 知识点:高位和对低位无影响 一开始以为和广州的M一样,是数位dp,后来发现只要找到一个就行 果然无论什么时候 ...

  8. Crony 一个基于Go语言实现的分布式定时任务管理平台

    crony - 分布式定时任务管理平台 1. 基本介绍 1.1 项目背景 项目中存在许多定时任务,很多代码写法都是采取见缝插针式的写法或者直接丢到task服务里面写,存在以下问题 服务多实例时执行定时 ...

  9. (工具) TCMalloc笔记

    下载及编译 wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.9.1/gperftools-2. ...

  10. <二>强弱指针使用场景之 多线程访问共享对象问题

    代码1 #include <iostream> #include <thread> using namespace std; class A { public: A() { c ...