存储引擎及数据库基本操作

MySQL存储引擎概念

MySQL中的数据用各种不同的技术存储在文件(或内存)中,这些技术都使用不同的存储机制、索引技巧,锁定水平,并且最终提供广泛的、不同的功能。通过选择不同的技术,能够获得额外的速度或功能,从而改善整体功能

查询MySQL中支持的存储引擎

show engines;      或 show engines \g

show variables like ‘have%’;

show variables like ‘table_type’

常见三种存储引擎

  • innoDB存储引擎
  • MyISAM存储引擎
  • MEMORY存储引擎

innoDB存储引擎特点及优缺点

innoDB存储引擎支持自动增长列(auto_increment)

innoDB存储引擎中支持外键(foreign key)

优点: 提供良好的事务管理、崩溃修复能力和并发控制

缺点:其读写效率稍差,占用的数据空间相对比较大

MyISAM存储引擎特点及优缺点

MyISAM存储引擎文件类型

  •   frm:存储表的结构
  •   myd: 存储数据
  •    myi: 存储索引

MyISAM存储引擎的存储格式

  •    MyISAM静态
  •    MyISAM动态
  •    MyISAM压缩

优点:  占用空间小,处理速度快

缺点:不支持事务的完整性和并发性

MEMORY存储引擎特点及优缺点

MEMORY存储引擎是MySQL中的一类特殊的存储引擎。其使用存储在内存中的内容来创建表,而且所有数据也放在内存中。

优点:   处理速度非常快

缺点:其数据易丢失,生命周期短

如何选择存储引擎

  • innoDB存储引擎:用于事务处理应用程序,具有众多特性,包括ACID事务支持,支持外键,同时支持崩溃修复能力和并发控制。
  • 适用于对事务完整性要求比较高,要求并发控制,需要频繁进行更新、删除操作的数据库
  • MyISAM存储引擎:主要用于非事务表,它提供高速存储和检索,以及全文搜索能力。
  • 适应于表主要用于插入新记录和读出记录,应用完整性、并发性要求很低
  • MEMORY存储引擎:提供“内存“表,所有数据都在内存中,数据的处理速度快。但安全性不高
  • 适应于需要很快读写速度,对数据的安全性要求较低,使用相对较小的数据库表

MySQL中的数据类型

  MySQL支持多种数据类型,数值类型、日期/时间类型和字符串(字符)类型不区分大小写

数值类型

类型名

涵义

TINYINT

一个很小的整数,1 个字节

SMALLINT

一个小整数,2个字节

  MEDIUMINT

一个中等大小整数,3个字节

  INTINTEGER

一个正常大小整数,4个字节

  BIGINT

一个大整数,8个字节

  FLOAT

一个小(单精密)浮点数字,近似值,可以带一个整数类型的参数,023的精度对应FLOAT列的4字节单精度。2453的精度对应DOUBLE列的8字节双精度。

  DOUBLE

DOUBLE  PRECISION

REAL

一个正常大小(双精密)浮点数字,近似值

DECIMAL(或简写为DEC

   NUMERIC

一个精确的浮点数字

日期时间类型

类型名

涵义

DATE

一个日期,以'YYYY-MM-DD'格式来显示,范围是'1000-01-01''9999-12-31'3个字节。

TIME

一个时间,以' HH:MM:SS'格式来显示,TIME值的范围可以从'-838:59:59''838:59:59'。小时部分会因此大的原因是TIME类型不仅可以用于表示一天的时间(必须小于24小时),还可能为某个事件过去的时间或两个事件之间的时间间隔(可以大于24小时,或者甚至为负)3个字节。

DATETIME

一个日期和时间组合,以'YYYY-MM-DD HH:MM:SS'格式来显示,取值范围:“1000-01-01 00:00:00”到“9999-12-31 23:59:59”8个字节。

TIMESTAMP

一个时间戳,基本上与DATETIME差不多(包括精度),但是在建时间戳类型的列上会自动添加默认值为CURRENT_TIMESTAMP,而且在更新行时自动用当前时间更新时间戳类型的列。

取值范围:“19700101000000”2037年的某个时刻。存储需求:4字节

YEAR

YYYY格式检索和显示YEAR值。范围是19012155.

1个字节。插入值时可以是:4位字符串、2位字符串、4位数字、2位数字。1697099范围的值被转换为2001206919701999范围的YEAR

字符数据类型

类型名

含义

CHAR[(M)]

一个定长字符串,M的取值范围是0-255. CHAR值被存储时,他们被用空格在右边填补到指定的长度。当CHAR值被检索时,拖后的空格被删去。

VARCHAR(M)

一个变长字符串,必须指指定M值。长度可以指定为065,535之间的值

  TINYBLOB

TINYTEXT

最大长度为255(2^8-1)个字符的BLOBTEXT

  BLOB

TEXT

最大长度为65535(2^16-1)个字符的BLOBTEXT

  MEDIUMBLOB

MEDIUMTEXT

最大长度为16777215(2^24-1)个字符的BLOBTEXT

  LONGBLOB

LONGTEXT

最大长度为4294967295(2^32-1)个字符的BLOBTEXT

ENUM('value1','value2',...)

枚举:列只能赋值为某个枚举成员或NULL12个字节,取决于枚举值的个数(最多65,535个值)

SET('value1','value2',...)

集合:列可以赋值为多个集合成员或NULL1234或者8个字节,取决于set成员的数目(最多64个成员)

字符串类型

  • BLOB是一个二进制大对象,可以容纳可变数量的数据。BLOB类型有TINYBLOBBLOBMEDIUMBLOBLONGBLOB4种。它们只是可容纳值的最大长度不同。支持任何数据,如文本、声音和图像等。
  • TEXT类型有TINYTEXTTEXTMEDIUMTEXTLONGTEXT4种。这些对应4BLOB类型,有相同的最大长度和存储需求,适合存储长文本

布尔数据类型

  • BOOLEAN或简写为BOOL
  • 0表示假,非0值表示真,一般用1表示

MySQL数据库操作

创建数据库(create database)

查看数据库(show databases)

选择数据库(use database)

删除数据库(drop database)

创建表

语法:

CREATE TABLE [IF NOT EXISTS] table_name

(

  列名 数据类型 列级约束,

  ……

  表级约束

);

创建表时,需要指定下列内容:

唯一的表名称;

表内唯一的列名称;

列的数据类型及其宽度;

对于整数类型的列,可以使用关键字auto_increment将该列定义成自动增长列。

注意:

  • 1)该列必须索引,一般将其定义成主键列
  • 2)一个表只能有一个自增列
  • (3)不为自增列赋值,或赋值为NULL,该列将自增;如果显式地为该列赋值,则使用显式插入的值,且再使用自增功能时接着显式值自增。
  • (4)得到最后一次插入的值:last_insert_id()

查看表结构

show columns

describe

修改表结构

添加一列:alter table t1 add column c2 int; column关键字可以省略)

修改某列:alter table t1 modify  column c2 smallint;

删除一列:alter table t1 drop column c2; column关键字可以省略)

修改列名:ALTER TABLE t1 CHANGE 旧列名 新列名 数据类型;(提示:数据类型可改可不改)

重命名表

rename  table  数据表名1  to  数据表名2

查看和删除表

查看某个数据库中有哪些表:show tables [LIKE 'pattern']  [from dbname];

DROP TABLE 语句删除数据表:DROP TABLE [IF EXISTS] tbl_name [, tbl_name,...]

注意:DROP TABLE删除一个或多个数据库表。所有表中的数据和表定义均被删除,故小心使用这个命令

面试题:

        1. mysql 存储方式?

MySQL的表属性有:MyISAM InnoDB 2种存储方式: 

MyISAM 不支持事务回滚

InnoDB 支持事务回滚

可以用 show create table tablename 命令看表的类型。

如果操作MySQL想要支持事务回滚的话,该表的属性必须是 InnoDB 类型

2.请写出数据类型(int char varchar datetime text)的意思; 请问varcharchar有什么区别

  • CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和尾部空格是否被保留等方面也不同
  • CHAR列的长度固定为创建表时声明的长度当检索到CHAR值时,尾部的空格被删除掉。
  • VARCHAR列中的值为可变长字符串。同CHAR对比,VARCHAR值保存时只保存需要的字符数,VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留

      3MySQL自增类型(通常为表ID字段)必需将其设为(?)字段

     对于整数类型的列,可以使用关键字auto_increment将该列定义成自动增长列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值