
一、数据类型MySQL支持所有标准SQL
数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。MySQL支持的
整数类型有TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。对于小数的表示,MySQL分为两种方式:浮点数和定点数。浮点数包括float(单精度)和double(双精度),而定点数只有decimal一种,在MySQL中以字符串的形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。类型大小范围(有符号)范围(无符号)unsigned约束用途TINYINT1
字节(-128,127)(0,255)小整数值SMALLINT2 字节(-32 768,32 767)(0,65 535)大整数值MEDIUMINT3 字节(-8 388 608,8 388 607)(0,16 777 215)大整数值INT或INTEGER4 字节(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值BIGINT8 字节(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值FLOAT4 字节float(255,30)(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度浮点数值DOUBLE8 字节double(255,30)(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度浮点数值DECIMAL对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2double(65,30)依赖于M和D的值依赖于M和D的值小数值1.1 int整数示例# 创建表一个是默认宽度的int,一个是指定宽度的int(5)mysql>create table t1 (id1 int,id2 int(5))Query OK, 0 rows affected (0.02 sec)# 像t1中插入数据1,1mysql>insert into t1 values (1,1)Query OK, 1 row affected (0.01 sec)# 可以看出结果上并没有异常mysql>select * from t1+------+------+| id1 | id2 |+------+------+| 1 | 1 |+------+------+row in set (0.00 sec)# 那么当我们插入了比宽度更大的值,会不会发生报错呢?mysql>insert into t1 values (111111,111111)Query OK, 1 row affected (0.00 sec)# 答案是否定的,id2仍然显示了正确的数值,没有受到宽度限制的影响mysql>select * from t1+------------+--------+| id1 | id2 |+------------+--------+| 0000000001 | 00001 || 0000111111 | 111111 |+------------+--------+rows in set (0.00 sec)
Log File物理结构
从 ib_logfile0和 ib_logfile1这两个文件的物理结构可以看出,在Log Header部分还是有些许差异的, ib_logfile0会多一些额外的信息,主要是checkpoint信息。
并且每个Block的单位是512字节,对应到磁盘每个扇区也是512字节,因此redo log写磁盘是原子写,保证能够写成功,而不像index page一样需要double write来保证安全写入。
我们依次从上到下来看每个Block的结构
Log File Header Block
Log Goup ID,可能会配置多个redo组,每个组对应一个id,当前都是0,占用4字节
Start LSN,这个redo log文件开始日志的lsn,占用8字节
Log File Number,总是为0,占用4字节
Created By,备份程序所占用的字节数,占用32字节
另外在ib_logfile0中会有两个checkpoint block,分别是 LOG_CHECKPOINT_1/ LOG_CHECKPOINT_2,两个记录InnoDB Checkpoint信息的字段,分别从文件头的第二个和第四个block开始记录,并且只在每组log的第一个文件中存在,组内其他文件虽然没有checkpoint相关信息,但是也会预留相应的空间出来。这里为什么有两个checkpoint的呢?原因是设计为交替写入,避免因为介质失败而导致无法找到可用的checkpoint的情况。
Log blocks
请点击输入图片描述
log block结构分为日志头段、日志记录、日志尾部
Block Header,占用12字节
Data部分
Block tailer,占用4字节
Block Header
这个部分是每个Block的头部,主要记录的块的信息
Block Number,表示这是第几个block,占用4字节,是通过LSN计算得来的,占用4字节
Block data len,表示该block中有多少字节已经被使用了,占用2字节
First Rec offet,表示该block中作为第一个新的mtr开始的偏移量,占用2字节
Checkpoint number,表示该log block最后被写入时的检查点的值,占用4字节
问题你的环境是否支持mysqli函数???
例外, 既然打算用mysqli, 那建议用对象方式而不是过程方式:
$DB = new mysqli('locahost', 'root', '123456', 'db')
$Rult = $DB -> query('select * from table')
$Row = $Rult - > fetch_assoc()
echo $Row['fild']
评论列表(0条)