如果是5.X系列,显示的编码有多种:latin1;gbk
如果是8.X系列,显示的统一是:utf8mb4;utf8mb4是utf8优化版本,支持存储表情。
5.X默认编码有多种,可能会导致乱码的情况,所以应该统一编码。
使用my-default.ini配置文件来统一字符编码。
配置文件设置步骤:
固定的配置信息:
[mysqld] character-set-server=utf8 collation-server=utf8_general_ci [client] default-character-set=utf8 [mysql] default-character-set=utf8
什么是存储引擎:
存储引擎可以理解为处理数据的不同方式。引擎决定数据库存取数据的方式==>不同的特点==>不同的用户体验。
引擎是建表时规定,提供给表使用的,不是数据库。
查看存储引擎:
show engines;展示所有引擎
MyISAM>>>:
5.1之前版本MySQL默认的存储引擎
特点:存取数据的速度快,但是功能很少,安全性较低。
InnoDB>>>:
5.1之后版本MySQL默认的存储引擎
特点:有诸多功能,安全性较高,但是存取速度没有MyISAM快。
自定义选择存储引擎:
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 类型[(宽度) 约束条件] )engine=innodb charset=utf8; []:表示可选参数
ps:
1.字段名和字段类型是必须的
2.数字和约束条件是可选的
3.约束条件可以写多个,空格隔开即可;eg:字段名1 字段类型(数字) 约束条件1 约束条件2 约束条件3
4.最后一行字段结尾不能加逗号!!!
Mysql数据库数据类型包括:整型,浮点型,字符类型,时间类型,枚举类型,集合类型。
不同类型的整型所占的字节数不一样,决定所占空间及存放数据的大写,从上往下能够存储的数字范围越来越大!!!
整型需要考虑正负数的问题,如果需要存储负数,则需要占据一个比特位。
所有的整型都默认带有正负号。去除正负号则需要使用约束条件。
约束条件:
unsigned:无符号 eg:create table t1(id tinyint unsigned)
zerofill:位数不够用0填充 eg:create table t2(id interesting(3)zerofill)
这三种浮点型:从上往下其精确度越来越高!!!decimal>double>float
(M,D)>>>:M为位数;D为小数位数。
char(4)>>>:最大只能存储四个字符,如果超出则报错;如果不够则用空格补全。
char的特点:整存整取,速度快;但是会造成一定的存储空间的浪费。
varchar(4)>>>:最大只能存储四个,如果超出则报错;如果不够则有几个存几个。
varchar的特点:节省存储空间;但是存取数据的速度相较于char来说较慢。
ps:varchar的存取数据的方式:
varchar在存数据的时候会生成一个1bytes的报头,用来记录数据长度;varchar在取数据的时候先会读取1bytes的报头,然后再从中获取真实数据长度。
总结:数据长度相近的数据提倡用char来存放数据,数据需要高速存取,以空间换时间,采用char类型。
create table t14( id int, name varchar(32), gender enum('male','female','others') ); '''插入数据的时候 针对gender只能填写提前定义好的数值'''
create table t15( id int, name varchar(32), hobby set('篮球','足球','双色球','排球','水球','肉球') );
create table t1( id int, name varchar(32), reg_time datetime, birth date, study_time time, join_time year );
字段类型与约束条件的关系:
约束条件是基于字段类型之上的额外限制。
eg:id int unsigned>>>:字段类型int规定了id字段只能存整数,约束条件unsigned指的是整数基础之上还必须是正数。
eg:create table t1(id tinyint unsigned)
eg:create table t2(id interesting(3)zerofill)
eg:create table t3(id int ,name varchar(32)not null)
insert into t18(id) values(2); # 报错 insert into t18(id,name) values(2,null); # 报错 insert into t18(id,name) values(2,''); # 不报错
eg:create table t4(id int ,name varchar(32)default 'jason')
单列唯一:某个字段下对应的数据不能重复,是唯一的。
create table t20( id int, name varchar(32) unique );
多列唯一:多个字段下对应的数据组合到一起的结果不能重复,是唯一的。
create table t21( id int, host varchar(32), port int, unique(host,port) );
单从约束层面上看,primary key相当于not null + unique。>>>:(非空且唯一)。
eg:create table t6 (id int primary key)
InnoDB存储引擎规定的一张表,有且必须要有一个主键,用于构建表。主键可以加快数据的查询速度(类似于书的目录)。
如果创建表创建的时候没有设置主键也没有其他的键,那么InnoDB会采用一个隐藏的字段作为表的主键(隐藏就意味着而无法使用 即无法加快数据查询);
如果没有主键,但是有非空且唯一的字段,那么会自动升级成主键(从上往下的第一个)。
create table t23( tid int, pid int not null unique, cid int not null unique );
ps:
专门配合主键一起使用,用户以后在添加数据的时候就不需要自己记忆主键值。
create table t25( id int primary key auto_increment, name varchar(32) );
总结:
以后在创建规范的表的时候,一般都会有一个主键字段的编写如下:
id int primary key auto_increment