MySQL数据库:SQL语言入门 【2】(学习笔记)

news2024/11/17 13:27:42

目录

 2,DML —— 数据操作语言(Data Manipulation Language)

(1)insert   增加 数据

(2)delete  删除 数据       truncate  删除表和数据,再创建一个新表

(3)update  修改 数据

3,DDL —— 数据定义语言(Data Definition Language)

(1)create  创建 数据库对象

(2)drop  删除 数据库对象      

(3)alter  修改 数据库对象

----- 修改表的结构:----- 增加一列:

----- 增加一列(放在最前面)

----- 增加一列(放在sex列的后面)

----- 删除一列:

----- 修改一列:

(4)字段类型

#1——整数类型  int

#2——浮点型   double(m,n)【m--一共的位数;n---小数点后的位数】

#3——字符串型   varchar(20)【对应Java的String型】

#4——时间日期   date/datetime 【时间】

(5)认识数据库表

 (6)约束

#1——约束的使用场合

#2——约束的种类(7)

#3——根据DDL建表语句里约束代码的位置,可以分为【约束从作用上可以分为两类:】

列级约束:

表级约束:

#4——使用约束

(1)6种约束使用展示

(2)创建数据库表

(3)创建表后,添加外键约束   

4,DCL —— 数据控制语言(Data Control Language)

(1)grant  授予用户某种权限

(2)revoke  回收授予的某种权限


 2,DML —— 数据操作语言(Data Manipulation Language)

           主要用于对数据库中的数据进行增加、修改和删除的操作。

(1)insert   增加 数据

insert into 表名(字段名,,,字段名)values(值,,,值) 

insert into 表名 values(值,,,值)

  • 一次添加1条:insert into 表 values(值,值,值)
  • 一次添加n条:insert into 表 values(值,值,值),(值,值,值),(值,值,值)

------ 在t_student数据库表中插入数据

insert into t_student values (1,'张三','男',18,'2022-5-8','软件1班','123@126.com');
insert into t_student values (10010010,'张三','男',18,'2022-5-8','软件1班','123@126.com');
insert into t_student values (2,'张三','男',18,'2022.5.8','软件1班','123@126.com');
insert into t_student values (2,"张三",'男',18,'2022.5.8','软件1班','123@126.com');
insert into t_student values (7,"张三",'男',18,now(),'软件1班','123@126.com');
insert into t_student values (9,"易烊千玺",'男',18,now(),'软件1班','123@126.com');
insert into t_student (sno,sname,enterdate) values (10,'李四','2023-7-5');

(2)delete  删除 数据       truncate  删除表和数据,再创建一个新表

delete from 表名 where 条件 and/or 条件

delete from t_student 【慎用】

delete from t_student where sno = 2;
truncate table t_student;
  • delete 和 truncate 的区别
  1. delete为数据操作语言DML;truncate为数据定义语言DDL。
  2. delete操作是将表中所有记录一条一条删除直到删除完;truncate操作则是保留了表的结构,重新创建了这个表,所有的状态都相当于新表。因此,truncate操作的效率更高。
  3. delete操作可以回滚;truncate操作会导致隐式提交,因此不能回滚(在第十章中会讲解事务的提交和回滚)。
  4. delete操作删除表中记录后,再次向表中添加新记录时,对于设置有自增约束字段的值会从删除前表中该字段的最大值加1开始自增;truncate操作则会重新从1开始自增。 
  5. delete操作执行成功后会返回已删除的行数(如删除4行记录,则会显示“Affected rows:4”);截断操作不会返回已删除的行量,结果通常是“Affected rows:0”。

  •  删除数据的三种方式 以及之间的区别
  1. delete  from 表  === 只删除数据,保留表    ;可以回滚   ; 添加数据时,下标继续累加。【DML数据操作语言】
  2. truncate table 表 === 先把表以及表里的数据都删掉。然后再创建一个新表  ; 不能回滚  ;添加数据时,下标从新开始。【DDL数据定义语言】
  3. drop table 表 ===删除表以及表里的数据  ;【DDL数据定义语言】

(3)update  修改 数据

update 表名 set  字段=值,字段=值  where 条件 and/or 条件
update 表名 set  字段=值,字段=值 【慎用】

-----修改表中数据

update t_student set sex = '女' ;
update t_student set sex = '男' where sno = 10 ;
UPDATE T_STUDENT SET AGE = 21 WHERE SNO = 10;
update t_student set CLASSNAME = 'java01' where sno = 10 ;
update t_student set CLASSNAME = 'JAVA01' where sno = 9 ;
update t_student set age = 29 where classname = 'java01';

注意事项

  • 关键字,表名,字段名不区分大小写
  • 默认情况下,内容不区分大小写
  • 删除操作from关键字不可缺少
  • 修改,删除数据别忘记加限制条件 

3,DDL —— 数据定义语言(Data Definition Language)

          主要用针对是数据库对象(数据库、表、索引、视图、触发器、存储过程、函数)进行

建、修改和删除操作。

(1)create  创建 数据库对象

create  table '表名'(

      '字段名'  类型(长度)约束  注释,

      '字段名'  类型(长度)约束  注释,

      '字段名'  类型(长度)约束  注释

);

 创建表的时候,同时添加多条数据:
            create table t_emp
            as
            select e.*,d.dname,d.loc 
            from emp e,dept d where e.deptno=d.deptno

-- 查看表的结构:展示表的字段详细信息
desc t_student; 
-- 查看表中数据:
select * from t_student;
-- 查看建表语句:
show create table t_student;

(2)drop  删除 数据库对象      

drop  table  '表名';

drop table t_student;

(3)alter  修改 数据库对象

alter  table '表名';

----- 修改表的结构:
----- 增加一列:
alter table t_student add score double(5,2) ; -- 5:总位数  2:小数位数 
update t_student set score = 123.5678 where sno = 1 ;
----- 增加一列(放在最前面)
alter table t_student add score double(5,2) first;
----- 增加一列(放在sex列的后面)
alter table t_student add score double(5,2) after sex;
----- 删除一列:
alter table t_student drop score;
----- 修改一列:

-- modify修改是列的类型的定义,但是不会改变列的名字

-- change修改列名和列的类型的定义

alter table t_student modify score float(4,1); -- modify修改是列的类型的定义,但是不会改变列的名字
alter table t_student change score score1 double(5,1); -- change修改列名和列的类型的定义

(4)字段类型

#1——整数类型  int

MySQL支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示
主键自增:不使用序列,通过auto_increment,要求是整数类型 

#2——浮点型   double(m,n)【m--一共的位数;n---小数点后的位数】

需要注意的是与整数类型不一样的是,浮点数类型的宽度不会自动扩充。 score double(4,1)
 score double(4,1)--小数部分为1位,总宽度4位,并且不会自动扩充。 

#3——字符串型   varchar(20)【对应Java的String型】

CHAR 和  VARCHA 类型相似,均用于存于较短的字符串,主要的不同之处在于存储方式。CHAR类型长度固定,VARCHAR类型的长度可变。

因为VARCHAR类型能够根据字符串的实际长度来动态改变所占字节的大小,所以在不能明确该字段具体需要多少字符时推荐使用VARCHAR类型,这样可以大大地节约磁盘空间、提高存储效率。

CHAR和VARCHAR表示的是字符的个数,而不是字节的个数 。

注意事项

  • int  宽度是显示宽度,如果超过,可以自动增大宽度 int底层都是4个字节
  • 时间的方式多样  '1256-12-23'  "1256/12/23"  "1256.12.23"
  • 字符串不区分单引号和双引号
  • 如何写入当前的时间  now() , sysdate() , CURRENT_DATE()
  • char varchar 是字符的个数,不是字节的个数,可以使用binary,varbinary表示定长和不定长的字节个数。
  • 如果不是全字段插入数据的话,需要加入字段的名字
     
#4——时间日期   date/datetime 【时间】

TIMESTEMP类型的数据指定方式与DATETIME基本相同,两者的不同之处在于以下几点:
(1) 数据的取值范围不同,TIMESTEMP类型的取值范围更小。
(2) 如果我们对TIMESTAMP类型的字段没有明确赋值,或是被赋与了NULL值,MySQL会自动将该字段赋值为系统当前的日期与时间。
(3) TIMESTEMP类型还可以使用CURRENT_TIMESTAMP来获取系统当前时间。
(4) TIMESTEMP类型有一个很大的特点,那就是时间是根据时区来显示的。例如,在东八区插入的TIMESTEMP数据为2017-07-11 16:43:25,在东七区显示时,时间部分就变成了15:43:25,在东九区显示时,时间部分就变成了17:43:25。   

(5)认识数据库表

  • 表(Table)是数据库中数据存储最常见和最简单的一种形式,
  • 数据库可以将复杂的数据结构用较为简单的二维表来表示。
  • 二维表是由行和列组成的,分别都包含着数据。如图

  • 每个表都是由若干行和列组成的,在数据库中表中为记录的行被称为记录,表中的列被称为是这些记录的字段。
  • 字段是表里的一列,用于保存每条记录的特定信息。如上表所示的学生信息表中的字段包括“学号”、“姓名”、“性别”和“年龄”。数据表的一列包含了某个特定字段的全部信息。 

 (6)约束

  • 为防止不符合规范的数据存入数据库,在用户对数据进行插入、修改、删除等操作时,
  • MySQL提供了一种机制来检查数据库中的数据是否满足规定的条件,以保证数据库中数据的准确性和一致性,这种机制就是完整性约束。  

完整性----数据的准确性

#1——约束的使用场合

                DDL建表语句里。

#2——约束的种类(7)

#3——根据DDL建表语句里约束代码的位置,可以分为【约束从作用上可以分为两类:
列级约束:
  • 约束代码直接写在  字段名后面
  • 包含在列定义中,直接跟在该列的其它定义之后 ,用空格分隔;不必指定列名;

————非空,唯一,默认值,自增,检查

表级约束:
  • 约束代码脱离字段,单独一行存在
  • 可以约束表中任意一个或多个字段。与列定义相互独立,不包含在列定义中;与定义用‘,’分隔;必须指出要约束的列的名称;

————主键,外键,检查

缩写约束条件约束描述(作用)表级约束/列级约束
PK主键    primary   key约束字段的值可唯一地标识对应的记录

单字段主键的添加:

表级约束   列级约束;

多字段主键的添加:

表级约束

NK非空    not null约束字段的值不能为空

单字段或多个字段非空约束的添加:

列级约束

(非空约束无表级约束)

UK唯一     unique约束字段的值是唯一的

单字段或多个字段唯一约束的添加:

表级约束  列级约束

检查     check限制某个字段的取值范围表级约束  列级约束
默认值     default约束字段的默认值

单字段或多个字段约束的添加:

列级约束

自增    auto_increment约束字段的值自动递增   
外键    foreign   key约束表与表之间的关系

  • 使用主键约束可以快速查找表中的记录。就像人的身份证、学生的学号等等,设置为主键的字段取值不能重复(唯一),也不能为空(非空),否则无法唯一标识一条记录。

  • 设置了非空约束的字段,在插入的数据为NULL时,数据库会提示错误,导致数据无法插入。

  •  一张表中只能有一个自增长字段,并且该字段必须定义了约束(该约束可以是主键约束、唯一约束以及外键约束),如果自增字段没有定义约束,数据库则会提示“Incorrect table definition; there can be only one auto column and it must be defined as a key”错误。
  • 由于自增约束会自动生成唯一的ID,所以自增约束通常会配合主键使用,并且只适用于整数类型。一般情况下,设置为自增约束字段的值会从1开始,每增加一条记录,该字段的值加1

  • 外键约束(FOREIGN KEY,缩写FK)是用来实现数据库表的参照完整性的。
  • 外键约束可以使两张表紧密的结合起来,特别是针对修改或者删除的级联操作时,会保证数据的完整性。
  • 外键是指表中某个字段的值依赖于另一张表中某个字段的值,而被依赖的字段必须具有主键约束或者唯一约束。被依赖的表我们通常称之为父表或者主表,设置外键约束的表称为子表或者从表。
#4——使用约束
(1)6种约束使用展示
create table t_student(
        sno int(6) primary key auto_increment, 
        sname varchar(5) not null, 
        sex char(1) default '男' check(sex='男' || sex='女'),
        age int(3) check(age>=18 and age<=50),
        enterdate date,
        classname varchar(10),
        email varchar(15) unique
);
(2)创建数据库表

    ——constraint   约束关键字

create table t_student(
        sno int(6) auto_increment, 
        sname varchar(5) not null, 
        sex char(1) default '男',
        age int(3),
        enterdate date,
        classname varchar(10),
        email varchar(15),
        constraint pk_stu primary key (sno),  -- pk_stu 主键约束的名字
        constraint ck_stu_sex check (sex = '男' || sex = '女'),
        constraint ck_stu_age check (age >= 18 and age <= 50),
        constraint uq_stu_email unique (email)

—— 在创建表以后添加约束:

-- 创建数据库表:
create table t_student(
        sno int(6), 
        sname varchar(5) not null, 
        sex char(1) default '男',
        age int(3),
        enterdate date,
        classname varchar(10),
        email varchar(15)
);

-- 在创建表以后添加约束:
alter table t_student add constraint pk_stu primary key (sno) ; -- 主键约束
alter table t_student modify sno int(6) auto_increment; -- 修改自增条件
alter table t_student add constraint ck_stu_sex check (sex = '男' || sex = '女');
alter table t_student add constraint ck_stu_age check (age >= 18 and age <= 50);
alter table t_student add constraint uq_stu_email unique (email);
(3)创建表后,添加外键约束   

    ————前者关联后者

alter table emp 
    add CONSTRAINT fk_emp_deptno FOREIGN key (deptno) REFERENCES dept(deptno)

4,DCL —— 数据控制语言(Data Control Language)

          用来授予或回收访问 数据库的权限。

(1)grant  授予用户某种权限

(2)revoke  回收授予的某种权限

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2242187.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“南海明珠”-黄岩岛(民主礁)领海基线WebGIS绘制实战

目录 前言 一、关于岛屿的基点位置 1、领海基点 二、基点坐标的转换 1、最底层的左边转换 2、单个经纬度坐标点转换 3、完整的转换 三、基于天地图进行WebGIS展示 1、领海基点的可视化 2、重要城市距离计算 四、总结 前言 南海明珠黄岩岛&#xff0c;这座位于南海的…

19.UE5道具掉落

2-21 道具掉落&#xff0c;回血、回蓝、升级提升伤害_哔哩哔哩_bilibili 目录 1.道具的创建&#xff0c;道具功能的实现 2.随机掉落 1.道具的创建&#xff0c;道具功能的实现 新建Actor蓝图&#xff0c;并命名为道具总类&#xff0c;添加一个Niagara粒子组件和一个碰撞箱bo…

Cartographer激光雷达slam -20241116

Cartographer Cartographer代码结构 cartographer&#xff1a;负责处理来自雷达、IMU和里程计的数据并基于这些数据进行地图的构建&#xff0c;是cartographer理论的底层实现cartographer_ros&#xff1a;基于ros的通信机制获取传感器的数据并将它们转换成cartographer中定义…

node.js学习笔记-Window下MongoDB数据库安装(二)

一、介绍 MongoDB 是一个基于分布式文件存储的开源数据库系统&#xff0c;在当前的软件开发和数据存储领域中应用广泛&#xff0c;以下是对 MongoDB 的详细介绍&#xff1a; 文档型数据库&#xff1a;MongoDB 以 BSON&#xff08;Binary JSON&#xff09;格式存储数据&#x…

STM32G4的数模转换器(DAC)的应用

目录 概述 1 DAC模块介绍 2 STM32Cube配置参数 2.1 参数配置 2.2 项目架构 3 代码实现 3.1 接口函数 3.2 功能函数 3.3 波形源代码 4 DAC功能测试 4.1 测试方法介绍 4.2 波形测试 概述 本文主要介绍如何使用STM32G4的DAC模块功能&#xff0c;笔者使用STM32Cube工具…

【论文复现】轻松利用自适应特征融合实现去雾

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ 智慧医疗 介绍创新点网络结构特征提取阶段自适应融合阶段图像重建阶段上下文增强模块CEM特征融合模块AFM 结果分析 提示 论文题目&#xff1…

常用在汽车PKE无钥匙进入系统的高度集成SOC芯片:CSM2433

CSM2433是一款集成2.4GHz频段发射器、125KHz接收器和8位RISC&#xff08;精简指令集&#xff09;MCU的SOC芯片&#xff0c;用在汽车PKE无钥匙进入系统里。 什么是汽车PKE无钥匙进入系统&#xff1f; 无钥匙进入系统具有无钥匙进入并且启动的功能&#xff0c;英文名称是PKE&…

《TCP/IP网络编程》学习笔记 | Chapter 11:进程间通信

《TCP/IP网络编程》学习笔记 | Chapter 11&#xff1a;进程间通信 《TCP/IP网络编程》学习笔记 | Chapter 11&#xff1a;进程间通信进程间通信的基本概念通过管道实现进程间通信通过管道进行进程间双向通信 运用进程间通信习题&#xff08;1&#xff09;什么是进程间通信&…

计算机网络各层设备总结归纳(更新ing)

计算机网络按照OSI&#xff08;开放式系统互联&#xff09;模型分为七层&#xff0c;每一层都有其特定的功能和对应的网络设备。以下是各层对应的设备&#xff1a; 1. 物理层&#xff08;Physical Layer) 设备&#xff1a;中继器&#xff08;Repeater&#xff09;、集线器…

在kile 5中一个新工程的创建

这两天博主学习到了在kile5中创建一个工程&#xff0c;当然博主不会忘了小伙伴们的&#xff0c;这就和你们分享。 本次创建以STM32F103C8为例 创建过程&#xff1a; 1首先创建文件 名字随意&#xff0c;但也不要太随意&#xff0c;因为是外国软件&#xff0c;所以多少对中文…

AI写作(十)发展趋势与展望(10/10)

一、AI 写作的崛起之势 在当今科技飞速发展的时代&#xff0c;AI 写作如同一颗耀眼的新星&#xff0c;迅速崛起并在多个领域展现出强大的力量。 随着人工智能技术的不断进步&#xff0c;AI 写作在内容创作领域发挥着越来越重要的作用。据统计&#xff0c;目前已有众多企业开始…

Javascript垃圾回收机制-运行机制(大厂内部培训版本)

前言 计算机基本组成&#xff1a; 我们编写的软件首先读取到内存&#xff0c;用于提供给 CPU 进行运算处理。 内存的读取和释放&#xff0c;决定了程序性能。 冯诺依曼结构 解释和编译 这两个概念怎么理解呢。 编译相当于事先已经完成了可以直接用。好比去饭店吃饭点完上…

大数据技术之Hive:还是SQL好用

虽说 MapReduce 简化了大数据编程的难度&#xff0c;但是如果每来一个需求都要写一个 MapReduce 代码&#xff0c;那岂不是太麻烦了。尤其是在全民“CRM”的2000年代&#xff0c;对于像数据分析师已经习惯使用SQL进行分析和统计的工程师&#xff0c;让他们去 MapReduce 编程还是…

使用 Grafana api 查询 Datasource 数据

一、使用grafana 的api 接口 官方API 二、生成Api key 点击 Administration -》Users and accss -》Service accounts 进入页面 点击Add service account 创建 service account 点击Add service account token 点击 Generate token , 就可以生成 api key 了 三、进入grafana…

OceanBase 闪回查询

前言 在OB中&#xff0c;drop表可以通过 回收站 或者 以往的备份恢复来还原单表。当delete数据时&#xff0c;由于delete操作的对象不会进入回收站&#xff0c;此时需要通过闪回查询功能查看delete的数据&#xff0c;以便后续恢复 本次实验版本为 OceanBase 4.2.1.8&#xff0…

vue2 动态路由的实现

概述 一般情况下&#xff0c;路由都是前端约定好的&#xff0c;但是每当项目发布上线&#xff0c;或者客户需求新的页面的时候&#xff0c;都需要做出路由改变。这样运维就可以现场支持&#xff0c;方便做出可操作的中户中台&#xff0c;来管理我们的中心项目登录及权限&#x…

华为云前台展示公网访问需要购买EIP,EIP流量走向

华为云前台网络&#xff08;VPC,安全组&#xff0c;EIP&#xff09; 1.EIP网段是从哪里划分的&#xff1f; 管理员在后台Service_OM已设置 Service_OM-网络资源-外部网络-创建外部网络基本信息&#xff1a;配置参数&#xff1a;*名称 public*网络类型 LOCAL 不带标签 类似开…

树状数组+概率论,ABC380G - Another Shuffle Window

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 G - Another Shuffle Window 二、解题报告 1、思路分析 不难用树状数组计…

LSTM(长短期记忆网络)详解

1️⃣ LSTM介绍 标准的RNN存在梯度消失和梯度爆炸问题&#xff0c;无法捕捉长期依赖关系。那么如何理解这个长期依赖关系呢&#xff1f; 例如&#xff0c;有一个语言模型基于先前的词来预测下一个词&#xff0c;我们有一句话 “the clouds are in the sky”&#xff0c;基于&…

麒麟nginx配置

一、配置负载均衡 配置麒麟的yum源 vim /etc/yum.repos.d/kylin_aarch64.repo Copy 删除原来内容&#xff0c;写入如下yum源 [ks10-adv-os] name Kylin Linux Advanced Server 10 - Os baseurl http://update.cs2c.com.cn:8080/NS/V10/V10SP2/os/adv/lic/base/aarch64/ …