1. 数据类型

  MySQL支持多种数据类型,主要有数值类型、日期/时间类型和字符串类型。

  (1)数值类型:包括整数类型:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,

             浮点小数类型:FLOAT和DOUBLE,

             定点小数类型:DECIMAL。

  (2)日期/时间类型:包括 YEAR、TIME、DATE、DATETIME和TIMESTAMP。

  (3)字符串类型:包括 CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUMSET等。

1.1 整数类型

  整数类型的字段可以添加AUTO_INCREMENT自增约束条件。

  整数类型:

mysql> CREATE TABLE product
-> (
-> id INT AUTO_INCREMENT PRIMARY KEY,
-> product_name VARCHAR (100) NOT NULL
-> );
mysql> DESC product;
+--------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| product_name | varchar(100) | NO | | NULL | |
+--------------+--------------+------+-----+---------+----------------+

  整数类型无符号:

mysql> CREATE TABLE product
-> (
-> id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
-> product_name VARCHAR (100) NOT NULL
-> );
mysql> DESC product;
+--------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| product_name | varchar(100) | NO | | NULL | |
+--------------+------------------+------+-----+---------+----------------+

1.2 浮点数类型和定点数类型

  MySQL中使用浮点数和定点数来表示小数。

  浮点类型包括:单精度浮点类型(FLOAT)和双精度浮点类型(DOUBLE)。

  定点类型只有:DECIMAL。

  浮点类型和定点类型都可以使用(M, N)来表示,其中M为精度,表示总位数;N为标度,表示小数的位数。

  FLOAT和DOUBLE在不指定精度时,默认会按照实际的精度,DECIMAL不指定精度默认为(10,0)。

1.3 日期与时间类型

  MySQL中表示日期的数据类型:DATETIME、DATE、TIMESTAMP、TIME和YEAR。

  CURRENT_DATE():返回当前日期

  NOW():返回当前日期 + 时间

mysql> SELECT CURRENT_DATE(), NOW();
+----------------+---------------------+
| CURRENT_DATE() | NOW() |
+----------------+---------------------+
| 2017-11-01 | 2017-11-01 19:40:58 |
+----------------+---------------------+

1.4 字符串类型

  (1)CHAR和VARCHAR类型

  CHAR(m):固定长度字符串,m表示列长度,取值范围 0~255(28-1)。

  VARCHAR(m):长度可变的字符串,m表示列长度,取值范围 0~65535(216-1)。

  (2)ENUM类型

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

  语法格式:

  column_name ENUM('value1', 'value2', ...)

  ENUM类型字段只能在指定的枚举列表中取值,一次只能取一个。

  ENUM值在内部使用整数表示,每个枚举值都有一个索引值,枚举列表索引值从1开始。MySQL存储索引编号。

  枚举最多可以有65535(216-1)个元素。

mysql> CREATE TABLE product
-> (
-> id INT AUTO_INCREMENT PRIMARY KEY,
-> product_name VARCHAR(10),
-> size ENUM('x-small', 'small', 'medium', 'large', 'x-large') NOT NULL DEFAULT 'small'
-> );
mysql> DESC product;
+--------------+----------------------------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+----------------------------------------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| product_name | varchar(10) | YES | | NULL | |
| size | enum('x-small','small','medium','large','x-large') | NO | | small | |
+--------------+----------------------------------------------------+------+-----+---------+----------------+
3 rows in set (0.06 sec)

  ENUM类型的取值范围,示例:size

索引
NULL NULL
'' 0
x-small 1
small 2
medium 3
large 4
x-large 5

  ENUM值按照索引顺序排列,并且空字符串排在非空字符串前,NULL值排在其他所有枚举值前。

  ENUM列总有一个默认值。如果ENUM列定义为NULL,则NULL则为该列的一个有效值,并且默认为NULL。如果ENUM列定义为NOT NULL,则默认值为允许的值列表的第1个元素。

mysql> INSERT INTO product(product_name, size) VALUES ('最小码', 1);
mysql> INSERT INTO product(product_name, size) VALUES ('小码', 'small');
mysql> SELECT * FROM product;
+----+--------------+---------+
| id | product_name | size |
+----+--------------+---------+
| 1 | 最小码 | x-small |
| 2 | 小码 | small |
+----+--------------+---------+
2 rows in set

2. 运算符

  MySQL运算符是执行特定算术或逻辑操作的符号,主要分四大类:算术运算符、比较运算符、逻辑运算符及位操作运算符。

2.1 算术运算符

  MySQL中的算术运算符:

运算符 说明
+ 加法运算
- 减法运算
* 乘法运算
/ 除法运算,返回商
% 求余运算,返回余数

2.2 比较运算符

  比较运算符的结果总是1、0或者NULL,比较运算符常在SELECT查询条件子句中使用,用来查询满足指定条件的记录。

3. 函数

3.1 数学函数

3.2 字符串函数

3.3 日期和时间函数

  (1)获取当前日期

mysql> SELECT CURDATE(), CURRENT_DATE();
+------------+----------------+
| CURDATE() | CURRENT_DATE() |
+------------+----------------+
| 2018-03-27 | 2018-03-27 |
+------------+----------------+

  (2)获取当前时间

mysql> SELECT CURTIME(), CURRENT_TIME();
+-----------+----------------+
| CURTIME() | CURRENT_TIME() |
+-----------+----------------+
| 18:52:52 | 18:52:52 |
+-----------+----------------+

  (3)获取当前日期时间

mysql> SELECT SYSDATE(), NOW(), CURRENT_TIMESTAMP(), LOCALTIME();
+---------------------+---------------------+---------------------+---------------------+
| SYSDATE() | NOW() | CURRENT_TIMESTAMP() | LOCALTIME() |
+---------------------+---------------------+---------------------+---------------------+
| 2018-03-27 19:16:51 | 2018-03-27 19:16:51 | 2018-03-27 19:16:51 | 2018-03-27 19:16:51 |
+---------------------+---------------------+---------------------+---------------------+

  (4)UNIX时间戳

  UNIX_TIMESTAMP(date):返回一个Unix时间戳(1970-01-01 00:00:00 GMT之后的秒数)作为无符号整数。

mysql> SELECT UNIX_TIMESTAMP(), UNIX_TIMESTAMP(NOW()), UNIX_TIMESTAMP('2018-03-27');
+------------------+-----------------------+------------------------------+
| UNIX_TIMESTAMP() | UNIX_TIMESTAMP(NOW()) | UNIX_TIMESTAMP('2018-03-27') |
+------------------+-----------------------+------------------------------+
| 1522149805 | 1522149805 | 1522080000 |
+------------------+-----------------------+------------------------------+

  FROM_UNIXTIME(date):把UNIX时间戳转换为普通格式的时间,与UNIX_TIMESTAMP(date)互为反函数。

mysql> SELECT FROM_UNIXTIME(1522149805);
+---------------------------+
| FROM_UNIXTIME(1522149805) |
+---------------------------+
| 2018-03-27 19:23:25 |
+---------------------------+

  (5)获取月份:MONTH(date)

mysql> SELECT MONTH(NOW()), NOW();
+--------------+---------------------+
| MONTH(NOW()) | NOW() |
+--------------+---------------------+
| 3 | 2018-03-27 19:31:15 |
+--------------+---------------------+
mysql> SELECT MONTHNAME(NOW()), NOW();
+------------------+---------------------+
| MONTHNAME(NOW()) | NOW() |
+------------------+---------------------+
| March | 2018-03-27 19:32:46 |
+------------------+---------------------+

  (6)获取星期

  DAYNAME(date):返回对应的星期英文名称

mysql> SELECT DAYNAME(NOW()), NOW();
+----------------+---------------------+
| DAYNAME(NOW()) | NOW() |
+----------------+---------------------+
| Tuesday | 2018-03-27 19:36:17 |
+----------------+---------------------+

  DAYOFWEEK(date):返回date对应的一周中的索引,1表示周日,...,7表示周六

mysql> SELECT DAYOFWEEK(NOW()), NOW();
+------------------+---------------------+
| DAYOFWEEK(NOW()) | NOW() |
+------------------+---------------------+
| 3 | 2018-03-27 19:37:32 |
+------------------+---------------------+

  WEEKDAY(date):返回date对应的工作日索引,0表示周一,...,6表示周日。

mysql> SELECT WEEKDAY(NOW()), NOW();
+----------------+---------------------+
| WEEKDAY(NOW()) | NOW() |
+----------------+---------------------+
| 1 | 2018-03-27 19:40:58 |
+----------------+---------------------+

  (7)日期计算

  DATE_ADD(date,INTERVAL expr unit)

mysql> SELECT DATE_ADD(NOW(),INTERVAL 1 DAY), NOW();
+--------------------------------+---------------------+
| DATE_ADD(NOW(),INTERVAL 1 DAY) | NOW() |
+--------------------------------+---------------------+
| 2018-03-28 19:47:46 | 2018-03-27 19:47:46 |
+--------------------------------+---------------------+

  ADDDATE(expr,days)

mysql> SELECT ADDDATE(NOW(),1), NOW();
+---------------------+---------------------+
| ADDDATE(NOW(),1) | NOW() |
+---------------------+---------------------+
| 2018-03-28 19:49:38 | 2018-03-27 19:49:38 |
+---------------------+---------------------+

  DATE_SUB(date,INTERVAL expr unit)

mysql> SELECT DATE_SUB(NOW(),INTERVAL 1 DAY),NOW();
+--------------------------------+---------------------+
| DATE_SUB(NOW(),INTERVAL 1 DAY) | NOW() |
+--------------------------------+---------------------+
| 2018-03-26 19:51:01 | 2018-03-27 19:51:01 |
+--------------------------------+---------------------+

  SUBDATE(expr,days)

  日期与时间格式化:DATE_FORMAT(date,format)

mysql> SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%m:%s');
+----------------------------------------+
| DATE_FORMAT(NOW(),'%Y-%m-%d %H:%m:%s') |
+----------------------------------------+
| 2018-03-27 19:03:59 |
+----------------------------------------+

3.4 条件判断函数

3.5 系统信息函数

  (1)VERSION():获取MySQL版本号

mysql> SELECT VERSION();
+------------+
| VERSION() |
+------------+
| 5.7.20-log |
+------------+

  (2)CONNECTION_ID():获取MySQL服务器当前连接的次数,每个连接都有各自唯一的ID

mysql> SELECT CONNECTION_ID();
+-----------------+
| CONNECTION_ID() |
+-----------------+
| 12 |
+-----------------+
mysql> SHOW PROCESSLIST;
mysql> SHOW FULL PROCESSLIST;
+----+------+-----------------+------+---------+------+----------+-----------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+------+---------+------+----------+-----------------------+
| 3 | root | localhost:16352 | NULL | Sleep | 1723 | | NULL |
| 4 | root | localhost:16424 | test | Sleep | 1679 | | NULL |
| 12 | root | localhost:17521 | test | Query | 0 | starting | SHOW FULL PROCESSLIST |
| 13 | root | localhost:20898 | test | Sleep | 745 | | NULL |
| 14 | root | localhost:20916 | test | Sleep | 154 | | NULL |
+----+------+-----------------+------+---------+------+----------+-----------------------+

  SHOW PROCESSLIST与SHOW FULL PROCESSLIST区别:

  如果是root账号,能看到所有用户的当前连接;如果是普通账号,则只能看到自己占用的连接。

  SHOW PROCESSLIST:只显示前100条;

  SHOW FULL PROCESSLIST:查看全部记录。

  (3)查看当前所使用的数据库

mysql> SELECT DATABASE(), SCHEMA();

  (4)获取当前登录用户名

mysql> SELECT USER(), CURRENT_USER(), SYSTEM_USER();
+----------------+----------------+----------------+
| USER() | CURRENT_USER() | SYSTEM_USER() |
+----------------+----------------+----------------+
| root@localhost | root@localhost | root@localhost |
+----------------+----------------+----------------+

  (5)LAST_INSERT_ID():获取最后一个自动生成的ID值

  LAST_INSERT_ID()自动返回最后一个INSERT或UPDATE为AUTO_INCREMENT列设置的第一个发生的值。

  一次插入一条记录:返回最后一条插入记录的ID值。

mysql> INSERT INTO product(product_name, size) VALUES ('最小码', 'x-small');
mysql> INSERT INTO product(product_name, size) VALUES ('小码', 'small');
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 2 |
+------------------+
1 row in set

  一次插入多条记录:当使用一条INSERT语句插入多行时,LAST_INSERT_ID()只返回插入第一行数据时产生的值。

mysql> INSERT INTO product(product_name, size) VALUES ('中码', 'medium'), ('大码', 'large'), ('最大码', 'x-large');
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 3 |
+------------------+
mysql> SELECT * FROM product;
+----+--------------+---------+
| id | product_name | size |
+----+--------------+---------+
| 1 | 最小码 | x-small |
| 2 | 小码 | small |
| 3 | 中码 | medium |
| 4 | 大码 | large |
| 5 | 最大码 | x-large |
+----+--------------+---------+

MySQL系列:数据类型、运算符及函数(5)的更多相关文章

  1. 【MySQL】01_运算符、函数

    运算符 运算符是保留字或主要用于 SQL 语句的 WHERE 子句 中的字符,用于执行操作,例如:比较和算术运算. 这些运算符用于指定 SQL 语句中的条件,并用作语句中多个条件的连词. 常见运算符有 ...

  2. MySql系列之表的数据类型

    存储引擎介绍 存储引擎即表类型,mysql根据不同的表类型会有不同的处理机制 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件 ...

  3. MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

  4. PHP语法(二):数据类型、运算符和函数

    相关链接: PHP语法(一):基础和变量 PHP语法(二):数据类型.运算符和函数 PHP语法(三):控制结构(For循环/If/Switch/While) 这次整理了PHP的数据类型.运算符和函数. ...

  5. MYSQL常见运算符和函数

    字符函数 (1)CONCAT():字符连接 SELECT CONCAT('IMOOC','-','MySQL');//IMOOC-MySQL SELECT CONCAT (first_name,las ...

  6. Mysql常用运算符与函数汇总

    Mysql常用运算符与函数汇总 本文给大家汇总介绍了mysql中的常用的运算符以及常用函数的用法及示例,非常的全面,有需要的小伙伴可以参考下 我们先把数据表建好 use test;create tab ...

  7. MYSQL常见运算符和函数【重要】

    字符函数 (1)CONCAT():字符连接 SELECT CONCAT(‘IMOOC’,’-‘,’MySQL’);//IMOOC-MySQL SELECT CONCAT (first_name,las ...

  8. MySQL系列(一)--数据类型

    如何选择优化的数据类型: 1.通常更小的更好 相同级别的数据类型,选择占据空间更小的数据类型.更小的数据类型通常更快,因为占用更少的磁盘.内存和CPU缓存,处理时需要的 CPU周期也更少,但是要确保需 ...

  9. MySQL(六) —— 运算符和函数

    1. 字符函数   函数名称 描述 CONCAT()         字符连接                             CONCAT_WS()          使用指定的分隔符进行字 ...

  10. MySQL系列(一)--基础知识(转载)

    安装就不说了,网上多得是,我的MySQL是8.0版本,可以参考:CentOS7安装MySQL8.0图文教程和MySQL8.0本地访问设置为远程访问权限 我的MySQL安装在阿里云上面,阿里云向外暴露端 ...

随机推荐

  1. Java开发笔记(六十七)清单:ArrayList和LinkedList

    前面介绍了集合与映射两类容器,它们的共同特点是每个元素都是唯一的,并且采用二叉树方式的类型还自带有序性.然而这两个特点也存在弊端:其一,为啥内部元素必须是唯一的呢?像手机店卖出了两部Mate20,虽然 ...

  2. springmvc 文件上传(粘贴即用)

    这里记录下,方便以后复制粘贴. maven配置 <dependency> <groupId>commons-fileupload</groupId> <art ...

  3. [leetcode](4.21)2. 按字典序排列最小的等效字符串

    给出长度相同的两个字符串:A 和 B,其中 A[i] 和 B[i] 是一组等价字符.举个例子,如果 A = "abc" 且 B = "cde",那么就有 'a' ...

  4. 程序员50题(JS版本)(一)

    程序1:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? for(var i=1,sum=0;i<=4;i++){ for(var j=1;j<=4;j++){ ...

  5. vue中computed计算属性与methods对象中的this指针

    this 指针问题 methods与computed中的this指针 应该指向的是它们自己,可是为什么this指针却可以访问data对象中的成员呢? 因为new Vue对象实例化后data中的成员和c ...

  6. Kruskal重构树入门

    这个知识点好像咕咕咕了好长了..趁还没退役赶紧补一下吧.. 讲的非常简略,十分抱歉.. 前置知识 Kruskal算法 一定的数据结构基础(如主席树) Kruskal重构树 直接bb好像不是很好讲,那就 ...

  7. 【Vue 2.x】指令的学习

      v-on作用于事件,简写@ v-bind作用于html元素的属性,简写: v-for作用于模板内的变量,和C#的foreach类似的用法 v-if和v-show条件渲染html元素 v-model ...

  8. 国外线下技术俱乐部建设(1) - Belgrade Python技术俱乐部2019-01-25活动感悟

    这是<国外线下技术俱乐部建设>系列文章之一.   虽然之前接触过Belgrade的.NET技术俱乐部,但是它最近活动要春节后了. 出于观摩别人是怎么搞线下社区的心态,还有自己也有在用Pyt ...

  9. 可视化设计,类Excel的快速开发平台

    活字格Web应用生成器,是可视化设计,类Excel的快速开发平台,接下来给大家介绍如何体现这些特点. 一.可视化设计 网页系统的开发,包含UI设计+代码编写的工作,最终形成网页系统.这要求系统开发人员 ...

  10. spring学习总结——装配Bean学习二(JavaConfig装配bean)

    通过Java代码装配bean 前言:上面梳理了通过注解来隐式的完成了组件的扫描和自动装配,下面来学习下如何通过显式的配置的装配bean: 使用场景:比如说,你想要将第三方库中的组件装配到你的应用中,在 ...