您的位置 主页 正文

数据库备份的几种类型?

一、数据库备份的几种类型? 备份这一块比较复杂,具体可以看联机丛书 SQL Server 支持的备份类型包括: 1.完整备份,该操作将备份包括部分事务日志在内的整个数据库(这样完整备份

一、数据库备份的几种类型?

备份这一块比较复杂,具体可以看联机丛书

SQL Server 支持的备份类型包括:

1.完整备份,该操作将备份包括部分事务日志在内的整个数据库(这样完整备份便可恢复)。

有关详细信息,请参阅完整备份。

2.在完整数据库备份之间执行的完整差异备份。

完整差异备份只记录上次数据库备份后更改的数据。有关详细信息,请参阅完整差异备份。

3.部分备份。

部分备份类似于完整数据库备份,但只能包含主文件组和所有的读写文件组。或者,通过在 BACKUP 命令中列出只读文件,从而将它们包括在部分备份中。

若要指定部分备份,请使用 READ_WRITE_FILEGROUPS 选项,例如:

BACKUP DATABASE AdventureWorks READ_WRITE_FILEGROUPS TO

有关详细信息,请参阅部分备份。

4.在部分备份之后执行的部分差异备份。

部分差异备份只包含在主文件组和所有读写文件组中更改的数据。有关详细信息,请参阅部分差异备份。

5.文件和文件组备份。

文件组备份与文件备份的作用相同。文件组备份是文件组中所有文件的单个备份,相当于在创建备份时显式列出文件组中的所有文件。可以还原文件组备份中的个别文件,也可以将所有文件作为一个整体还原。

注意:

在 SQL Server 2005 中,文件备份和文件组备份不再局限于完整模式数据库或大容量日志模式数据库。但是,对于简单模型数据库而言,文件备份和文件组备份实质上局限于只读辅助文件组。尽管您可以在简单模式数据库中创建一个读写文件组的文件备份,但却不能在还原中使用该备份,除非将文件组设置为只读,然后执行差异文件备份。

当时间约束使得完整数据库备份不切实际时,请备份数据库文件或文件组,而不是备份完整数据库。若要备份一个文件而不是整个数据库时,请建立过程以确保数据库中所有的文件按规则备份。

对于完整模式数据库或大容量日志模式数据库,还必须执行事务日志备份。在还原一个文件备份后,使用事务日志将文件内容前滚,从而使其与数据库其余部分一致。有关详细信息,请参阅文件和文件组完整备份。

6.在文件备份或文件组备份之后执行的文件差异备份。

文件差异备份只包含在指定文件或文件组中更改的数据。有关详细信息,请参阅文件差异备份。

7.事务日志备份(仅用于完整恢复模式或大容量日志恢复模式)。

日志备份序列提供了连续的事务信息链,可支持从数据库备份、差异备份或文件备份中快速恢复。有关详细信息,请参阅使用事务日志备份。

重要事项:

当数据库恢复模式设置为简单恢复模式时,将无法使用 BACKUP LOG 语句。

8.仅复制备份

SQL Server 2005 引入了对于创建仅复制备份的支持,此备份不影响正常的备份序列。因此,与其他备份不同,仅复制备份不会影响数据库的全部备份和还原过程。您可以为任何类型的备份创建仅复制备份。

有关详细信息,请参阅仅复制备份(简单恢复模式)或仅复制备份(完整恢复模式)。

二、数据库类型有哪几种?

数据库类型有:

1、关系数据库

MvSQL、MariaDB(MvSQL的代替品)、Percona Server

(MySQL的代替品)、PostqreSQL、Microsoft Access、Microsoft SQL ServerGoogle Fusion Tables.

FileMaker、Oracle数据库、Sybase、dBASE、Clipper、FoxPro、foshub。

几乎所有的数据库管理系统都配备了一个开放式数据库连接(ODBC)驱动程序,令各个数据库之间得以

互相集成。

2、非关系型数据库(NoSQL)

BigTable(Google)、Cassandra、MongoDB、CouchDB。

3、键值(key-value)数据库

Apache Cassandra(为Facebook所使用):高度可扩展、Dynamo、LevelDB(Google)。

三、数据库有哪几种类型?

数据库分类1、小型数据库:access、foxbase2、中型数据库:informix、sql server、mysql3、大型数据库:sybase、db2、oracle

数据库系统(database systems),是由数据库及其管理软件组成的系统。它是为适应数据处理的需要而发展起来的一种较为理想的数据处理的核心机构。它是一个实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质、处理对象和管理系统的集合体。

四、数据库ID类型定义?

数据类型

从本小节开始,就开始为学习如何操作记录做准备了。

我们先来学习,MySQL中常用的数据类型。

在MySQL中,我们需要了解的数据类型共有以下几种:

  • 数值类型。
  • 日期类型。
  • 字符串类型。
  • ENUM和SET类型。

我们一一来看看吧。

数值类型

MySQL支持所有标准SQL数值类型。包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。

关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。

MySQL支持的整数类型有TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。

对于小数的表示,MYSQL分为两种方式:浮点数和定点数。浮点数包括float(单精度)和double(双精度),而定点数只有decimal一种,在mysql中以字符串的形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。

BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。

int类型

这里我们先以int为例展开讨论。

 create table t1(n1 int(4));
desc t1;
+-------+--------+------+-----+---------+-------+
| Field | Type   | Null | Key | Default | Extra |
+-------+--------+------+-----+---------+-------+
| n1    | int(4) | YES  |     | NULL    |       |
+-------+--------+------+-----+---------+-------+
insert into t1 values(11);
insert into t1 values(111111);
select n1 from t1;
+--------+
| n1     |
+--------+
|     11 |
| 111111 |
+--------+

由最后的查看结果,我们为int类型设定的宽度为4,结果插入一个6位的也行。这是怎么回事?

create table t2(n1 int(4) zerofill);
desc t2;
+-------+--------------------------+------+-----+---------+-------+
| Field | Type                     | Null | Key | Default | Extra |
+-------+--------------------------+------+-----+---------+-------+
| n1    | int(4) unsigned zerofill | YES  |     | NULL    |       |
+-------+--------------------------+------+-----+---------+-------+
insert into t2 values(11);
insert into t2 values(111111);
select n1 from t2;
+--------+
| n1     |
+--------+
|   0011 |
| 111111 |
+--------+

可以看到,我们在创建表的时候,为n1字段加上zerofill,表示不够4位就填充0。而最后的查询结果告诉我们,如果为int类型指定宽度,则是显示字符的宽度(字符数量),超过这个限制也会显示。

而查询表结构的时候,有个unsigned,这是无符号的类型。那这是什么意思呢?

 create table t3(n1 int);
desc t3;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| n1    | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
insert into t3 values(11111111111111111111111111);
insert into t3 values(-11111111111111111111111111);
select n1 from t3;
+-------------+
| n1          |
+-------------+
|  2147483647 |
| -2147483648 |
+-------------+

首先,desc告诉我们int类型的默认显示宽度是11位,而最大表示数值范围是2147483647,如果你插入的数据是超过这个范围的话。而2147483647的显示宽度是10位,为什么不是默认的11位呢?这是因为int类型默认类型是有符号的,而有符号的就要考虑正号和负号,而符号仅用1位就能表示。

原因如下:

int的存储宽度是4个Bytes,即32个bit,即2^32

无符号最大值为:4294967296-1

有符号最大值:2147483648-1

有符号和无符号的最大数字需要的显示宽度均为10,而针对有符号的最小值则需要11位才能显示完全,所以int类型默认的显示宽度为11是非常合理的。

那么如何设置一个无符号的呢?

 create table t4(n1 int unsigned);
desc t4;
+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| n1    | int(10) unsigned | YES  |     | NULL    |       |
+-------+------------------+------+-----+---------+-------+
insert into t4 values(11111111111111111111111111);
select n1 from t4;
+------------+
| n1         |
+------------+
| 4294967295 |
+------------+

无符号的需要在int类型指定unsigned。结果也是没错的。都最开始列举的表中数据一致。

最后:int类型,其实没有必要指定显示宽度,使用默认的就行;如果你的整数范围超过int类型范围,请选用别的数据类型;并且默认的,我们创建的int类型是有符号类型。

float类型

先来看定义:

FLOAT[M, D] [UNSIGNED] [ZEROFILL]
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
DECIMAL[(m[,d])] [unsigned] [zerofill]

float表示单精度浮点数(非准确小数值),M表示数字总个数,最大值是255;D是小数点后的数字个数,最大值30。也就是说,如果float(255,30)意思是,小数位是30位,而整数位就不是255了,而是255-30=225位。它的精准度:随着小数的增多,精度变得不准确。

双精度(double)浮点数(非准确小数值),m是数字总个数,d是小数点后个数。m最大值为255,d最大值为30。它的精准度:随着小数的增多,精度比float要高,但也会变得不准确。

而decimal的准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。它的精准度:随着小数的增多,精度始终准确;对于精确数值计算时需要用此类型。decaimal能够存储精确值的原因在于其内部按照字符串存储。

create table f1(weight float(256,30));
ERROR 1439 (42000): Display width out of range for column 'weight' (max = 255)  # 说显示宽度超过了255
create table f2(weight float(255,31));
ERROR 1425 (42000): Too big scale 31 specified for column 'weight'. Maximum is 30.  # 告诉我们小数点后的位数最多30位
create table f3(weight float(255,30));   # 这样就没问题了
desc f3;
+--------+---------------+------+-----+---------+-------+
| Field  | Type          | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| weight | float(255,30) | YES  |     | NULL    |       |
+--------+---------------+------+-----+---------+-------+

首先,我们创建的float类型是有符号类型。

同样的,你想创建一个无符号的,也要指定unsigned

create table f4(weight float(255,30) unsigned);
desc f4;
+--------+------------------------+------+-----+---------+-------+
| Field  | Type                   | Null | Key | Default | Extra |
+--------+------------------------+------+-----+---------+-------+
| weight | float(255,30) unsigned | YES  |     | NULL    |       |
+--------+------------------------+------+-----+---------+-------+
1 row in set (0.01 sec)

在使用浮点型的数据时,我们考虑的核心是关注它们的精度。来看对比。

create table f5(weight float(255,30) unsigned);
create table f6(weight double(255, 30) unsigned);
create table f7(weight decimal(65, 30) unsigned);
insert into f5 values(1.111111111111111111111111111111111111111111111111111);
insert into f6 values(1.111111111111111111111111111111111111111111111111111);
insert into f7 values(1.111111111111111111111111111111111111111111111111111);

我们创建三张不同类型的表,并插入一些数据,并且这些小数位都超过30位。来观察他们的精度:

 select weight from f5;
+----------------------------------+
| weight                           |
+----------------------------------+
| 1.111111164093017600000000000000 |
+----------------------------------+
select weight from f6;
+----------------------------------+
| weight                           |
+----------------------------------+
| 1.111111111111111200000000000000 |
+----------------------------------+
select weight from f7;
+----------------------------------+
| weight                           |
+----------------------------------+
| 1.111111111111111111111111111111 |
+----------------------------------+

由各自的查询结果可以看到,float类型的精度只有前7位是精确的;double类型的精度是15位;而decimal则保留完整的精度,毕竟是字符串形式的存储么。 但是decimal虽然精度较高,但是它也是有限制的,因为它的数字总大小为65位,所以抛出小数位的30位,还剩30位整数位。

最后,最后,这里只是说的显示宽度仅是在int中使用,其他数据类型宽度是存储限制。比如BIT类型。

BIT

 create table b1(b bit(1));
desc b1;
+-------+--------+------+-----+---------+-------+
| Field | Type   | Null | Key | Default | Extra |
+-------+--------+------+-----+---------+-------+
| b     | bit(1) | YES  |     | NULL    |       |
+-------+--------+------+-----+---------+-------+
insert into b1 values(0);
insert into b1 values(1);
insert into b1 values(2);
select b from b1;
+------+
| b    |
+------+
|      |
|     |
|     |
+------+

首先了解,字段b的类型是bit,宽度是1,那能表示多少数值呢,一个bit,只能表示0和1两个。但是通过查询发现,跟我们想要的结果不一样。

这是为什么,bit类型存储是以二进制存储到硬盘上的。所以,我们想要查询到我们想要的值,还要借助MySQL提供给我们的函数bin()hex(),意思是返回二进制值的字符串形式表示和十六进制的表示形式。

 select bin(b) from b1;
+--------+
| bin(b) |
+--------+
| 0      |
| 1      |
| 1      |
select hex(b) from b1;
+--------+
| hex(b) |
+--------+
| 0      |
| 1      |
| 1      |
+--------+

可以看到,字段bbit(1)类型只能表示0和1,而插入的2超出了范围。所以,你在用的时候,需要注意:

create table b2(b bit(2));
insert into b2 values(2);
select bin(b) from b2;
+--------+
| bin(b) |
+--------+
| 10     |
+--------+

可以看到,2的二进制形式是10

时间类型

日期类型有:

  • DATE(YYYY-MM-DD(1000-01-01/9999-12-31)),2019-07-31,出生年月日
  • TIME(HH:MM:SS('-838:59:59'/‘838:59:59’)),16:40:40,下班时间
  • DATETIME(YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y))、2019-07-31 16:40:40,注册时间、文章发布时间、员工入职时间
  • TIMESTAMP(YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时))、2019-07-31 16:40:40
  • YEAR(YYYY(1901/2155))、2019,历史大事件,出生年

来个示例:

create tabled1(
    born_date date, 
    get_time time, 
    reg_time datetime, 
    born_year year    # 最后一个字段后面不要有逗号
);
insert into d1 values(
	'1999-11-11',
	'18:30:00',   
	'2018-11-11 11:11:11',
	'1999'  # 不要写成18/30/30
);

来查询:

desc d1;
+-----------+----------+------+-----+---------+-------+
| Field     | Type     | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| born_date | date     | YES  |     | NULL    |       |
| get_time  | time     | YES  |     | NULL    |       |
| reg_time  | datetime | YES  |     | NULL    |       |
| born_year | year(4)  | YES  |     | NULL    |       |
+-----------+----------+------+-----+---------+-------+
select * from d1;
+------------+----------+---------------------+-----------+
| born_date  | get_time | reg_time            | born_year |
+------------+----------+---------------------+-----------+
| 1999-11-11 | 18:30:00 | 2018-11-11 11:11:11 |      1999 |
+------------+----------+---------------------+-----------+

再来掌握一个now()函数:

insert into d1 values(now(), now(), now(), now());
select * from d1;
+------------+----------+---------------------+-----------+
| born_date  | get_time | reg_time            | born_year |
+------------+----------+---------------------+-----------+
| 1999-11-11 | 18:30:00 | 2018-11-11 11:11:11 |      1999 |
| 2019-07-31 | 16:57:51 | 2019-07-31 16:57:51 |      2019 |

由第二行记录可以发现,各类型都按照自己的规则截取所需的日期数据。

了解:datetime与timestamp的区别

create table d2(x datetime, y timestamp);
desc d2;
+-------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type      | Null | Key | Default           | Extra                       |
+-------+-----------+------+-----+-------------------+-----------------------------+
| x     | datetime  | YES  |     | NULL              |                             |
| y     | timestamp | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------+-----------+------+-----+-------------------+-----------------------------+
insert into d2 values(Null, Null);
insert into d2 values('1111-11-11','1111-11-11');
 select * from d2;
+---------------------+---------------------+
| x                   | y                   |
+---------------------+---------------------+
| NULL                | 2019-07-31 17:05:43 |
| 1111-11-11 00:00:00 | 0000-00-00 00:00:00 |
+---------------------+---------------------+

通过上述验证分析,虽然这两种日期格式,都能满足我们大多数使用场景,但是在某些情况下,它们也有自己的优劣之分,来看看它们的区别:

  • DATETIME的日期范围是1001——9999年,TIMESTAMP的时间范围是1970——2038年。
  • DATETIME存储时间与时区无关,TIMESTAMP存储时间与时区有关,显示的值也依赖于时区。在mysql服务器,操作系统以及客户端连接都有时区的设置。
  • DATETIME使用8字节的存储空间,TIMESTAMP的存储空间为4字节。因此,TIMESTAMP比DATETIME的空间利用率更高。
  • DATETIME的默认值为null,TIMESTAMP的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP),如果不做特殊处理,并且update语句中没有指定该列的更新值,则默认更新为当前时间。

字符串类型

字符串类型这里需要重点掌握的就是char和varchar两个,存放名字、性别、密码、文本内容等等。

先看它们的区别,注意,长度指的是字符的长度:

  • char,定长,简单粗暴,浪费空间,存取速度快。
    • 字符长度范围:0~255,一个汉字是一个字符,utf8编码一个普通汉字占用3个字节。
    • 存储:如果存储的值,不满足指定的长度时,会往右填充空格来满足长度,例如指定长度为10,存储大于10个字符报错,小于10个字符会用空格填充,凑够十个字符。
    • 查询(或称检索):查询出的结果会自动删除尾部的空格,除非我们打开pad_char_to_full_length SQL模式
  set sql_mode = 'PAD_CHAR_TO_FULL_LENGTH'
  • varchar,可变长度,存储更精确,但存取速度慢。
    • 字符长度范围:0-65535,在utf8编码中,如果大于21844会提示用其他类型 。mysql行最大限制为65535字节。
    • 存储:varchar类型存储的是真实内容,而不是用空格填充,如存储abc ,尾部的空格也会被存储起来。注意,varchar类型会在真实数据前面加1~2个Bytes前缀,用来存储真实数据的bytes字节数,1~2Bytes最大表示65535个数字,正好符合MySQL对row的最大字节限制。如果真实的数据小于255bytes则需要1Bytes的前缀(1Bytes=8bit 2**8最大表示的数字为255);如果真实的数据>255bytes则需要2Bytes的前缀(2Bytes=16bit 2**16最大表示的数字为65535)。
    • 查询:尾部有空格会保存下来,在检索或者说查询时,也会正常显示包含空格在内的内容。

char VS varchar:存储范围验证

create table c1(s char(256));
ERROR 1074 (42000): Column length too big for column 's' (max = 255); use BLOB or TEXT instead
create table c2(s char(255));
create table c3(s varchar(21845));
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
create table c4(s varchar(21844));
create table c5(s varchar(65534));

通过打印结果,可以看到,char类型,如果长度超过255,就提示我们字段长度最大是255;varchar的列长度如果超过21844,提示我们varchar类型的最大行大小为65535。

但是最后的c5却成功创建,这是为什么呢?我们来看它的表结构:

desc c4;
+-------+----------------+------+-----+---------+-------+
| Field | Type           | Null | Key | Default | Extra |
+-------+----------------+------+-----+---------+-------+
| s     | varchar(21844) | YES  |     | NULL    |       |
+-------+----------------+------+-----+---------+-------+
desc c5;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| s     | mediumtext | YES  |     | NULL    |       |
+-------+------------+------+-----+---------+-------+

可以看到,c5表的字段类型已经变成了mediumtext,而不是varchar类型。

char VS varchar:存储长度验证

create table c6(s char(3));
create table c7(s varchar(3));
insert into c6 values('abcd');
insert into c6 values('生存还是毁灭');
insert into c7 values('abcd');
insert into c7 values('生存还是毁灭');

再来看查询结果:

select s from c6;
+-----------+
| s         |
+-----------+
| abc       |
| 生存还    |
+-----------+
select s from c7;
+-----------+
| s         |
+-----------+
| abc       |
| 生存还    |
+-----------+

可以看到,无论是char还是varchar;无论是中文还是其他,它们限制的是字符个数。

char VS varchar:定长与可变长度

再来研究它们之间的特点的区别,也就是定长和可变长度的区别。

我们通过表格来看看他们的存储关系:

ValueCHAR(4)存储需求VARCHAR(4)存储需求

不要被5bytes所迷惑,abcd占4个字节,还有一个字节存储该字符串的长度。

先了解两个函数:

  • length:查看字节数。
  • char_length:查看字符数。
create table c8(s1 char(3), s2 varchar(3));
desc c8;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| s1    | char(3)    | YES  |     | NULL    |       |
| s2    | varchar(3) | YES  |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
insert into c8 values('a', 'b');
select s1, s2 from c8;
+------+------+
| s1   | s2   |
+------+------+
| a    | b    |
+------+------+

现在看是啥也看不出来,所以,我们用上char_length函数:

select char_length(s1), char_length(s2) from c8;
+-----------------+-----------------+
| char_length(s1) | char_length(s2) |
+-----------------+-----------------+
|               1 |               1 |
+-----------------+-----------------+

这也看不出来啥呀,a和b不就是各占用一个字符长度么。

这是因为啊,我们在查询char类型数据的时候,MySQL会默默的删除尾部的空格(装作我并没有浪费空间!),我们来让它现原形:

SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
select char_length(s1), char_length(s2) from c8;
+-----------------+-----------------+
| char_length(s1) | char_length(s2) |
+-----------------+-----------------+
|               3 |               1 |
+-----------------+-----------------+

这个时候再看,是不是现原形了,char类型占用指定的3个字符宽度,当然,一个英文字符也占用一个字节。而varchar就占用一个字符。

中文也一样:

insert into c8 values('你', '好');
select char_length(s1), char_length(s2) from c8;
+-----------------+-----------------+
| char_length(s1) | char_length(s2) |
+-----------------+-----------------+
|               3 |               1 |
|               3 |               1 |
+-----------------+-----------------+

这就是我们使用char和varchar时需要注意的点。

小结:

InnoDB存储引擎:建议使用VARCHAR类型 单从数据类型的实现机制去考虑,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。

但对于InnoDB数据表,内部的行存储格式没有区分固定长度和可变长度列(所有数据行都使用指向数据列值的头指针),因此在本质上,使用固定长度的CHAR列不一定比使用可变长度VARCHAR列性能要好。因而,主要的性能因素是数据行使用的存储总量。由于CHAR平均占用的空间多于VARCHAR,因此使用VARCHAR来最小化需要处理的数据行的存储总量和磁盘I/O是比较好的。 其他字符串系列(效率:char>varchar>text)

  • TEXT系列 TINYTEXT TEXT MEDIUMTEXT LONGTEXT
  • BLOB 系列 TINYBLOB BLOB MEDIUMBLOB LONGBLOB
  • BINARY系列 BINARY VARBINARY

text:text数据类型用于保存变长的大字符串,可以组多到65535 (2**16 − 1)个字符。

枚举与集合

有些情况,我们需要在一堆选项中选择一个,或者选择多个,如单选框和复选框。 那,在MySQL的字段中,字段的类型也可以有单选和多选。

  • enum单选,只能在给定范围内选一个值,如果性别;适用于给定范围后续不会发生变化的场景;另外数字类型不适用枚举。
  • set多选,在给定的范围聂选择多个值,如爱好。
create table user1(
	id int,
	name char(5),
	sex enum('male', 'female', 'unknow'),
	hobby set('eat', 'sleep', 'play mobile phone')
);
desc user1;
+-------+----------------------------------------+------+-----+---------+-------+
| Field | Type                                   | Null | Key | Default | Extra |
+-------+----------------------------------------+------+-----+---------+-------+
| id    | int(11)                                | YES  |     | NULL    |       |
| name  | char(5)                                | YES  |     | NULL    |       |
| sex   | enum('male','female','unknow')         | YES  |     | NULL    |       |
| hobby | set('eat','sleep','play mobile phone') | YES  |     | NULL    |       |
+-------+----------------------------------------+------+-----+---------+-------+
insert into user1 values(1, '张三', 'male', 'eat,sleep');
select * from user1;
+------+-----------+------+-----------+
| id   | name      | sex  | hobby     |
+------+-----------+------+-----------+
|    1 | 张三      | male | eat,sleep |
+------+-----------+------+-----------+

如果是set类型,多个参数以逗号隔开。 这里,我们也可以设置默认值,如果用户不填写的话:

create table user2 (id int, sex enum('male', 'female', 'unknow') default 'male');
insert into user2(id) values(1);
insert into user2 values(2, 'female');
select * from user2;
+------+--------+
| id   | sex    |
+------+--------+
|    1 | male   |
|    2 | female |
+------+--------+

根据查询结果可以看到,如果性别字段传值就用我们传的值,不传就用默认的。

五、频率数据数据库类型?

内存的频率:工作频率越高,在单位时钟周期内完成的指令越多,速度也就越快。计算公式为:内存带宽(MB)=前端总线频率(MHz)×总线宽度(bits)×每时钟数据段数量/

8CPU频率:时钟频率,简单说是CPU运算时的工作的频率(1秒内产生的同步脉冲数)

举例说明,我的1065t现在的频率是1.5ghz,这个1.5ghz就是用【总线速度的200.67mhz】乘以【倍频7.5】得来的整体时钟就是这款cpu的频率概念

六、数据库类型有哪些,目前主流数据库是哪种?

关系型数据库,非关系型数据库(NoSQL),键值(Key-value)数据库。主流的数据库那就是关系型数据库了,特别是关系型数据库中的分布式数据库。墨天轮最新排名(2022.11)数据库前十榜单中关系型数据库占了1-9名,前二十榜单中也仅有两个非关系型数据库。关系型数据库之所以占了绝大部分数据库份额,是因为关系型数据库作为成熟的数据库技术理念,其精髓的范式设计,严谨的一致性,原子性,完整性等优势是无法被取代的。

AntDB在运营商深耕了十几年,覆盖了OLTP与OLAP场景,是非常典型的HTAP类型的关系型数据库,业务覆盖计费、CRM等核心交易,同时覆盖清算分析等分析型业务。比如AntDB数据库服务于中国电信某省计费系统上云,包含数据层、批价和出账流程等大规模业务。在系统设计上,将资源、资产等交易热数据迁移到AntDB数据库,极大地提高了业务关键数据的访问效率,整体提高了话单事务的处理性能。AntDB数据库支撑10亿用户的通信交易场景,进行在线交易与数据分析处理的HTAP混合负载,帮助客户解决核心系统解决海量数据管理难题,基于分布式的架构设计,实现了在线弹性伸缩、强一致性事务、跨机房高可用等能力。

七、access数据库中包含有几种数据类型?

在access2010中的数据类型:

1)文本:(默认值)文本或文本和数字的组合,以及不需要计算的数字,例如电话号码。

最多为 255 个字符或长度小于 FieldSize 属性的设置值。Microsoft Access 不会为文本字段中未使用的部分保留空间。

2)备注:长文本或文本和数字的组合。

最多为 63,999 个字符(如果备注字段是通过 DAO 来操作,并且只有文本和数字(非二进制数据)保存在其中,则备注字段的大小受数据库大小的限制)。

3)数字:用于数学计算的数值数据。

有关如何设置特定数字类型的详细信息,请参见 FieldSize 属性主题。 1、2、4 或 8 个字节(如果将 FieldSize 属性设置为 Replication ID,则为 16 个字节)。

4)日期/时间:从 100 到 9999 年的日期与时间值。

8 个字节。

5)货币:货币值或用于数学计算的数值数据,这里的数学计算的对象是带有 1 到 4 位小数的数据。精确到小数点左边 15 位和小数点右边 4 位。

8 个字节。

6)自动编号:每当向表中添加一条新记录时,由Microsoft Access 指定的一个唯一的顺序号(每次递增 1)或随机数。

自动编号字段不能更新。有关详细信息,请参见 NewValues 属性主题。 4 个字节(如果将 FieldSize 属性设置为 Replication ID 则为 16 个字节)。

7)是/否:“是”和“否”值,以及只包含两者之一的字段(Yes/No、True/False 或 On/Off)。

1 位

8)OLE对象:MicrosoftAccess 表中链接(OLE/DDE 链接:OLE 对象及其 OLE 服务器之间,或动态数据交换 (DDE) 的源文档与目标文档之间的一种连接。)或嵌入(嵌入:用于插入来自其他应用程序的 OLE 对象的副本。源对象称为 OLE 服务器端,可以是任意支持链接和嵌入对象的应用程序。对嵌入式对象的更改不会反映在原对象中。)的对象(例如 Microsoft Excel 电子表格、Microsoft Word 文档、图形、声音或其他二进制数据)。最多为 1 G 字节(受可用磁盘空间限制)。

9)超链接:文本,或文本和存储为文本的数字的组合,用作超链接地址(超链接地址:指向诸如对象、文档或网页等目标的路径。超链接地址可以是 URL(Internet 或 Intranet 网站的地址),也可以是 UNC 网络路径(局域网上的文件的地址)。)。

超链接地址最多包含四部分:

显示的文本:在字段或控件中显示的文本。

地址:指向文件(UNC 路径(通用命名约定 (UNC):一种对文件的命名约定,它提供了独立于机器的文件定位方式。UNC 名称使用 \\server\share\path\filename 这一语法格式,而不是指定驱动器符和路径。))或页(URL (统一资源定位符 (URL):一种地址,指定协议(如 HTTP 或 FTP)以及对象、文档、万维网网页或其他目标在 Internet 或 Intranet 上的位置,例如:http://www.microsoft.com/。))的路径。

子地址:位于文件或页中的地址。

屏幕提示:作为工具提示显示的文本。

超链接(“超链接”数据类型:存储超链接地址的 Access 数据库字段的数据类型。地址最多可以包含四部分,用以下语法格式编写:displaytext#address#subaddress#。)数据类型的每个部分最多只能包含2048 个字符。

10)附件:任何支持的文件类型。

可以将图像、电子表格文件、文档、图表和其他类型的支持文件附加到数据库的记录,这与将文件附加到电子邮件非常类似。还可以查看和编辑附加的文件,具体取决于数据库设计者对附件字段的设置方式。“附件”字段和“OLE 对象”字段相比,有着更大的灵活性,而且可以更高效地使用存储空间,这是因为“附件”字段不用创建原始文件的位图图像。

11)查阅向导:创建一个字段,通过该字段可以使用列表框或组合框从另一个表或值列表中选择值。

单击该选项将启动“查阅向导”,它用于创建一个查阅字段(查阅字段:Access 数据库中用在窗体或报表上的一种字段。要么显示自表或查询检索得到的值列表,要么存储一组静态值。)。在向导完成之后,Microsoft Access 将基于在向导中选择的值来设置数据类型。与用于执行查阅的主键(主键:具有唯一标识表中每条记录的值的一个或多个域(列)。主键不允许为 Null,并且必须始终具有唯一索引。主键用来将表与其他表中的外键相关联。)字段大小相同,通常为 4 个字节。

八、2016数据库包括哪几种类型?

就目前来讲数据库按其结构来讲,可分为三类:

1、层次型

2、网状型

3、关系型

目前大多数集成开发环境(包括语言)都可以用来处理数据库,可以说不胜枚举。就关系型dbms来说,我认为:

中小型的代表有access、foxbase

中型的代表有vfp、dbase、pb

大型的代表有oracle、sql

九、Access数据库类型?

access的数据库类型是关系型数据库。Access是由微软发布的关系数据库管理系统;它可处理字段、关系和规则的复杂计算,以便您能够集中精力处理项目。

关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据,同时也是一个被组织成一组拥有正式描述性的表格,该形式的表格作用的实质是装载着数据项的特殊收集体,这些表格中的数据能以许多不同的方式被存取或重新召集而不需要重新组织数据库表格。

关系数据库的定义造成元数据的一张表格或造成表格、列、范围和约束的正式描述。每个表格(有时被称为一个关系)包含用列表示的一个或更多的数据种类。 每行包含一个唯一的数据实体,这些数据是被列定义的种类。

十、erp数据库类型?

ERP系统管理数据类型包括:

一、基础数据

基础数据主要包括公司的客户信息、办公信息、员工信息、账号权限等。只要将一条信息录入系统中,其后可直接对已有信息进行快速复制,再对差异信息就行修改即可,为快速添加相似的信息加快速度。

ERP系统管理

二、工程数据

工程数据主要包括科学的编码体系、物料主文件、物料清单BOM、产品工艺路线等。工程数据库的工作量较大且是一项长期的工作,因此,很多企业的ERP系统都会具有成批导入的功能,这样可以减少客户手动录入的麻烦,节约录入时间,以便提高工作效率。

三、库存数据

库存数据主要有仓库基础数据、仓库类型、库位的设置,仓库交易类型参数等。库存数据要求准确可靠,所以在ERP系统中不论是仓库的收发管理,还是借料、补料、物料退换,都有严格的操作流程,系统还可针对各公司不同情况建立对仓管员有效的绩效考核方式,来加强对仓管管理相关工作。

除了数据的整理之外,ERP系统也十分重视数据安全问题。对于安全性的各个维度我们都做了工作,包括账号保护、登录限制、数据加密、数据备份、数据恢复、离线分析、权限控制、硬件加密等。用户只管使用,安全性的东西都写在了代码里,并都是以权限性质出现,让客户用的省心、舒心、更放心。

为您推荐

返回顶部