SQL 语句基础与实用技巧(DDL DML)

news/2024/11/20 8:45:39/

一、语句基础

SQL(Structured Query Language)是关系型数据库的核心语言,用于定义、操作和查询数据。

SQL 可分为以下几类:

  1. DDL(数据定义语言)
    用于定义数据库结构,例如表和索引。常用命令:

    • CREATE:创建数据库或表。
    • ALTER:修改表结构。
    • DROP:删除数据库或表。
  2. DML(数据操作语言)
    用于操作数据(增删改)。常用命令:

    • INSERT:插入数据。
    • UPDATE:更新数据。
    • DELETE:删除数据。
  3. DQL(数据查询语言)
    用于查询数据,主要是 SELECT 语句。

  4. DCL(数据控制语言)
    用于权限控制,例如:

    • GRANT:授予权限。
    • REVOKE:撤销权限。

二、详解DDL DML

1. DDL(数据库)

相关语法:

-- 查询所有数据库

sql">show databases;

-- 查询当前数据库

sql">select database();

-- 使用/切换数据库

use 数据库名;

sql">use XXX;

-- 创建数据库

create database [if not exists] 数据库名 [default charset utf8mb4];

sql">create database if not exists itheima03;

-- 删除数据库

sql">drop database if exists XXX;

2. DDL(表操作)

创建表的语法:

sql">create table 表名 (字段1 字段类型 [约束] [comment '字段1注释'],...字段2 字段类型 [约束] [comment '字段2注释']
) [comment '表注释'];

约束:约束是作用于表中字段上的规则,用于限制存储在表中的数据。

目的:保证数据库中数据的正确性、有效性和完整性。

语法示例:

sql">create table emp(id int unsigned primary key auto_increment comment 'ID,主键',username varchar(20) not null unique comment '用户名',password varchar(50) default '123456' comment '密码',name varchar(10) not null comment '姓名',gender tinyint unsigned not null comment '性别, 1:男, 2:女',phone char(11) not null unique comment '手机号',job tinyint unsigned comment '职位, 1 班主任, 2 讲师 , 3 学工主管,salary int unsigned comment '薪资',entry_date date comment '入职日期',image varchar(300) comment '头像',create_time datetime comment '创建时间',update_time datetime comment '修改时间'
) comment '员工表';

修改表结构:

sql">-- 查询当前数据库的所有表
show tables;-- 查询表结构
desc 表名;-- 查询建表语句
show create table 表名;-- 添加字段
alter table 表名 add 字段名 类型(长度) [comment '注释'] [约束];-- 修改字段类型
alter table 表名 modify 字段名 新数据类型(长度);-- 修改字段名与字段类型
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment '注释'] [约束];-- 删除字段
alter table 表名 drop column 字段名;-- 修改表名
alter table 表名 rename to 新表名;-- 删除表
drop table [if exists] 表名;

语法示例:

sql">
-- 表结构修改: 添加字段 add
alter table emp add qq varchar(11) comment 'QQ';
-- 表结构修改: 修改字段类型 modify
alter table emp modify qq varchar(13) comment 'QQ';
-- 表结构修改: 修改字段名 和 字段类型 change
alter table emp change qq qq_num varchar(15) comment 'QQ';
-- 表结构修改: 删除字段 drop
alter table emp drop column qq_num;
-- 表结构修改: 修改表名
alter table emp rename to employee;-- 删除表
drop table user;

3. DML

insert:

sql">-- 指定字段添加数据
insert into 表名 (字段名1, 字段名2) 
values (值1, 值2);-- 全部字段添加数据
insert into 表名 
values (值1, 值2, ...);-- 批量添加数据(指定字段)
insert into 表名 (字段名1, 字段名2) 
values (值1, 值2), (值1, 值2);-- 批量添加数据(全部字段)
insert into 表名 
values (值1, 值2, ...), (值1, 值2, ...);

语法示例:

sql">-- DML : 数据操作语言
-- DML : 插入数据 - insert
-- 1. 为 emp 表的 username, password, name, gender, phone 字段插入值
insert into emp(username, password, name, gender, phone, create_time, update_time)values ('Tom', '1234', '汤姆', 1, '13309091212',now(),now());-- 2. 为 emp 表的 所有字段插入值
insert into emp(id, username, password, name, gender, phone, job, salary, entry_date, image, create_time, update_time)values (null, 'Tom2', '1234', '汤姆2', 1, '13309091213',1,2800,'2008-01-01','1.jpg',now(),now());-- 作用相同
insert into emp values (null, 'Tom3', '1234', '汤姆3', 1, '13309091214',1,2800,'2008-01-01','1.jpg',now(),now());

注意:

  • 插入数据时,指定的字段顺序需要与值的顺序一一对应

  • 字符串和日期型数据应该包含在引号中(单引号 ' 或双引号 " 都可以)。

  • 插入的数据大小,应在字段的规定范围内

update:

sql">-- 修改数据
update 表名 
set 字段名1 = 值1, 字段名2 = 值2, ...
[where 条件];

语法示例:

sql">-- DML : 更新数据 - update
-- 1. 将 emp 表的ID为1员工 姓名name字段更新为 '张三'
update emp set name = '张三' where id = 1;-- 2. 将 emp 表的所有员工的 入职日期(entry_date) 更新为 '2010-01-01'
update emp set entry_date = '2010-01-01';

delete:

sql">-- 删除数据
delete from 表名 
[where 条件];

语法示例:

sql">-- DML : 删除数据 - delete
-- 1. 删除 emp 表中 ID为1的员工
delete from emp where id = 1;-- 2. 删除 emp 表中的所有员工
delete from emp;

三、总结

  在关系型数据库中,SQL 语言根据功能可以分为多个子集,其中 DDL(Data Definition Language,数据定义语言)DML(Data Manipulation Language,数据操作语言) 是最常用的两部分,下一篇博客我再对DQL进行总结


http://www.ppmy.cn/news/1548450.html

相关文章

C语言项⽬实践-贪吃蛇

目录 1.项目要点 2.窗口设置 2.1mode命令 2.2title命令 2.3system函数 2.Win32 API 2.1 COORD 2.2 GetStdHandle 2.3 CONSOLE_CURSOR_INFO 2.4 GetConsoleCursorInfo 2.5 SetConsoleCursorInfo 2.5 SetConsoleCursorPosition 2.7 GetAsyncKeyState 3.贪吃蛇游戏设…

OSRM docker环境启动

命令一把梭 wget https://download.geofabrik.de/asia/china-latest.osm.pbf docker pull osrm/osrm-backend docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-extract -p /opt/car.lua /data/china-latest.osm.pbf docker run -t -v "${PWD}:/data&q…

STM32(hal库)中,__HAL_LINKDMA 函数使用时候,串口的handler DMA_HandleTypedef 为什么前面要加extern

在STM32 HAL库中,__HAL_LINKDMA是一个宏,用于将特定的外设(如UART、SPI等)的句柄(Handle)与其对应的DMA(直接内存访问)句柄链接起来。这样做的目的是让HAL库内部能够自动管理DMA传输…

Kafka-创建topic源码

一、命令创建topic kafka-topics --create --topic quickstart-events --bootstrap-server cdh1:9092 --partitions 2 --replication-factor 2 二、kafka-topics脚本 exec $(dirname $0)/kafka-run-class.sh org.apache.kafka.tools.TopicCommand "$" 脚本中指定了…

深入理解 Vue 3 中的 emit

深入理解 Vue 3 中的 emit 在 Vue 3 中,组件通信是开发中非常重要的一部分,其中通过 emit 实现父子组件通信是最常见的方式之一。emit 的作用是:子组件可以通过触发自定义事件将数据传递给父组件。 在本篇文章中,我们将从以下几…

OpenProject安装部署与使用介绍

OpenProject安装部署与使用介绍 1. OpenProject简介 1-1. 什么是OpenProject ​ OpenProject是一个功能全面的开源项目管理软件,它提供了一套集成的工具来支持项目规划、协作和监控。它的核心功能包括任务和问题跟踪、时间管理、新闻和文档管理,以及集…

自动化生成测试用例:利用OpenAI提升电商网站测试覆盖率

导语 自动化生成测试用例是软件测试领域一个强大的应用,通过OpenAI的语言模型,测试工程师可以快速生成高质量的测试用例,尤其是在处理边界条件和极端情况时,提升测试覆盖率。本篇文章将结合一个典型的电商网站案例,介绍…

【无标题】网络命名空间中创建双网卡

这里写自定义目录标题 创建 veth peer 接口对将 veth1 移动到名为 ns1 的网络命名空间配置命名空间 veth1 的ip地址配置命名空间 路由规则配置命名空间 NAT 规则获取容器的命名空间 如果网络命名空间和宿主机的 IP 地址不在同一网段,它们之间仍然可以通过配置适当的…