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

相关推荐
Oneforlove_twoforjob8 分钟前
【Java基础面试题033】Java泛型的作用是什么?
java·开发语言
码农老起13 分钟前
企业如何通过TDSQL实现高效数据库迁移与性能优化
数据库·性能优化
向宇it25 分钟前
【从零开始入门unity游戏开发之——C#篇24】C#面向对象继承——万物之父(object)、装箱和拆箱、sealed 密封类
java·开发语言·unity·c#·游戏引擎
小蜗牛慢慢爬行27 分钟前
Hibernate、JPA、Spring DATA JPA、Hibernate 代理和架构
java·架构·hibernate
夏木~1 小时前
Oracle 中什么情况下 可以使用 EXISTS 替代 IN 提高查询效率
数据库·oracle
W21551 小时前
Liunx下MySQL:表的约束
数据库·mysql
星河梦瑾1 小时前
SpringBoot相关漏洞学习资料
java·经验分享·spring boot·安全
黄名富1 小时前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua
love静思冥想1 小时前
JMeter 使用详解
java·jmeter
言、雲1 小时前
从tryLock()源码来出发,解析Redisson的重试机制和看门狗机制
java·开发语言·数据库