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的管理数据对象有哪些?
- 表(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 ServerIDENTITY
, PostgreSQLSERIAL
等),在插入新行时自动生成唯一的递增值。 - 作用: 为主键列或其他需要唯一标识符的列自动生成唯一值。
- 管理操作:
- 序列:
CREATE SEQUENCE
,ALTER SEQUENCE
,DROP SEQUENCE
,NEXTVAL
(获取下一个值)。 - 自增列: 在
CREATE TABLE
/ALTER TABLE
中定义 (AUTO_INCREMENT
,IDENTITY
等)。
6. 同义词 (Synonym):
- 定义: 为现有数据库对象(如表、视图、序列、存储过程、函数,甚至是另一个同义词)提供的别名。
- 作用:
- 简化对象引用(使用短名称代替冗长的
schema.object
名称)。 - 提供抽象层(如果底层对象位置或名称改变,只需修改同义词定义,应用程序代码无需改动)。
- 方便访问不同用户模式下的对象。
- 管理操作:
CREATE [PUBLIC] SYNONYM
,DROP SYNONYM
。
- 模式 (Schema):
- 定义: 数据库对象的命名空间或容器。它本身不存储数据,但包含表、视图、索引、过程等对象的集合。
- 作用:
- 逻辑上组织和管理数据库对象(如按功能模块划分)。
- 避免命名冲突(不同模式下的对象可以有相同名称)。
- 权限管理的基础单元(可以对整个模式授权)。
- 管理操作:
CREATE SCHEMA
,ALTER SCHEMA
,DROP SCHEMA
(具体语法和功能因 DBMS 差异较大)。