当前位置: 首页 > article >正文

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

一、语句基础

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(数据库)

相关语法:

-- 查询所有数据库

show databases;

-- 查询当前数据库

select database();

-- 使用/切换数据库

use 数据库名;

use XXX;

-- 创建数据库

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

create database if not exists itheima03;

-- 删除数据库

drop database if exists XXX;

2. DDL(表操作)

创建表的语法:

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

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

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

语法示例:

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 '员工表';

修改表结构:

-- 查询当前数据库的所有表
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] 表名;

语法示例:


-- 表结构修改: 添加字段 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:

-- 指定字段添加数据
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, ...);

语法示例:

-- 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:

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

语法示例:

-- 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:

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

语法示例:

-- 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.kler.cn/a/401994.html

相关文章:

  • 植物明星大乱斗15
  • web应用安全和信息泄露预防
  • 网络安全之国际主流网络安全架构模型
  • ASP.NET Core Webapi 返回数据的三种方式
  • 系统思考—跳出症状看全局
  • ScubaGear:用于评估 Microsoft 365 配置是否存在安全漏洞的开源工具
  • CH03_反射
  • 基于信号量与共享内存实现客户与服务器进程通信
  • Efficient One-stage Video Object Detection byExploiting Temporal Consistency
  • 数据结构——AVL树
  • python: generator IDAL and DAL using sql server 2019
  • 时间类的实现
  • 【Flutter 问题系列第 84 篇】如何清除指定网络图片的缓存
  • sql数据库-权限控制-DCL
  • 第二十四章 TCP 客户端 服务器通信 - 当前 TCP 设备
  • 大公司如何实现打印机共享的?如何对打印机进行管控或者工号登录后进行打印?异地打印机共享的如何实现可以帮助用户在不同地理位置使用同一台打印机完成打印任务?
  • 【LeetCode面试150】——49字母异位分词
  • PHP进阶-CentOS7部署LNMP服务架构的项目
  • 【苍穹外卖】学习日志-day1
  • 网络安全常见练习靶场
  • 使用ajax-hook修改http请求响应数据,篡改后再返回给正常的程序
  • 【Docker】快速部署 Pikachu:一个包含常见 Web 安全漏洞的渗透测试练习靶场
  • C++系列之继承
  • 数学分组求偶数和
  • Ubuntu 20.04 默认的软件包源中可能不包含 gcc-11 和 g++-11
  • SOC Boot学习(二)——JTAG Debug介绍