知芯

mysql-basic

2019-05-26

1. 常用语句

  1. 命令行登录数据库
    1
    mysql -h127.0.0.1 -uroot -p
    参数:
    1
    2
    3
    -h +ip地址
    -u +用户名
    -p +密码
  2. 命令行基本操作
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 显示所有数据库
    show databases;
    # 选中某个数据库操作
    use testdb;
    # 显示当前数据库的所有表
    show tables;
    # 查看表结构
    desc table1
    # 退出访问
    quit
  3. 新建数据库,指定中文编码
    1
    CREATE DATABASE `testdb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
  4. 新建用户并授权
    1
    2
    3
    4
    5
    6
    # 创建用户,这里的‘%’表示远程用户,本地用户'localhost'
    CREATE USER 'admin'@'%' IDENTIFIED BY '123456';
    # 将testdb的所有权限都给admin
    GRANT ALL PRIVILEGES ON testdb.* TO 'admin'@'%';
    # 刷新
    FLUSH PRIVILEGES;

    2. 检索

    2.1 检索数据

  • SELECT
    基本的SELECT语句这里就不展示,后面复杂的语句也会涉及基本的知识。
    • SQL语句不区分大小写,为了规范,关键字大写,列和表名使用小写,在处理SQL语句时,所有空格都被忽略。
  • DISTINCT
    1
    SELECT DISTINCT vend_id FROM products;
    只返回 vend_id不同的值,必须放在列前面。
  • LIMIT
    带一个值的LIMIT总是从第一行开始,给出的数为返回的行数。带两个值的LIMIT可以指定从行号为第一个值的位置开始。检索出来的第一行为行0而不是行1。因此,LIMIT 5, 1 将检索出第6行而不是第一行。满足条件的行数不够时,返回能返回的。 LIMIT 5,5 从v5开始可替换为 LIMIT 5 OFFSET 5.
    1
    2
    SELECT prod_name FROM products LIMIT 5;
    SELECT prod_name FROM products LIMIT 5,5;
  • ORDER BY
    不指定ORDER的SELECT,返回结果的顺序得不到保证,可能是数据被添加到表中的顺序,由于数据进行了更改或删除,数据会受到MySQL重用回收存储空间的影响。
    1
    SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price, prod_name;
    了按多个列排序,只要指定列名,列名之间用逗号分开即可。仅在多个行具有相同的prod_price 值时才对产品按prod_name进行排序。如果prod_price列中所有的值都是唯一的,则不会按prod_name排序。
    1
    SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price DESC, prod_name;
    DESC 指定为倒序,DESC关键字只应用到直接位于其前面的列名。上例中,只对prod_price列指定DESC,对prod_name列不指定。因此,prod_price列以降序排序,而prod_name列(在每个价格内)仍然按标准的升序排序。
  • WHERE
    用于指定过滤条件。
    • 在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后,
    • WHERE子句操作符:=,<>,!=,<,<=,>,>=,BETWEEN
      1
      2
      3
      4
      5
      6
      7
      8
      9
      -- 字符串等值匹配,默认不区分大小写
      SELECT prod_id, prod_price, prod_name FROM products
      WHERE prod_name='fuses';
      -- 范围检查,指定两个值
      SELECT prod_id, prod_price, prod_name FROM products
      WHERE prod_price BETWEEN 5 AND 10;
      -- 空值检查
      SELECT prod_id, prod_price, prod_name FROM products
      WHERE prod_price IS NULL;
  • AND/OR
    用于组合多个过滤条件,AND 计算优先级高于OR。
    1
    2
    3
    -- 必须加上括号,否则先计算AND,导致结果不正确。
    SELECT prod_price, prod_name FROM products
    WHERE (vend_id=1002 OR vend_id=1003) AND prod_price >= 10;
    使用圆括号明确地分组操作符。不要过分依赖默认计算次序。
  • IN
    圆括号在WHERE子句中还有另外一种用法。IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取合法值的由逗号分隔的清单,全都括在圆括号中。和OR效果一样,但是执行更快。IN也可以用于SELECT语句嵌套。
    1
    2
    3
    -- 和 (vend_id=1002 OR vend_id=1003) 效果一样。
    SELECT prod_price, prod_name FROM products
    WHERE vend_id IN (1002,1003);
  • NOT
    NOT IN 表示不在这个范围内。MySQL支持使用NOTINBETWEENEXISTS子句取反.
  • LIKE
    为在搜索子句中使用通配符,必须使用LIKE操作符。LIKE指示MySQL,后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较。操作符何时不是操作符?答案是在它作为谓(predicate)时。从技术上说,LIKE是谓词而不是操作符。
    带有通配符的搜索是区分大小写的??
    1
    2
    3
    4
    SELECT prod_name FROm products
    WHERE prod_name LIKE 's%e';
    SELECT prod_name FROm products
    WHERE prod_name LIKE '_ ton anvil';
      + `%` 百分号表示任意字符(不包括NULL)出现任意次数(包括0次)。
      + `_` 下划线表示单个字符,不能多也不能少。
    不要把通配符用在过滤条件的开始处,否则性能很差。
  • REGEXP
    MySQL中的正则表达式匹配不区分大小写,可使用BINARY关键字区分大小写,如WHERE prod_name REGEXP BINARY 'JetPack .000'
    1
    2
    3
    4
    -- 匹配1到5;
    SELECT prod_name FROm products
    WHERE prod_name REGEXP '[1-5] Ton'
    ORDER BY prod_name;

    2.2 统计数据

  • 计算字段
    存储在表中的数据都不是应用程序所需要的。我们需要直接从数据库中检索出转换、计算或格式化过的数据;而不是检索出数据,然后再在客户机应用程序或报告程序中重新格式化。
    计算字段并不实际存在于数据库表中。计算字段是运行时在SELECT语句内创建的。
    1
    2
    3
    4
    -- 拼接字段并设置别名返回
    SELECT Concat(RTrim(vend_name), '(', Rtrim(vend_country), ')') AS vend_title
    FROM vendors;
    ORDER BY vend_name;
    RTrim()(去掉串右边的空格),还支持LTrim()(去掉串左边的空格)以及Trim()(去掉串左右两边的空格)。
  • 数据处理函数
    1. 文本处理函数
      • Left() 返回串左边的字符
      • Length() 返回串的长度
      • Locate() 找出串的一个子串
      • Lower() 将串转换为小写
      • LTrim() 去掉串左边的空格
      • Right() 返回串右边的字符
      • RTrim() 去掉串右边的空格
      • Soundex() 返回串的SOUNDEX值
      • SubString() 返回子串的字符
      • Upper() 将串转换为大写
    2. 日期和时间处理函数
      • AddDate() 增加一个日期(天、周等)
      • AddTime() 增加一个时间(时、分等)
      • CurDate() 返回当前日期
      • CurTime() 返回当前时间
      • Date() 返回日期时间的日期部分
      • DateDiff() 计算两个日期之差
      • Date_Add() 高度灵活的
Tags: mysql
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章