MySQL数据库命名规范以及数据类型

it2025-11-04  12

一、SQL

SQL(Structure Query Language,结构化查询语言):它是使用关系模型的数据库应用语言,由IBM上世纪70年代开发出来。后由美国国家标准局(ANSI)开始着手制定SQL标准,先后有SQL-86,SQL-89,SQL-92,SQL-99等标准。

1. SQL的语言规范

mysql对于SQL语句不区分大小写,SQL语句关键字尽量大写每条语句以分号(;)结尾值,除了数值型,字符串个日期时间类型使用单引号(’ ')别名,尽量使用双引号(" "),不建议使用省略as所有标点符号使用英文状态喜爱的半角输入方式必须保证所有括号、单引号、双引号成对出现3中注释方法 注释的语法说明–空格单行注释/* */多行注释#这是mysql特有的注释方式

命名规则:

数据库、表名不得超过30个字符,变量名限制为29个

必须只能包含 A–Z, a–z, 0–9, _共63个字符

不能在对象名的字符间留空格

必须不能和用户定义的其他对象重名

必须保证字段没有和保留字、数据库系统或常用方法冲突

保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据类型在一个表里是整数,在另一个表里可就别变成字符型了

说明:一个语句可以分开多行编写,以;或\g结束

2. SQL语句的分类

数据定义语言(Data Definition Language, DDL)如:建库、建表数据操纵语言(Data Manipulation Language, DML)如:对表中的记录操作增删改数据查询语言(Data Query Language, DQL)如:对表中的查询操作数据控制语言(Data Control Langiage, DCL)如:对用户权限的设置

二、MySQL的数据类型

常用的数据类型有:

整型(xxxint)位类型(bit)浮点型(float或double、real)定点数(decimal, numeric)日期时间类型(date, time, datetime, year)字符串(char, varchar, xxxtext)二进制数据(xxxBlob, xxbinary)枚举(enum)

1. 整型(xxxint)

整数列的可选属性有三个:

M: 宽度(在0填充的时候才有意义,否则不需要指定)unsigned: 无符号类型(非负)zerofill: 0填充,(如果某列是zerofill,那么默认就是无符号),如果指定了zerofill只是表示不够M位时,用0在左边填充,如果超过M位,只要不超过数据存储范围即可

原来,在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。 int(3)、int(4)、int(8) 在磁盘上都是占用 4 bytes 的存储空间。

类型名称类型说明tinyint微整型:很小的整数(占8位二进制)smallint小整型:小的整数(占16位二进制)mediumint中整型:中等长度的整数(占24位二进制个)int(integer)整型:整数类型(占32位二进制)

2. 浮点型

对于浮点列类型,在MySQL中单精度值使用4个字节,双精度值使用8个字节

MySQL允许使用非标准语法(其他数据库未必支持,因此如果设计到数据迁移,则最好不要这么用):FLOAT(M,D)或DOUBLE(M,D)。这里,(M,D)表示该值一共显示M位,其中D表示小数点后几位,M和D又称为精度和标度。例如,定义为FLOAT(5,2)的一个列可以显示为-999.99-999.99。M取值范围为0255。D取值范围为030,同时必须<=M。如果存储时,整数部分超出了范围(如上面的例子中,添加数值为1000.01),MySql就会报错,不允许存这样的值。如果存储时,小数点部分若超出范围,就分以下情况:若四舍五入后,整数部分没有超出范围,则只警告,但能成功操作并四舍五入删除多余的小数位后保存,例如在FLOAT(5,2)列内插入999.009,近似结果是999.01。若四舍五入后,整数部分超出范围,则MySql报错,并拒绝处理。如999.995和-999.995都会报错。说明:小数类型,也可以加unsigned,但是不会改变数据范围,例如:float(3,2) unsigned仍然只能表示0-9.99的范围。float和double在不指定精度时,默认会按照实际的精度(由实际的硬件和操作系统决定)来显示REAL就是DOUBLE ,如果SQL服务器模式包括REAL_AS_FLOAT选项,REAL是FLOAT的同义词而不是DOUBLE的同义词。

注意:在编程中,如果用到浮点数,要特别注意误差问题,因为浮点数是不准确的,所以我们要避免使用“=”来判断两个数是否相等。如果希望保证值比较准确,推荐使用定点数数据类型。

类型名称类型说明float单精度浮点数,占4个字节double双精度浮点数,占8个字节

3. 定点型

DECIMAL在MySQL内部以字符串形式存放,比浮点数更精确。定点类型占M+2个字节DECIMAL(M,D)与浮点型一样处理规则。M的取值范围为065,D的取值范围为030,而且必须<=M,超出范围会报错。DECIMAL如果指定精度时,默认的整数位是10,默认的小数位为0。NUMERIC等价于DECIMAL。

4. 日期时间类型

对于year类型,可以输入4位数,例如2018,也可以输入两位数,例如18,如果输入的是两位,“00-68”表示2000-2069年,“70-99”表示1970-1999年。‘YYYY-MM-DD HH:MM:SS’或’YY-MM-DD HH:MM:SS’,'YYYY-MM-DD’或’YY-MM-DD’格式的字符串。允许“不严格”语法:任何标点符都可以用做日期部分或时间部分之间的间割符。例如,‘98-12-31 11:30:45’、‘98.12.31 11+30+45’、'98/12/31 113045’和’98@12@31 113045’是等价的。'YYYYMMDD’或’YYMMDD’格式的没有间割符的字符串,假定字符串对于日期类型是有意义的。例如,‘19970523’和’970523’被解释为 ‘1997-05-23’,但’971332’是不合法的(它有一个没有意义的月和日部分),将变为’0000-00-00’。对于包括日期部分间割符的字符串值,如果日和月的值小于10,不需要指定两位数。'1979-6-9’与’1979-06-09’是相同的。同样,对于包括时间部分间割符的字符串值,如果时、分和秒的值小于10,不需要指定两位数。'1979-10-30 1:2:3’与’1979-10-30 01:02:03’相同。数字值应为6、8、12或者14位长。如果一个数值是8或14位长,则假定为YYYYMMDD或YYYYMMDDHHMMSS格式,前4位数表示年。如果数字 是6或12位长,则假定为YYMMDD或YYMMDDHHMMSS格式,前2位数表示年。其它数字被解释为仿佛用零填充到了最近的长度。一般存注册时间、商品发布时间等,不建议使用datetime存储,而是使用时间戳,因为datetime虽然直观,但不便于计算。而且timestamp还有一个重要特点,就是和时区有关。还有如果插入NULL,会自动设置为当前系统时间。

5. 字符串型

char(m)无论使用几个字符都占满全部,M为0~255之间的整数

varchar(m)使用几个字符就占用几个,M为0~65535之间的整数

6. char,varchar,text区别

char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是:

char如果不指定(M)则表示长度默认是1个字符。varchar必须指定(M)。

char(M)类型的数据列里,每个值都占用M个字符,如果某个长度小于M,MySQL就会在它的右边用空格字符补足(在检索操作中那些填补出来的空格字符将被去掉;如果存入时右边本身就带空格,检索时也会被去掉);在varchar(M)类型的数据列里,每个值只占用刚好够用的字符再加上一个到两个用来记录其长度的字节(即总长度为L字符+1/2字字节)。

由于某种原因char 固定长度,所以在处理速度上要比varchar快速很多,但相对费存储空间,所以对存储不大,但在速度上有要求的可以使用char类型,反之可以用varchar类型来实例。

text文本类型,可以存比较大的文本段,搜索速度稍慢,因此如果不是特别大的内容,建议使用char,varchar来代替。还有text类型不用加默认值,加了也没用。而且text和blob类型的数据删除后容易导致“空洞”,使得文件碎片比较多,所以频繁使用的表不建议包含text类型字段,建议单独分出去,单独用一个表。

7. 哪些情况使用char或varchar更好

存储很短的信息,比如门牌号码101,201……这样很短的信息应该用char,因为varchar还要占个byte用于存储信息长度,本来打算节约存储的现在得不偿失。固定长度的。比如使用uuid作为主键,那用char应该更合适。因为他固定长度,varchar动态根据长度的特性就消失了,而且还要占个长度信息。十分频繁改变的column。因为varchar每次存储都要有额外的计算,得到长度等工作,如果一个非常频繁改变的,那就要有很多的精力用于计算,而这些对于char来说是不需要的。MyISAM和MEMORY存储引擎中无论使用char还是varchar其实都是作为char类型处理的。其他像InnoDB存储引擎,建议使用varchar类型,因为对于InnoDB数据表,内部的行存储格式并没有区分固定长度和可变长度列(所有数据行都使用指向数据列值的头指针),而且主要影响性能的因素是数据行使用的存储总量,由于char平均占用的空间多于varchar,所以除了简短并且固定长度的,其他考虑varchar。

8. 特殊的NULL值

Null特征:

(1)所有的类型的值都可以是null,包括int、float等数据类型

(2)空字符串"",不等于null,0也不等于null,false也不等于null

(3)任何运算符,判断符碰到NULL,都得NULL

(4)NULL的判断只能用is null,is not null

(5)NULL 影响查询速度,一般避免使值为NULL

会面试问题:

为什么建表时,加not null default ‘’ 或 default 0

答:不想让表中出现null值.

为什么不想要的null的值

答:(1)不好比较,null是一种特殊值,比较时,只能用专门的is null 和 is not null来比较.

碰到运算符,一律返回null

(2)效率不高,影响提高索引效果.

因此,我们往往,在建表时 not null default ‘’ 或 default 0

9. 大二进制

类型名称类型说明tinyblob (Big Large Object)允许长度0~255字节blob允许长度0~65535字节mediumblob允许长度0~167772150字节longblob允许长度0~4294967295字节

10. 大文本

类型名称类型说明tinytext允许长度0~255字节text允许长度0~65535字节mediumtext允许长度0~167772150字节longtext允许长度0~4294967295字节
最新回复(0)