您好,欢迎访问一九零五行业门户网

MySQL数据库学习手册之MySQL语言参考

mysql select this\nis\nfour\nlines; +--------------------+ this is four lines +--------------------+ 注意,从mysql3.23.6开始规则改变了,此时我们引入了用'引用的标识符(数据库、表和列命名)(如果你以ansi模式运行,也将用于引用标识符)。 标识
mysql> select this\nis\nfour\nlines;
+--------------------+
this
is
four
lines
+--------------------+
注意,从mysql3.23.6开始规则改变了,此时我们引入了用'引用的标识符(数据库、表和列命名)(如果你以ansi模式运行,也将用于引用标识符)。
标识符 最大长度 允许的字符
数据库 64 在一个目录名允许的任何字符,除了/.
表 64 在文件名中允许的任何字符,除了/或.
列 64 所有字符
别名 255 所有字符
mysql> select col_name from tbl_name as a
where l_name = 1 or l_name = 2;
tinyint[(m)] [unsigned] [zerofill]
一个很小的整数。有符号的范围是-128到127,无符号的范围是0到255。
smallint[(m)] [unsigned] [zerofill]
一个小整数。有符号的范围是-32768到32767,无符号的范围是0到65535。
mediumint[(m)] [unsigned] [zerofill]
一个中等大小整数。有符号的范围是-8388608到8388607,无符号的范围是0到16777215。
int[(m)] [unsigned] [zerofill]
一个正常大小整数。有符号的范围是-2147483648到2147483647,无符号的范围是0到4294967295。
integer[(m)] [unsigned] [zerofill]
这是int的一个同义词。
bigint[(m)] [unsigned] [zerofill]
一个大整数。有符号的范围是-9223372036854775808到9223372036854775807,无符号的范围是0到18446744073709551615。注意,所有算术运算用有符号的bigint或double值完成,因此你不应该使用大于9223372036854775807(63位)的有符号大整数,除了位函数!注意,当两个参数是integer值时,-、+和*将使用bigint运算!这意味着如果你乘2个大整数(或来自于返回整数的函数),如果结果大于9223372036854775807,你可以得到意外的结果。一个浮点数字,不能是无符号的,对一个单精度浮点数,其精度可以是float[(m,d)] [zerofill]
一个小(单精密)浮点数字。不能无符号。允许的值是-3.402823466e+38到-1.175494351e-38,0 和1.175494351e-38到3.402823466e+38。m是显示宽度而d是小数的位数。没有参数的float或有double[(m,d)] [zerofill]
一个正常大小(双精密)浮点数字。不能无符号。允许的值是-1.7976931348623157e+308到-2.2250738585072014e-308、 0和2.2250738585072014e-308到1.7976931348623157e+308。m是显示宽度而d是小数位数。没有一个参数的double或float(x)(25 double precision[(m,d)] [zerofill]
real[(m,d)] [zerofill]
这些是double同义词。
decimal[(m[,d])] [zerofill]
一个未压缩(unpack)的浮点数字。不能无符号。行为如同一个char列:“未压缩”意味着数字作为一个字符串被存储,值的每一位使用一个字符。小数点,并且对于负数,“-”符号不在m中计算。如果d是0,值将没有小数点或小数部分。decimal值的最大范围与double相同,但是对一个给定的decimal列,实际的范围可以通过m和d的选择被限制。如果d被省略,它被设置为0。如果m被省掉,它被设置为10。注意,在mysql3.22里,m参数包括符号和小数点。
numeric(m,d) [zerofill]
这是decimal的一个同义词。
date
一个日期。支持的范围是'1000-01-01'到'9999-12-31'。mysql以'yyyy-mm-dd'格式来显示date值,但是允许你使用字符串或数字把值赋给date列。
datetime
一个日期和时间组合。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。mysql以'yyyy-mm-dd hh:mm:ss'格式来显示datetime值,但是允许你使用字符串或数字把值赋给datetime的列。
timestamp[(m)]
一个时间戳记。范围是'1970-01-01 00:00:00'到2037年的某时。mysql以yyyymmddhhmmss、yymmddhhmmss、yyyymmdd或yymmdd格式来显示timestamp值,取决于是否m是14(或省略)、12、8或6,但是允许你使用字符串或数字把值赋给timestamp列。一个timestamp列对于记录一个insert或update操作的日期和时间是有用的,因为如果你不自己给它赋值,它自动地被设置为最近操作的日期和时间。你以可以通过赋给它一个null值设置它为当前的日期和时间。见7.3.6 日期和时间类型。
time
一个时间。范围是'-838:59:59'到'838:59:59'。mysql以'hh:mm:ss'格式来显示time值,但是允许你使用字符串或数字把值赋给time列。
year[(24)]
一个2或4位数字格式的年(缺省是4位)。允许的值是1901到2155,和0000(4位年格式),如果你使用2位,1970-2069( 70-69)。mysql以yyyy格式来显示year值,但是允许你把使用字符串或数字值赋给year列。(year类型在mysql3.22中是新类型。)
char(m) [binary]
一个定长字符串,当存储时,总是是用空格填满右边到指定的长度。m的范围是1 ~ 255个字符。当值被检索时,空格尾部被删除。char值根据缺省字符集以大小写不区分的方式排序和比较,除非给出binary关键词。national char(短形式nchar)是ansi sql的方式来定义char列应该使用缺省字符集。这是mysql的缺省。char是character的一个缩写。
[national] varchar(m) [binary]
一个变长字符串。注意:当值被存储时,尾部的空格被删除(这不同于ansi sql规范)。m的范围是1 ~ 255个字符。 varchar值根据缺省字符集以大小写不区分的方式排序和比较,除非给出binary关键词值。见7.7.1 隐式列指定变化。 varchar是character varying一个缩写。
tinyblob
tinytext
一个blob或text列,最大长度为255(2^8-1)个字符。见7.7.1 隐式列指定变化。
blob
text
一个blob或text列,最大长度为65535(2^16-1)个字符。见7.7.1 隐式列指定变化。
mediumblob
mediumtext
一个blob或text列,最大长度为16777215(2^24-1)个字符。见7.7.1 隐式列指定变化。
longblob
longtext
一个blob或text列,最大长度为4294967295(2^32-1)个字符。见7.7.1 隐式列指定变化
enum('value1','value2',...)
枚举。一个仅有一个值的字符串对象,这个值式选自与值列表'value1'、'value2', ...,或null。一个enum最多能有65535不同的值。
set('value1','value2',...)
一个集合。能有零个或多个值的一个字符串对象,其中每一个必须从值列表'value1', 'value2', ...选出。一个set最多能有64个成员。
对于每个由mysql支持的列类型的存储需求在下面按类列出。
7.3.2 数字类型
列类型 需要的存储量
tinyint 1 字节
smallint 2 个字节
mediumint 3 个字节
int 4 个字节
integer 4 个字节
bigint 8 个字节
float(x) 4 如果 x float 4 个字节
double 8 个字节
double precision 8 个字节
real 8 个字节
decimal(m,d) m字节(d+2 , 如果m numeric(m,d) m字节(d+2 , 如果m 7.3.3 日期和时间类型
列类型 需要的存储量
date 3 个字节
datetime 8 个字节
timestamp 4 个字节
time 3 个字节
year 1 字节
7.3.4 串类型
列类型 需要的存储量
char(m) m字节,1 varchar(m) l+1 字节, 在此l tinyblob, tinytext l+1 字节, 在此lblob, text l+2 字节, 在此lmediumblob, mediumtext l+3 字节, 在此llongblob, longtext l+4 字节, 在此lenum('value1','value2',...) 1 或 2 个字节, 取决于枚举值的数目(最大值65535)
set('value1','value2',...) 1,2,3,4或8个字节, 取决于集合成员的数量(最多64个成员)
对于alter table、load data infile、update和多行insert语句,由于剪切所发生的变换作为“警告”被报告。
7.3.6 日期和时间类型
* 在范围00-69的年值被变换到2000-2069。
* 在范围70-99的年值被变换到1970-1999。
在mysql检索并且显示timestamp值取决于显示尺寸的格式如下表。“完整”timestamp格式是14位,但是timestamp列可以用更短的显示尺寸创造:
列类型 显示格式
timestamp(14) yyyymmddhhmmss
timestamp(12) yymmddhhmmss
timestamp(10) yymmddhhmm
timestamp(8) yyyymmdd
timestamp(6) yymmdd
timestamp(4) yymm
timestamp(2) yy
* 总是指定年,月,和日,即使你的列类型是timestamp(4)或timestamp(2)。否则,值将不是一个合法的日期并且0将被存储。
* 如果你使用alter table拓宽一个狭窄的timestamp列,以前被“隐蔽”的信息将被显示。
* 同样,缩小一个timestamp列不会导致信息失去,除了感觉上值在显示时,较少的信息被显示出。
* 尽管timestamp值被存储为完整精度,直接操作存储值的唯一函数是unix_timestamp(),其他函数操作在格式化了的检索的值上,这意味着你不能使用函数例如hour()或second(),除非timestamp值的相关部分被包含在格式化的值中。例如,一个timestamp列的hh部分部被显示,除非显示大小至少是10,因此在更短的timestamp值上试试使用hour()产生一个无意义的结果。
* 作为'hh:mm:ss'格式的一个字符串。“宽松”的语法被允许--任何标点符号可用作时间部分的分隔符,例如,'10:11:12'和'10.11.12'是等价的。
* 作为没有分隔符的'hhmmss'格式的一个字符串,如果它作为一个时间解释。例如,'101112'被理解为'10:11:12',但是'109712'是不合法的(它有无意义的分钟部分)并变成'00:00:00'。
* 作为hhmmss格式的一个数字,如果它能解释为一个时间。例如,101112被理解为'10:11:12'。
* 返回值可在一个time上下文接受的函数,例如current_time。
下表显示了两种类型的列的不同,通过演示存储变长字符串值到char(4)和varchar(4)列:
值 char(4) 存储需求 varchar(4) 存储需求
'' ' ' 4 个字节 '' 1 字节
'ab' 'ab ' 4 个字节 'ab' 3 个字节
'abcd' 'abcd' 4 个字节 'abcd' 5 个字节
'abcdefgh' 'abcd' 4 个字节 'abcd' 5 个字节
mysql> select id,substring(blob_col,1,100) from tbl_name
group by 2;
mysql> select id,substring(blob_col,1,100) as b from tbl_name
group by b;
如果你想要得到一个enum列的所有可能的值,你应该使用:show columns from table_name like enum_column_name并且分析在第二列的enum定义。
7.3.7.4 set类型
对高精度,你总是能变换到以一个bigint存储的定点类型。这允许你用整数做所有的计算,并且仅在必要时将结果转换回浮点值。见10.6 选择一个表类型。
7.3.9 列索引
mysql> select * from test where last_name=widenius
and first_name >=m and first_name
( ... )
括号。使用它们来强制在一个表达式的计算顺序。
mysql> select bit_count(29);
-> 4
mysql> select 1 > '6x';
-> 0
mysql> select 7 > '6x';
-> 1
mysql> select 0 > 'x6';
-> 0
mysql> select 0 = 'x6';
-> 1
mysql> select 1 between 2 and 3;
-> 0
mysql> select 'b' between 'a' and 'c';
-> 1
mysql> select 2 between 2 and '3';
-> 1
mysql> select 2 between 2 and 'x-3';
-> 0
expr like pat [escape 'escape-char']
使用sql的简单的正规表达式比较的模式匹配。返回1(true)或0(false)。用like,你可以在模式中使用下列2个通配符字符:
% 匹配任何数目的字符,甚至零个字符
_ 精确匹配一个字符
mysql> select 'monty!' regexp 'm%y%%';
-> 0
mysql> select 'monty!' regexp '.*';
-> 1
mysql> select 'new*\n*line' regexp 'new\\*.\\*line';
-> 1
mysql> select a regexp a, a regexp binary a;
-> 1 0
mysql> select if(1>2,2,3);
-> 3
mysql> select if(1-> 'yes'
mysql> select if(strcmp('test','test1'),'yes','no');
-> 'no'
mysql> select sign(-32);
-> -1
mysql> select sign(0);
-> 0
mysql> select sign(234);
-> 1
mysql> select log10(2);
-> 0.301030
mysql> select log10(100);
-> 2.000000
mysql> select log10(-100);
-> null
mysql> select atan(-2,2);
-> -0.785398
mysql> select atan(pi(),0);
-> 1.570796
mysql> select greatest(2,0);
-> 2
mysql> select greatest(34.0,3.0,5.0,767.0);
-> 767.0
mysql> select greatest(b,a,c);
-> c
mysql> select conv(a,16,2);
-> '1010'
mysql> select conv(6e,18,8);
-> '172'
mysql> select conv(-17,10,-18);
-> '-h'
mysql> select conv(10+10+'10'+0xa,10,10);
-> '40'
注意,对于多字节字符,其char_length()仅计算一次。
locate(substr,str)
position(substr in str)
返回子串substr在字符串str第一个出现的位置,如果substr不是在str里面,返回0.
mysql> select substring('quadratically',5,6);
-> 'ratica'
mysql> select soundex('hello');
-> 'h400'
mysql> select soundex('quadratically');
-> 'q36324'
mysql> select field('ej', 'hej', 'ej', 'heja', 'hej', 'foo');
-> 2
mysql> select field('fo', 'hej', 'ej', 'heja', 'hej', 'foo');
-> 0
该函数对多字节是可靠的。
load_file(file_name)
读入文件并且作为一个字符串返回文件内容。文件必须在服务器上,你必须指定到文件的完整路径名,而且你必须有file权限。文件必须所有内容都是可读的并且小于max_allowed_packet。如果文件不存在或由于上面原因之一不能被读出,函数返回null。
其它类似信息

推荐信息