数据类型是定义列中可以存储什么类型的数据以及该数据怎样存储的基本规则
数据类型限制存储在数据列中的数据。例如,数值数据类型只能接收数值类型的是数据
在设计表时,应该特别重视所用的数据类型。使用错误的数据类型可能会严重地影响应用程序的功能和性能。
更改包含数据的列不是一件小事(而且这样做可能会导致数据丢失)。
数据类型:整型、浮点型、字符串、日期等
1、字符串数据类型
字常用的数据类型是串数据类型
能够存储串,比如名字、地址、电话号码、邮政编码等。
不管使用何种形式的串数据类型,串值都必须括在引号内
有两种基本的串类型,分别为定长串和变长串
①定长串:char
1.接受长度固定的字符串,其长度是在创建表时指定的。
定长列不允许存储多于指定长度字符串的数据。
2.指定长度后,就会分配固定的存储空间用于存放数据
char(7)不管实际插入多少字符,它都会占用7个字符位置
②变长串:varchar
存储可变长度的字符串
varchar(7)如果实际插入4个字符,那么它只占四个字符的位置,当然插入的数据长度不能超过7个字符
(注意:既然变长数据类型这样灵活,为什么我们还要使用定长数据类型?
答:因为性能问题,MySQL处理定长列比变长列的速度快得多)
Text文本类型存储
char1~255个字符的定长串。它的长度必须在创建的时候指定,否则MySQL假定为char(1)enum接收最多64k个串组成的一个预定义集合的某个串longtext与text相同,但最大长度为4GBmediumtext与text相同,但最大长度为16kset接收最多64个串组成的一个预定义集合的零个或多个串text最大长度为64k的变长文本tinytext与text相同,但最大长度为255字节varchar长度可变,最多不超过255字节。如果在创建时指定为varchar(n),则可存储0到n个字符的变长串(其中n小于等于255)
2、数值类型
数值数据类型存储数值。MySQL支持多种数值数据类型,每种存储的数值具有不同的取值范围。支持的取值范围越大,所需存储空间越多
与字符串不一样,数值不应该括在引号里
数值数据类型
bit位字段,164位。(在MySQL5之前,bit在功能上等价于tinyint)bigint整数型,支持-9223372036854778089223372036854775807(如果是unsigned,为018446744073709551615)的数boolean(或bool)布尔标志,或者为0或1decimal(或dec)精度可变的浮点型,decimal(5,2)表示数值总共占5位,小数占两位double双精度浮点值float单精度浮点值int(或integer)整数值,支持-21474836482147483647(如果是unsigned,为04294967295)的数mediumint整数型,支持-83886088388607(如果是unsigned,为065535)的数real4字节的浮点值smallint整数型,支持-3276832767(如果是unsigned,为065535)的数tinyint整数值,支持-128127(如果为unsigned,为0~255)的数
MySQL中没有专门存储货币的数据类型,一般情况下使用DECIMAL(8,2)
有符号或无符号
所有数值数据类型(除BIT和BOOLEAN外)都可以有符号或无符号
#有符号数值列可以存储正或负的数值
#无符号数值列只能存储正数。
#默认情况为有符号,但如果你知道自己不需要存储负值,可以使用UNSIGNED关键字
3、日期和时间类型
MySQL使用专门的数据类型来存储日期和时间值
日期和时间数据类型
date表示1000-01-019999-12-31的日期,格式为YYYY-MM-DDdatetimedate和time的结合体timestamp功能和datatime相同(但范围小)time格式为HH:MM:SSyear用两位数字表示,范围是70(1970年)69(2069年),用四位数字表示,范围是1901年~2155年
datatime 8字节1000-01-01 00:00:00 ~9999-12-31 23:59:59
4.二进制数据类型
二进制数据类型可以存储任何数据(甚至包括二进制信息),如图像、多媒体、字处理文档
二进制数据类型
blobblob最大长度为64kmediumblobblob最大长度为16mblongblobblob最大长度为4gbtinyblobblob最大长度为255字节
二、表的字段约束
1、unsigned无符号(给数值类型使用,表示为正数,不写可以表示正负数)
2、字段类型后面加括号限制宽度
3、char(5) varchar(7)在字符类型后面加限制 表示字符串的长度
4、int(4)没有意义,默认无符号的int为int(11),有符号的int(10)
5、只有当给int类型设置有前导零(zerofill)时,设置int的宽度才有意义。0001
create table stu(sid int(4) unsigned zerofill,name char(4));
6、not null不能为空在操作数据库时如果输入该字段的数据为NULL,就会报错
7、default设置默认值
8、primary key逐渐不能为空且唯一,一般和自动递增一起配合使用
9、auto_increment定义列为自增属性,一般用于逐渐,数值会自动+1
10、unique唯一索引(数据不能重复:用户名)可以增加查询速度,但是会降低插入和更新速度
三.MySQL的运算符
算数运算符:+,-,*,/,%
比较运算符:=,>,<,>=,<=,!=
数据库特有的比较:in, not in, is null , is not ,null ,like ,between ,and
#in(20,30)在20到30的范围中
逻辑运算符:and ,or ,not
**like:**支持特殊符号%和_;
select* from users where name like '_三';
其中%表示任意数量的任意字符,_表示任意一位字符
四.主键
1.表中每一行都应该有可以唯一标识自己的一列,用于记录两条记录不能重复,任意两行都不具有相同的主键值
2.应该总是定义主键 虽然并不总是都需要主键,但大多数数据库设计人员都应保证他们创建的每个表具有一个主键,以便于以后的数据的操纵和管理。
要求
1、记录一旦插入到表中,主键最好不要再修改
2、不允许NULL
3、不在主键列中使用可能会更改的值。
(例如,如果使用一个名字作为主键以表示某个供应商,当该供应商并和更改其名字时,必须更改这个主键)
4、自增整数类型:数据库会在插入数据时,自动为每一条记录分配一个自增整数,这样我们就完全不用担心主键重复,也不用自己预先生成主键
5、可以使用多个列作为联合主键,但联合主键并不常用。使用多列作为主键时,所有列值的组合必须是唯一的。
版权归原作者 wolfwalker 所有, 如有侵权,请联系我们删除。