1、整数类型查看系统帮助
>help contents;
>help data types;
>help int;
2、整数类型int的创建和使用
>create database test_xj;
>use test_xj;
>create table student(id1 int,id2 tinyint);
>insert into student values(22222222,1000);
>select * from student;
3、浮点类型和定点数类型
注意:该类型用来存储小数数据,当需要精确到小数点后10位以上,则必须选择double类型,dec或decimal类型由M和D来决定。
关于上表的解释:
(1)Decimal型的取值范围和double相同。但是decimal的有效取值范围由M和D决定,而且Decimal型的字节数是M+2。也就是说,定点数的存储空间是根据其精度决定的。
(2)MySQL中可以指定浮点数和定点数的精度。其基本形式如下:数据类型(M,D)。
其中,“数据类型”参数是浮点数或定点数的数据类型名称,M参数称为精度,是数据的总长度,小数点不占位置。D参数成为标度,是指小数点后面的长度是D。
举个例子:float(6,2)的含义数据是float型,数据长度是6,小数点后保留2位。所以,1234.56是符合要求的。
(3)注意:上述指定的小数精度的方法虽然都适用于浮点数和定点数,但不是浮点数的标准用法。建议在定义浮点数时,如果不是实际情况需要,最好不要使用,如果使用了,可能会影响数据库的迁移。
(4)相反,对于定点数而言,decimal(M,D)是定点数的标准格式,一般情况下可以选择这种数据类型。
(5)如果插入值的精度高于实际定义的精度,系统会自动进行四舍五入处理,使值的精度达到要求。
>create database test_xj;
>use test_xj;
>create table student(
id int not null,
a float(6,2) ,
b double(6,2) ,
c decimal(6,2))
>describe student;
查看表的定义
>insert into student values(1,1.1234,1.1234,1.1234);
>insert into student values(2,1234.456, 1234.456, 1234.456);
>select * from student;
在某一列插入多个数据
>insert into student(a) values(3.12), (3.44);
在某一行插入多个数据也可以用
>insert into student set a=3.12,b=3.44;
在指定的某一行插入数据
UPDATE 表名 SET 学生列名(也就是第三列列名)=“学生",班长列名(也就是第四列列名)=“班长”WHERE 主键=“001”;
未指定精度的情况
浮点数和定点数有其默认的精度,float和double默认会保存实际精度,但这与操作系统和硬件的精度有关。decimal型的默认整数位为10,小数位为0,即默认为整数。
>insert into student VALUES (3, 3.1415, 3.14159,3.14159)
4、位类型
BIT数据类型可用来保存位字段值。BIT(M)类型允许存储M位值。M范围为1~64,默认为1。
BIT其实就是存入二进制的值,类似010110。
如果存入一个BIT类型的值,位数少于M值,则左补0.
如果存入一个BIT类型的值,位数多于M值,MySQL的操作取决于此时有效的SQL模式:
•如果模式未设置,MySQL将值裁剪到范围的相应端点,并保存裁减好的值。
•如果模式设置为traditional(“严格模式”),超出范围的值将被拒绝并提示错误,并且根据SQL标准插入会失败。
>drop table student;
>create table student(id bit(8));
>insert into student values(11);
>insert into student values(b’11’);
>insert into student values(b’11011111’);
>select * from student;(注意结果)
>select id+0 from student;
>select bin(id+0) from student;
5、日期和时间类型
日期和时间类型是为了方便在数据库中存储日期和时间而设计的。MySQL中有多种表示日期和时间的数据类型。
其中,year类型表示年份,date类型表示日期,time类型表示时间,datetime和timestamp表示日期和时间。实际情况,最后2种使用的比较多。
具体的日期和时间类型如下:
5.1 year类型
给year类型的字段赋值的表示方法如下:
(1)使用4位字符串和数字表示。其范围从1901~~2155。输入格式为'YYYY'或YYYY。举个例子,输入‘2008’或者2008,可直接保存2008。如果超过了范围,就会插入0000。
(2)使用2位字符串表示。‘00’~~‘69’转换为2000~~2069,‘70’~~‘99’转换为1970~1999。举个例子,输入‘35’,year值会转换成2035,输入‘90’,year值会转换成1990。‘0’和‘00’效果一样。
>drop table student;
>create table student(id int not null primary key,a year );
>describe student;
>insert into student values(1,1999);
>insert into student values(1,2999);
>insert into student values(1,68);
>select * from student;
5.2 time类型
time类型使用3个字节来表示时间。MySQL中以HH:MM:SS的形式显示Time类型的值。其中,HH表示时;MM表示分,取值范围为0~~59;SS表示秒,取值范围是0~~59。
使用current_time或者current_time()或者now()输入当前系统时间
>alter table student add b time;
>alter table student add( b time, c year);
同时增加多条属性
>insert into student values(3,2000,’01:01:01’);
>insert into student values(4,2000,current_time);
>select * from student;
>insert into student values(5,2000,current_time());
>insert into student values(6,2000,now());
>select * from student;
6、字符串类型
CHAR(M)定义的列的长度为固定的,M取值可以为0~255之间,当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充。
VARCHAR(M)定义的列的长度为可变长字符串,M取值可以为0~65535之间,(VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节)。
VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。varchar存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么"+1"呢?这一个字节用于保存实际使用了多大的长度。从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。
CHAR和VARCHAR最大的不同就是一个是固定长度,一个是可变长度。由于是可变长度,因此实际存储的时候是实际字符串再加上一个记录字符串长度的字节(如果超过255则需要两个字节)。如果分配给CHAR或VARCHAR列的值超过列的最大长度,则对值进行裁剪以使其适合。如果被裁掉的字符不是空格,则会产生一条警告。如果裁剪非空格字符,则会造成错误(而不是警告)并通过使用严格SQL模式禁用值的插入。
注意:char(10) 表示该字段可以存储10个汉字,或者10个数字,或者10个英文字母。都是一样对代的。如果该字段数值超出10位字符,(一个多字节的汉字也当作一个字符处理)也就是输入11位将会报错。varchar(10)也是如此。
>use test_xj;
>show tables;
>create table student1(name char(6), city varchar(6));
>describe student1;
>insert into student1 values(‘peng’,’guang’);
>insert into student1 values(‘pengxue’,’guangzhou’);
>insert into student1 values(‘张三’,’广州’);
>select * from student1;
Comments