菜缤的世界 CairBin's Blog - 数据库
type: channel
link: https://blog.cairbin.top/index.php/tag/数据库/
items: SQL语句入门
items: 数据库基本概念

SQL语句入门
type: item
date: 2022-10-09T06:52:17+00:00
description: SQL语句入门起因学校开设数据库相关的课程了，打算总结一篇关于基础SQL语句的文章。SQL介绍SQL最早版本是由IBM开发的，一直发展到至今。SQL语言有如下几个部分：数据定义语言DDL：提供定义关系模式、删除关系以及修改关系模式的命令数据操纵语言DML：提供从数据库中查询信息以及在数据库中插入元组、删除元组以及修改元组的能力完整性：SQL DDL包括定义完整性的约束命令视图定义：SQL DDL包括定义视图的命令事务控制：SQL包括定义事务的开始点和结束点命令嵌入式SQL和动态SQL：定义如何嵌入如C++等这样的编程语言授权：SQL DDL包括定义对关系和视图的访问权限的命令SQL标准支持多种固有类型：char(n) 具有用户指定长度为n的字符串varchar(n) 最大长度为n的可变长字符串int 整数smallint 小正数(依赖于机器的整数类型的子集)numeric(p,d) 指定精度的定点数。此数字有p位(加上一个符号位)小数点右边有p位数中的d位数字real 单精度double 双精度float(n) 精度至少为n的浮点数SQL语句入门首先说明一下，SQL语句后面的分号是可选的。创建关系CREATE TABLE student ( Sname VARCHAR(20), Sid INT, PRIMARY KEY(Sid) );上述语句会创建一个student的关系(表)，它包含学生姓名和学生id号码。其中，Sname学生姓名的最大长度不超过20个字符，Sid为整型，并且PRIMARY KEY(Sid)对关系进行了完整性约束，说明学号作为主键，也就是说同一个学生他的id号码是唯一的。SQL还支持许多完整性约束，例如外码与非空，下面仅对这两种进行介绍：外码声明关系中的任意元组在属性上的取值必须对应于另外的某个关系的某元组在主码属性上的取值，其形式为foreign key(A,B,C)references X，其中A B C为属性，X为指定的关系非空完整性约束表示某个属性的取值不能为空，其形式A INT not null表示类型为整型名为A的属性不能为空下面我们创建一个与课程相关的表，要求主键(主码)为课程id且不为空，外码为上面student关系的学生姓名属性来做演示：CREATE TABLE course ( Cid INT NOT NULL, Sname VARCHAR(20), Cname VARCHAR(20), PRIMARY KEY(Cid), FOREIGN KEY(Sname) REFERENCES student );此时Sname的取值必须是student关系的Sname中的的一个取值。删除关系删除操作有两种：下方这条语句会删除名为course的关系DROP TABLE course;而DELETE FROM course;则会删除course关系中的所有元组（数据），但该关系保留说白一点就是前者连表带数据一块删除，后者只剩一个空表增加与删除属性有时候会向关系中添加一个新的属性，则需要用到以下语句ALTER TABLE student ADD Sage INT;该语句向student中添加了一个名为Sage，类型为整型的属性，用于表示学生的年龄在student中原有的元组在Sage的取值都将为空，即null（意思就是老数据原来没有年龄，现在新建了年龄这一列，之前的老数据该列上的取值都为空）删除属性就很简单了，我们删除student关系中的Sage属性为例，语句如下ALTER TABLE student DROP Sage;但是注意，很多数据库都不支持这一点，执行该语句可能会报错。查询SQL查询结构由三个子居构成select，from，where查询以在from子句列出的关系作为输入，并在这些关系上进行where和select子句中的指定运算，然后产生一个关系作为结果。为方便演示，先向student表中插入如下几条数据INSERT INTO student VALUES('CairBin',1); INSERT INTO student VALUES('Bob',2); INSERT INTO student VALUES('Alice',3); INSERT INTO student VALUES('Alice',4);INSERT INTO course VALUES(4,'Alex','chemistry'); INSERT INTO course VALUES(1,'CairBin','math'); INSERT INTO course VALUES(2,'CairBin','chemistry'); INSERT INTO course VALUES(3,'Alice','chemistry'…

数据库基本概念
type: item
date: 2022-09-21T17:16:36+00:00
description: 数据库基本概念原因最近在学习数据库，首先是概念，我觉得概念这东西打字并不太直观，所以做了个思维导图。我感觉对于后面更深层次的概念及SQL语句的学习所需要的基础，仅下面这一张图就足够了。内容