MySQL笔记
相关参考: 廖雪峰MySQL网页, 知乎回答, b站MySQL学习,SQL Tutotial,W3School 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通配符可以替代一个或多个字符。LIKE 通常与
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 |