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. 20, CSS 定义选择器

    1. ID 与类 2. 层叠 3. 分组 4. 继承 5. 上下文选择器 6. 子类选择器 7. 其他选择器 8. 结构与注释 20.1 ID 与类 选择器是用于控制页面设计的样式.即 ID 选择器何 ...

  2. Vue-指令

    1. v-text:这个指令用于将vue实例中的data内的属性渲染到标签内.有两种写法: 1. `<div v-text="数据"></div>`:该写法 ...

  3. 卷烟厂生产管理系统基于ASP.NET

    VS.Net 2003开发的一个非常老的生产信息管理系统运行10多年依旧稳定,这几天来南昌做维保工作,看到了曾经开发的信息系统.该系统在我眼里老到几点,可却依然在厂里大面积使用,抛开技术上的落后,从新 ...

  4. iOS----------网络请求错误

    Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptabl ...

  5. Python枚举类

    Enum可以把一组相关常量定义在一个class中,且class不可变,而且成员可以直接比较. 定义枚举类: from enum import Enum, unique @unique class We ...

  6. Android为TV端助力 eclipse build project 出现major.minor version 52.0的问题

    那些网上说的JDK什么的的问题,我求你们不要误人子弟好吗? 出现在这个的原因就是ADT也就是你的SDK manager 的Tools版本跟你的SDK版本不兼容,如果你的是SDK 23.0.2那你的To ...

  7. linux下磁盘存储空间不足

    把自己平时遇到的问题分享给大家 Question:linux系统Ubuntu下面有一个Trash,当我们删除文件后,清空Trash,过一段时间发现磁盘空间不足 Answer:其实我们并没有真正的删除文 ...

  8. 质量:“PM,你怎么可以放弃我?!”

    最近遇到一件有趣的事儿,一位文玩老友为了攒一串多宝,新得几颗高品松石,开心不已与我们分享.闲扯中,他说出了攒多宝的要求: 直径偏差2mm以内 每种品类的珠子都要是高品 品类只能是南红(满色满肉).蜜蜡 ...

  9. sql server 临时表(上) Tempdb概述

    一.概述 在sql server里临时表存储在TempDB库中,TempDB是一个系统数据库,它只有Simple恢复模式,也是最小日志记录操作.主要用于存放局部临时表,全局临时表,表变量,都是基于临时 ...

  10. c/c++ 网络编程 getaddrinfo 函数

    网络编程 getaddrinfo 函数 解析网址,返回IP地址. 例子: #include <iostream> #include <string.h> #include &l ...