ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

day45---mysql数据库基本操作初阶(二)

2020-05-05 09:04:58  阅读:270  来源: 互联网

标签:11 存储 初阶 name 引擎 mysql 基本操作 day45 table


mysql数据库基本操作初阶(二)

数据库存储引擎

是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是插件式存储引擎。
  • 如何查看数据库存储引擎
mysql> show engines;

图1 数据库存储引擎

mysql主要存储引擎

  • innodb
InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),其它存储引擎都是非事务安全表,支持行锁定和外键,MySQL5.5以后默认使用InnoDB存储引擎。
  • myisam
MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度,但不支持事务,不支持外键。是MySQL5.5版本之前默认的存储引擎。
  • memory
MEMORY存储引擎将表中的数据存储到内存中,为查询和引用其他表数据提供快速访问。断电数据丢失
  • blackhole
无论存什么,都立刻消失(黑洞),黑洞存储引擎,可以应用于主备复制中的分发主库。

图2 存储引擎对比图

建表时候指定存储引擎

mysql> create table t1(id int, name varchar(16)) engine=innodb;
Query OK, 0 rows affected (0.02 sec)

mysql> create table t2(id int, name varchar(16)) engine=myisam;
Query OK, 0 rows affected (0.01 sec)

mysql> create table t3(id int, name varchar(16)) engine=memory;
Query OK, 0 rows affected (0.00 sec)

mysql> create table t4(id int, name varchar(16)) engine=blackhole;
Query OK, 0 rows affected (0.00 sec)
  • 在配置文件中指定存储引擎
default-storage-engine=INNODB

[root@surpass ~]# cat /etc/my.cnf
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
socket=/var/lib/mysql/mysql.sock
[mysqld]
skip-name-resolve
#设置3306端口
port=3306
socket=/var/lib/mysql/mysql.sock
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
[root@surpass ~]# 
  • 查看刚刚创建的4张表
[root@surpass day45]# ls
db.opt  t1.frm  t1.ibd  t2.frm  t2.MYD  t2.MYI  t3.frm  t4.frm

innodb: 有表结构,存储数据

myisam:有表结构,存储数据,查询索引

后两者只有表结构

memory,在重启mysql或者重启机器后,表内数据清空
blackhole,往表内插入任何数据,都相当于丢入黑洞,表内永远不存记录

创建表的完整语法

create table t1(
    id int(11) not Null,
    name varchar(16),
    gender enum("male","female"),
    hobby set("dbj","hecha")
)

action

"""
1 在同一张表中字段名不能重复
2 宽度和约束条件是可选的(可写可不写) 而字段名和字段类型是必须的
	约束条件写的话 也支持写多个
    字段名1 类型(宽度) 约束条件1 约束条件2...,
3 最后一行不能有逗号
"""

基本数据类型

  • 整型
TINYINT SMALLINT MEDUIMINT INT BIGINT

作用:存储年龄、等级、id、号码等等

"""
TINYINT:默认情况下是有符号的
超出后只会存储可接受的最大值

无符号(8位):0~255
有符号(7位,还有一位标记正负):-127~128

mysql> create table t5(id tinyint);
mysql> insert into t5 values(-129),(258);

约束条件之无符号 unsigned
mysql> create table t6(id tinyint unsigned);
mysql> insert into t6 values(0),(254);

"""
# 默认情况下整型都是带符号的

"""
针对整型 括号内的宽度到底是干嘛的
特例:只有整型括号里面的数字不是表示限制位数

如果数字没有超出8位 那么默认用空格填充至8位
如果数字超出了8位 那么有几位就存几位(但是还是要遵守最大范围)


# 用0填充至8位
mysql> create table t8(id int(8) zerofill);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into t8 values(11);
Query OK, 1 row affected (0.01 sec)

mysql> select * from t8;
+----------+
| id       |
+----------+
| 00000011 |
+----------+
1 row in set (0.01 sec)

"""

严格模式

  • 如何查看严格模式
mysql> show variables like "%mode";

模糊匹配/查询:

关键字 like
%:匹配任意多个字符
_:匹配任意单个字符

  • 修改严格模式
set session  只在当前窗口有效
set global   全局有效
    
set global sql_mode = 'STRICT_TRANS_TABLES';
    
修改完之后 重新进入服务端即可

action

设置是替换
set global sql_mode ='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'

浮点型

float double decimal
  • 存储限制
# 存储限制
float(255,30)  # 总共255位 小数部分占30位
double(255,30)  # 总共255位 小数部分占30位
decimal(65,30)  # 总共65位 小数部分占30位

float < double < decima
# 要结合实际应用场景 三者都能使用

字符类型

"""
char(4) 定长 数据超过四个字符直接报错 不够四个字符空格补全
varchar(4) 变长 数据超过四个字符直接报错 不够有几个存几个
"""
"""
create table t18(name char(4));
create table t19(name varchar(4));

insert into t18 values('a');
insert into t19 values('a');

# 介绍一个小方法 char_length统计字段长度
select char_length(name) from t18;
select char_length(name) from t19;
"""
首先可以肯定的是 char硬盘上存的绝对是真正的数据 带有空格的
但是在显示的时候MySQL会自动将多余的空格剔除
"""

# 再次修改sql_mode 让MySQL不要做自动剔除操作
set global sql_mode = 'STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH';

char和varchar

"""
char
	缺点:浪费空间
	优点:存取都很简单
		直接按照固定的字符存取数据即可
		jason egon alex wusir tank 
		存按照五个字符存 取也直接按照五个字符取
		
varchar
	优点:节省空间
	缺点:存取较为麻烦
		1bytes+jason 1bytes+egon 1bytes+alex 1bytes+tank 
		
		存的时候需要制作报头
		取的时候也需要先读取报头 之后才能读取真实数据
		
以前基本上都是用的char 其实现在用varchar的也挺多
"""

补充:
    进来公司之后你完全不需要考虑字段类型和字段名
    因为产品经理给你发的邮件上已经全部指明了

时间类型

  • 分类
date:年月日 2020-5-4

datetime:年月日时分秒  2020-5-4 11:11:11

time:时分秒11:11:11

Year:2020
"""
create table student(
	id int,
    name varchar(16),
    born_year year,
    birth date,
    study_time time,
    reg_time datetime
);
insert into student values(1,'egon','1880','1880-11-11','11:11:11','2020-11-11 11:11:11');
"""

枚举和集合类型

  • 分类
"""
枚举(enum)  多选一
集合(set)   多选多
"""
  • 使用
create table user(
	id int,
    name char(16),
    gender enum('male','female','others')
);
insert into user values(1,'jason','male');  正常
insert into user values(2,'egon','xxxxooo');  报错
# 枚举字段 后期在存数据的时候只能从枚举里面选择一个存储 


create table teacher(
	id int,
    name char(16),
    gender enum('male','female','others'),
    hobby set('read','DBJ','hecha')
);
insert into teacher values(1,'jason','male','read');  正常
insert into teacher values(2,'egon','female','DBJ,hecha');  正常
insert into teacher values(3,'tank','others','生蚝'); 报错
# 集合可以只写一个  但是不能写没有列举的

标签:11,存储,初阶,name,引擎,mysql,基本操作,day45,table
来源: https://www.cnblogs.com/surpass123/p/12829422.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有