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

相关语法:

-- 查询所有数据库

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进行总结

相关推荐
摇滚侠1 分钟前
Java 基础面试题 真正的 offer 偏方 Java 基础 Java 高级
java·开发语言
蚰蜒螟5 分钟前
深入剖析 OpenJDK 17 解释器中的安全点(Safepoint)进入与退出机制
java·开发语言·安全
Achou.Wang5 分钟前
Selecting channels:Go 并发里的“多路开关”
服务器·数据库·golang
Generalzy9 分钟前
为什么 Go 的注释,能控制编译器?
java·python·golang
Jul1en_9 分钟前
【Spring Cloud】Spring Cloud Config详解
后端·spring·spring cloud
Wy_编程12 分钟前
go语言面向对象和异常处理
开发语言·后端·golang
Galsk14 分钟前
Linux零拷贝
java·linux·服务器·面试
m0_6091604916 分钟前
Go语言Beego框架如何用_Go语言Beego框架入门教程【高效】
jvm·数据库·python
不知名的忻18 分钟前
归并排序(Java)
java·算法·排序算法
逆境不可逃1 小时前
一篇速通互联网架构的不断升级过程:从单机到云原生
java·elasticsearch·搜索引擎·云原生·架构