MySQL笔记

相关参考: 廖雪峰MySQL网页知乎回答b站MySQL学习SQL TutotialW3School SQL

网上找的教程(来源不明,侵删): mysql查询练习, 使用终端操作数据库.


  • 结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

  • MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。

  • SQL 对大小写不敏感。

可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。

查询和更新指令构成了 SQL 的 DML 部分:

  • SELECT - 从数据库表中获取数据
  • UPDATE - 更新数据库表中的数据
  • DELETE - 从数据库表中删除数据
  • INSERT INTO - 向数据库表中插入数据

SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

SQL 中最重要的 DDL 语句:

  • CREATE DATABASE - 创建新数据库
  • ALTER DATABASE - 修改数据库
  • CREATE TABLE - 创建新表
  • ALTER TABLE - 变更(改变)数据库表
  • DROP TABLE - 删除表
  • CREATE INDEX - 创建索引(搜索键)
  • DROP INDEX - 删除索引

常用命令

SHOW databases; 查看数据库

USE databaseName; 选择databaseName数据库

SHOW tables; 查看该目录下有哪些表

SELECT * from tableName; 查询tableName表格中的数据

CREATE database databaseName; 创建databaseName数据库

INSERT INTO tableName VALUES(xxx,xxx,xxx); 向tableName表格中插入数据

DELETE from tableName WHERE 条件; 在tableName表格中删除

UPDATE tableName SET 字段1=值1,字段2=值2...WHERE 条件; 更新修改数据

SQL 详细命令

  • SQL SELECT

    • SELECT语句用于从表中选取数据
    • 语法:SELECT 列名称 FROM 表名称
    • 星号(*)是选取所有列的快捷方式
  • SQL DISTINCT

    • 表中可能包含重复值,关键词 DISTINCT 用于返回唯一不同的值
    • 语法: SELECT DISTINCT 列名称 FROM 表名称
  • SQL WHERE

    • 如需有条件地从表中选取数据,需将WHERE子句添加到SELECT语句中

    • 语法: SELECT 列名称 FROM 表名称 WHERE 条件

    • | 操作符 | 描述 | | :------: | :----------------------------------------------------------: | | = | 等于 | | <> | 不等于,在某些版本里,也写为!= | | > (<) | 大于(小于) | | >= (<=) | 大于等于(小于等于) | | BETWEEN | 在某个范围内,BETWEEN ... AND 会选取介于两个值之间的数据范围 | | LIKE | 搜索某种模式 | | IN | WHERE XXX IN (值1, 值2, ...) |

  • SQL AND & OR

  • AND和OR可在WHERE子语句中把两个或多个条件结合起来

  • SQL LIKE

    • 在搜索数据库中数据时,SQL通配符可以替代一个或多个字符。LIKE 通常与 % 一同使用,
    • SQL 提供四种匹配方式
      • % : 表示任意 0 个或多个字符
      • _ : 表示任意单个字符
      • [] : 表示括号内所列字符中的一个,类似于正则表达式
      • [^] : 表示不再括号所列之内的单个字符
  • SQL ORDER BY

    • ORDER BY 语句用于根据指定的列对结果集进行排序
    • 默认按照升序排序,与 ORDER BY 指定列 ASC 结果一致,降序为ORDER BY 指定列 DESC
  • SQL INSERT

    • INSERT INTO 语句用于向表格中插入新的行
    • 语法:INSERT INTO 表名称 VALUES (值1,值2,值2,...)
    • 也可指定所要插入数据的列 INSERT INTO 表名称 (列1,列2,...) VALUES (值1,值2,...)
  • SQL UPDATE

    • Update语句用于修改表中的数据
    • 语法:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
  • SQL DELETE

    • DELETE语句用于删除表中的行
    • 语法:DELETE FROM 表名称 WHERE 列名称 = 值
    • 删除所有行:DELETE FROM 表名称, DELETE * FROM 表名称
  • SQL CREATE

    • CREATE DATABASE 语句用于创建数据库,CREATE TABLE 语句用于创建数据库中的表

    • CREATE DATABASE 语法:CREATE DATABASE 数据库名

    • CREATE TABLE 语法:

      CREATE TABLE 表名称 (

      列名称1 数据类型,

      列名称2 数据类型,

      列名称3 数据类型,

      ...

      )

      | 数据类型 | 描述 | | :--------------------------------------------------: | :----------------------------------------------------------: | | integer(size) int(size) smallint(size) tinyint(size) | 仅容纳整数。在括号内规定数字的最大位数 | | decimal(size,d) numeric(size,d) | 容纳带有小数的数字。"size" 规定数字的最大位数。"d" 规定小数点 | | char(size) | 容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。在括号中规定字符串的长度。 | | varchar(size) | 容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。在括号中规定字符串的最大长度。 | | date(yyyymmdd) | 容纳日期。 |

  • SQL LIMIT

    • 使用SELECT查询时,如果数据量很大,需要分页查询,利用LIMIT命令
    • 语句:SELECT 列名称 FROM 表格名 LIMIT 3 OFFSET 0,其中 3 表明每页显示3条结果, OFFSET 0 第 0 条开始显示
  • SQL DROP

    • 通过使用DROP语句,可轻松地删除索引,表和数据库。
    • DROP INDEX 语句,删除表格中索引,语法: ALTER TABLE 表名 DROP INDEX 索引名
    • DROP TABLE 语句,删除表, 语法: DROP TABLE 表名
    • DROP DATABASE 语句,删除数据库, 语法: DROP DATABASE 数据库名称
    • 若仅删除表内数据,但不删除表本身,语法: TRUNCATE TABLE 表名
  • SQL ALTER

    • ALTER TABLE 语句用于在已有的表中添加,修改或删除列
    • 在表中添加列语法: ALTER TABLE 表名 ADD 列名 数据类型
    • 删除表中的列语法: ALTER TABLE 表名 DROP COLUMN 列名
    • 改变表中列的数据类型语法: ALTER TABLE 表名 ALTER COLUMN 列名 数据类型
  • SQL Alias

    • 为列名称和表名称指定别名(Alias)
    • 表的语法: SELECT 列名 FROM 表名 AS 新表名
    • 列的语法: SELECT 列名 AS 新列名 FROM 表名

  • SQL AVG()

    • AVG 函数返回数值列的平均值,NULL值不包括在计算中
    • 语法: SELECT AVG(列名) FROM 表名
  • SQL COUNT()

    • COUNT 函数返回匹配指定条件的行数
    • 语法: SELECT COUNT(列名) FROM 表名,COUNT(*) 返回表中的所有记录数
    • COUNT (DISTINCT 列名) FROM 表名, 返回指定列的不同值的数目
  • SQL SUM()

    • SUM 函数返回数值列的总和
    • 语法: SELECT SUM(列名) FROM 表名
  • SQL GROUP BY

    • 合计函数(比如SUM) 常常需要添加 GROUP BY 语句
    • 语法: SELECT 列名, aggregate(列名) FROM 表名 WHERE 条件 GROUP BY 列名
  • SQL HAVING

    • SQL增加HAVING子句原因是,WHERE关键字无法与合计函数一起使用
    • 语法: SELECT 列名, aggregate_function(列名) FROM 表名 WHERE 条件 GROUP BY 列名 HAVING aggregate_function(列名)
  • SQL NOW()

    • NOW 函数返回当前的日期和时间
  • SQL ROUND()

    • ROUND 函数用于把数值字段舍入为指定的小数位数
    • 语法: SELECT ROUND(列名, decimals) FROM 表名。其中 列名 必需,decimals 必需,规定要返回的小数位数
语句 语法
AND / OR SELECT column_name(s) FROM table_name WHERE condition AND\ OR condition
ALTER TABLE (add column) ALTER TABLE table_name ADD column_name datatype
ALTER TABLE (drop column) ALTER TABLE table_name DROP COLUMN column_name
AS (alias for column) SELECT column_name AS column_alias FROM table_name
AS (alias for table) SELECT column_name FROM table_name AS table_alias
BETWEEN SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2
CREATE DATABASE CREATE DATABASE database_name
CREATE INDEX CREATE INDEX index_name ON table_name (column_name)
CREATE TABLE CREATE TABLE table_name ( column_name1 data_type, column_name2 data_type, ....... )
CREATE UNIQUE INDEX CREATE UNIQUE INDEX index_name ON table_name (column_name)
CREATE VIEW CREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition
DELETE FROM DELETE FROM table_name (Note: Deletes the entire table!!)orDELETE FROM table_name WHERE condition
DROP DATABASE DROP DATABASE database_name
DROP INDEX DROP INDEX table_name.index_name
DROP TABLE DROP TABLE table_name
GROUP BY SELECT column_name1,SUM(column_name2) FROM table_name GROUP BY column_name1
HAVING SELECT column_name1,SUM(column_name2) FROM table_name GROUP BY column_name1 HAVING SUM(column_name2) condition value
IN SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,..)
INSERT INTO INSERT INTO table_name VALUES (value1, value2,....)orINSERT INTO table_name (column_name1, column_name2,...) VALUES (value1, value2,....)
LIKE SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern
ORDER BY SELECT column_name(s) FROM table_name ORDER BY column_name [ASC\ DESC]
SELECT SELECT column_name(s) FROM table_name
SELECT * SELECT * FROM table_name
SELECT DISTINCT SELECT DISTINCT column_name(s) FROM table_name
SELECT INTO (used to create backup copies of tables) SELECT INTO new_table_name FROM original_table_nameor*SELECT column_name(s) INTO new_table_name FROM original_table_name
TRUNCATE TABLE (deletes only the data inside the table) TRUNCATE TABLE table_name
UPDATE UPDATE table_name SET column_name=new_value [, column_name=new_value] WHERE column_name=some_value
WHERE SELECT column_name(s) FROM table_name WHERE condition