数据库笔记3————关系数据库标准语言SQL上(SQL的数据定义和数据更新)
SQL的查询功能详见下一篇。
SQL的视图和SQL提供的安全性和完整性见下下一篇
二. My SQL的安装和数据库的创建
1.MySQL的安装包
2.创建一个数据库并显示已建立的数据库
- 创建数据库:CREATE DATABASE HSCMySQL(自定义数据库名)
- 输出所有的数据库:SHOW DATABASES;
- 进入数据库进行操作:USE 数据库名;
三. SQL的数据定义
- SQL支持数据库的三级模型,其模式,内模式,外模式中的基本对象有表,视图,索引。所以,SQL的定义功能包括:定义表,定义视图(在后面),定义索引
1.基本表的定义
a.规则
CREATE TABLE 表名(
列名 数据类型 约束条件(可有可无,下同),
列名 数据类型 约束条件,
…,表级约束条件);
b.常用数据类型
- 以My SQL为例
- 数值类型
- 日期和时间类型
- 字符串类型
c.常用约束条件
- 非空约束:约束名 NULL | NOT NULL
- 强制列不接受 NULL 值。
- 唯一约束: 约束名 UNIQUE
- UNIQUE 约束唯一标识数据库表中的每条记录
- UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
- PRIMARY KEY 拥有自动定义的 UNIQUE 约束
- 请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束
- 主键约束:约束名 PRIMARY KEY
- 主键约束自动包含非空约束和唯一约束
- 每个表应该都一个主键,并且每个表只能有一个主键
- 外键:CONSTRAINT 约束名 FOREIGN KEY (列名, 列名, … …) REFERENCES (列名, 列名, … …)
- 在REFERENCES 中引用的列必须和 FOREIGN KEY 的外部键列一一对应,即列数目相等并且相应列的数据类型相同
- 检查约束:约束名 CHECK
- 如果对单个列定义 CHECK 约束,那么该列只允许特定的值
- 如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制
d.例
- 题目:建立一个学生表,其中包括学号,姓名,性别,年龄,入学时间五个属性。其中学号为主键,姓名唯一,入学时间不为空。
CREATE TABLE Student
(Sno CHAR(6) PRIMARY KEY,
Snome CHAR(10) UNIQUE,
Ssex CHAR(2) CHECK (Ssex IN ('男','女')),
Sage SMALLINT,
Sdate DATE NOT NULL
);
2.基本表的修改
a.规则
ALTER TABLE 表名 ADD 新列名 数据类型 约束条件(可有可无,下同;//增加新列
ALTER TABLE 表名 DROP CONSTRAINT 约束条件;//删除表中指定列的约束条件 或者列
ALTER TABLE 表名 ALTER COLUMN 列名 <数据类型> //修改指定列的类型或者列名
b.例
- 题目:向Student表中添加“所在系”列,SE最后删除“所在系”列
ALTER TABLE Student ADD Sdept CHAR(20);
ALTER TABLE Student DROP COLUMN Sdept;
3.基本表的删除
a.规则
DROP TABLE 表名;
b.例
- 删除student表
DROP TABLE Student;
4.索引的建立
a.规则
CREATE UNIQUE/CLUSTER INDEX 索引名 ON 表名(索引依据的列可多个和次序)
b.所明
- UNIQUE为唯一索引,此索引值只对应唯一的数据记录。如果列值有重复时,不能建立唯一索引。
- CLUSTER为聚簇索引,即索引和表中存放的物理顺序一致。需要注意的是一个表只能建立一个聚簇索引,而且对于经常更新的表不推荐聚簇索引
- ASC升序,DESC降序。默认为降序
c.例
- 为Student表,Course表,SC表分别建立索引,其中Student表按学号升序建立唯一索引,Courseb表按照课程号建立唯一索引,SC按照学号和成绩降序建立唯一索引。
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucon ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Grade DESC);
- 在Student表中的Sname列上建立聚簇索引,且表中记录安装Sname的值降序存放
CREATE CLUSTER INDEX Student_sname ON Student (Sname DESC);
5.索引的删除
a.规则
DROP INDEX 索引名
b.例
- 删除Student表中的Stusco索引。
DROP INDEX Stusco;
四. SQL的数据更新
1.插入数据
a.规则
INSERT INTO 表名(属性列1,属性列2…)[属性列可以省略]
VALUES(常量1,常量2…)/SELECT 子查询;
b.说明
- VALUES为插入一条语句时的插入语句。SELECT为插入子查询结果时的插入语句。
- INTO 子句没有出现的属性列,新元组在这些列上的值为空值,前提是该列允许为空。
- 若INTO语句没有指明属性列,则新插入的元组必须在每个属性都有值。
- 字符型和日期型插入时必须用单引括起来
- INTO子句中的属性列可以和表中的顺序不同,但必须可VALUES子句的常量对应且类型一致
- 新插入的值不能违反完整性约束
- 关于SELECT所涉及的查询语句,详见下一篇博客。
c.例
1 在Student表中插入一条新的元组。
INSERT
INTO Student
VALUES('1234','aaaa','男',20,'CS');
2 设数据库中已经建立了与Student表结构相同的表Student_temp.要求在Student_temp保存所有计算机系的学生情况
INSERT
INTO Student_temp
SELECT *SECTCT
FROM Student
WHERE Sdept = 'CS';
2.修改数据
a.规则
UPDATE 表名 列名 = 表达式,列名2 = 表达式2…
WHERE 条件;
b.说明
- 功能是修改表中满足WHERE子句的条件的元组。其中SET子句指定被修改的列以及修改后的值。当没有WHERE子句时,表中所有元组的指定值都将被改变。
c.例
1 将每个学生的年龄加一
UPDATE Student
SET Sage = Sage+1;
2 将计算机系所有学生的成绩置为0
UpDATE Student
SET Grade = 0
WHERE Sdept ='CS'
3.删除数据
a.规则
DELETE FROM 表名
WHRER 条件
b.说明
从指定表中删除满足条件的一个或多个元组,若不带WHERE子句,则删除表中所有元组,使表变空表.
c.例
- 删除所有计算机系的学生信息
DELETE FROM Student
WHERE Sdept = 'CS';