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

数据库-基本概述 和 SQL 语言

标题目录

  • 基本概述
    • DB和DBMS
    • 关系数据库
    • 库与表的概念
    • 数据库在项目中的角色
    • 如何操作数据库
  • SQL 语言
    • SQL 分类
    • DDL 语言
      • 数据库操作
        • 创建数据库
        • 查看数据库
        • 删除数据库
        • 切换数据库
      • 表的操作
        • 创建表
        • 查看表
        • 修改表名
        • 删除表
        • 修改表结构
    • DML 语言
      • 插入数据
      • 修改数据
      • 删除数据

基本概述

DB和DBMS

数据库(DataBase):按照数据结构来组织、存储和管理数据的仓库
数据库管理系统(DataBaseManagementSystem):管理数据库的软件

关系数据库

  • 关系:描述两个元素间的关联或对应关系
  • 使用关系模型把数组组织到二维数据表(Table)中
  • 产品化:
    • Oracle
    • DB2
    • Sybase
    • SQL Server
    • MySQL
    • MariaDB

库与表的概念

  • 是数据的集合,一组具有相同属性的数据保存在一张表上
  • 表的行(Row)是横排数据,也被称作记录(Record)
  • 表的列(Column)是纵列数据,也被称作字段(Field)
  • 表和表之间存在关联关系
    在这里插入图片描述

  • 是表的集合
  • 不同的项目都可以创建一个库,用来保存该项目中所有的表
    在这里插入图片描述
  • MariaDB 中可以管理多个不同的数据库

数据库在项目中的角色

DBMS 安装后是以服务端的角色运行的,因此我们操作数据库是以客户端的身份与数据库进行连接,并进行相关操作

数据库客户端:

  • 命令行
  • 图形化界面
  • JDBC:java数据库连接
  • 集成开发环境(IDEA):也是图形化界面

如何操作数据库

使用:SQL-结构化查询语言
优点:

  • SQL是有标准的,执行的是SQL92标准
  • 所有的数据库都支持该指标,因此SQL是数据库界的 " 普通话 "
  • SQL92标准中不是所有的操作都标准化了,因此有些操作不同数据库定义语法不同,被称为 " 方言 "

SQL 语言

SQL是在关系数据库上执行数据操作、检索及维护所使用的标准语言,可以用来查询数据,操纵数据,定义数据,控制数据

SQL 分类

  • 数据定义语言(DDL):Data Definition Language
  • 数据操纵语言(DML):Data Manipulation Language
  • 数据查询语言(DQL):Data Query Language
  • 事务控制语言(TCL):Transaction Control Language
  • 数据控制语言(DCL):Data Control Language

DDL 语言

  • 数据定义语言(DDL):Data Definition Language
  • 用于建立,修改,删除数据库对象
  • 包括:
    • CREATE:创建表或其他对象的结构
    • ALTER:修改表或其他对象的结构
    • DROP:删除表或其他对象的结构
    • TRUNCATE:删除表数据,保留表结构

数据库操作

创建数据库
  • CREATE DATABASE 数据库名 [CHARSET = 字符集]

创建名为mydb的数据库

CREATE DATABASE mydb

创建数据库时指定字符集

CREATE DATABASE mydb1 CHARSET=utf8;
CREATE DATABASE mydb2 CHARSET=gbk;

书写习惯:建议关键字全大写,非关键字全小写

查看数据库

查看已经创建的数据库

  • SHOW DATABASES

查看创建数据库的信息

  • SHOW CREATE DATABASE 数据库名

查看创建数据库 mydb 的信息:

SHOW CREATE DATABASE mydb 
删除数据库
  • DROP DATABASE 数据库名
    删除数据库 mydb:
DROP DATABASE mydb

注意:删除数据库是不可逆的操作

切换数据库

在CBMS下会为不同的项目创建不同的数据库,只有切换到某个数据库上,进行的相关操作才是针对该数据库的操作

  • USE 数据库名

切换数据库 mydb1,mydb2:

USE mydb1;
USE mydb2;

表的操作

创建表
  • CREATE TABLE 表名(
    字段名 数据类型 [DEFAULT 默认值] [约束]
    )

创建一张表用来保存用户信息

CREATE TABLE user(id INT,username VARCHAR(32),	-- VHARCHAR在数据库中是字符串类型,圆括号用来指定长度,单位是字符password VARCHAR(32),age INT(3)				-- INT为整数类型,长度是数字的位数
)
查看表

查看表的结构

  • DESC 表名

查看user表的结构:

DESC user

查看创建表的信息

  • SHOW CREATE TABLE 表名

查看user表的信息:

SHOW CREATE TABLE user

查看已创建的表

  • SHOW TABLES
修改表名
  • RENAME TABLE 旧表名 TO 新表名

将user表重命名为userinfo:

RENAME TABLE user TO userinfo
删除表
  • DROP TABLE 表名

删除userinfo表:

DROP TABLE userinfo
修改表结构

先准备一张表

CREATE TABLE hero(name VARCHAR(32),age INT
)
  1. 在表的结尾添加新的字段
    • ALTER TABLE 表名 ADD 字段名 类型 [DEFAULT 默认值] [约束]
      向表hero添加新字段gender,类型是字符串,长度占十个字符:
ALTER TABLE hero ADD gender VARCHAR(10)
  1. 在表最开始添加新字段
    • ALTER TABLE 表名 ADD 字段名 类型 [DEFAULT 默认值] [约束] FIRST
      在hero表最开始添加id字段:
ALTER TABLE hero ADD id INT FIRST
  1. 在表中插入新的字段
    • ALTER TABLE 表名 ADD 字段名 类型 [DEFAULT 默认值] [约束] AFTER 字段
      在hero表name字段之后添加新字段pwd:
ALTER TABLE hero ADD pwd VARCHAR(32) AFTER name
  1. 删除字段
    • ALTER TABLE 表名 DROP 字段
      删除hero表中的pwd字段
ALTER TABLE hero DROP pwd
  1. 修改字段
    • ALTER TABLE 表名 CHANGE 旧字段 新字段 类型 [约束]

将hero表中age字段长度改为5:

ALTER TABLE hero CHANGE age age INT(5)

将hero表中age字段类型改为VARCHAR,长度改为20个字符

ALTER TABLE hero CHANGE age age VARCHAR(20)

将hero表中gender字段改名为nickname,类型改为字符串,长度30且该字段内容不许为空

ALTER TABLE hero CHANGE gender nickname VARCHAR(30) NOT NULL

DML 语言

  • 数据操纵语言(DML):Data Manipulation Language
  • 用于改变数据表中的数据
  • 和事务相关,执行完后需要经过事务控制语句提交后才真正的将改变应用到数据库中
  • 包括:
    • INSERT:将数据插入到数据表中
    • UPDATE:更新数据表中已存在的数据
    • DELETE:删除数据表中的数据

先准备一张表:

CREATE TABLE person(name VARCHAR(30),age INT(3)
)

插入数据

INSERT语句用于向表中插入数据

  • INSERT INTO 表名(字段1,字段2,…) VALUES(字段值1,字段值2,…)

向person表中插入数据

INSERT INTO person(name,age) VALUES('张三',22);
INSERT INTO person(age,name) VALUES(36,'Rose');
  1. 数据库中字符串的直接量使用单引号括
  2. 指定的字段的顺序可以与表不一致
  3. VALUES后指定的字段值必须与指定的字段顺序一致

插入数据时,如果忽略字段,那么该字段会插入默认值NULL

INSERT INTO person(name) VALUE('王五');	-- age字段插入默认值NULL
INSERT INTO person(age) VALUES(16);		-- name字段插入默认值NULL

数据库中无论何种类型的字段,默认值都是NULL

  • 设定默认值

为字段指定默认值属于DDL语言,可在创建表时进行,也可以在修改表结构时进行

1)创建表时

CREATE TABLE teacher(name VARCHAR(30) DEFAULT '无名氏',age INT(3) DEFAULT 16
);

2)修改表时

ALTER TABLE person CHANGE name name VARCHAR(30) DEFAULT '无名氏';
  • 插入默认值

忽略的字段如果指定了默认值,则使用指定的默认值

INSERT  INTO person(age) VALUES(22)	-- name指定了默认值'无名氏',因此会将其作为默认值插入
  • 全列插入
    • INSERT语句中不指定任何字段时,则为全列插入
    • VALUES子句中指定的值的顺序,个数,类型必须与表结构定义完全一致
    • 语法:INSERT INTO 表名 VALUES(值1,值2,…)
INSERT INTO person VALUES('赵六',35);
  • 显式的插入NULL值与默认值

1)可以在VALUES子句中显式的使用NULL来向字段插入一个NULL值

INSERT INTO person VALUES(DEFAULT,22);

2)可以在VALUES子句中显式的使用DEFAULT来向字段插入对应的默认值

INSERT INTO person VALUES('钱七',NULL);
  • 批量插入
    • 可以一次插入多条记录
    • VALUES子句可以一次性指定多组数据
    • 语法:INSERT INTO 表名(字段1,字段2,…) VALUES(值1,值2,…),(第二组值),(都三组值)…

向person表中插入多条数据:

INSERT INTO person(name,age) VALUES('阿猫',16),('阿狗',18),('阿三',20);

修改数据

UPDATE语句用于修改表中数据

  • UPDATE 表名 SET 字段1=值1,字段2=值2,… [WHERE 过滤条件]

将person表中每条数据的age字段的值改为40:

UPDATE person SET age=40;
  • WHERE子句(会在后面的DQL语句中详细介绍)
    • 通常UPDATE语句都会添加WHERE子句,用来指定筛选条件,只有满足条件的数据才会被修改

将person表中张三的年龄改为22岁:

UPDATE person SET age=22 WHERE name='张三';

WHERE子句中可使用的基础条件判断

  1. >,>=,<,<=
  2. = 在数据库中,等值判断就是"=“,而不是”=="
  3. <>(判断不等于使用<>,有些数据库支持"!=")

修改"李四"的名字为"李老四",年龄改为66:

UPDATE person SET name='李老四',age=18 WHERE name='李四'

删除数据

DELETE语句用于删除表中数据

  • DELETE [FROM] 表名 [WHERE 过滤条件]

删除李老四:

DELETE from person WHERE name='李老四'

删除年龄小于30岁的人:

DELETE FROM person WHERE age<30;

不指定WHERE子句则是清空表

DELETE FROM person;

相关文章:

  • 记录一次OGG进程abended,报错OGG-01431、OGG-01003、OGG-01151、OGG-01296问题的处理
  • C++入门基础(2)
  • Generative AI for Krita - Krita 生成式 AI 插件
  • 【QT】信号与槽中多个按钮(pushbutton)共用一个槽函数的两种实现方式
  • centos7部署k8s集群
  • pytorch(gpu版本安装)
  • 记录一下线性回归的学习
  • iThenticate英文查重系统怎么用?
  • LeetCode-417. 太平洋大西洋水流问题
  • 4.23晚间工作总结
  • 面向 C# 初学者的完整教程
  • “个体”不是“单一”-《分析模式》漫谈58
  • visio导出的图片过大导致latex格式转成pdf之后很不清楚
  • 千问2.5-VL-7B的推理、微调、部署_笔记2
  • 220V转直流非隔离传感器供电电源芯片WT5105
  • CS144 Lab2实战记录:TCP接收器的实现
  • 每日学习Java之一万个为什么(JUC)
  • 面试篇:Java并发与多线程
  • 通信安全员考试重难点考哪些?
  • 服务器编译环境配置及数据接收脚本编写(11)
  • 山西省援疆前方指挥部总指挥刘鹓已任忻州市委副书记
  • 人民日报开新栏,冼星海之女追忆父亲创作《黄河大合唱》
  • 全红婵、李宁亮相中国航天日论坛,体育和航天这一次紧密相连
  • 山东一季度GDP为23466亿元,同比增长6.0%
  • 习近平对双拥工作作出重要指示
  • 旁白丨无罪后领到国家补偿,一位退休教师卸下了“包袱”