SQL学习记录01

什么是SQL?

Structured Query Language (结构化查询语言),与关系型数据库进行通信的标准语言。

什么是数据库?

"按照数据结构来组织、存储、和管理数据的仓库。"

一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。

SQL 的种类有什么?

DDL: Data Definition Language 数据定义语言,用来定义数据库对象(数据库,表, 字段)

DML:Data Manipulation Language 数据操作语言,用来对数据库表中的数据进行增删改

DQL: Data Query Language 数据查询语言,用来查询数据库中表的记录

DCL: Data Control Language 数据控制语言,用来创建数据库用户、控制数据库的 访问权限

TCL: Transaction Control Language 事务控制语言,是一个或一组SQL语句组成的一个执行单元,这个执行单元要么全部执行,要么全部不执行。

DQL相关:

查询语句语法结构: SELECT 字段列表 FROM 表名列表 WHERE 条件列表GROUP BY 分组字段列表 HAVING 分组后条件列表 ORDER BY 排序字段.

DQL 查询语句分类: 基本查询(不带任何条件)

条件查询(WHERE)

聚合函数(count、max、min、avg、sum)

分组查询(group by)

排序查询(order by)

分页查询(limit)

DML相关:

添加表数据语法: insert into 表名(列名1,..列名n) values(值1,...值n);

注意:

  • 列名和值要一一对应。
  • 如果表名后,不定义列名,则默认给所有列添加值,如果第一列是主键列,需要在添加值时把第一列的值设置为null。
  • 除了数值类型,其他类型的值需要使用引号引起来。

删除表数据语法: delete from 表名 where 条件

注意:

  • 如果不加条件,则删除表中所有记录。
  • 如果要删除所有记录
  • delete from 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作
  • truncate table 表名; -- 推荐使用,效率更高。先删除表,然后再创建一张一样的表。

修改表数据语法:

update 表名 set 列名1 = 值1, 列名2 = 值2,... where 条件;

注意

  • 如果不加任何条件,则会将表中所有记录全部修改。

DDL 相关:

操作隐形提交,不能rollback。

数据库操作:查询所有数据库:show databases; 创建数据库:create database 数据库名; 删除数据库:drop database 数据库名; 使用数据库:use 数据库名;

表操作:查询当前数据库所有表:show tables;

查看指定表结构:desc 表名; 查询指定表的建表语句:show create table 表名;

创建表结构:create table 表名( 字段1 字段1类型, 字段2 字段2类型 ... );

DCL 相关:

授权:GRANT

查询用户: select * from mysql.user;

创建用户: CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';

修改用户密码: ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码' ;

删除用户: DROP USER '用户名'@'主机名' ;

注意事项: 在MySQL中需要通过用户名@主机名的方式,来唯一标识一个用户。

MySQL 中的数据类型主要分类:数值类型、字符串类型、日期时间类型。

数值类型:有符号:SIGNED、无符号:UNSIGNED。默认是有符号。

浮点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度。

常用类型

int:整型

double:浮点型,例如 double(5,2)表示最多 5 位,其中必须有 2 位小数,即最大值为 999.99;

decimal:泛型型,在表单线方面使用该类型,因为不会出现精度缺失问题;

char:固定长度字符串类型;(当输入的字符不够长度时会补空格)

varchar:固定长度字符串类型;

text:字符串类型;

blob:字节类型;

date:日期类型,格式为:yyyy-MM-dd;

time:时间类型,格式为:hh:mm:ss

timestamp:时间戳类型;

char&varchar:

类型相似,但保存与检索方式不同。

最大长度、是否保留空格等方面也不同。

Binary&Varbinary

固定长度 (Binary) 的或可变长度 (Varbinary) 的 Binary 数据类型。

Binary ( n )

固定长度的 n 个字节二进制数据。N 必须从 1 到 8,000。存储空间大小为 n+4 字节。

Varbinary ( n )

n 个字节变长二进制数据。n 必须从 1 到 8,000。存储空间大小为实际输入数据长度 +4 个字节,而不是 n 个字节。输入的数据长度可能为 0 字节。在 SQL-92 中 varbinary 的同义词为 binary varying。

如果在数据定义或变量声明语句中没有指定 n,默认长度为 1。如果没有用 CAST 函数指定 n,默认长度为 30。

当列数据项大小一致时应使用 binary。

当列数据项大小不一致时应使用 varbinary。

数据类型decimal(p,s)

需要分别指定小数的最大位数(p)和小数位的数量(s):

p (precision) :指定小数的最大位数,小数点的左侧和右侧的数字的总数量不能超过p,p的取值范围是从1到38,默认值为18。

s (scale):指定在小数点右侧的小数位数,p-s是小数点左边的最大位数。s必须是从0到p的值,只有在指定了精度的情况下才能指定s,s的默认值是0,

因此,0 <= s <= p。

SQL 的管理数据对象有哪些?

  1. 表(Table):
    • 定义: 数据库中最基本、最重要的数据对象。
    • 作用: 以行(记录)和列(字段)的结构化格式存储实际数据。每一行代表一个实体(如一个客户、一个订单),每一列代表该实体的一个属性(如客户姓名、订单日期)。
    • 管理操作: CREATE TABLE, ALTER TABLE, DROP TABLE,

TRUNCATE TABLE, INSERT INTO, UPDATE, DELETE, SELECT

2. 视图 (View):

  • 定义: 基于一个或多个表(或其他视图)的查询结果集生成的虚拟表
  • 作用:

简化复杂查询(将复杂的 JOIN 或计算封装在视图中)。

提供数据抽象和安全性(只暴露视图定义的列和行,隐藏底层表结构和敏感数据)。逻辑上组织数据。

  • 关键点: 视图本身不存储数据,数据仍然存储在基表中。对视图的查询或更新操作最终会作用在基表上(可更新视图有特定规则)。
  • 管理操作: CREATE VIEW, ALTER VIEW, DROP VIEW, SELECT (查询视图)。

3. 索引 (Index):

  • 定义: 一种特殊的数据库对象,建立在表的一个或多个列上,用于加速数据检索速度
  • 作用: 类似于书籍的目录,允许数据库引擎快速找到特定值,而无需扫描整个表。显著提高 SELECT(尤其是带 WHERE, ORDER BY, JOIN)的速度。
  • 代价: 索引需要额外的存储空间,并且会降低 INSERT, UPDATE, DELETE 操作的速度(因为索引也需要维护)。
  • 常见类型: B-Tree(最常用)、Hash、Bitmap、全文索引等。
  • 管理操作: CREATE INDEX, DROP INDEX, ALTER INDEX (某些DBMS), REBUILD INDEX/REORGANIZE INDEX (维护)。

4. 约束 (Constraints):

  • 定义: 应用于表列上的规则,用于强制实施数据的完整性准确性
  • 作用: 确保表中的数据满足特定的业务规则和关系。
  • 主要类型:
  • PRIMARY KEY: 唯一标识表中的每一行(不允许 NULL 和重复值)。
  • FOREIGN KEY: 确保一个表(子表/引用表)中的列值必须存在于另一个表(父表/被引用表)的主键或唯一键中,维护表间引用完整性。
  • UNIQUE: 确保列(或列组合)中的所有值都是唯一的(允许 NULL,但通常只允许一个 NULL)。
  • NOT NULL: 确保列不能存储 NULL 值。
  • CHECK: 确保列中的值满足指定的条件

(如 Age > 0, Status IN ('A','I'))。

  • DEFAULT: 当未指定值时,为列提供默认值。

  • 管理操作: 通常在创建或修改表时定义 (CREATE TABLE, ALTER TABLE ... ADD CONSTRAINT),也可以单独添加或删除 (ALTER TABLE ... DROP CONSTRAINT)。

5. 序列 (Sequence) / 自增列 (Auto-increment / Identity Column):

定义:

  • 序列: 一个独立的数据对象(在 Oracle, PostgreSQL 等中常见),用于生成唯一的、通常按顺序递增的数字序列。
  • 自增列/Identity列: 表列的一个属性(在 MySQL AUTO_INCREMENT, SQL Server IDENTITY, PostgreSQL SERIAL 等),在插入新行时自动生成唯一的递增值。
  • 作用: 为主键列或其他需要唯一标识符的列自动生成唯一值。
  • 管理操作:
  • 序列: CREATE SEQUENCE, ALTER SEQUENCE, DROP SEQUENCE, NEXTVAL (获取下一个值)。
  • 自增列:CREATE TABLE / ALTER TABLE 中定义 (AUTO_INCREMENT, IDENTITY 等)。

6. 同义词 (Synonym):

  • 定义: 为现有数据库对象(如表、视图、序列、存储过程、函数,甚至是另一个同义词)提供的别名
  • 作用:
  • 简化对象引用(使用短名称代替冗长的 schema.object 名称)。
  • 提供抽象层(如果底层对象位置或名称改变,只需修改同义词定义,应用程序代码无需改动)。
  • 方便访问不同用户模式下的对象。
  • 管理操作: CREATE [PUBLIC] SYNONYM, DROP SYNONYM
  1. 模式 (Schema):
  • 定义: 数据库对象的命名空间或容器。它本身不存储数据,但包含表、视图、索引、过程等对象的集合。
  • 作用:
    • 逻辑上组织和管理数据库对象(如按功能模块划分)。
    • 避免命名冲突(不同模式下的对象可以有相同名称)。
    • 权限管理的基础单元(可以对整个模式授权)。
  • 管理操作: CREATE SCHEMA, ALTER SCHEMA, DROP SCHEMA (具体语法和功能因 DBMS 差异较大)。