zoukankan      html  css  js  c++  java
  • MySQL学习笔记

    一、什么是数据库?

      数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
      每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。
      我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
      所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。

      RDBMS 即关系数据库管理系统(Relational Database Management System)的特点:

    • 1.数据以表格的形式出现
    • 2.每行为各种记录名称
    • 3.每列为记录名称所对应的数据域
    • 4.许多的行和列组成一张表单
    • 5.若干的表单组成database

      数据库管理
      数据库管理(Database Administration)是有关建立、存储、修改和存取数据库中信息的技术,是指为保证数据库系统的正常运行和服务质量,有关人员须进行的技术管理工作。负责这些技术管理工作的个人或集体称为数据库管理员(DBA)。数据库管理的主要内容有:数据库的建立、数据库的调整、数据库的重组、数据库的重构、数据库的安全控制、数据的完整性控制和对用户提供技术支持。数据库的建立:数据库的设计只是提供了数据的类型、逻辑结构、联系、约束和存储结构等有关数据的描述。这些描述称为数据模式。要建立可运行的数据库,还需进行下列工作:

      1. 选定数据库的各种参数,例如最大的数据存储空间、缓冲决的数量、并发度等。这些参数可以由用户设置,也可以由系统按默认值设置。
      1. 定义数据库,利用数据库管理系统(DBMS)所提供的数据定义语言和命令,定义数据库名、数据模式、索引等。
      1. 准备和装入数据,定义数据库仅仅建立了数据库的框架,要建成数据库还必须装入大量的数据,这是一项浩繁的工作。在数据的准备和录入过程中,必须在技术和制度上采取措施,保证装入数据的正确性。计算机系统中原已积累的数据,要充分利用,尽可能转换成数据库的数据。

      MySQL官网:http://www.mysql.com

    二、RDBMS 术语

      在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语:

    • 数据库: 数据库是一些关联表的集合。
    • 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
    • 列: 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。
    • 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
    • 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
    • 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
    • 外键:外键用于关联两个表。
    • 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
    • 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
    • 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

    三、数据类型

      MySQL支持多种列类型:数值类型、日期/时间类型和字符串(字符)类型。长度以字节为单位。

    名称 长度 用法
    TINYINT(M) BIT,BOOL,BOOLEAN 1 如果为无符号数,可以存储从0到255的数; 否则可以存储从-128到127的数。
    SMALLINT(M) 2 如果为无符号数,可以存储从0到65535的数; 否则可以存储从-32768到32767的数。
    MEDIUMINT(M) 3 如果为无符号数,可以存储从0到16777215的数;否则可以存储从-8388608到8388607的数
    INT(M) INTEGER(M) 4 如果为无符号数,可以存储从0到4294967295的数,否则可以存储从-2147483648到2147483647的数。
    BIGINT(M) 8 如果为无符号数,可以存储从0到18446744073709551615的数,否则可以存储从-9223372036854775808到9223372036854775807的数。
    FLOAT(precision) 4或8 这里的precision是可以直达53的整数。如果precision<=24则转换为FLOAT,如果precision>24并且precision<=53则转换为DOUBLE。
    FLOAT(M,D) 4 单精度浮点数。
    DOUBLE(M,D),DOUBLE PRECISION,REAL 8 双精度浮点。
    DECIMAL(M,D),DEC,NUMERIC,FIXED M+1或M+2 ±1.0 * 10e−28至±7.9 *10e28,28到29位有效
    DATE 3 以YYYY-MM-DD的格式显示。
    DATETIME 8 以YYYY-MM-DD HH:MM:SS的格式显示。
    TIMESTAMP 8 以YYYY-MM-DD HH:MM:SS的格式显示。
    TIME 3 以HH:MM:SS的格式显示。
    YEAR 1 以YYYY的格式显示。
    CHAR(M) M 定长字符串。
    VARCHAR(M) 最大M 变长字符串。M<=255.
    TINYBLOB,TINYTEXT 最大255 TINYBLOB为大小写敏感,而TINYTEXT不是大小写敏感的。
    BLOB, TEXT 最大64K BLOB为大小敏感的,而TEXT不是大小写敏感的。
    MEDIUMBLOB,MEDIUMTEXT 最大16M MEDIUMBLOB为大小写敏感的,而MEDIUMTEXT不是大小敏感的。名称 长度 用法
    LONGBLOB,LONGTEXT 最大4G LONGBLOB为大小敏感的,而LONGTEXT不是大小敏感的。
    ENUM(VALUE1,….) 1或2 最大可达65535个不同的值。
    SET(VALUE1,….) 可达8 最大可达64个不同的值。

      数据类型更详细的讲解请参考MYSQL帮助文档

    四、SQL

      SQL全称是:结构化查询语言(Structured Query Language)。

      SQL语言包含4个部分

      1. 数据定义语言(Data Definition Language--DDL):如CREATE, DROP,ALTER等语句
      1. 数据操纵语言(Data Manipulation Language- -DML):INSERT, UPDATE, DELETE语句
      1. 数据查询语言(Data Query Language --DQL):SELECT语句
      1. 事务控制语言(Transaction Control Language--TCL):如COMMIT, ROLLBACK等语句

    1、数据定义语言(DDL)

    • 创建数据库(CREATE DATABASE语句)
    CREATE DATABASE mydatabase;
    show databases; //查看当前服务器上存在的数据库(当前登录用户可见的)
    use mydatabase; //访问数据库
    
    • 创建表(CREATE TABLE语句)
    create table student(
    sid int(11) primary key auto_increment,name varchar(20),gender char(1),age int(2),birth
    date
    );
    desc student; //查看表结构
    //创建表
    CREATE TABLE `employee` (
    `eid` int(11) NOT NULL default '0',
    `name` varchar(11) NOT NULL,
    `dept` varchar(11) NOT NULL,
    `job` varchar(11) NOT NULL,
    `gender` varchar(5) NOT NULL,
    PRIMARY KEY (`eid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=gbk;
    

      主键:用来唯一代表一条记录的字段(主键值必须是唯一)

    • 删除表(DROP TABLE语句)
    DROP TABLE student;
    //drop table 语句会删除该的所有记录及表结构
    show create table student; --查看表结构创建语句
    desc student; --查看表结构
    
    • 修改表结构(ALTER TABLE语句)
    alter table test add column name varchar(10); --添加表列
    alter table test rename test1; --修改表名
    alter table test drop column name; --删除表列
    alter table test modify address char(10) --修改表列类型
    alter table test change address address char(40) --修改表列类型
    alter table test change column address address1 varchar(30)--修改表列名
    

    2、数据操纵语言(DML)

    • 添加数据(INSERT INTO…语句)
    INSERT INTO student(name,gender,birth) values(‘Tom’,’男’,’1985-2-5’);
    
    • 修改数据(UPDATE … SET语句)
    UPDATE student SET name=’LILY’,gender=’女’,birth=’1988-1-1’ where id=1;
    
    • 删除数据(DELETE FROM…语句)
    DELETE FROM student; --删除所有记录 DELETE FROM student where id=1; --删除ID为1的记录
    

    3、数据查询语言(DQL)

      employees等表数据的sql文件点击下载

    • 查询数据(SELECT … FROM …语句)
    #查询表中的单个字段
    SELECT last_name FROM employees;
    
    #查询表中的多个字段
    SELECT last_name,salary,email FROM employees;
    
    #查询表中的所有字段
    SELECT
    `employees`.`employee_id`,
    `employees`.`first_name`,
    `employees`.`last_name`,
    `employees`.`email`,
    `employees`.`phone_number`,
    `employees`.`job_id`,
    `employees`.`salary`,
    `employees`.`commission_pct`,
    `employees`.`manager_id`,
    `employees`.`department_id`,
    `employees`.`hiredate`
    FROM
    employees;
    
    # 方式二
    SELECT * FROM employees;
    
    #查询常量值
    SELECT 100;
    SELECT 'john';
    
    #查询表达式
    SELECT 10%3;
    
    #查询函数
    SELECT VERSION();
    
    #7. 别名
    SELECT 50%3 AS 结果;
    SELECT last_name AS 姓,first_name AS 名 FROM employees;
    
    #方式二:使用空格(省略 AS)
    SELECT last_name 姓,first_name 名 FROM employees;
    
    #案例:查询工资,显示结果为 员工 工资
    SELECT salary "员工 工资" FROM employees;
    
    #去重复
    #案例:查询员工表中设计到的所有部门编号
    SELECT DISTINCT department_id FROM employees;
    
    #查询 ID 为 100 的员工信息
    SELECT * FROM employees WHERE employee_id=100;
    
    #查询部门id为空的员工信息
    SELECT * FROM employees WHERE department_id IS NULL;1.5.4、数据控制语言(TCL)
    
    #查询表中的多个字段
    SELECT first_name,last_name FROM employees;
    
    #查询 employees_id 大于105 的员工信息
    SELECT * FROM employees WHERE employee_id>105;
    
    #查询 job_id 为 ST_MAN 并且 manager_id 为 100 的员工信息
    SELECT * FROM employees WHERE job_id='ST_MAN' AND manager_id=100;
    
    #查询 job_id 为 ST_MAN 或者 manager_id 大于 100 的员工信息
    SELECT * FROM employees WHERE job_id='ST_MAN' OR manager_id>120;
    
    #查询姓名的最后一个字符为“T”的员工信息
    SELECT * FROM employees WHERE last_name LIKE '%T';
    
    #查询姓名以“T”开头的员工信息
    SELECT * FROM employees WHERE last_name LIKE 't%';
    
    #查询姓名中包含“T”的员工信息
    SELECT * FROM employees WHERE last_name LIKE '%t%';
    
    #查询所有员工信息,并按工资降序排序(默认为升序:ASC)
    SELECT * FROM employees ORDER BY salary DESC;
    
    #多个排序条件:当第一个条件相同时,以第二个条件排序
    SELECT * FROM employees ORDER BY salary DESC, department_id DESC;
    
    #按部门分组查询各部门的人数
    SELECT department_id, COUNT(department_id) AS 人数 FROM employees GROUP BY department_id;
    
    #HAVING条件语句一个HAVING子句(条件查询)必须位于GROUP BY子句之后,并位于ORDER BY子句之前。
    #按部门分组查询部门id为80的部门的人数
    SELECT department_id, COUNT(department_id) AS 总数 FROM employees GROUP BY department_id
    HAVING department_id=80;
    
    #查询表的总记录数
    SELECT COUNT(*) AS 总数 FROM employees;
    
    #查询学生记录的前三条(从0位置开始找出3条)
    SELECT * FROM employees LIMIT 0,3;
    

    4、数据控制语言(TCL)

    1、什么是事务

      事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。
      例如:在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。
      事务是恢复和并发控制的基本单位。
      事务应该具有4个属性:原子性、一致性、隔离性、持续性。这四个属性通常称为ACID特性。

    • 原子性(atomicity) 一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
    • 一致性(consistency) 事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
    • 隔离性(isolation) 一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
    • 持久性(durability) 持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

      事务(Transaction),也就是要么成功,要么失败,并恢复原状。

    2、事务操作
    • 设置默认事务提交方式
    set autocommit = false –设置事务提交方式为“手动提交”
    set autocommit = true –设置事务提交方式为“自动提交”
    
    • 事务就是对数据库的多步操作,要么一起成功,要么一起失败
    set autocommit = false;
    update student set name=’vince’ where id=1;--更新数据
    insert into student(name,gender,birth) values(‘yoyo’,’女’,’1981-03-20’);--插入数据
    commit;--手动提交事务
    delete from student where id=1;--删除数据
    insert into student(name,gender,birth) values(‘tony,’男’,’1985-02-26’);--插入数据
    rollback;--回滚事务
    delete from student where id=1;--删除数据
    savepoint point1; --保存还原点
    delete from student where id=1;--删除数据
    savepoint point2; --保存还原点
    rollback to point2; --回滚到point2还原点
    commit; --提交事务
    

    五、函数

    1、GROUP BY(聚合)函数

    • AVG ([DISTINCT] expr) 返回expr 的平均值。 DISTINCT 选项可用于返回 expr的不同值的平均值。
    SELECT department_id,AVG(salary) 平均薪资 FROM employees GROUP BY department_id;
    SELECT gender, AVG(age) FROM student GROUP BY gender;
    
    
    • COUNT(expr) 返回SELECT语句检索到的行中非NULL值的数目。
    SELECT COUNT(*) FROM student; --返回检索行的数目,不论其是否包含 NULL值
    SELECT COUNT(name) FROM student; --返回SELECT语句检索到的行中非NULL值的数目
    
    
    • MIN ([DISTINCT] expr), MAX ([DISTINCT] expr) 返回expr 的最小值和最大值
    SELECT MIN(age),MAX(age) FROM student;
    
    • SUM ([DISTINCT] expr) 返回expr 的总数
    SELECT SUM(age) FROM student;
    

    2、控制流程函数

    • CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE
      result] END 如果没有匹配的结果值,则返回结果为ELSE后的结果,如果没有ELSE 部分,则返回值为 NULL。
    SELECT CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END;
    
    
    • IF(expr1,expr2,expr3) 如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。
    SELECT IF(1<2,'yes ','no');
    
    • IFNULL(expr1,expr2) 假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2
    SELECT IFNULL(1,0);
    
    • NULLIF(expr1,expr2) 如果expr1 = expr2 成立,那么返回值为NULL,否则返回值为 expr1
    SELECT NULLIF(1,1);
    

    3、字符串函数

    • ASCII (str) 返回值为字符串str 的最左字符的数值。假如str为空字符串,则返回值为 0 。假如str 为NULL,则返回值为 NULL。ASCII()用于带有从 0到255的数值的字符。
    SELECT ASCII('dx');
    
    
    • BIN (N) 返回值为N的二进制值的字符串表示
    SELECT BIN(15);
    
    • BIT_LENGTH (str) 返回值为二进制的字符串str 长度
    SELECT BIT_LENGTH('text');
    
    • CHAR_LENGTH(str) 返回值为字符串str 的长度,长度的单位为字符
    SELECT CHAR_LENGTH( 'Admiral');
    
    
    • FORMAT(X,D) 将数字X 的格式写为'#,###,###.##',以四舍五入的方式保留小数点后 D 位,并将结果以字符串的形式返回。若D为0,则返回结果不带有小数点,或不含小数部分。
    SELECT FORMAT(12332.123456, 4);
    
    • INSERT (str,pos,len,newstr) 返回字符串 str, 其子字符串起始于 pos 位置和长期被字符串 newstr取代的len 字符。 如果pos 超过字符串长度,则返回值为原始字符串。 假如len的长度大于其它字符串的长度,则从位置pos开始替换。若任何一个参数为null,则返回值为NULL。
    SELECT INSERT('Quadratic', 3, 4, 'What');
    SELECT INSERT('Quadratic', 3, 100, 'What');
    
    • INSTR(str,substr) 返回字符串 str 中子字符串的第一个出现位置
    SELECT INSTR('foobarbar', 'bar');
    
    • LEFT(str,len) 返回从字符串str 开始的len 最左字符。
    SELECT LEFT('foobarbar', 5);
    
    • LENGTH(str) 返回值为字符串str 的长度,单位为字节。一个多字节字符算作多字节。这意味着对于一个包含5个2字节字符的字符串, LENGTH() 的返回值为 10, 而 CHAR_LENGTH()的返回值则为5。
        utf8编码:一个汉字三个字节,一个数字或字母一个字节。
        gbk编码:一个汉字两个字节,一个数字或字母一个字节。
    SELECT LENGTH('text');
    
    • LTRIM(str) 返回字符串 str ,其引导空格字符被删除。
    SELECT LTRIM(' barbar');
    
    • TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str) TRIM(remstr FROM] str) 返回字符串 str , 其中所有remstr 前缀和/或后缀都已被删除。若分类符BOTH、LEADIN或TRAILING中没有一个是给定的,则假设为BOTH 。 remstr 为可选项,在未指定情况下,可删除空格。
    SELECT TRIM(' bar '); --去空格
    SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx'); --去左边的xSELECT
    TRIM(BOTH 'x' FROM 'xxxbarxxx'); --去左右两边的x
    SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz'); --去右边的xyz
    
    • STRCMP(expr1,expr2) 若所有的字符串均相同,则返回0,若根据当前分类次序,第一个参数小于第二个,则返回 -1,其它情况返回1。
    SELECT STRCMP('text', 'text2'); --返回-1
    SELECT STRCMP('text2', 'text'); --返回1
    SELECT STRCMP('text', 'text'); --返回0
    
    • CONCAT (str1,str2,...) 返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。或许有一个或多个参数。 如果所有参数均为非二进制字符串,则结果为非二进制字符串。 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型 cast, 例如:
    SELECT CONCAT(CAST(int_col AS CHAR), char_col) mysql> SELECT CONCAT('My', 'S', 'QL');
    

    4、日期和时间函数

    • DAYOFWEEK(date) 返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。
    select DAYOFWEEK('1998-02-03');
    
    • WEEKDAY(date) 返回date的月份中日期,在1到31范围内。
    select DAYOFMONTH ('1998-02-03');
    
    • DAYOFYEAR(date) 返回date在一年中的日数, 在1到366范围内。
    select DAYOFYEAR('1998-02-03');
    
    • MONTH(date) 返回date的月份,范围1到12。
    select MONTH('1998-02-03');
    
    • DAYNAME(date) 返回date的星期名字。
    select DAYNAME("1998-02-05");
    
    • MONTHNAME(date) 返回date的月份名字。
    select MONTHNAME("1998-02-05");
    
    • QUARTER(date) 返回date一年中的季度,范围1到4。
    select QUARTER('98-04-01');
    
    • WEEK(date) 对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0到52。2个参数形式WEEK()允许你指定星期是否开始于星期天或星期一。如果第二个参数是0,星期从星期天开始,如果第二个参数是1,从星期一开始。
    select WEEK('1998-02-20'); 
    select WEEK('1998-02-20',0);
    select WEEK('1998-02-20',1);
    
    • YEAR(date) 返回date的年份,范围在1000到9999。
    select YEAR('98-02-03');
    
    • HOUR(time) 返回time的小时,范围是0到23。
    select HOUR('10:05:03');
    
    • MINUTE(time) 返回time的分钟,范围是0到59。
    select MINUTE('98-02-03 10:05:03');
    
    • SECOND(time) 返回time的秒数,范围是0到59。
    select SECOND('10:05:03');
    
    • PERIOD_ADD(P,N) 增加N个月到阶段P(以格式YYMM或YYYYMM)。以格式YYYYMM返回值。注意阶段参数P不是日期值。
    select PERIOD_ADD(9801,2);
    
    • PERIOD_DIFF(P1,P2) 返回在时期P1和P2之间月数,P1和P2应该以格式YYMM或YYYYMM。注意,时期参数P1和P2不是日期值。
    select PERIOD_DIFF(9802,199703);
    
    • ADDDATE(expr,days) expr是指定加到开始日期的间隔值一个表达式,expr是一个字符串;它可以以一个“-”开始表示负间隔。type是一个关键词,指明表达式应该如何被解释。(type关键词用法请参考帮助文档)若 days 参数只是整数值,则将其作为天数值添加至 expr。
    SELECT ADDDATE('1998-01-02', 31);SELECT DATE_ADD('1997-12-31 23:59:59',INTERVAL 1
    SECOND);
    
    • SUBDATE(date,INTERVAL expr type) date是一个指定开始日期的DATETIME或DATE值,expr是指定从开始日期减去的间隔值一个表达式,expr是一个字符串;它可以以一个“-”开始表示负间隔。type是一个关键词,指明表达式应该如何被解释。(type关键词用法请参考帮助文档)
    SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
    
    • ADDTIME(expr,expr2) 将 expr2添加至expr 然后返回结果。 expr 是一个时间或时间日期表达式,而expr2 是一个时间表达式。
    SELECT ADDTIME('01:00:00.999999', '02:00:00.999998');
    
    • DATE(expr) 提取日期或时间日期表达式expr中的日期部分。
    SELECT DATE('2003-12-31 01:02:03');
    
    
    • TO_DAYS(date) 给出一个日期date,返回一个天数(从0年的天数)。
    select TO_DAYS(950501);mysql> select TO_DAYS('1997-10-07');
    
    
    • FROM_DAYS(N) 给出一个天数N,返回一个DATE值。
    select FROM_DAYS(729669);
    
    • CURDATE() 以'YYYY-MM-DD'或YYYYMMDD格式返回今天日期值,取决于函数是在一个字符串还是数字上下文被使用。
    select CURDATE(); -- YYYY-MM-DD 格式mysql> select CURDATE() + 0; --YYYYMMDD 格式
    
    
    • CURTIME() 以'HH:MM:SS'或HHMMSS格式返回当前时间值,取决于函数是在一个字符串还是在数字的上下文被使用。
    select CURTIME(); --HH:MM:SS 格式mysql> select CURTIME() + 0; --HHMMSS 格式
    
    • NOW() 以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前的日期和时间,取决于函数是在一个字符串还是在数字的上下文被使用
    select NOW(); -- YYYY-MM-DD HH:MM:SS 格式mysql> select NOW() + 0; --YYYYMMDDHHMMSS
    格式
    
    • SEC_TO_TIME(seconds) 返回seconds参数,变换成小时、分钟和秒,值以'HH:MM:SS'或HHMMSS格式化,取决于函数是在一个字符串还是在数字上下文中被使用。
    select SEC_TO_TIME(2378); -- HH:MM:SS格式mysql> select SEC_TO_TIME(2378) + 0; --HHMMSS 格式
    
    • TIME_TO_SEC(time) 返回time参数,转换成秒
    select TIME_TO_SEC('22:23:00'); mysql> select TIME_TO_SEC('00:39:38');
    
    • DATE_FORMAT(date,format) 根据format 字符串安排date 值的格式。以下说明符可用在 format 字符串中:
    说明符 说明
    %a 工作日的缩写名称 (Sun..Sat)
    %b 月份的缩写名称 (Jan..Dec)
    %c 月份,数字形式(0..12)
    %D 带有英语后缀的该月日期 (0th, 1st, 2nd, 3rd, ...)
    %d 该月日期, 数字形式 (00..31)
    %e 该月日期, 数字形式(0..31)
    %f 微秒 (000000..999999)
    %H 小时(00..23)
    %h 小时(01..12)
    %I 小时 (01..12)
    %i 分钟,数字形式 (00..59)
    %j 一年中的天数 (001..366)
    %k 小时 (0..23)
    %l 小时 (1..12)
    %M 月份名称 (January..December)
    %m 月份, 数字形式 (00..12)
    %p 上午(AM)或下午( PM)
    %r 时间 , 12小时制 (小时hh:分钟mm:秒数ss 后加 AM或PM)
    %S 秒 (00..59)
    %s 秒 (00..59)
    %T 时间 , 24小时制 (小时hh:分钟mm:秒数ss)
    %U 周 (00..53), 其中周日为每周的第一天
    %u 周 (00..53), 其中周一为每周的第一天
    %V 周 (01..53), 其中周日为每周的第一天 ; 和 %X同时使用
    %v 周 (01..53), 其中周一为每周的第一天 ; 和 %x同时使用
    %W 工作日名称 (周日..周六)
    %w 一周中的每日 (0=周日..6=周六)
    %X 该周的年份,其中周日为每周的第一天, 数字形式,4位数;和%V同时使用说明符 说明
    %x 该周的年份,其中周一为每周的第一天, 数字形式,4位数;和%v同时使用
    %Y 年份, 数字形式,4位数
    %y 年份, 数字形式 (2位数)
    %% ‘%’文字字符
    SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
    # Saturday October 1997
    
    SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
    # 22 23 00
    
    SELECT DATE_FORMAT('1997-10-04 22:23:00','%D %y %a %d %m %b %j');
    #4th 97 Sat 04 10 Oct 277
    
    作者:落花桂
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    C++多线程chap3 多线程异步和通信1
    C++多线程chap2多线程通信和同步9
    C++多线程chap2多线程通信和同步5
    C++多线程chap3 多线程异步和通信2
    C++多线程chap2多线程通信和同步6
    taro实现多语言切换
    git常用命令
    pytorch hook 钩子
    MySQL 学习笔记(六)character 与 collation
    Python 学习笔记(七)socket
  • 原文地址:https://www.cnblogs.com/nthforsth/p/14902850.html
Copyright © 2011-2022 走看看