??xml version="1.0" encoding="utf-8" standalone="yes"?>
use rorely;
create table test(
id int(4) not null unique auto_increment,
name varchar(20) not null,
age int(3) not null,
sex varchar(10Qnot null,
address varchar(100)
);
insert into test values(null,'Jim',23,'male','wenming cun 23#');
insert into test values(null,'Jim',23,'male','wenming cun 23#');
insert into test values(null,'Jim',23,'male','wenming cun 23#');
insert into test values(null,'Jim',23,'male','wenming cun 23#');
insert into test values(null,'Jim',23,'male','wenming cun 23#');
select * from test;
]]>
我们要把现实世界中的各种信息转换成计机能理解的东西Q这些{换后的信息就形成了数据。例 如,某h的出生日期是“1987q??3?#8221;Q他的n高是170厘米Q等{。数据不仅包括数字、字母、文字和其他Ҏ(gu)字符l成的文本Ş式的数据Q而且q? 包括囑Ş、图像、动甅R媄像、声音等多媒体数据。但使用最多、最基本的仍然是文本数据?
1. MySQL的数据类?
在MySQL中有如下几种数据cdQ?
Q?Q数值型
数值是诸如32 ?53.4 q样的倹{MySQL 支持U学表示法,U学表示法由整数或QҎ(gu)后跟“e”?#8220;E”、一个符P“+”?#8220;-”Q和一个整数指数来表示?.24E+12 ?3.47e-1 都是合法的科学表C法表示的数。?.24E12 不是合法的,因ؓ(f)指数前的W号未给出?
点数由整数部分、一个小数点和小数部分组成。整数部分和数部分可以分别为空Q但不能同时为空?
数值前可放一个负?#8220;-”以表C倹{?
Q?Q字W(Ԍ?
字符型(也叫字符串型Q简UCQ是诸如“Hello, world!”?#8220;一个馒头引L(fng)血?#8221;q样的|或者是?sh)话L(fng)87398413q样的倹{既可用单引号也可用双引号将串值括h?
初学者往往分不清数?7398143和字W串87398143的区别。都是数字啊Q怎么一 个要用数值型Q一个要用字W型呢?关键在于:(x)数值型?7398143是要参与计算的,比如它是金融中的一个货ƾ总额Q而字W型?7398143是不 参与计算的,只是表示?sh)话L(fng)Q这L(fng)q有街道L(fng)、门牌号码等{,它们都不参与计算?
Q?Q日期和旉?
日期和时间是一些诸?#8220;2006-07-12”?#8220;12:30:43”q样的倹{MySQLq支持日?旉的组合,?#8220;2006-07-12 12:30:43”?
Q?QNULL?
NULL表示未知倹{比如填写表g通讯地址不清楚留IZ填写Q这是NULL倹{?
我们用Create Table语句创徏一个表Q参看前面的章节Q,q个表中包含列的定义。例如我们在前面创徏了一个joke表,q个表中有content和writer两个列:(x)
定义一个列的语法如下:(x)
其中列名由col_name l出。列名可最多包?4个字W,字符包括字母、数字、下划线及美元符受列名可以名字中合法的Q何符P包括数字Q开头。但列名不能完全由数字组成,? 为那样可能其与数据分不开。MySQL保留诸如SELECT、DELETE和CREATEq样的词Q这些词不能用做列名Q但是函数名Q如POS 和MINQ是可以使用的?
列类型col_type表示列可存储的特定倹{列cd说明W还能表C存攑֜列中的值的最大长 度。对于某些类型,可用一个数值明地说明光度。而另外一些|光度由cd名蕴含。例如,CHAR(10) 明确指定?0个字W的长度Q而TINYBLOB值隐含最大长度ؓ(f)255个字W。有的类型说明符允许指定最大的昄宽度Q即昄值时使用多少个字W)。Q 点类型允许指定小C敎ͼ所以能控制点数的_ֺgؓ(f)多少?
可以在列cd之后指定可选的cd说明属性,以及指定更多的常见属性。属性v修饰cd的作用,q更改其处理列值的方式Q属性有以下cdQ?
Q?Q专用属性用于指定列。例如,UNSIGNED 属性只针对整型Q而BINARY属性只用于CHAR 和VARCHAR?
Q?Q通用属性除数列之外可用于L列。可以指定NULL 或NOT NULL 以表C某个列是否能够存放NULL。还可以用DEFAULTQdef_value 来表C在创徏一个新行但未明给列的值时Q该列可赋予值def_value。def_value 必须Z个常量;它不能是表达式,也不能引用其他列。不能对BLOB 或TEXT 列指定缺省倹{?
如果想给出多个列的专用属性,可按L序指定它们Q只要它们跟在列cd之后、通用属性之前即可。类似地Q如果需要给出多个通用属性,也可按Q意顺序给出它们,只要它们放在列cd和可能给出的列专用属性之后即可?
2. MySQL的列Q字D)cd
数据库中的每个表都是׃个或多个列(字段Q构成的。在用CREATE TABLE语句创徏一个表Ӟ要ؓ(f)每列Q字D)指定一个类型。列Q字D)的类型比数据cd更ؓ(f)l化Q它_地描qCl定表列Q字D)可能包含的值的U类Q如是否带小数、是否文字很多?
MySQL有整数和点数值的列类型,如表1所C。整数列cd可以有符号也可无W号。有一U特D的属性允许整数列D动生成,q对需要唯一序列或标识号的应用系l来说是非常有用的?
cd |
说明 |
TINYINT | 非常的整数 |
SMALLINT | 较小整数 |
MEDIUMINT | 中等大小整数 |
INT | 标准整数 |
BIGINT | 较大整数 |
FLOAT | 单精度QҎ(gu) |
DOUBLE | 双精度QҎ(gu) |
DECIMAL | 一个串的QҎ(gu) |
每种数值类型的名称和取D围如?所C?
cd说明 |
取D?/strong> |
TINYINT[(M)] | 有符号|(x)-128 ?27Q? 27 ?7 - 1Q? 无符号|(x)0?55Q? ?8 - 1Q? |
SMALLINT[(M)] | 有符号|(x)-32768 ?2767Q? 215 ?15 - 1Q? 无符号|(x)0?5535Q? ?1 6 - 1Q? |
MEDIUMINT[(M)] | 有符号|(x)-8388608 ?388607Q? 22 3 ?2 3 - 1 Q? 无符号|(x)0?6777215Q? ?2 4 - 1Q? |
INT[(M)] | 有符号|(x)-2147683648 ?147683647Q? 231 ?31- 1Q? 无符号|(x)0?294967295Q? ?32 - 1Q? |
BIGINT[(M)] | 有符号|(x)-9223372036854775808 ?223373036854775807Q? 263?63-1Q? 无符号|(x)0?8446744073709551615Q??64 – 1Q? |
FLOAT[(M, D)] | 最非零|(x)±1.175494351E - 38 |
DOUBLE[(M,D)] | 最非零|(x)±2.2250738585072014E - 308 |
DECIMAL (M, D) | 可变Q其值的范围依赖于M 和D |
cd说明 |
存储需?/strong> |
TINYINT[(M)] | 1字节 |
SMALLINT[(M)] | 2字节 |
MEDIUMINT[(M)] | 3字节 |
INT[(M)] | 4字节 |
BIGINT[(M)] | 8字节 |
FLOAT[(M, D)] | 4字节 |
DOUBLE[(M, D)] | 8字节 |
DECIMAL (M, D) | M字节QMySQL < 3.23Q,M+2字节QMySQL > 3.23 Q?/td> |
MySQL提供了五U整型:(x) TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT。INT为INTEGER的羃写。这些类型在可表C的取D围上是不同的? 整数列可定义为UNSIGNED从而禁用负|q列的取D围ؓ(f)0以上。各U类型的存储量需求也是不同的。取D围较大的cd所需的存储量较大?/p>
MySQL 提供三种点cdQ? FLOAT、DOUBLE和DECIMAL。与整型不同QQ点类型不能是UNSIGNED的,其取D围也与整型不同,q种不同不仅在于q些cd有最? |而且q有最非零倹{最值提供了相应cd_ֺ的一U度量,q对于记录科学数据来说是非常重要的(当然Q也有负的最大和最|?
在选择了某U数值类型时Q应该考虑所要表C的值的范围Q只需选择能覆盖要取值的范围的最类 型即可。选择较大cd?x)对I间造成费Q表不必要地增大,处理h没有选择较小cd那样有效。对于整型|如果数据取D围较?yu),如h员年龄或兄弟姐妹 敎ͼ则TINYINT最合适。MEDIUMINT能够表示数百万的值ƈ且可用于更多cd的|但存储代仯大。BIGINT在全部整型中取D围最大,? 且需要的存储I间是表C围次大的整型INTcd的两倍,因此只在实需要时才用。对于Q点|DOUBLE占用FLOAT的两倍空间。除非特别需要高_? 度或范围极大的|一般应使用只用一半存储代L(fng)FLOAT型来表示数据?
在定义整型列Ӟ可以指定可选的昄寸M。如果这PM应该是一? ?55的整数。它表示用来昄列中值的字符数。例如,MEDIUMINT(4)指定了一个具?个字W显C宽度的MEDIUMINT列。如果定义了一? 没有明确宽度的整数列Q将?x)自动分配给它一个缺省的宽度。缺省gؓ(f)每种cd?#8220;最?#8221;值的长度。如果某个特定值的可打印表C需要不止M个字W,则显C完? 的|不会(x)值截断以适合M个字W?
Ҏ(gu)UQ点类型,可指定一个最大的昄寸M 和小C数D。M 的值应该取1 ?55。D的值可? ? 0Q但是不应大于M - 2Q如果熟(zhn)ODBC 术语Q就?x)知道M 和D 对应于ODBC 概念?#8220;_ֺ”?#8220;数点位?#8221;Q。M和D对FLOAT和DOUBLE 都是可选的Q但对于DECIMAL是必ȝ。在选项M 和DӞ如果省略了它们,则用缺省倹{?
2.2字符串列cd
MySQL提供了几U存攑֭W数据的串类型,其类型如下:(x)
cd?/strong> |
说明 |
CHAR | 定长字符?/td> |
VARCHAR | 可变长字W串 |
TINYBLOB | 非常的BLOBQ二q制大对象) |
BLOB | BLOB |
MEDIUMBLOB | 中等的BLOB |
LONGBLOB | 大BLOB |
TINYTEXT | 非常的文本?/td> |
TEXT | 文本串 |
MEDIUMTEXT | 中等文本?/td> |
LONGTEXT | 大文本串 |
ENUM | 枚DQ列可赋予某个枚举成?/td> |
SET | 集合Q列可赋予多个集合成?/td> |