数据库笔记3————关系数据库标准语言SQL上(SQL的数据定义和数据更新)

来源:互联网 发布:java从入门到精通 编辑:程序博客网 时间:2024/05/21 00:16

数据库笔记3————关系数据库标准语言SQL上(SQL的数据定义和数据更新)

这里写图片描述
SQL的查询功能详见下一篇。
SQL的视图和SQL提供的安全性和完整性见下下一篇

二. My SQL的安装和数据库的创建

1.MySQL的安装包

安装包在text10中

2.创建一个数据库并显示已建立的数据库

  • 创建数据库:CREATE DATABASE HSCMySQL(自定义数据库名)
  • 输出所有的数据库:SHOW DATABASES;
  • 进入数据库进行操作:USE 数据库名;

三. SQL的数据定义

  • SQL支持数据库的三级模型,其模式,内模式,外模式中的基本对象有表,视图,索引。所以,SQL的定义功能包括:定义表,定义视图(在后面),定义索引

1.基本表的定义

a.规则

CREATE TABLE 表名(
列名 数据类型 约束条件(可有可无,下同),
列名 数据类型 约束条件,
….,表级约束条件);

b.常用数据类型

  • 以My SQL为例
  • 数值类型
    这里写图片描述
  • 日期和时间类型
    这里写图片描述
  • 字符串类型
    这里写图片描述

c.常用约束条件

  1. 非空约束:约束名 NULL | NOT NULL
    • 强制列不接受 NULL 值。
  2. 唯一约束: 约束名 UNIQUE
    • UNIQUE 约束唯一标识数据库表中的每条记录
    • UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
    • PRIMARY KEY 拥有自动定义的 UNIQUE 约束
    • 请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束
  3. 主键约束:约束名 PRIMARY KEY
    • 主键约束自动包含非空约束和唯一约束
    • 每个表应该都一个主键,并且每个表只能有一个主键
  4. 外键:CONSTRAINT 约束名 FOREIGN KEY (列名, 列名, … …) REFERENCES (列名, 列名, … …)
    • 在REFERENCES 中引用的列必须和 FOREIGN KEY 的外部键列一一对应,即列数目相等并且相应列的数据类型相同
  5. 检查约束:约束名 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 StudentVALUES('1234','aaaa','男',20,'CS');

2 设数据库中已经建立了与Student表结构相同的表Student_temp.要求在Student_temp保存所有计算机系的学生情况

INSERTINTO Student_temp    SELECT *SECTCT    FROM Student    WHERE Sdept = 'CS';

2.修改数据

a.规则

UPDATE 表名 列名 = 表达式,列名2 = 表达式2…
WHERE 条件;

b.说明

  • 功能是修改表中满足WHERE子句的条件的元组。其中SET子句指定被修改的列以及修改后的值。当没有WHERE子句时,表中所有元组的指定值都将被改变。

c.例

1 将每个学生的年龄加一

UPDATE StudentSET Sage = Sage+1;

2 将计算机系所有学生的成绩置为0

UpDATE StudentSET Grade = 0WHERE Sdept ='CS'

3.删除数据

a.规则

DELETE FROM 表名
WHRER 条件

b.说明

从指定表中删除满足条件的一个或多个元组,若不带WHERE子句,则删除表中所有元组,使表变空表.

c.例

  • 删除所有计算机系的学生信息
DELETE FROM StudentWHERE Sdept = 'CS';