• ADADADADAD

    mysql 基本命令(3)-数据类型和运算符[ mysql数据库 ]

    mysql数据库 时间:2024-12-25 09:56:37

    作者:文/会员上传

    简介:

    一、数值类型1、数据类型有:数值类型、日i期类型、字符串类型。2、int(20),int 指整数的取值范围,里面的参数20,只是表示数据显示的宽度。显示宽度和数据类型的取值范围是无关的。

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    一、数值类型

    1、数据类型有:数值类型、日i期类型、字符串类型。

    2、int(20),int 指整数的取值范围,里面的参数20,只是表示数据显示的宽度。显示宽度和数据类型的取值范围是无关的。显示宽度只是指明mysql最大可能显示的宽度,如果插入的数据大于显示宽度的值,只要该值不超过 该数据类型的取值范围,数值依然可以插入,而且还能全部显示出来。例如:规定 id int(4),插入一个数值123456到id,显示的还是123456,和宽度无关。数据类型的宽度可以指定也可以不指定,不指定,系统会根据数据类型指定默认的宽度。

    3、整数类型:tinyint(很小),smallint(小),mediumint(中),int(正常),bigint(大)

    4、小数分为:浮点型和定点型

    5、浮点::单精度浮点(float)双精度浮点(double)

    6、定点:decimal

    7、无论定点或者是浮点,超出精度范围会进行四舍五入处理。

    8、浮点的表现形式(M,N),M是精度(总共几位数),N是标度(小数的位数)。

    9、浮点和定点的优缺点:

    (1)浮点优点:长度一定,浮点表示更大的数据范围;浮点缺点:会有精度问题。

    (2)精度要求高用定点,做小数比较和加减最好用定点,避免浮点。

    二、日期类型

    1、year,date,time,datetime,timestamp

    2、year 范围:

    (1)2位字符串 0-69(19xx) 70-99 (20xx)

    (2)2为数字 1-69(19xx)70-99(20xx)

    3、time and date

    (1)1112和‘1112’表示分和秒 00:11:12;11:12表示时和分11:12:00。

    (2)date :用'1919-02-09'不能用1919-02-09,用900920不能用90-09-02;

    (3)日期中mysql是允许‘不严格’语法,日期之间的间隔符用哪种符号都可以(-,.,/,@);

    (4)删除表中的数据 :delete from test4;

    删除前:

    mysql> SELECT * FROM test4;

    +------+----------+------------+

    | id| t| d |

    +------+----------+------------+

    | 127 | NULL | NULL|

    | NULL | 00:11:12 | NULL|

    | NULL | 00:11:12 | NULL|

    | NULL | 11:12:00 | NULL|

    | NULL | NULL | 1990-02-09 |

    | NULL | NULL | 1990-02-09 |

    +------+----------+------------+

    6 rows in set (0.00 sec)

    删除后:


    mysql> SELECT * FROM test4;

    Empty set (0.00 sec)

    4、修改时区 :set time_zone='+10:00' 修改为东10区,每增加一个市区时间增加一个小时。

    三、文本字符串

    1、char(M),varchar(M),其中的M必须选择,选择必须适合。

    Field | Type| Null | K

    -------+------------+------+--

    c1| char(1)| YES |

    c2| varchar(5) | YES |

    mysql> INSERT INTO test5 VALUES('abcd','abcde');

    ERROR 1406 (22001): Data too long for column 'c1' at row 1 超出char的长度报错。

    2、text 保存非二进制的字符串,如文章内容、评论等。

    3、enum 是一个字符串对象,其值为表创建时在列规定中枚举对的一列值

    l

    mysql> CREATE TABLE test6

    -> (

    -> soc INT, levevl enum('excellent','good','bad')

    -> );

    Query OK, 0 rows affected (0.02 sec)


    mysql> INSERT INTO test6 VALUES(70,2),(90,1),(30,3);


    mysql> SELECT * FROM test6;

    +------+-----------+

    | soc | levevl|i

    +------+-----------+

    |70 | good |

    |90 | excellent |

    |30 | bad|

    +------+-----------+h

    3 rows in set (0.00 sec)

    4、set

    (1)set 是一个字符串对象,可以有零或者多个值,最多有64个成员.

    (2)enum 类型的字段只能从定义的列中选择一个值插入,set类型的列可从定义的列值中选择多个字符的联合。

    (3)插入set字段中列值有重复,则自动删除重复的值(大小写也是重复的)。

    (4)插入的值必须是set中有的数据,如果插入没有出现的数据则忽视这些值,并给出警告。

    (5)例子:

    mysql> CREATE TABLE test7

    -> (

    -> s SET('1','a','k','yu')

    -> );

    Query OK, 0 rows affected (0.02 sec)

    正确的:

    mysql> INSERT INTO test7 VALUES('1,a'),('a,k,yu'),('1,yu');


    mysql> SELECT * FROM test7;

    +--------+

    | s |

    +--------+

    | 1,a|

    | a,k,yu |

    | 1,yu|

    +--------+

    3 rows in set (0.00 sec)

    超范围错误的:

    mysql> INSERT INTO test7 VALUES('a,c');

    ERROR 1265 (01000): Data truncated for column 's' at row 1

    5、二进制字符串类型 : BIT,BINARY,VARBINARY,TINYBLOB,BLOB,MENDIUMBLOB,LONGBLOB.

    6、char和varchar的选择:

    (1) 在速度有要求的用char实现。

    (2)对于MYISAM存储引擎:用char,用空间换时间。

    (3)InnoDB存储引擎:用varchar,可以节省空间。

    7、blob和text的选择:

    BLOB主要存图片、音频信息,TEXT只能存纯文本文件。

    四:运算符

    1、类型:算数运算符、比较运算符、逻辑运算符、位操作运算符。

    2、

    (1)算数运算(+、-、*、/、%(余或者模运算))。

    (2)比较(>,<,=,>=,<=,!=) in ,between and, is null,greatest,least,like ,regexp(正则)

    (3)逻辑运算求值结果都为1(true)或为0(false)。运算符(逻辑与(AND或者&&),逻辑或(OR或者||),逻辑非(NOT 或者!),逻辑异或(XOR)).

    3、位操作运算:位与(&),位或(|),位非(~),位异或(^)、左移(<<)、右移(>>)

    4、操作符用法:

    (1)算数运算

    mysql> CREATE TABLE test8(num INT(4));


    mysql> INSERT INTO test8 VALUES(64);


    mysql> SELECT * FROM test8;

    +------+

    | num |

    +------+

    |64 |

    +------+

    1 row in set (0.00 sec)


    mysql> SELECT num ,num+10,num-10,num*10,num/10,num%10 FROM test8;

    +------+--------+--------+--------+--------+--------+

    | num | num+10 | num-10 | num*10 | num/10 | num%10 |

    +------+--------+--------+--------+--------+--------+

    |64 | 74 | 54 |640 | 6.4000 | 4 |

    +------+--------+--------+--------+--------+--------+

    1 row in set (0.00 sec)

    (2)比较运算

    1>等比较

    mysql> SELECT 1=2,1=1,1<=>2,1<=>1;

    +-----+-----+-------+-------+

    | 1=2 | 1=1 | 1<=>2 | 1<=>1 |

    +-----+-----+-------+-------+

    |0 |1 | 0 | 1 |

    +-----+-----+-------+-------+

    1 row in set (0.00 sec)

    =和<=>是一样的效果。

    2>

    若有一个或者两个参数为NULL,则比较运算的结果为NULL;若同一个比较运算中的两个参数都是字符串,则按照字符串进行比较;若两个参数均为整数,则按照整数进行比较;若一个字符串和数字进行相等判断,则自动将字符串转换为数。

    3>

    mysql> SELECT 'good'!='bad','123'!=123,'rts'<>'rt';

    +---------------+------------+-------------+

    | 'good'!='bad' | '123'!=123 | 'rts'<>'rt' |

    +---------------+------------+-------------+

    | 1 | 0 |1 |

    +---------------+------------+-------------+

    1 row in set (0.00 sec)

    !=和<>效果一样

    4> <、<=,>,>=的用法和上边用法一样。

    5>IS NULL ISNULL() ,IS NOT NULL用法。

    mysql> SELECT NULL IS NULL, NULL ISNULL,10 IS NOT NULL;

    +--------------+--------+----------------+

    | NULL IS NULL | ISNULL | 10 IS NOT NULL |

    +--------------+--------+----------------+

    |1 |NULL | 1 |

    +--------------+--------+----------------+

    1 row in set (0.04 sec)


    mysql> SELECT ISNULL(NULL),ISNULL(1);

    +--------------+-----------+

    | ISNULL(NULL) | ISNULL(1) |

    +--------------+-----------+

    |1 | 0 |

    +--------------+-----------+

    1 row in set (0.03 sec)

    6>between.. and ...

    mysql> SELECT 4 BETWEEN 2 AND 5, 5 BETWEEN 2 AND 3;

    +-------------------+-------------------+

    | 4 BETWEEN 2 AND 5 | 5 BETWEEN 2 AND 3 |

    +-------------------+-------------------+

    | 1 | 0 |

    +-------------------+-------------------+

    1 row in set (0.00 sec)

    7>找最大最小值

    最小值

    mysql> SELECT LEAST(12,34,56,67,10,7);

    +-------------------------+

    | LEAST(12,34,56,67,10,7) |

    +-------------------------+

    |7 |

    +-------------------------+

    1 row in set (0.03 sec)

    最大值

    mysql> SELECT GREATEST (20,12,45,16,87,3);

    +-----------------------------+

    | GREATEST (20,12,45,16,87,3) |

    +-----------------------------+

    | 87 |

    +-----------------------------+

    1 row in set (0.00 sec)

    当进行最大最小值比较时,如果比较值列表中有NULL,则不能判断大小,返回值为NULL;

    当进行字符串的比较时,字母越靠后值越大,反之值越小。

    8> in ,not in 判断操作数是否为列表中一个值。

    mysql> SELECT 3 IN(1,4,3,2,6), 4 NOT IN(1,4,5,6,7);

    +-----------------+---------------------+

    | 3 IN(1,4,3,2,6) | 4 NOT IN(1,4,5,6,7) |

    +-----------------+---------------------+

    |1 |0 |

    +-----------------+---------------------+

    1 row in set (0.03 sec)

    9>LIKE 只有两种通配符(%,可以匹配任何数目的字符,甚至包括零字符;_可以匹配一个字符。)

    mysql> SELECT 'phon' like 'phon','phon'like 'pho_','phon'like 'p%';

    +--------------------+-------------------+-----------------+

    | 'phon' like 'phon' | 'phon'like 'pho_' | 'phon'like 'p%' |

    +--------------------+-------------------+-----------------+

    | 1 | 1 |1 |

    +--------------------+-------------------+-----------------+

    1 row in set (0.00 sec)


    mysql> SELECT 'phon' like '%';

    +------------------+

    | 'phon' like '%' |

    +------------------+

    |1 |

    +------------------+

    1 row in set (0.00 sec)

    10>regexp 正则通配符

    ‘^’匹配以该字符后面的字符开头的字符串

    ‘$’匹配以该字符后面的字符结尾的字符串

    ‘.’匹配任何一个单字符

    ‘[...]’匹配在括号内的任何字符

    ‘*’匹配零个或多个在他前面的字符。


    mysql> SELECT 'ssky' REGEXP '^s','ssky' REGEXP 'y&','ssky' REGEXP 's.sky';

    +--------------------+--------------------+-----------------------+

    | 'ssky' REGEXP '^s' | 'ssky' REGEXP 'y&' | 'ssky' REGEXP 's.sky' |

    +--------------------+--------------------+-----------------------+

    | 1 | 0 | 0 |

    +--------------------+--------------------+-----------------------+

    1 row in set (0.00 sec)


    mysql> SELECT 'abdedey' REGEXP 'de*';

    +------------------------+

    | 'abdedey' REGEXP 'de*' |

    +------------------------+

    | 1 |

    +------------------------+

    1 row in set (0.00 sec)

    * 加其中一个字符可以匹配任何字符串,类似于like。

    5、逻辑运算

    1> NOT 或者 !

    逻辑非运算符表示当前操作数为0时,所得值为1;操作数为非零时,所得值为0;操作数为null时返回值为null。

    2>AND 或者 &&

    逻辑与运算符表示当所有操作数为非零值、并且不为null,计算结果为1;当的一个或者多个操作数位零时所得结果为0.

    3>OR 或者||

    逻辑或运算符,中两个操作数均为非null值,且任意一个操作数为非0值时(1 or 2 or 0 为1),结果为1;0 or null,为null;1or null 为1;null or null 为null

    4>异或运算

    1 xor 1 和 0 xor 0为 0; 1 xor0 为1;1 xor null为null.

    1 xor 1 xor 1 中有多个操作数,运算顺序从左到右依次计算1 xor 1 结果为0,再与1进行异或运算,结果为1.

    a xor b 的计算等同于(a AND(NOTb))或者 ((NOTa) AND b).

    6、位运算:用来对二进制字节中 的位进行测试、位移或者测试处理。

    位运算的类型:位或(|),位与(&),位异或(^),位左移(<<),位右移(>>),位取反,反转所有比特(~)

    1>位与位或

    mysql> SELECT 3& 4,3|4;

    +------+-----+

    | 3& 4 | 3|4 |

    +------+-----+

    |0 |7 |

    +------+-----+

    1 row in set (0.03 sec)

    2>位异或运算 对应为的二进制不同,对应为的结果为1如

    3:011 , 4:100。 3^4 就是011 ^100 结果 111=7

    mysql> SELECT 3^4;

    +-----+

    | 3^4 |

    +-----+

    |7 |

    +-----+

    1 row in set (0.00 sec)

    3>位左移 ,位右移

    就是将二进制的中1的位置左移或右移,移出的位置补0.

    列:11<<3 1100

    4>位 取反的实质就是将参与运算的数据,按对应的二进制数诸位反转,即1去反后变0,0取反后变1.

    mysql 基本命令(3)-数据类型和运算符.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载