首页 > 数据库 >MySQL数据库定义语言和操作语言

MySQL数据库定义语言和操作语言

时间:2024-06-09 22:02:19浏览次数:26  
标签:示例 -- 数据库 定义语言 id MySQL table alter select

目录

前言

一、数据定义语言(DDL)

1.1 create

1.1.1创建数据库

1.1.2 创建表

1.2 alter

1. 2.1修改数据库

1.2.2修改表

1.3 drop

1.3.1删除数据库

1.3. 2删除表

二、数据操作语言(DML)

2.1insert

2.2delete

2.3update

2.4select

三、总结


前言

        MySQL数据库使用SQL(Structured Query Language)作为其查询和操作语言。在MySQL中,SQL主要分为两大类:数据定义语言(DDL)和数据操作语言(DML)

一、数据定义语言(DDL)

数据定义语言有create、alter、drop。

  1. 1.1 create

 1.1.1创建数据库

语法格式:

create {database} [if not exists] 数据库名 [选项];  


说明:

  •  []中内容可选项
  • [if not exists] 子句是可选的,如果指定,当数据库已经存在时,数据库管理系统将不会报错,而是简单地忽略该命令。
  • [选项]指的是一组可选的参数,这些参数可以用来定义数据库或模式的特定属性 
--示例
--创建test数据库
create database test;

--创建course数据库(如果 course 数据库不存在,那么它将被创建;如果已经存在,则不做任何操作,避免报错)
create database if not exists course;

--创建数据库schoolInfo(如果 schoolInfo 数据库不存在,那么它将被创建;指定数据库默认的字符集为 utf8;指定默认的排序规则为 utf8_bin)
create database if not exists 'schoolInfo' default character set utf8 collate utf8_bin;

 1.1.2 创建表

语法:

create table 表名(

          字段名1  数据类型  [约束条件]

          字段名2  数据类型  [约束条件]

           ······

           [其它约束条件],

           [其它约束条件],

)(其它选项);


  • 数据类型:如char、varchar、int、date等
  • 约束条件:对字段进行约束,有主键约束(Primary Key)、外键约束(Foreign Key)、非空约束(Not Null)、默认约束(Default)、唯一约束(Unique)等
  • 其它选项:如存储引擎、字符集、索引等

例:创建一个teacherInfo表,表结构如下:

teacherInfo
字段名字段描述数据类型主键外键非空唯一自增
id编号int(4)
num教工号int(10)
name姓名varchar(20)
sex性别varchar(4)
birthday出生日期datetime
address家庭住址varcher(50)
CREATE TABLE teacherInfo(
  `id` INT(4) NOT NULL UNIQUE AUTO_INCREMENT COMMENT '编号', -- 整数类型的字段,长度为4位数字,不允许为空(NOT NULL),值是唯一的(UNIQUE),自动递增(AUTO_INCREMENT),用于标识每条记录的唯一编号。
  `num` INT(10) NOT NULL UNIQUE COMMENT '', -- 整数类型的字段,长度为10位数字,不允许为空,值是唯一的,可能用于存储教工号唯一标识。
  `name` VARCHAR(20) COLLATE utf8_bin NOT NULL COMMENT '姓名', -- 最大长度为20字符的字符串字段,使用 utf8_bin 排序规则,不允许为空,用于存储教师的姓名。
  `sex` VARCHAR(4) COLLATE utf8_bin NOT NULL COMMENT '性别', -- 最大长度为4字符的字符串字段,使用 utf8_bin 排序规则,不允许为空,用于存储性别信息。
  `birthday` DATETIME COMMENT '出生日期', -- 日期时间类型的字段,用于存储教师的出生日期。
  `address` VARCHAR(50) COLLATE utf8_bin COMMENT '地址', -- 最大长度为50字符的字符串字段,使用 utf8_bin 排序规则,用于存储教师的家庭住址。
  PRIMARY KEY(`id`) -- 将 `id` 字段设置为主键,确保每条记录的 `id` 值都是唯一的。
) ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_bin; -- 使用 InnoDB 存储引擎,设置默认字符集为 utf8 和默认排序规则为 utf8_bin。

1.2 alter

1. 2.1修改数据库

语法格式:

alter {database} [database_name]

        [default] character set [=] character_set_name |

        [default] collate [=] collation_name;


  1. 说明:
  • database_name:要修改的数据库的名称。
  • character set:指定数据库默认字符集。
  • collate:指定数据库默认排序规则。
--示例
--修改数据库schoolInfo的字符集为utf8mb4
alter database schoolInfo default character set utf8mb4

1.2.2修改表

          1. 添加字段

           alter table  表名  add (字段  字段类型) ;           

--示例
--在teacherInfo表中增加名为wages的字段,数据类型为FLOAT
alter table `teacherInfo` add column `wages` float;

--在student表中增加名为phone的字段
alter table `student` add column `phone` float;

          2. 修改字段名

         alter table 表名  change 旧字段名 新字段名 新数据类型;

--示例
--将teacherInfo表中的num字段改名为t_id
alter table `teacherInfo` change `num` `t_id` int(10) not null;

--将Grade表中的grade字段改名为score
alter table `Grade` change `grade` `score` varchar(4) ;

          3.删除字段

           alter table 表名 drop (字段);           

--示例
--将teacherInfo表的address字段删除
alter table `teacherInfo` drop column `address`;


--将student表的address字段删除
alter table `Student` drop column `address`;

          4.删除外键约束

            alter table ‘表名’ drop foreign 表名_fk;

--示例
--删除worker表的外键约束
alter table `worker` drop foreign key worker_fk;

--删除student表的外键约束
alter table `GradeInfo` drop foreign key grade_fk;

          5.更改表储存引擎类型

           alter table ‘表名’ engine = ‘引擎类型’;

--示例
--将teacherInfo Info表的存储引擎更改为MyISAM类型
alter table `teacherInfo Info` engine = MyISAM;

--将grade表的存储引擎更改为MyISAM类型
alter table `Grade` engine = MyISAM;

          6.更改表名

            alter table ‘旧表名’ rename ‘新表名’;        

--示例
--将teacherInfo表改名为teacherInfo Info
alter table `teacherInfo` rename `teacherInfo Info`;

--将grade表改名为gradeInfo
alter table `Grade` rename `GradeInfo`;

          7.改变字段位置

            alter table modify column `字段` datetime after `字段·;

--示例
--将birthday 字段的位置改到sex字段的后面
alter table teacherInfo modify column `birthday` datetime after `name`;


--将s_num字段的位置改到course字段的后面
alter table  modify column `s_num` datetime after `course`;

          8.更改字段的数据类型

            alter table `表名` modify column `字段` 数据类型;

--示例
--将grade表的course字段的数据类型改为VARCHAR(20)
alter table `Grade` modify column `course` varchar(20) not null;

--将teacherInfo表的name字段的数据类型改为VARCHAR(30)
alter table `teacherInfo` modify column `name` varchar(30) not null;

1.3 drop

 1.3.1删除数据库

语法:

drop {dadtabase} [if exists] database_name;


说明:
  • [if exists]:这是一个可选的子句,用来检查数据库是否存在。如果指定了IF EXISTS,当数据库不存在时,数据库管理系统不会报错,而是简单地忽略该命令
--示例
--删除名为schoolinfo的数据库,如果它存在的话:
drop database if exists schoolinfo;

1.3. 2删除表

                 drop table  [if exists] ’表名’;

--示例
--删除student表
drop table `student`;

--删除department表(表中包含外键worker_fk,则先删除外键)
alter table `worker` drop foreign key worker_fk;
drop table `department`;

二、数据操作语言(DML)

数据操作语言包括 insert、delete、update、select,即增、删、改、查

2.1insert

             1. 不指定具体的字段,插入数据:insert into 表名 values(`值`,`值`);

--示例
--不指定具体的字段,像food表中插入数据
insert into food values (1,'QQ饼干', 'QQ饼干厂', 2.5, '2008',3,'北京') ;

             2. 依次指定表的字段,插入数据:

             Insert into 表名(字段,字段)  values(`值`,`值`);

--示例
--依次指定food表的字段插入'MN牛奶', 'MN牛奶厂', 3.5, '2009', 1, '河北'
insert into food(foodid,Name,Company, Price, Product_time, Validity_time, address)
values (2,'MN牛奶', 'MN牛奶厂', 3.5, '2009', 1, '河北');

              3.同时插入多条记录,插入数据

--示例
--向food表中同时插入多条数据
insert into food values(3,‘e果冻’, 'ee果冻厂', 1.5, '2007', 2, '北京'),
                  (4,'ff咖啡', 'ff咖啡厂', 20, '2002', 5, '天津'),
                  (5,'gg奶糖', 'gg奶糖', 14, '2003', 3, '广东');

2.2delete

              1. 删除表中数据:delete from 表名 where 字段名=’字段值’;

--示例
--删除teacher表中教工号(num)为1002的记录
delete from teacher where num = 1002;

--删除Food表中厂址为北京的食品的记录
delete from Food where address =’北京’;

2.3update

             1.修改数据:update 表名set 字段= ’值’  where 字段 =’值’;

--示例
--将性别(sex)为“男”的记录的家庭住址(address)都变为“北京市朝阳区”
update teacher 
set address = '北京市朝阳区'
where sex = '男';

--更新教工号为1003的记录,将生日(birthday)改为“1982-11-08”
update teacher 
set birthday = '1982-11-08'
where num = 1003;

2.4select

             1. 检索所有列:select *from 表名;

--示例
--查询employee表的所有记录。SQL代码如下:
select * from employee;

             2.检索指定列:select 字段名 from 表名;

--示例
--从department表查询部门号(d_id)、部门名称(d_name)和部门职能(function)
select d_id, d_name, function from department;

             3. 检索满足条件的行:selest *from 表名 where 字段=’值’;

--示例
--从employee表中查询年龄在25到30之间的员工的信息
--方法一
select * from employee
where age between 25 and 30;
--方法二
select * from employee
where age >= 25 and age <= 30;

--查询employee表的第四条到第五条记录
select id, name, sex, age, d_id, salary, address 
from employee limit 3, 2;

             4. 使用排序:select * from 表名 order by 字段名 desc; -- 降序排列

--示例
--查询employee表,按照工资从高到低的顺序排列
select * from employee
order by salary desc ;

--查询score表,将计算机成绩按从高到低进行排序
select grade from score
where C_name = '计算机' order by grade desc;

             5.使用函数: 

                          Select avg(字段名) from 表名; --- 计算平均值

--示例
--计算score表中,每个考试科目的平均成绩
select C_name,avg(grade) from score
group by C_name;

                          Select sum(字段名) from 表名; --- 计算总和

--示例
--计算employee表中,每个部门的总工资。先按部门号进行分组,然后用SUM()函数来求和。
select d_id, sum(salary) from employee
group by d_id;

--计算每个学生的总成绩(需显示学生姓名)。代码如下:
select name,sum(grade) from
student left join score on student.num = score.Stu_id
group by num;

             6.模糊检索:select * from 表名 where 字段名 like '值%';

--示例
--查询姓张或者姓王的同学的姓名、院系、考试科目和成绩
select name,department,C_name,grade from
student left join score on student.num = score.Stu_id
where name like '张%' or name like '王%';

--查询都是湖南的同学的姓名、年龄、院系、考试科目和成绩
select name,(year(now())-birth)age,department,C_name,grade from 
student left join score on student.num = score.Stu_id
where address like '湖南%';

--查询家是北京市员工的姓名、年龄、家庭住址。这里使用LIKE关键字:
select name, age, address from employee
where address like '北京%';

             7.使用别名:select (字段名) as 别名 from 表名;

--示例
-- 查询每个部门有多少员工。先按部门号进行分组,然后用COUNT()函数来计算每组的人数, 给COUNT(id)取名为sum. 
select d_id, count(id) as sum 
from employee
group by d_id;

--student表中查询每个院系有多少人,为统计人数列取别名sum_of_department。
select department,count(department) as sum_of_department
from student
group by department;

             8.使用UNION合并查询结果

--示例
--从department表和employee表中查询出部门号,然后使用UNION合并查询结果
select d_id from employee
union
select d_id from department;

--从student表和score表中查询出学生的学号,然后合并查询结果
Select num from student
Union
Select Stu_id from score;

             9.通过左连接查询

--示例
--用左连接的方式查询department表和employee表。
使用LEFT JOIN ON来实现左连接
select department.d_id, d_name, function, department.address, id, name, age, sex,  salary, employee.address
from department left join employee on employee.d_id = department.d_id;

--用连接查询的方式查询所有学生的信息和考试信息
select num,name,sex,student.birth,department,address,id,Stu_id,C_name,grade
from student left join score on student.num = score.Stu_id;

             10.使用关键字

--示例
--使用IN关键字查询计算机系和英语系的学生的信息
select * from student
where num = any(
select Stu_id from score
where department in('计算机系','英语系')
);

--使用OR关键字查询计算机系和英语系的学生的信息
select * from student
where num in(
select Stu_id from score
where department = '计算机系' or department = '英语系'
);

--使用BETWEENAND关键字从employee表中查询年龄在25到30之间的员工的信息
select * from employee
where age between 25 and 30;

--使用AND关键字和比较运算符从employee表中查询年龄在25到30之间的员工的信息
select * from employee
where age >= 25 and age <= 30;

三、总结

  • create具有创建数据库和数据表的功能
  • alter具有添加字段、删除字段、修改字段类、删除外键约束、更改表储存引擎类型、更改表名、改变字段位置、更改字段的数据类型的功能
  • drop具有删除表、删除数据库的功能
  •  insert具有进行不指定具体的字段插入数据、依次指定表的字段插入数据的作用
  • delete具有删除表中数据的作用
  • update具有修改数据的功能
  •  select具有检索所有列、检索指定列、检索满足条件的行、进行模糊检索的作用,查询过程时可对查询出来的结果进行排序,可通过使用UNION合并查询结果,通过左连接查询,使用关键字查询,使用函数查询最大值、平均值等。

标签:示例,--,数据库,定义语言,id,MySQL,table,alter,select
From: https://blog.csdn.net/Ljj04300355/article/details/139559036

相关文章

  • jmeter性能优化之mysql监控sql慢查询语句分析
    接上次博客:基础配置多用户登录并退出jmx文件:百度网盘提取码:0000一、练习jmeter脚本检测mysql慢查询随意找一个脚本(多用户登录并退出),并发数设置300、500后分别查看mysql监控平台启动后查看,主要查看mysql连接情况下图查看:MaxUsedConnections最大176,分析查看:设置......
  • jmeter性能优化之mysql配置
    一、连接数据库和grafana准备:连接好数据库和启动grafana并导入mysql模板大批量注册、登录、下单等,还有过节像618,双11和数据库交互非常庞大,都会存在数据库的某一张表里面,当用户在登录或者查询某一个界面时,量少的话体现不出来,量很大的时候一定会有卡的现象,性能响应一般是2......
  • Redis-11-Redis与Mysql的数据一致性
    1.是什么数据一致性呢,讲的就是缓存中的数据和db中的数据是否能一致。2.为什么先看我这篇文章,了解下缓存策略:Redis-6-三种缓存读写策略在文章中,介绍了并发场景下的一致性问题,我们已经确定了一个基本思路:先更新db,再删除缓存。这个方案,奠定了我们在读写操作时的基本思路。2.1......
  • 硬核!使用jsp+servlet+mysql从0搭建图书管理系统(一)
    一、写在开头1.本项目使用IDLE搭建,使用的数据库是mysql8.02.项目前端代码样式可以自行编写,本文注重的是servlet的逻辑处理3.项目使用的数据库和表如下1)bookinfo表2)borrwos(借阅表)3)managers(管理员表)4)readers(读者表)需要表的小伙伴可以根据对应字段自行创建二、......
  • 基于微信小程序的网上鲜花店管理系统的设计与实现(期末大作业)+附源码+数据库
     摘要:本文旨在介绍设计与实现一款鲜花店小程序的过程。首先,分析目标用户群体的需求,确定了主要功能模块包括商品展示、购物车、订单管理等。接着,设计简洁直观的用户界面,采用了吸引人的图片效果,提升了用户体验。在功能模块方面,我们实现了用户注册、登录、商品浏览、下单购买等核......
  • sqli-labs 靶场闯关基础准备、学习步骤、SQL注入类型,常用基本函数、获取数据库元数据
    Sqli-labs的主要作用是帮助用户学习如何识别和利用不同类型的SQL注入漏洞,并了解如何修复和防范这些漏洞。它提供了多个不同的漏洞场景,每个场景都代表了一个特定类型的SQL注入漏洞。用户可以通过攻击这些场景来学习和实践漏洞利用技术,以及相应的修复和防御措施。Sqli-labs......
  • 2024三款最佳的MySQL SQL工具,DBA必备神器
    随着数据库管理需求的不断提升,DBA需要强大的工具来优化查询、管理数据库和提高工作效率。以下是2024年三款最佳的MySQLSQL工具,推荐给所有DBA。1.SQLynxSQLynx 是一款功能强大的MySQL管理工具,以其高效的图形用户界面和丰富的功能深受DBA喜爱。优点:直观的GUI......
  • redis做为缓存,mysql的数据如何与redis进行同步呢?
    让我们一步步来实现如何让MySQL数据库的数据和Redis缓存保持同步。想象一下,MySQL是一个大仓库,存放着所有重要的货物(数据),而Redis则像是一个快速取货窗口,让你能更快拿到常用的东西。为了让两者保持一致,我们需要搭建一座桥梁,让仓库里的变动能及时反映到取货窗口。第一步:理解同步......
  • Could not find artifact com.mysql:mysql-connector-j:pom:8.0.36 in central (https
    遇到修改依赖项的MySQL版本结果说找不到依赖项解决方法确保MySQL版本正确降低依赖项的MySQL版本,修改后更新即可以我的MySQL版本举例,可以降低MySQL版本到依赖项支持的版本<dependency><groupId>com.mysql</groupId><artifactId>m......
  • 安装MySQL数据库时遇到sample Databases,select databases that should be created:有
    SakilaDatabase:Sakila是一个经典的示例数据库,设计用于模拟电影租赁服务的业务流程。Sakila数据库包含电影、顾客、租赁、支付等表,可以用于练习SQL查询和了解数据库的关系模型。如果你想练习处理类似于电影租赁等实际业务场景的查询和数据操作,选择创建Sakila数据库是一......