今日内容概要

  • 字符编码与配置文件
  • 数据库存储引擎
  • 创建表的完整语法
  • MySQL字段基本数据类型

今日内容详细

字符编码与配置文件

1.\s查看MySQL相关信息
	当前用户 版本 编码 端口号
MySQL5.6版本之前的编码需要人为统一 之后的版本已经全部默认统一

如果想要永久修改编码配置 需要操作配置文件
2.默认的配置文件是my-default.ini
	拷贝上述文件并重命名为my.ini

直接拷贝字符编码相关的配置即可
	[mysqld]
        character-set-server=utf8mb4
        collation-server=utf8mb4_general_ci
	[client]
        default-character-set=utf8mb4
	[mysql]
        default-character-set=utf8mb4

修改了配置文件中关于[mysqld]的配置 需要重启服务端

'''
utf8mb4能够存储表情 功能强大
utf8与utf-8是有区别的 MySQL中只有utf8
'''

'''
利用配置文件我们可以偷懒
	将管理员登陆的账号密码直接写在配置文件中 之后直接是有mysql登陆 无需再输入账号密码
	[mysql]
		user='root'
		password=123
'''

数据库存储引擎

存储引擎
	数据库针对数据采取的多种存取方式

查看常见存储引擎的方式
	show engines;

需要了解的四个存储引擎
1.MyISAM
	MySQL5.6之前默认的存储引擎
	存取数据的速度快 但是功能较少 且安全性较低
2.InnoDB
	MySQL5.6之后默认的存储引擎
	支持事务 行锁 外键等操作 存取速度没有MyISAM快 但是安全性更高
3.Memory
	基于内存存取数据 仅用于临时表数据存取
4.BlackHole
	任何写入进去的数据都会立刻丢失

了解不同存储引擎底层文件的个数
	create database db1;
	use db1;
	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.blackhole一个文件
	.frm    表结构
'''

向表中添加数据
	insert into t1 values(1);
	insert into t2 values(2);
	insert into t3 values(3);
	insert into t4 values(4);
查表中数据
	select * from t1;
	select * from t2;
	select * from t3;   # 不退出mysql之前可以查到 退出重登后就查不到了
	select * from t4;   # 查不到任何数据

MySQL中默认忽略大小写

创建表的完整语法

create table 表名(
	字段名 字段类型(数字) 约束条件,
	字段名 字段类型(数字) 约束条件,
	字段名 字段类型(数字) 约束条件
);

1.字段名和字段类型是必须要的
2.数字和约束条件是可选的
3.约束条件也可以写多个 空格隔开即可
4.最后一行结尾不能加逗号

字段类型

整型

MySQL数据类型 含义(有符号)
tinyint 1个字节 范围(-128~127)
smallint 2个字节 范围(-32768~32767)
int 4个字节 范围(-2147483648~2147483647)
bigint 8个字节 范围(+-9.22*10的18次方)
tinyint			1bytes			正负号(占1bit)
smallint		2bytes			正负号(占1bit)
int				4bytes			正负号(占1bit)
bigint			8bytes			正负号(占1bit)

验证整型默认是否携带正负号
	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);

严格模式

当我们在使用数据库存储数据的时候 如果数据不符合规范 应该直接报错而不是擅自修改数据 这样会导致数据的失真(没有实际意义)
	正常都应该直接报错 但是之前修改了配置文件

查找有mode的数据
	show variables like '%mode%';
1.临时修改
	set session sql_mode='strict_trans_tables';
    	在当前客户端有效
 	set global sql_mode='strict_trans_tables';
    	在当前服务端有效
2.永久修改
	直接修改配置文件
	在mysqld下添加sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

浮点型

MySQL数据类型 含义
float(m,d) 单精度浮点型 8位精度(4字节) m总个数,d小数位
double(m,d) 双精度浮点型 16位精度(8字节) m总个数,d小数位
decimal(m,d) 存放的是精确值 参数m<65 是总个数,d<30且 d<m 是小数位
float(20,10)
	总共存储20位数 小数点后面占10位
double(20,10)
	总共存储20位数 小数点后面占10位
decimal(20,10)
	总共存储20位数 小数点后面占10位

create table t7(id float(60,20));
create table t8(id double(60,20));
create table t9(id decimal(60,20));
insert into t7 values(1.11111111111111111111);
insert into t8 values(1.11111111111111111111);
insert into t9 values(1.11111111111111111111);

三者的核心区别在于精确度不同
	float	<	double  < 	decimal

字符类型

MySQL数据类型 含义
char(n) 固定长度,最多255个字符
varchar(n) 可变长度,最多65535个字符
char 
	定长
		char(4)		最多存储四个字符 超出就报错 不够四个空格填充至四个
varchar
	变长
		vacchar(4)	最多存储四个字符 超出就报错 不够则有几位存几位

create table t10(id int, name char(4));
create table t11(id int, name varchar(4));
insert into t10 values(1, 'jason1');
insert into t11 values(1, 'jason2');

ps:char_length()获取字段存储的数据长度
默认情况下MySQL针对char的存储会自动填充空格和删除空格

set global sql_mode='strict_trans_tables,pad_char_to_full_length';

两者优劣
	char
		优势:整存整取 速度快
		劣势:浪费存储空间
	carchar
		优势:节省存储空间
		劣势:存取数据的速度较char慢

char查找效率会很高,varchar查找效率会更低。
因为char的长度固定,故char的存取速度还是要比varchar快得多,存储与查找会更加方便;但是char也为此付出了空间的代价,因为其长度固定,所以会占据多余的空间,可谓是以空间换取时间效率。varchar则刚好相反,是以时间换空间,存储与查找相比于char效率更低一些。

'''
char与varchar的使用需要结合具体的应用场景
'''

数字的含义

数字在很多地方都是用来表示限制存储数据的长度 
	但是在整型中数字却不是用来限制存储长度
 
create table t12(id int(3));  不是用来限制长度
insert into t12 values(12345);

create table t13(id int(5) zerofill);  而是用来控制展示的长度
insert into t13 values(123),(123456789);

create table t14(id int);

"""以后写整型无需添加数字"""

枚举与集合

枚举
	多选一
	create table t15(
    id int, name varchar(32),
    gender enum('male','fomale','others')
    );
	insert into t15 values(1,'jason','猛男');  # 报错
	insert into t15 values(2,'tony','male'); 
	
集合
	多选多(多选一)
	create table t16(
    id int,
    name varchar(16),
    hobbies set('basketball','football','doublecolorball')
    );
	insert into t16 values(1,'jason','study');
	insert into t16 values(2,'tony','basketball,football');
	insert into t16 values(3,'kevin','basketball, read');  # 报错

日期类型

datetime			年月日时分秒
date				年月日
time				时分秒
year				年

create table t17(
	id int,
	name varchar(32),
	register_time datatime,
	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');

之后涉及到日期相关字段一般都是系统自动获取 无需我们操作

原文地址:http://www.cnblogs.com/lzjjjj/p/16919441.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性