博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

MySQL基础(二)

Posted on 2022-02-19 15:47  ~sang  阅读(150)  评论(0编辑  收藏  举报

存储引擎

1.概念:存储引擎即表类型,mysql根据不同的表类型会有不同的处理机制
2.查看存储引擎的方式
show engines;
3.mysql支持的存储引擎
MyISAM
  MySQL5.5之前默认的存储引擎
      不支持事务、行级锁和外键,针对数据的操作较于InnoDB不够安全
           但是数据的存取速度较于InnoDB更快
   InnoDB
  MySQL5.5之后默认的存储引擎
      支持事务、行级锁和外键,针对数据的操作更加安全
   memory
  基于内存存取数据
      速度最快但是断电立刻丢失
   blackhole
  写入其中的数据都会立刻消失,类似于垃圾处理站
4.存储引擎创建表的不同点
create table t1(id int) engine=myisam;
   create table t2(id int) engine=innodb;
   cerate table t3(id int) engine=memory;
   create table t4(id int) engine=blackhole;
   '''
  MyISAM会创建三个文件
  .frm 表结构文件
  .MYD 表数据文件
  .MYI 表索引文件(索引是用来加快数据查询的)
  InnoDB会创建两个文件
  .frm 表结构文件
  .ibd 表数据和表索引文件
  memory
  .frm 表结构文件
  blackhole
  .frm 表结构文件
  '''

MySQL基本数据类型

1.整型
tinyint smallint int bigint
   不同的int类型能够存储的数字范围是不一样的
  是否存在负数(正负号需要占一个比特位)
   # 移除正负号
  create table t6(id tinyint unsigned);
2.浮点型
float double decimal
   float(255,30) # 总共255位 小数位占30位
   double(255,30) # 总共255位 小数位占30位
   decimal(65,30) # 总共65位 小数位占30位
   # 三者的精确度不一样
  float < double < decimal
3.字符类型
char(4)
  定长类型,最多只能存四个字符,多了报错少了自动空格填充至四个
   varchar(4)
  变长类型,最多只能存四个字符,多了报错少了有几个则存几个
   # 针对5.6版本超出范围不会报错,而是自动帮你截取并保存(此行为不合理)
   方式1:修改配置文件(永久)
   方式2:命令修改(暂时)
       show variables like '%mode%'
       set session # 当前窗口有效
       set global # 当前服务端有效
      set global sql_mode='strict_trans_tables'
           修改完毕后退出客户端重新进入即可
           再次执行上述命令,会直接报错
   # char_length() 统计某个字段数据的长度
   '''底层确实会填充,但是取出来的时候又会自动去除'''
  set global sql_mode='strict_trans_tables,pad_char_to_full_length'

char与varchar的对比

char
优势:整存整取 速度快
   劣势:浪费存储空间
varchar
优势:节省存储空间
   劣势:存取数据的速度较char慢
补充:在创建字段的时候可以加上相应的注释
   create table t9(id int comment '序号',name char(4) comment '姓名');

整形中括号内数字的作用

create table t10(id int(3));
insert into t10 values(4444444);
'''
在整型中括号内的数字并不是用来限制存储的长度,而是用来控制展示的长度
在定义整型字段的时候,不需要自己添加数字,使用默认的就可以
'''
create table t11(id int(3) zerofill); # 宽度为3,不足用0补足
insert into t11 values(4); # 004
# 整型比较的特殊,是唯一一个不是用来限制存储长度的类型

枚举与集合类型

枚举enum()
多选一
   create table user(id int,name varchar(32),gender enum('male','female'));
   insert into user values(1,'ldb','male');
集合set()
多选多(包含了多选一)
   create table userinfo(id int,name char(16),hoby set('basketball','football','reading'));
   insert into userinfo values(1,'ldb','basketball,reading');

日期类型

date        年月日
datetime 年月日时分秒
time 时分秒
year 年份
create table client(id int,name varchar(32),reg_time date,birth datetime,study_time time,join_time year);
   insert into client values(1,'ldb','2000-11-11','2000-1-21 11:11:11','11:11:11',1997);

创建表的完整语法

create table 表名(字段名1 字段类型(数字) 约束条件,...);
'''
1.字段名和字段类型是必须的
2.数字和约束条件是可选的,并且约束条件可以有多个 空格隔开即可
3.最后一个语句的结尾不要加逗号
'''

约束条件

unsigned    # 让数字没有正负号
zerofill # 多余的使用数字0填充
not null # 非空
'''
新增数据的方式
方式1:按照字段顺序一一传值
insert into user values(值1,值2,...);
方式2:自定义传值顺序
insert into user(name,id) values('ldb',1);
在MySQL中不传数据,会使用关键字NULL填充意思就是空
'''
create table t3(id int,name varchar(32) not null);
default # 默认值
create table t4(id int,name varchar(32) default 'ldb');
unique # 唯一值
# 单列唯一
  create table t5(id int,name varchar(32) unique);
   # 联合唯一
  create table t6(id int,host varchar(32),port int,unique(host,port));
primary key # 主键
'''
从约束层面上来说,相当于是not null+unique(非空且唯一)
在此基础上还可以加快数据的查询

InnoDB存储引擎规定了一张表必须有且只有一个主键
因为InnoDB是通过主键的方式来构造的
如果没有设置主键
情况1:没有主键和其它约束条件
InnoDB会采用隐藏的字段作为主键,不能加快数据的查询
情况2:没有主键但是有非空且唯一的字段,自动将该字段升级为主键
create table t7(id int,age int not null unique,pwd int not null unique);
create table user(id int primary key,name varchar(32));
'''
auto_increment # 自增
'''
由于主键类似于数据的唯一标识,并且主键一般都是数字类型
在添加数据的时候不可能记住接下来的序号是多少
'''
   create table user1(id int primary key auto_increment,name varchar(32));

自增的特性

自增不会因为删除操作而回退
delete from无法影响自增
如果想要重置需要使用truncate关键字
truncate 表名 # 清空表数据并且重置主键