SQL的基本语句(2024年9月最新版 入门级)

准备工作

  • 配置环境变量:当在自己的计算机上下载并安装好MySQL数据库后,需要找到安装目录中的mysql.exe文件所在的目录,并且将其添加到计算机的Path环境变量中。
  • 准备数据库管理工具:常用的数据库管理工具有很多,例如NavicatphpMyAdminDBeaver等等,使用这些工具可以在可视化的界面中来操作数据库,更加简单和方便。我自己使用的是HeidiSQL

基本操作语句

数据库的基本操作包括增删改查四大部分,因此下面也将主要分为这四个大的部分进行介绍。另外,对于一些特殊的语句,将单独在一部分中进行介绍。

查操作语句

查看数据库服务器上所有可用数据库

  • 基本语法show databases;
  • 返回结果:返回一个结果集,该结果集中包含当前数据库服务器上所有数据库的名称。

查看某个数据库中的所有数据表

  • 基本语法
show tables;                # 查看当前数据库中的所有数据表
show tables from 数据库名称;  # 查看指定数据库中的所有数据表
  • 返回结果:返回一个结果集,包含查找的数据库中的所有表名。

查找某个数据表中的数据(难点)

  • 基本语法
SELECT column1, column2, ...
FROM table_name
WHERE condition
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...
LIMIT number;
  • 详细说明
    • SELECT

      • 指定要检索的列。可以使用*表示选择所有列。
      • 语法:SELECT column1, column2,...SELECT *
    • FROM:

      • 指定要查询的表。
      • 语法:FROM table_name
    • WHERE:

      • 指定查询的条件。只有满足条件的行才会被返回。
      • 语法:WHERE condition
      • 常见的条件
        • 大小比较运算符
          • = (等于)
          • <>!= (不等于)
          • > (大于)
          • < (小于)
          • >= (大于等于)
          • <= (小于等于)
        • 逻辑表达式
          • AND (逻辑与)
          • OR (逻辑或)
          • NOT(逻辑非)
        • LIKE:进行模式匹配,即找出满足某种模式的字符串。通常与两种通配符%_搭配使用。
          • %:表示任意数量的字符(包括零个字符)。例如,%abc%匹配包含abc的任何字符串。
          • _:表示单个字符。例如,_abc匹配以abc结尾且前面有一个字符的字符串。
        • IS NULL和IS NOT NULL:IS NULL用于查找列值为NULL的记录,而IS NOT NULL用于查找列值不为NULL的记录。
        • IN:用于在WHERE子句中指定多个可能的值。它允许你检查某个列的值是否在给定的值列表中。
    • ORDER BY:

      • 指定查询结果的排序顺序。可以按一个或多个列排序。ASC表示升序(默认),DESC表示降序。
      • 语法:ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...
    • LIMIT:

      • 限制返回的行数。通常用于分页查询。
      • 语法:LIMIT number

增操作语句

创建一个数据库

  • 基本语法create database [if not exists] 数据库名称;
    • IF NOT EXISTS:这是一个可选的子句,用于防止在数据库已经存在的情况下创建数据库时出现错误。如果数据库已经存在,SQL语句不会执行任何操作,也不会返回错误。
  • 其他备注:实际情况中很少使用这条SQL语句创建数据库,而是使用数据库管理工具,在可视化的界面中手动创建一个。

创建一张数据表

  • 基本语法
create table [if not exists]table_name (
    column1 datatype [column_constraint],
    column2 datatype [column_constraint],
    column3 datatype [column_constraint],
    ...
    [table_constraint]
);
  • table_name:要创建的表的名称。表名在数据库中必须是唯一的。

  • column1, column2, column3, ...:这些是表中的列名。每个列名后面跟着它的数据类型和可选的列约束。

  • datatype:这是列的数据类型,定义了该列可以存储的数据类型。常见的数据类型包括:

    • INT或INTEGER: 整数。
    • VARCHAR(n): 可变长度的字符串,n是最大长度。
    • CHAR(n): 固定长度的字符串,n是长度。
    • DATE: 日期。
    • DATETIME: 日期和时间。
    • FLOAT: 浮点数。
    • BOOLEAN: 布尔值。
  • column_constraint:这是列级别的约束,定义了列的规则。常见的列约束包括:

    • NOT NULL: 该列不能为空。
    • UNIQUE: 该列的值必须是唯一的。
    • PRIMARY KEY: 该列是表的主键,唯一标识表中的每一行。
    • FOREIGN KEY: 该列引用另一个表的主键。
    • CHECK: 定义一个条件,该列的值必须满足该条件。
    • DEFAULT X : 如果没有为该列提供值,则使用默认值X。
  • table_constraint:这是表级别的约束,定义了整个表的规则。常见的表约束包括:

    • PRIMARY KEY (column1, column2, ...):定义复合主键。
    • FOREIGN KEY (column) REFERENCES other_table(other_column): 定义外键。
    • UNIQUE (column1, column2, ...): 定义复合唯一约束。
    • CHECK (condition): 定义整个表的条件。

向指定数据表中插入数据

  • 给所有列都插入值
INSERT INTO table_name
VALUES (value1, value2, value3, ...);
  • 给表中指定的列插入值
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
  • 在表中插入多行数据
INSERT INTO Employees (EmployeeID, FirstName, LastName, BirthDate)
VALUES 
    (3, 'Alice', 'Johnson', '1990-05-10'),
    (4, 'Bob', 'Williams', '1988-07-18');

改操作语句

修改数据表中的数据

  • 基本语法
UPDATE 表名
SET 列名1 = 新值1, 列名2 = 新值2,...
WHERE 条件
  • 语法解释:首先通过WHERE语句找到需要更新数据的行(这里WHERE语句的使用方法和查询部分的WHERE语句的用法相同),然后通过SET语句对这些行中的指定列的数据进行更新。另外,新的值可以是一个计算表达式,例如列名1 = 列名1 + 1
  • 注意事项:由于UPDATE会修改原有的数据,因此建议在进行此操作前先对数据进行备份。

修改数据表本身

  • 修改表名
alter table 旧表名 rename 新表名;
  • 重置自增起始值
alter table 表名 auto_increment = 新起始值;
  • 向指定表添加新的列
alter table 表名 add column 新列名 数据类型;
  • 修改指定表中某列的列名和数据类型
alter table 表名 change column 旧列名 新列名 新数据类型;
  • 修改列的默认值
alter table 表名 alter column 列名 set default 新默认值;
  • 删除列
alter table 表名 drop column 列名;

删操作语句

删除数据表中的数据

DELETE FROM 表名
WHERE 条件
  • 注意事项DELETE操作会删除表中的数据,因此建议在操作前先对数据进行备份。另外,DELETE操作的本质是删除满足条件的数据表行,而不是简单的清除表单数据。

删除指定的数据表

drop table [if exists] 要删除的表名
  • 注意事项:该操作有较大的风险,一定要慎重进行。

清空数据表

truncate table 要清空数据的数据表名称

删除数据库(也就是删库)

drop database;

特殊操作语句

设置当前操作的数据库

  • 基本语法use 数据库名称;
  • 使用效果:执行这个语句后,所有后续的SQL操作(除非重新指定其他数据库)都会在这个指定的数据库上执行。

SQL注入攻击和预处理语句

SQL注入攻击的概念

  • 基本概念:SQL注入攻击是一种常见的网络安全漏洞,攻击者通过在应用程序的输入字段中插入恶意的SQL代码,从而操纵数据库查询,获取或篡改数据库中的数据。
  • 攻击案例介绍
    • 假设你有一个简单的登录页面,用户输入用户名和密码来登录。后台的SQL查询可能是这样的:
SELECT * FROM users WHERE username = '输入的用户名' AND password = '输入的密码';

如果用户输入的用户名是admin,密码是123456,那么SQL查询会变成如下这样,这个查询会检查数据库中是否有用户名为admin且密码为123456的记录。

SELECT * FROM users WHERE username = 'admin' AND password = '123456';

现在,假设攻击者在用户名输入框中输入了以下内容:admin' --,密码输入框中输入任意内容,比如abc。那么SQL查询会变成:

SELECT * FROM users WHERE username = 'admin' --' AND password = 'abc';

注意这里的 – 是SQL中的注释符号,它会使后面的内容被忽略。因此,这个查询实际上变成了:

SELECT * FROM users WHERE username = 'admin';

这个查询会返回所有用户名为admin的记录,而不管密码是什么。攻击者就可以成功登录,即使他们不知道正确的密码。

SQL预处理语句

  • 基本作用
    • 性能优化:预处理语句可以被数据库服务器编译和优化一次,然后在多次执行时重用,从而减少了编译的开销。
    • 安全性:预处理语句可以有效防止SQL注入攻击,因为参数值在执行时是独立处理的,不会影响SQL语句本身的结构。
  • 理解方式:简单来说,预处理语句就是参数化的SQL语句。
  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值