0 基础MYSQL自学之路

2023-06-26 14:38:31 浏览数 (2)

一、SQL简述

1.SQL的概述

SQL(Structured Query Language)是结构化查询语言的缩写,用于管理和操作关系型数据库。它是一种标准化的语言,通过使用语句描述数据库中数据的定义、操作和控制。

SQL可以用于执行各种数据库操作,如创建数据库和表、插入、更新和删除数据、查询数据、定义约束等。它是与数据库进行通信的主要工具,也是开发和管理数据库的核心技术之一。

2.SQL的优点

SQL具有以下几个优点:

  • 简单易学:SQL的语法相对简单,易于学习和理解。
  • 高度可用:SQL可以用于各种数据库管理系统,如MySQL、Oracle、SQL Server等。
  • 统一性:SQL是一种标准化的语言,不受特定数据库类型的限制。
  • 丰富的功能:SQL支持各种数据库操作,包括数据的增删改查、定义约束、事务处理等。
  • 数据独立性:通过使用SQL,应用程序与数据库之间可以实现数据的独立性,不受具体数据库实现的影响。

3.SQL的分类

SQL可以根据功能的不同划分为以下几个方面:

  • 数据定义语言(DDL):用于定义和管理数据库对象,如创建数据库、创建表、修改表结构等。
  • 数据操纵语言(DML):用于对数据库中的数据进行操作,如插入、更新、删除和查询数据等。
  • 数据控制语言(DCL):用于控制和管理数据库的访问权限,如设置用户的权限和角色等。
  • 数据查询语言(DQL):用于从数据库中查询数据,如SELECT语句。
  • 事务控制语言(TCL):用于控制和管理数据库中的事务,如提交和回滚事务。

不同类型的SQL语句可以组合使用,以完成复杂的数据库操作和管理。

二、数据库的三大范式

数据库的三大范式是指在数据库设计过程中,为了保证数据库的数据关联性和一致性,遵循的一些规范和原则。它们是:

  1. 第一范式(1NF):确保每一列的原子性,即每个字段都不可再分。每个字段中的数据需要是不可再分的,不能包含多个值或多个属性。
  2. 第二范式(2NF):在1NF的基础上,确保非主键字段完全依赖于主键字段。即非主键字段必须完全依赖主键字段,而不能只依赖主键的一部分。
  3. 第三范式(3NF):在2NF的基础上,确保非主键字段之间没有传递依赖关系。即非主键字段之间不能相互依赖,而是直接依赖于主键字段。

遵循三大范式可以有效地提高数据的规范性和一致性,减少数据冗余和数据异常的出现。

三、数据库的数据类型

数据库中的数据类型决定了数据的存储格式和操作方式。常见的数据库数据类型包括整数类型、浮点数类型、字符串类型、日期与时间类型、二进制类型等。

1. 整数类型

整数类型用于存储整数数据,常见的整数类型有:

  • TINYINT:1个字节,范围为-128到127或0到255。
  • SMALLINT:2个字节,范围为-32768到32767或0到65535。
  • INT:4个字节,范围为-2147483648到2147483647或0到4294967295。
  • BIGINT:8个字节,范围为-9223372036854775808到9223372036854775807或0到18446744073709551615。

2. 浮点数类型和定点数类型

浮点数类型用于存储小数数据,包括单精度浮点数(FLOAT)和双精度浮点数(DOUBLE)。定点数类型用于存储精度固定的小数数据,包括DECIMAL。

  • FLOAT:4个字节,可精确到7位小数。
  • DOUBLE:8个字节,可精确到15位小数。
  • DECIMAL:可指定精度和小数位数的定点数类型。

3. 字符串类型

字符串类型用于存储字符数据,常见的字符串类型有:

  • CHAR:固定长度字符串,最多可存储255个字符。
  • VARCHAR:可变长度字符串,最多可存储65535个字符。
  • TEXT:可变长度字符串,最多可存储约65,535个字符。

4. 日期与时间类型

日期与时间类型用于存储日期和时间数据,常见的日期与时间类型有:

  • DATE:存储日期,格式为YYYY-MM-DD。
  • TIME:存储时间,格式为HH:MI:SS。
  • DATETIME:存储日期和时间,格式为YYYY-MM-DD HH:MI:SS。
  • TIMESTAMP:存储日期和时间的时间戳,格式为YYYY-MM-DD HH:MI:SS。

6. 二进制类型

二进制类型用于存储二进制数据,常见的二进制类型有:

  • BLOB:二进制大对象,可存储大量的二进制数据。
  • BIT:存储位值,可以是0或1。

数据库的数据类型根据具体的需求和业务逻辑选择合适的类型,以保证数据的准确性和有效性。

四、数据库、数据表的基本操作

1. 数据库的基本操作

数据库的基本操作包括创建数据库、切换数据库、删除数据库等。

  • 创建数据库:CREATE DATABASE database_name;
  • 切换数据库:USE database_name;
  • 删除数据库:DROP DATABASE database_name;

2. 数据表的基本操作

数据表的基本操作包括创建数据表、查看数据表、修改数据表和删除数据表等。

2.1 创建数据表

使用CREATE TABLE语句来创建数据表,并指定每个字段的名称、数据类型和约束等。

代码语言:sql复制
CREATE TABLE table_name (
    column1 datatype constraint,
    column2 datatype constraint,
    ...
);
2.2 查看数据表

使用DESCRIBE或SHOW命令来查看数据表的结构和字段信息。

代码语言:sql复制
DESCRIBE table_name;
SHOW COLUMNS FROM table_name;
2.3 修改数据表

使用ALTER TABLE语句来修改数据表的结构,如添加字段、修改字段类型、删除字段等。

代码语言:sql复制
ALTER TABLE table_name ADD column_name datatype constraint;
ALTER TABLE table_name MODIFY column_name new_datatype constraint;
ALTER TABLE table_name DROP column_name;
2.4 删除数据表

使用DROP TABLE语句来删除数据表。

代码语言:sql复制
DROP TABLE table_name;

五、数据表的约束

数据库表的约束用于限制数据的输入规则,保证数据的一致性和完整性。常见的数据表约束包括主键约束、非空约束、默认值约束、唯一性约束和外键约束等。

1. 主键约束

主键约束用于唯一标识数据表中的每一行数据,保证数据的唯一性和完整性。

代码语言:sql复制
CREATE TABLE table_name (
    column1 datatype PRIMARY KEY,
    column2 datatype,
    ...
);

2. 非空约束

非空约束用于确保某个字段的值不能为空。

代码语言:sql复制
CREATE TABLE table_name (
    column1 datatype NOT NULL,
    column2 datatype,
    ...
);

3. 默认值约束

默认值约束用于设置某个字段的默认值。

代码语言:sql复制
CREATE TABLE table_name (
    column1 datatype DEFAULT default_value,
    column2 datatype,
    ...
);

5. 唯一性约束

唯一性约束用于确保某个字段的值在整个数据表中是唯一的。

代码语言:sql复制
CREATE TABLE table_name (
    column1 datatype UNIQUE,
    column2 datatype,
    ...
);

6. 外键约束

外键约束用于保持数据表之间的一致性和约束关系,确保数据的完整性。

6.1 数据一致性概念

在设置外键约束之前,需要了解数据一致性的概念。数据一致性是指当表与表之间存在关联关系时,所有相关的数据必须保持一致,不会出现孤儿数据或者脏数据。通过使用外键约束,可以确保数据表之间的关联关系的一致性。

6.2 删除外键

使用ALTER TABLE语句来删除外键约束。

代码语言:sql复制
ALTER TABLE table_name DROP FOREIGN KEY constraint_name;
6.3 关于外键约束需要注意的细节
  • 外键约束必须指向已经存在的主键或唯一键。
  • 通过外键约束,可以实现数据表之间的一对一、一对多或多对多的关系。
  • 外键约束会导致数据库的性能下降,因此在设计数据库时需要权衡性能和数据一致性的要求。

六、数据表插入数据

向数据表中插入数据可以使用INSERT INTO语句。

1. 为表中所有字段插入数据

使用INSERT INTO语句为表中的所有字段插入数据。

代码语言:sql复制
INSERT INTO table_name VALUES (value1, value2, ...);

2. 为表中指定字段插入数据

使用INSERT INTO语句为表中的指定字段插入数据。

代码语言:sql复制
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);

3. 同时插入多条记录

使用INSERT INTO语句一次性插入多条记录。

代码语言:sql复制
INSERT INTO table_name (column1, column2, ...) VALUES
    (value1, value2, ...),
    (value1, value2, ...),
    ...

七、更新数据

使用UPDATE语句来更新数据表中的数据。

1. UPDATE基本语法

使用UPDATE语句来更新表中的数据。

代码语言:sql复制
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;

2. UPDATE更新部分数据

使用UPDATE语句来更新部分数据。

代码语言:sql复制
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;

3. UPDATE更新全部数据

使用UPDATE语句来更新全部数据。

代码语言:sql复制
UPDATE table_name SET column1 = value1, column2 = value2, ...;

八、删除数据

使用DELETE语句来删除数据表中的数据。

1. DELETE基本语法

使用DELETE语句来删除数据。

代码语言:sql复制
DELETE FROM table_name WHERE condition;

2. DELETE删除部分数据

使用DELETE语句来删除部分数据。

代码语言:sql复制
DELETE FROM table_name WHERE condition;

3. DELETE删除全部数据

使用DELETE语句来删除全部数据。

代码语言:sql复制
DELETE FROM table_name;

4. TRUNCATE和DELETE的区别

TRUNCATE TABLE语句用于删除数据表中的全部数据,但保留表结构。DELETE语句用于删除数据表中的部分或全部数据。

TRUNCATE TABLE语句效率比DELETE语句高,但无法回滚操作,需要谨慎使用。

九、MySQL数据表简单查询

1. 简单查询概述

简单查询是最基本的查询方式,用于从数据表中检索特定的数据。使用SELECT语句进行查询。

2. 查询所有字段(方法不唯一只是举例)

查询所有字段使用SELECT *语句。

代码语言:sql复制
SELECT * FROM table_name;

3. 查询指定字段(sid、sname)

查询指定字段使用SELECT字段名语句。

代码语言:sql复制
SELECT sid, sname FROM table_name;

4. 常数的查询

查询常数使用SELECT常数语句。

代码语言:sql复制
SELECT 1, 'Hello, World!';

5. 从查询结果中过滤重复数据

使用DISTINCT关键字从查询结果中过滤重复数据。

代码语言:sql复制
SELECT DISTINCT column_name FROM table_name;

6. 算术运算符(举例加运算符)

使用算术运算符进行计算。

代码语言:sql复制
SELECT column1   column2 AS result FROM table_name;

十、函数

1. 聚合函数

聚合函数用于对数据进行统计和计算,包括count()、max()、min()、sum()和avg()等。

1.1、count()

统计满足条件的行数。

代码语言:sql复制
SELECT COUNT(column_name) FROM table_name WHERE condition;
1.2、max()

计算指定列的最大值。

代码语言:sql复制
SELECT MAX(column_name) FROM table_name WHERE condition;
1.3、min()

计算指定列的最小值。

代码语言:sql复制
SELECT MIN(column_name) FROM table_name WHERE condition;
1.4、sum()

计算指定列的总和。

代码语言:sql复制
SELECT SUM(column_name) FROM table_name WHERE condition;
1.5、avg()

计算指定列的平均值。

代码语言:sql复制
SELECT AVG(column_name) FROM table_name WHERE condition;

2. 其他常用函数

除了聚合函数外,还有其他常用的函数,如时间函数、字符串函数和数学函数等。

2.1、时间函数

常用的时间函数包括NOW()、DATE()和MONTH()等。

代码语言:sql复制
SELECT NOW(); -- 返回当前日期和时间
SELECT DATE(column_name); -- 返回列的日期部分
SELECT MONTH(column_name); -- 返回列的月份部分
2.2、字符串函数

常用的字符串函数包括CONCAT()、LENGTH()和SUBSTRING()等。

代码语言:sql复制
SELECT CONCAT(column1, column2) AS result FROM table_name; -- 连接两个字符串
SELECT LENGTH(column_name) FROM table_name; -- 返回字符串的长度
SELECT SUBSTRING(column_name, start, length) FROM table_name; -- 返回字符串的子串
2.3、数学函数

常用的数学函数包括ABS()、ROUND()和FLOOR()等。

代码语言:sql复制
SELECT ABS(column_name) FROM table_name; -- 返回绝对值
SELECT ROUND(column_name) FROM table_name; -- 返回四舍五入值
SELECT FLOOR(column_name) FROM table_name; -- 返回向下取整值

十一、条件查询

条件查询用于根据条件从数据表中检索数据。

1. 使用关系运算符查询

使用关系运算符(<、<=、=、>=、>)进行条件查询。

代码语言:sql复制
SELECT column_name FROM table_name WHERE column_name operator value;

2. 使用IN关键字查询

使用IN关键字查询满足一组值的数据。

代码语言:sql复制
SELECT column_name FROM table_name WHERE column_name IN (value1, value2, ...);

3. 使用BETWEEN AND关键字查询

使用BETWEEN AND关键字查询某个范围的数据。

代码语言:sql复制
SELECT column_name FROM table_name WHERE column_name BETWEEN value1 AND value2;

4. 使用空值查询

使用IS NULL关键字查询空值。

代码语言:sql复制
SELECT column_name FROM table_name WHERE column_name IS NULL;

5. 使用AND关键字查询

使用AND关键字进行多条件查询。

代码语言:sql复制
SELECT column_name FROM table_name WHERE condition1 AND condition2;

6. 使用OR关键字查询

使用OR关键字进行多条件查询。

代码语言:sql复制
SELECT column_name FROM table_name WHERE condition1 OR condition2;

7. 使用LIKE关键字查询

使用LIKE关键字进行模糊查询。

7.1 普通字符串
代码语言:sql复制
SELECT column_name FROM table_name WHERE column_name LIKE 'value%';
7.2 含有%通配的字符串
代码语言:sql复制
SELECT column_name FROM table_name WHERE column_name LIKE '%value%';
7.3 含有_通配的字符串
代码语言:sql复制
SELECT column_name FROM table_name WHERE column_name LIKE '_alue';

8. 使用LIMIT限制查询结果的数量

使用LIMIT关键字限制查询结果的数量。

代码语言:sql复制
SELECT column_name FROM table_name LIMIT offset, count;

9. 使用GROUP BY进行分组查询

使用GROUP BY关键字对查询结果进行分组。

代码语言:sql复制
SELECT column_name, aggregate_function(column_name)
FROM table_name
GROUP BY column_name;

9.1 GROUP BY和聚合函数一起使用

代码语言:sql复制
SELECT column_name, aggregate_function(column_name)
FROM table_name
GROUP BY column_name
HAVING condition;

9.2 GROUP BY和聚合函数以及HAVING一起使用

代码语言:sql复制
SELECT column_name, aggregate_function(column_name)
FROM table_name
GROUP BY column_name
HAVING condition;

10. 使用ORDER BY对查询结果排序

使用ORDER BY关键字对查询结果进行排序。

代码语言:sql复制
SELECT column_name FROM table_name ORDER BY column_name ASC/DESC;

十二、别名设置

1. 为表取别名

使用AS关键字为表取别名。

代码语言:sql复制
SELECT column_name FROM table_name AS alias_name;

2. 为字段取别名

使用AS关键字为字段取别名。

代码语言:sql复制
SELECT column_name AS alias_name FROM table_name;

十三、表的关联关系

表的关联关系用于查询涉及多个表的数据,请参考关于关联查询的内容。

1. 关联查询

使用JOIN关键字进行表的关联查询。

代码语言:sql复制
SELECT columns
FROM table1 JOIN table2 ON condition;

2. 关于关联关系的删除数据

在删除涉及到关联关系的数据时,需要小心处理,以确保数据的完整性和一致性。

十四、多表连接查询

1. 交叉连接查询

使用CROSS JOIN语句进行交叉连接查询。

代码语言:sql复制
SELECT * FROM table1 CROSS JOIN table2;

2. 内连接查询

使用INNER JOIN语句进行内连接查询。

代码语言:sql复制
SELECT columns
FROM table1 INNER JOIN table2 ON condition;

3. 外连接查询

使用LEFT JOIN或RIGHT JOIN语句进行外连接查询。

3.1 左(外)连接查询
代码语言:sql复制
SELECT columns
FROM table1 LEFT JOIN table2 ON condition;
3.2 右(外)连接查询
代码语言:sql复制
SELECT columns
FROM table1 RIGHT JOIN table2 ON condition;

十五、子查询

子查询是指在查询中嵌套使用的子语句。

1. 带比较运算符的子查询

使用比较运算符对子查询结果进行筛选。

代码语言:sql复制
SELECT column_name FROM table_name WHERE column_name operator (SELECT column_name FROM table_name);

2. 带EXISTS关键字的子查询

使用EXISTS关键字来判断子查询是否返回结果。

代码语言:sql复制
SELECT column_name FROM table1 WHERE EXISTS (SELECT column_name FROM table_name WHERE condition);

3. 带ANY关键字的子查询

使用ANY关键字来比较子查询的结果。

代码语言:sql复制
SELECT column_name FROM table1 WHERE column_name operator ANY (SELECT column_name FROM table_name WHERE condition);

4. 带ALL关键字的子查询

使用ALL关键字来比较子查询的结果。

代码语言:sql复制
SELECT column_name FROM table1 WHERE column_name operator ALL (SELECT column_name FROM table_name WHERE condition);;

总结

本文按照提供的标题,结合MYSQL的基本知识点,从SQL的概述、数据库范式、数据类型、基本操作、约束、数据插入、数据更新、数据删除、简单查询、函数、条件查询、表关联关系、多表连接查询、子查询等多个方面进行了详细的介绍。希望这篇文章可以帮助你入门MYSQL,更好地理解和使用MYSQL。通过不断地学习和实践,相信你可以掌握MYSQL的基本操作和常用技巧,成为一名合格的MYSQL开发者。

0 人点赞