SQL基础(1),从三流Linux运维外包到秒杀阿里P7,

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: SQL基础(1),从三流Linux运维外包到秒杀阿里P7,
ALTER TABLE Persons
MODIFY Age int NULL;
2)unique 约束

作用:

  • UNIQUE 约束唯一标识数据库表中的每条记录。
  • UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
  • PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束。
  • 每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

实例:

1)创建表时添加unique约束

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (P_Id)
)

2)已创建的表添加unique约束

ALTER TABLE Persons
ADD UNIQUE (P_Id)

3)已创建的表中删除unique约束

ALTER TABLE Persons
DROP INDEX uc_PersonID
3)primary key 约束

作用:

  • PRIMARY KEY 约束唯一标识数据库表中的每条记录。
  • 主键必须包含唯一的值。
  • 主键列不能包含 NULL 值。
  • 每个表都应该有一个主键,并且每个表只能有一个主键。

实例:

1)创建表时添加primary key 约束:

--mysql
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)
--SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
P_Id int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

2)已创建的表添加primary key 约束

ALTER TABLE Persons
ADD PRIMARY KEY (P_Id)

3)已创建的表中删除primary key 约束

ALTER TABLE Persons
DROP PRIMARY KEY
4)foreign key 约束

作用:

  • 一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键)。
  • FOREIGN KEY 约束用于预防破坏表之间连接的行为。
  • FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

实例:

“Persons” 表:

P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

“Orders” 表:

O_Id OrderNo P_Id
1 77895 3
2 44678 3
3 22456 2
4 24562 1
  • “Orders” 表中的 “P_Id” 列指向 “Persons” 表中的 “P_Id” 列。
  • “Persons” 表中的 “P_Id” 列是 “Persons” 表中的 PRIMARY KEY。
  • “Orders” 表中的 “P_Id” 列是 “Orders” 表中的 FOREIGN KEY。

1)创建表时添加foreign key 约束:

--mysql
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)
--SQL Server / Oracle / MS Access:
CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)

2)已创建的表添加foreign key 约束

ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

3)已创建的表中删除foreign key 约束

ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders
5)check 约束

作用:

  • CHECK 约束用于限制列中的值的范围。
  • 如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
  • 如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。

实例:

1)创建表时添加check 约束:

--mysql
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (P_Id>0)
)
--SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
P_Id int NOT NULL CHECK (P_Id>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

2)已创建的表添加check 约束

ALTER TABLE Persons
ADD CHECK (P_Id>0)

3)已创建的表中删除check 约束

ALTER TABLE Persons
DROP CHECK chk_Person
6)default 约束

作用:

  • DEFAULT 约束用于向列中插入默认值。
  • 如果没有规定其他的值,那么会将默认值添加到所有的新记录。

实例:

1)创建表时添加default 约束:

CREATE TABLE Persons
(
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255) DEFAULT 'Sandnes'
)

2)已创建的表添加default 约束

ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'

3)已创建的表中删除default 约束

ALTER TABLE Persons
ALTER City DROP DEFAULT
14.create index 语句

作用:

  • CREATE INDEX 语句用于在表中创建索引。
  • 在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
  • 可以在表中创建索引,以便更加快速高效地查询数据。
  • 用户无法看到索引,它们只能被用来加速搜索/查询。

语法:

--在表上创建一个简单的索引。允许使用重复的值:
CREATE INDEX index_name
ON table_name (column_name)
--在表上创建一个唯一的索引。不允许使用重复的值
CREATE UNIQUE INDEX index_name
ON table_name (column_name)

实例:

1)在 “Persons” 表的 “LastName” 列上创建一个名为 “PIndex” 的索引:

CREATE INDEX PIndex
ON Persons (LastName)

2)如果您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:

CREATE INDEX PIndex
ON Persons (LastName, FirstName)
15.SQL drop

作用:

  • 通过使用 DROP 语句,可以轻松地删除索引、表和数据库。

语法:

-----DROP INDEX 语句用于删除表中的索引。
--MS Access
DROP INDEX index_name ON table_name
--DB2/Oracle 
DROP INDEX index_name
-- MS SQL Server
DROP INDEX table_name.index_name
--MySQL
ALTER TABLE table_name DROP INDEX index_name
----DROP TABLE 语句用于删除表。
DROP TABLE table_name
----DROP DATABASE 语句用于删除数据库。
--DROP DATABASE database_name
----只删除表中的数据,不删除表本身
TRUNCATE TABLE table_name 
16.SQL alter table 语句

作用:

  • ALTER TABLE 语句用于在已有的表中添加、删除或修改列

语法:

--在表中添加列
ALTER TABLE table_name
ADD column_name datatype
--删除表中的列
ALTER TABLE table_name
DROP COLUMN column_name
--改变表中列的数据类型
ALTER TABLE table_name
MODIFY COLUMN column_name datatype
17.SQL auto increment 字段

作用:

  • Auto-increment 会在新记录插入表中时生成一个唯一的数字。
  • 通常希望在每次插入新记录时,自动地创建主键字段的值

语法:

--MySQL
CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (ID)
)
--SQL Server
CREATE TABLE Persons
(
ID int IDENTITY(1,1) PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
--Access
CREATE TABLE Persons
(
ID Integer PRIMARY KEY AUTOINCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
--Oracle 
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10
18.SQL 视图

作用:

  • 视图是基于 SQL 语句的结果集的可视化的表。
  • 视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。
  • 以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样。

语法:

CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
---注释:视图总是显示最新的数据!每当用户查询视图时,数据库引擎通过使用视图的 SQL 语句重建数据。

实例:

1)视图 “Current Product List” 会从 “Products” 表列出所有正在使用的产品(未停产的产品)。

--创建视图
CREATE VIEW [Current Product List] AS
SELECT ProductsID,ProductName
FROM Products
WHERE Discontinued=No
---查询视图
SELECT * FROM [Current Product List]

2)更新视图:

CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

3)删除视图

DROP VIEW view_name
• 1
• 2
19.SQL null值

作用:

  • NULL 值代表遗漏的未知数据。
  • 默认地,表的列可以存放 NULL 值。
  • 如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以 NULL 值保存。
  • NULL 值的处理方式与其他值不同。
  • NULL 用作未知的或不适用的值的占位符。
  • 无法比较 NULL 和 0;它们是不等价的。

如何测试 NULL 值

  • 无法使用比较运算符来测试 NULL 值,比如 =、< 或 <>。
  • 必须使用 IS NULL 和 IS NOT NULL 操作符来测试null

实例:

1)选取在 “Address” 列中带有 NULL 值的记录:

SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NULL

2)选取在 “Address” 列中不带有 NULL 值的记录

SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NOT NULL

第三章 SQL函数

第一节 SQL date 函数

SQL Date 数据类型

MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:

  • DATE - 格式:YYYY-MM-DD
  • DATETIME - 格式:YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - 格式:YYYY-MM-DD HH:MM:SS
  • YEAR - 格式:YYYY 或 YY

SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值:

  • DATE - 格式:YYYY-MM-DD
  • DATETIME - 格式:YYYY-MM-DD HH:MM:SS
  • SMALLDATETIME - 格式:YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - 格式:唯一的数字
MySQL Date 函数

下面的表格列出了 MySQL 中最重要的内建日期函数:

函数 描述
NOW() 返回当前的日期和时间
CURDATE() 返回当前的日期
CURTIME() 返回当前的时间
DATE() 提取日期或日期/时间表达式的日期部分
EXTRACT() 返回日期/时间的单独部分
DATE_ADD() 向日期添加指定的时间间隔
DATE_SUB() 从日期减去指定的时间间隔
DATEDIFF() 返回两个日期之间的天数
DATE_FORMAT() 用不同的格式显示日期/时间
SQL Server Date 函数

下面的表格列出了 SQL Server 中最重要的内建日期函数:

函数 描述
GETDATE() 返回当前的日期和时间
DATEPART() 返回日期/时间的单独部分
DATEADD() 在日期中添加或减去指定的时间间隔
DATEDIFF() 返回两个日期之间的时间
CONVERT() 用不同的格式显示日期/时间

第二节 SQL null 函数

--SQL Server / MS Access
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products
--Oracle 没有 ISNULL() 函数。不过,我们可以使用 NVL() 函数达到相同的结果:
SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
FROM Products
--Mysql
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
-或
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products

第三节 aggregate 函数

1.AVG() - 返回平均值

作用:

  • AVG() 函数返回数值列的平均值。

语法:

SELECT AVG(column_name) FROM table_name

演示:

1)从 “access_log” 表的 “count” 列获取平均值:

2)选择访问量高于平均访问量的 “site_id” 和 “count”:

2.COUNT() - 返回行数

作用:

  • COUNT() 函数返回匹配指定条件的行数。

语法:

--返回指定列的值的数目(NULL 不计入)
SELECT COUNT(column_name) FROM table_name;
--返回表中的记录数
SELECT COUNT(*) FROM table_name;
--返回指定列的不同值的数目:
SELECT COUNT(DISTINCT column_name) FROM table_name;

演示:

1)计算 “access_log” 表中 “site_id”=3 的总访问量:

2)计算 “access_log” 表中总记录数:

3)计算 “access_log” 表中不同 site_id 的记录数:

3.FIRST() - 返回第一个记录的值

作用:

  • FIRST() 函数返回指定的列中第一个记录的值。

语法:

--只有 MS Access 支持 FIRST() 函数。
SELECT FIRST(column_name) FROM table_name;
--SQL Server 
SELECT TOP 1 column_name FROM table_name
ORDER BY column_name ASC;
--MySQL
SELECT column_name FROM table_name
ORDER BY column_name ASC
LIMIT 1;
--Oracle
SELECT column_name FROM table_name
ORDER BY column_name ASC
WHERE ROWNUM <=1;

演示:

1)选取 “Websites” 表的 “name” 列中第一个记录的值:

4.LAST() - 返回最后一个记录的值

作用:

  • LAST() 函数返回指定的列中最后一个记录的值。

语法:

--MS Access 支持 LAST() 函数。
SELECT LAST(column_name) FROM table_name;
--SQL Server
SELECT TOP 1 column_name FROM table_name
ORDER BY column_name DESC;
--MySQL 
SELECT column_name FROM table_name
ORDER BY column_name DESC
LIMIT 1;
--Oracle 
SELECT column_name FROM table_name
ORDER BY column_name DESC
WHERE ROWNUM <=1;

演示:

1)选取 “Websites” 表的 “name” 列中最后一个记录的值:

5.MAX() - 返回最大值

作用:

  • MAX() 函数返回指定列的最大值。

语法:

SELECT MAX(column_name) FROM table_name;

演示:

1)从 “Websites” 表的 “alexa” 列获取最大值:

6.MIN() - 返回最小值

作用:

  • MIN() 函数返回指定列的最小值。

语法:

SELECT MIN(column_name) FROM table_name;

演示:

1)从 “Websites” 表的 “alexa” 列获取最小值:

7.SUM() - 返回总和

作用:

  • SUM() 函数返回数值列的总数。

语法:

SELECT SUM(column_name) FROM table_name;

演示:

1)查找 “access_log” 表的 “count” 字段的总数:

第四节 scalar 函数

1.UCASE() - 将某个字段转换为大写

作用:

  • UCASE() 函数把字段的值转换为大写。

语法:

SELECT UCASE(column_name) FROM table_name;

演示:

1)从 “Websites” 表中选取 “name” 和 “url” 列,并把 “name” 列的值转换为大写:

2.LCASE() - 将某个字段转换为小写

作用:

  • LCASE() 函数把字段的值转换为小写。

语法:

SELECT LCASE(column_name) FROM table_name;

演示:

1)从 “Websites” 表中选取 “name” 和 “url” 列,并把 “name” 列的值转换为小写:

3.MID() - 从某个文本字段提取字符,MySql 中使用

作用:

  • MID() 函数用于从文本字段中提取字符。

语法:


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
10月前
|
运维 安全 Linux
试试Linux设备命令行运维工具——Wowkey
WowKey 是一款专为 Linux 设备设计的命令行运维工具,提供自动化、批量化、标准化、简单化的运维解决方案。它简单易用、高效集成且无依赖,仅需 WIS 指令剧本文件、APT 账号密码文件和 wowkey 命令即可操作。通过分离鉴权内容与执行内容,WowKey 让运维人员专注于决策,摆脱繁琐的交互与执行细节工作,大幅提升运维效率与质量。无论是健康检查、数据采集还是配置更新,WowKey 都能助您轻松应对大规模设备运维挑战。立即从官方资源了解更多信息:https://atsight.top/training。
|
10月前
|
数据采集 运维 安全
Linux设备命令行运维工具WowKey问答
WowKey 是一款用于 Linux 设备运维的工具,可通过命令行手动或自动执行指令剧本,实现批量、标准化操作,如健康检查、数据采集、配置更新等。它简单易用,只需编写 WIS 指令剧本和 APT 帐号密码表文件,学习成本极低。支持不同流派的 Linux 系统,如 RHEL、Debian、SUSE 等,只要使用通用 Shell 命令即可通吃Linux设备。
|
存储 运维 安全
深入解析操作系统控制台:阿里云Alibaba Cloud Linux(Alinux)的运维利器
本文将详细介绍阿里云的Alibaba Cloud Linux操作系统控制台的功能和优势。
437 6
|
Prometheus 运维 监控
Prometheus+Grafana+NodeExporter:构建出色的Linux监控解决方案,让你的运维更轻松
本文介绍如何使用 Prometheus + Grafana + Node Exporter 搭建 Linux 主机监控系统。Prometheus 负责收集和存储指标数据,Grafana 用于可视化展示,Node Exporter 则采集主机的性能数据。通过 Docker 容器化部署,简化安装配置过程。完成安装后,配置 Prometheus 抓取节点数据,并在 Grafana 中添加数据源及导入仪表盘模板,实现对 Linux 主机的全面监控。整个过程简单易行,帮助运维人员轻松掌握系统状态。
2146 3
|
运维 监控 网络协议
|
SQL 运维 监控
南大通用GBase 8a MPP Cluster Linux端SQL进程监控工具
南大通用GBase 8a MPP Cluster Linux端SQL进程监控工具
|
存储 运维 搜索推荐
|
运维 监控 网络协议
运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面
本文介绍了运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面,旨在帮助读者提高工作效率。从基本的文件查看与编辑,到高级的网络配置与安全管理,这些命令是运维工作中的必备工具。
1076 3
|
运维 监控 安全
盘点Linux服务器运维管理面板
随着云计算和大数据技术的迅猛发展,Linux服务器在运维管理中扮演着越来越重要的角色。传统的Linux服务器管理方式已经无法满足现代企业的需求,因此,高效、安全、易用的运维管理面板应运而生。
|
缓存 运维 监控
【运维必备知识】Linux系统平均负载与top、uptime命令详解
系统平均负载是衡量Linux服务器性能的关键指标之一。通过使用 `top`和 `uptime`命令,可以实时监控系统的负载情况,帮助运维人员及时发现并解决潜在问题。理解这些工具的输出和意义是确保系统稳定运行的基础。希望本文对Linux系统平均负载及相关命令的详细解析能帮助您更好地进行系统运维和性能优化。
1080 3