`
icrwen
  • 浏览: 266530 次
  • 性别: Icon_minigender_2
  • 来自: 济南
社区版块
存档分类
最新评论

mysql 数据类型

    博客分类:
  • sql
阅读更多
    填完字段名、数据类型之后就要填写长度,就好比int(4) varchar(16)这里的4和16 ,这个M代表什么意思呢?varchar类型的没什么异议,但是这个INT的呢?第一感觉就是代表长度,我只能存储4个数字以内的,可我存超过4位的数字的时候依然是可以存的,所以这样的理解是不完全对的。

      其实这个M跟INT能表示的范围没有关系,只要你选择了INT,INT是用4个字节表示,1个字节8位,若表示无符号数时可以表示的范围是 0 ------- 232-1 ,你可以存储任何在这个范围内的数字。但也不是说跟表示完全没关系,mysql中有个zerofll,当建表时选择了0填充之后存储就会有很大的不同,这时如果你选择的是int(4) 你存储12则数据库中存储的是0012,如果填写12345,此时超过了他的指定宽度则按原样存储。如:

//创建一个表   
mysql> create table length_test(id int(4) zerofill,name varchar(16));
Query OK, 0 rows affected (0.06 sec)
//插入一行数据
mysql> insert into length_test values (12,'suchshow');
Query OK, 1 row affected (0.05 sec)
//查询看看
mysql> select * from length_test;
+------+----------+
| id   | name     |
+------+----------+
| 0012 | suchshow |
+------+----------+
1 row in set (0.00 sec)

//再插入一行数据
mysql> insert into length_test values (12345,'suchshow');
Query OK, 1 row affected (0.03 sec)
//显示结果
mysql> select * from length_test;
+-------+----------+
| id    | name     |
+-------+----------+
| 0012 | suchshow |
| 12345 | suchshow |
+-------+----------+
2 rows in set (0.00 sec)

所以说后面的M跟表示的范围是没有影响的,只不过表示显示的宽度,搞懂了之后还是挺有用的

其中常用的数字型所占用的字节数如下,根据字节数即可算出表示的范围了
TINYINT 1 字节
SMALLINT 2 个字节
MEDIUMINT 3 个字节
INT 4 个字节
INTEGER 4 个字节
BIGINT 8 个字节
FLOAT(X) 4 如果 X < = 24 或 8 如果 25 < = X < = 53
FLOAT 4 个字节
DOUBLE 8 个字节
DOUBLE PRECISION 8 个字节
REAL 8 个字节
DECIMAL(M,D) M字节(D+2 , 如果M < D)
NUMERIC(M,D) M字节(D+2 , 如果M < D)

日期和时间类型
列类型 需要的存储量
DATE 3 个字节
DATETIME 8 个字节
TIMESTAMP 4 个字节
TIME 3 个字节
YEAR 1 字节

串类型
列类型 需要的存储量
CHAR(M) M字节,1 <= M <= 255
VARCHAR(M) L+1 字节, 在此L <= M和1 <= M <= 255
TINYBLOB, TINYTEXT L+1 字节, 在此L< 2 ^ 8
BLOB, TEXT L+2 字节, 在此L< 2 ^ 16
MEDIUMBLOB, MEDIUMTEXT L+3 字节, 在此L< 2 ^ 24
LONGBLOB, LONGTEXT L+4 字节, 在此L< 2 ^ 32
ENUM('value1','value2',...) 1 或 2 个字节, 取决于枚举值的数目(最大值65535)
SET('value1','value2',...) 1,2,3,4或8个字节, 取决于集合成员的数量(最多64个成员)



mysql的备份实现

function mysqlbackup()
{
$this->autoRender = false;
$host="localhost";        
$user="root";     
$password="111111";       
$dbname="granarydb";  
            $host="localhost";        
$user="root";     
$password="111111";       
$dbname="granarydb";     
$myconn = mysql_connect($host,$user,$password);        
mysql_select_db($dbname);   
mysql_query("SET NAMES utf8",$myconn);
$filename  = $_SERVER{'DOCUMENT_ROOT'}.'/DataBase/'.date("Ymd-His")."-".$dbname;
            $dbdump .= $this->mysqldump($dbname);
            $fp = fopen($filename.".sql", 'w');
fwrite($fp, $dbdump);
fclose($fp);
mysql_close($myconn);
}

function mysqlrestore()
{
$this->layout = 'iframe';
}

function mysqlRestore()
{
//$this->autoRender = false;



}

function mysqldump($mysql_database)
{
$sql="show tables;";
$result= mysql_query($sql);
if( $result)
{
while( $row= mysql_fetch_row($result))
{

$dbdump .= $this->mysqldump_table_structure($row[0]);

$dbdump .= $this->mysqldump_table_data($row[0]);
}
}
else
{
$dbdump .= "/* no tables in $mysql_database */\n";
}
mysql_free_result($result);
return $dbdump;
}


function mysqldump_table_structure($table)
{
$dbdump .= "/* Table structure for table `$table` */\n";
$dbdump .= "DROP TABLE IF EXISTS `$table`;\r\n";
$sql="show create table `$table`;\r\n";
$result=mysql_query($sql);
if( $result)
{
if($row= mysql_fetch_assoc($result))
{
$dbdump .= $row['Create Table'].";\r\n";
}
}
mysql_free_result($result);
return $dbdump;
}

function mysqldump_table_data($table)
{
$sql="select * from `$table`;";
$result=mysql_query($sql);
if( $result)
{
$num_rows= mysql_num_rows($result);
$num_fields= mysql_num_fields($result);

if( $num_rows > 0)
{
$dbdump .= "/* dumping data for table `$table` */\n";
$field_type=array();
$i=0;
while( $i < $num_fields)
{
$meta= mysql_fetch_field($result, $i);
array_push($field_type, $meta->type);
$i++;
}
$dbdump .= "insert into `$table` values\n";
$index=0;
while( $row= mysql_fetch_row($result))
{
$dbdump .= "(";
for( $i=0; $i < $num_fields; $i++)
{
if( is_null( $row[$i]))
$dbdump .= "null";
else
{
switch( $field_type[$i])
{
case 'int':
$dbdump .= $row[$i];
break;
case 'string':
case 'blob' :
default:
$dbdump .= "'".mysql_real_escape_string($row[$i])."'";
}
}
if( $i < $num_fields-1)
$dbdump .= ",";
}
$dbdump .= ")";

if( $index < $num_rows-1)
{
$dbdump .= ",";
}
else
{
$dbdump .= ";";
}
$dbdump .= "\n";
$index++;
}
}
}
mysql_free_result($result);
$dbdump .= "\n";
return $dbdump;
}


function mysqlbackup()
{
$this->autoRender = false;
$host="localhost";        
$user="root";     
$password="111111";       
$dbname="granarydb";  
            $host="localhost";        
$user="root";     
$password="111111";       
$dbname="granarydb";     
try {

$myconn = mysql_connect($host,$user,$password);  
if(false == $myconn)
      throw new Exception();
mysql_select_db($dbname);   
mysql_query("SET NAMES utf8",$myconn);
if (!file_exists($_SERVER{'DOCUMENT_ROOT'}.'/DataBase/')) {
           mkdir($_SERVER{'DOCUMENT_ROOT'}.'/DataBase/');
        }
$filename  = $_SERVER{'DOCUMENT_ROOT'}.'/DataBase/'.date("Ymd-His")."-".$dbname;
           $dbdump .= $this->mysqldump($dbname);
            $fp = fopen($filename.".sql", 'w');
            if(FALSE == $fp)
            throw new Exception();
if(FALSE == fwrite($fp, $dbdump))
throw new Exception();
fclose($fp);
if(False == mysql_close($myconn))
throw new Exception();
echo 1;
}
catch(Exception $e)
{
echo 0;
}

}


mysql 同时更新多行记录的解决办法
2009-09-14 15:10
很遗憾,mysql没有提供同时更新多行记录的功能,但是有提供同时插入(inset)多行的办法。嗯,想必有朋友想出来了,就是先插入到一个临时表中,然后在用upate更新两个表,这样做的好处是,减少了脚本(php)和mysql的交涉次数。
比如我们一共有10000条记录需要更新,那么,如果每次都是更新一条,需要.php和mysql交涉10000此,这其中有连接,交送sql语句,返回结果等。很大部分时间,都消耗在了交涉的时间上,而非执行的时间上。所以我们同时插入(insert)多个记录(比如1000),这样11次就能能摆平了。(10次insert into+1次update)。
下面有篇文章,大家可以看下

As MySQL doesn’t have inherent support for updating more than one rows or records with a single update query as it does for insert query, in a situation which needs us to perform updating to tens of thousands or even millions of records, one update query for each row seems to be too much.

Reducing the number of SQL database queries is the top tip for optimizing SQL applications.

So, is there any other way around with just a few MySQL queries that  equals to millions of single row update queries?

Yes, but you need a temporary table.

Step 1: Create a temporary table

This table should have 2 columns: 1) an ID column that references the original record’s primary key in the original table, 2) the column containing the new value to be updated with.

Creating this table, you can use insert queries as it conveniently inserts more than one rows at a time (with a single query) – actually, as many rows as you need, like 1000 a time.

Step 2: Transfer the new values from the temporary table to the intended table

Use the query below:

UPDATE original_table, temp_table SET original_table.update_column = temp_table.update_column WHERE original_table.id = temp_table.original_id
To transfer all the new values you have in the temporary table to the original table. After this, you have successfully updated the original table with much much less than a million queries, probably just a hundred or so.
分享到:
评论

相关推荐

    mysql数据类型

    MySQL 数据类型详解 MySQL 数据类型是指在 MySQL 中存储数据的格式,包括整型、浮点型、定点型、字符串、日期时间型、枚举型等多种类型。下面将对 MySQL 数据类型进行详细的介绍。 整型 MySQL 中的整型包括 ...

    Java数据类型和MySql数据类型对应表

    Java 数据类型和 MySql 数据类型对应表 在 Java 编程中,了解 Java 数据类型和 MySql 数据类型的对应关系非常重要。这是因为在 Java 应用程序中,我们经常需要与数据库进行交互,而 MySql 是一种常用的关系数据库...

    Java数据类型和MySql数据类型对应一览

    Java 数据类型和 MySql 数据类型对应一览 在 Java 编程语言中,数据类型是指变量或函数可以持有的值的类型。 MySql 数据库也具有其自己的数据类型,用于存储和管理数据。在本文中,我们将对 Java 数据类型和 MySql ...

    mysql数据类型转换

    通过对MySQL数据类型转换方法的详细介绍,我们可以看到,无论是将数字类型转换为字符串类型还是将字符串类型转换为数字类型,都有多种有效的方法可供选择。理解并掌握这些转换方法有助于我们在日常开发工作中更加...

    MySQL数据类型全掌握

    ### MySQL数据类型全掌握 #### 一、概述 在数据库设计和开发过程中,正确选择数据类型对于确保数据的准确性和优化存储空间至关重要。MySQL作为一款广泛使用的开源关系型数据库管理系统,提供了丰富的数据类型来...

    MySQL数据类型详解

    MySQL数据类型详解 在数据库管理系统中,数据类型是用来定义列中数据可以取值的类型和范围。在MySQL中定义数据类型具有重要的作用: 1. 对数据进行分类:数据类型有助于对数据进行归类处理,例如整数、字符串、...

    MySQL数据类型

    MySQL 数据类型详细介绍 MySQL 数据类型是 MySQL 中最基本的组成部分,也是 MySQL 的核心组成部分。 MySQL 数据类型主要有六大类,即整型、浮点型、定点数浮点型、字符串、日期时间类型和二进制数据类型。 整型 ...

    mysql数据类型详解.pdf

    总之,MySQL数据类型的灵活使用对于数据库性能优化至关重要,同时也关系到数据完整性和安全性。在实际应用中,数据库管理员和开发者应当根据实际需求和数据特性,选择最合适的数据类型,以达到存储高效和查询快速的...

    MySQL 数据类型 (列表)

    MySQL 数据类型详解 MySQL 数据类型是 MySQL 数据库中的一种基本概念,它定义了数据在数据库中的存储格式和范围。了解 MySQL 数据类型对于数据库设计和开发至关重要。本文将详细介绍 MySQL 数据类型,包括整数、...

    mysql数据类型.doc

    MySQL 数据类型详解 MySQL 是一个功能强大且广泛使用的关系数据库管理系统,它提供了多种数据类型来存储不同的数据。了解 MySQL 的数据类型对于数据库设计和开发非常重要。本文将详细介绍 MySQL 的各种数据类型,...

    学习MySQL数据库 MySQL数据类型

    MySQL数据类型

    MySQL数据类型选择

    MySQL 数据类型选择 MySQL 数据类型选择是数据库设计中非常重要的一步,因为不同的数据类型选择对数据库的性能和存储空间都有着很大的影响。在 MySQL 中,选择合适的数据类型可以提高查询效率、降低存储空间占用、...

    25.9 MySQL 数据类型

    MySQL 数据类型是数据库管理系统中用来定义列属性的关键元素,它决定了可以存储在列中的数据种类。MySQL 支持多种数据类型,包括数值类型、字符串类型、日期和时间类型以及二进制类型。这些数据类型的选择直接影响到...

    MYSQL 数据类型

    【MySQL 数据类型】是数据库设计中的关键概念,它决定了数据的存储方式、占用空间以及可接受的值的范围。MySQL 提供了丰富的数据类型,包括整数类型、浮点数类型、定点数类型、日期和时间类型、字符串类型以及二进制...

    mysql数据类型共2页.pdf.zip

    在这个“mysql数据类型共2页.pdf.zip”压缩包中,很显然,我们能够获取到关于MySQL数据类型的简要介绍。尽管实际内容并未在此提供,但我们可以基于通用知识来详细阐述这个主题。 MySQL的数据类型大致可以分为以下几...

    MySQL 数据类型介绍.docx

    "MySQL 数据类型介绍" MySQL 数据类型是指系统中所允许的数据的类型。数据库中的每个列都应该有适当的数据类型,用于限制或允许该列中存储的数据。例如,列中存储的为数字,则相应的数据类型应该为数值类型。如果...

Global site tag (gtag.js) - Google Analytics