字符编码,存储引擎及MySQL字段类型相关知识点
字符编码,存储引擎及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字段类型相关知识点的更多相关文章
- 字符编码,存储引擎,MySQL字段类型,MySQL字段约束条件
字符编码 查看MySQL默认编码命令:\s """ 如果是5.X系列 显示的编码有多种 latin1 gbk 如果是8.X系列 显示的统一是utf8mb4 utf8mb4 ...
- MySQL字段类型与操作
MYSQL字段类型与操作 字符编码与配置文件 操作 代码 功能 查看 \s 查看数据库基本信息(用户.字符编码) 配置(配置文件层面) my-default.ini windows下MySQL默认的配 ...
- 存储引擎,MySQL中的数据类型及约束
存储引擎,MySQL中的数据类型及约束 一.存储引擎 1.不同的数据应该有不同的处理机制 2.mysql存储引擎 Innodb:默认的存储引擎,查询速度叫myisam慢,但是更安全 支持事务, ...
- (转)MySQL字段类型详解
MySQL字段类型详解 原文:http://www.cnblogs.com/100thMountain/p/4692842.html MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间 ...
- MySQL 字段类型介绍
MySQL 基础篇 三范式 MySQL 军规 MySQL 配置 MySQL 用户管理和权限设置 MySQL 常用函数介绍 MySQL 字段类型介绍 MySQL 多列排序 MySQL 行转列 列转行 M ...
- MySql 字段类型对应 Java 实体类型
前言 MySQL Connector/J 对于 MySql 数据类型和 Java 数据类型之间的转换是很灵活的: 一般来讲,任何 MySql 数据类型都可以被转换为一个 java.lang.Strin ...
- MySQL技术内幕InnoDB存储引擎(三)——文件相关
构成MySQL数据库和InnoDB存储引擎表的文件类型有: 参数文件:MySQL实例运行时需要的参数就是存储在这里. 日志文件:用来记录MySQL实例对某种条件做出响应时写入的文件. socket文件 ...
- powerdesigner12.5 设置表字符集和存储引擎
powerdesigner12.5在做建模的时候发现没有找到哪儿设置表的字符集和存储引擎.于是研究了一番. 在菜单上方选择 Database => Edit Current DBMS 然后选 ...
- 使用Merge存储引擎实现MySQL分表
一.使用场景 Merge表有点类似于视图.使用Merge存储引擎实现MySQL分表,这种方法比较适合那些没有事先考虑分表,随着数据的增多,已经出现了数据查询慢的情况. 这个时候如果要把已有的大数据量表 ...
- 存储引擎:MySQL系列之七
一.MyISAM存储引擎 缺点: 不支持事务 最小粒度锁:表级 读写相互阻塞,写入不能读,读时不能写 不支持MVCC(支持多版本并发控制机制) 不支持聚簇索引 不支持数据缓存 不支持外键 崩溃恢复性较 ...
随机推荐
- Microsoft Office for Mac最新版本安装教程,亲测可用!!!
办公必备的Office工具,它为需要使用 Office 工具的用户和企业设计,让他们可以利用功能强大的 Outlook 来处理电子邮件.日历和通讯录事宜.你所熟知和信赖的 Office 经过更新后,可 ...
- Element基本组件
Element按钮组件: <el-row> <el-button>默认按钮</el-button> <el-button type="primary ...
- Python基础之函数:1、函数的介绍及名称空间
目录 一.函数 1.什么是函数 2.函数的语法结构 3.函数的定义与调用 4.函数的分类 5.函数的返回值 6.函数的参数 二.函数参数 1.位置参数 2.默认参数 3.可变长参数 1.一个*号 2. ...
- 畅联云平台(www.24hlink.cn)支持的用传列表
无锡蓝天 沈阳君丰 无锡富贝 海康威视 海湾 苏州思迪 法安通 北大青鸟 金盾 依爱 威隆 1)几乎集齐了市场上常见的用户信息传输装置的类型,如果没接入的,我们也能接入哦. 2)欢迎咨询我们关于用传的 ...
- 第一百零六篇:变量的不同声明(var,let和const的不同)
好家伙,JS基础接着学, 本篇内容为<JS高级程序设计>第三章学习笔记 1.变量 ECMAScript 变量是松散类型的,意思是变量可以用于保存任何类型的数据. (确实松散,不像C或C++ ...
- hutool包的DateUtil工具类
[首先引入依赖 ] <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-core& ...
- 嵌入式-C语言基础:通过结构体指针访问结构体数组
#include<stdio.h> #include<string.h> struct Student { char name[32]; int age; int height ...
- 嵌入式-c语言基础:冒泡排序实现从大到小排列
#include<stdio.h> int main() { /*冒泡排序:从大到小*/ /*i=0 第1轮(i+1):需要比较9次(sizeArr-i-1)*/ /*i=1 第2轮(i+ ...
- 总结uni-app遇到的坑持续跟新
1.uni.navigateTo跳转没有反应 官方示例 //在起始页面跳转到test.vue页面并传递参数 uni.navigateTo({ url: 'test?id=1&name=unia ...
- 读 RocketMQ 源码,学习并发编程三大神器
笔者是 RocketMQ 的忠实粉丝,在阅读源码的过程中,学习到了很多编程技巧. 这篇文章,笔者结合 RocketMQ 源码,分享并发编程三大神器的相关知识点. 1 CountDownLatch 实现 ...