数据库系统概论第三单元基础知识(一)
mysql基础操作
mysql8.0 workbench
/* ----------------------------基础知识------------------------------ */
# 例3.1创建模式S-T
CREATE SCHEMA `S-T`;/* `
事实上还可以通过如下语句进行创建
create database `S-T`;
如果想删除一个模式可以通过如下语句来进行实现
drop schema `S-T`;
或者drop database `S-T`;
*/# 例3.2使用模式`S-T`;
USE `S-T`;# 例3.3 关闭外键约束
SET FOREIGN_KEY_CHECKS = 0;/*
Mysql中如果表和表之间建立的外键约束
则插入数据可能会失败
解决方法是在Mysql中先取消外键约束
SET FOREIGN_KEY_CHECKS = 0;
*/# 例3.4建立student表
CREATE TABLE student (sno CHAR(20) ,sname CHAR(10) UNIQUE,ssex CHAR(2),sage SMALLINT,sdept CHAR(20)
);# 3.4 补添加主键约束
alter table student add PRIMARY KEY(sno);/*
给Sno与Sname分别添加列级完整性约束
其中primary key 代表为主属性,unique key代表取值唯一可以简写为unique,但primary key不能简写
二者虽然都是唯一但也有明显区别
primary key 不能取空值,但后者可以,后者多用于索引相关内容,以后讨论
*/# 例3.5建立课程表
CREATE TABLE course (cno CHAR(4) PRIMARY KEY,canme CHAR(40) ,cpno CHAR(4),ccredit SMALLINT,FOREIGN KEY (cpno)REFERENCES course (cno)
);/*
foreign key是外码的意思,Cpno是外码
course既是参照关系也是被参照关系,参照的属性试试Cno
*/# 例3.6修改属性名
alter table course change canme cname char(40) not null;/*
缺点是需要修改属性
*/# 补3.6 补添加用户定义完整性约束not null
alter table course modify column cname char(40) not null;/*
column可以省略,如下做法均是错误:
alter table course add cname not null;
alter table course add not null (cname);
*/# 例3.7显示course表的结构
desc course;# 补3.7 显示数据库中已有的schema
show schemas;
show tables; # 列出当前模式下的所有表名
show columns from course; # 列出表中列的信息,等价与desc course;# 补3.7 显示某张表上的各种键
show keys in course;# 例3.8创建表sc
CREATE TABLE sc (sno CHAR(20),cno CHAR(4),grade SMALLINT,PRIMARY KEY (sno , cno), # 主键中含有多个属性,只能如此声明FOREIGN KEY (sno)REFERENCES student (sno)
);/*
在属性之后添加的约束称为表级约束
一个关系中可以有多个主属性,同时也可以有多个外码
*/# 补3.8 对表sc添加外键(建表后添加);
alter table sc add FOREIGN KEY (cno) REFERENCES course (cno);# 3.9创建表test
CREATE TABLE test (name CHAR(20) /* , age SMALLINT,id CHAR(20) */
);# 补3.9 对表test添加列age、id、happy
alter table test add age SMALLint;
alter table test add id char(20) primary key;
alter table test add column happy date; # happy的数据类型为日期类型,column可以去除# 补3.9 删除表test中的某一个属性
alter table test drop column happy ; # 删除属性列happy# 例3.10向student、course、sc中插入数据
INSERT INTO student VALUES ('201215121','李勇','男',20,'CS');
INSERT INTO student VALUES ('201215122','刘晨','女',19,'CS');
INSERT INTO student VALUES ('201215123','王敏','女',18,'MA');
INSERT INTO student VALUES ('201215125','张立','男',19,'IS');INSERT INTO course VALUES ('1','数据库','5',4);
INSERT INTO course VALUES ('2','数学',NULL,2);
INSERT INTO course VALUES ('3','信息系统','1',4);
INSERT INTO course VALUES ('4','操作系统','6',3);
INSERT INTO course VALUES ('5','数据结构','7',4);
INSERT INTO course VALUES ('6','数据处理',NULL,2);
INSERT INTO course VALUES ('7','PASCAL语言','6',4);
INSERT INTO course VALUES ('8','PASCAL语言',NULL,4);INSERT INTO sc VALUE
('201215121','1',92),
('201215121','2',85),
('201215121','3',81),
('201215122','2',90),
('201215122','3',80);/*
在进行插入操作时基本语法结构
insert into <表名>(属性) values/value (具体数据)
其中插入的数据默认情况下时按照建表时的顺序进行插入的
以test为例
insert into test values ('陈海',20,'192210501210');
上述操作方法等价于如下写法:
insert into test(name,age,id) values ('陈海',20,'192210501210');
如果只插入name和20,可以按照
insert into test(name,age) values ('陈海',20);
按照如下书写会报错!!!
insert into test values ('陈海',20);
insert into test values ('陈海',20,);
insert into test(name,age,id) values ('陈海',20,);
insert into test(name,age,id) values ('陈海',20);
以上四种书写全部会报错
value与values均可用于插入,但value插入多行效率更高,values插入单行效率更高。插入还可以插入子查询,如下例:
insert into test(name,age) select sname,sage from student;
!!! 这里并没有values*/# 例3.11向test中添加新的属性
alter table test add column grade FLOAT;/*
也可以按照如下的方式进行书写
ALTER TABLE test add grade double;*/# 补3.11修改test中的某个属性的类型
alter table student modify sage smallint;# 例3.12向test中添加新的数据
INSERT INTO test VALUES ('张三',20,'192210501210',88);INSERT INTO test VALUES (null,20,'192210501288',88);INSERT INTO test VALUES ('李四',20,'192210501285',88);INSERT INTO test(name,age,id) SELECT sname,sage,sno FROM student;/*
mysql 中一些常用的数据类型
char(n) character(n) 长度为n的定长字符串
verchar(n) charactervarying(n) 最大长度为n的变长字符串
clob 字符串大对象
blob 二进制大对象
int integer 4字节
smallint 2字节
bigint 8字节
numric(p,d) 定点数,由p位数字组成<不包括符号、小数点>小数点有d位有效数字
decimal(p,d) dec(p,d) 定点数,由p位数字组成<不包括符号、小数点>小数点有d位有效数字
double 双精度浮点数
date 日期,包含年、月、日'%Y-%c-%d'
time 时间,包含时、分、秒
*/# 例3.13即将表test的名字改为test1,然后再改回test
ALTER TABLE test RENAME test1;
ALTER TABLE test1 RENAME TO test; /*
RENAME TABLE `S-T`.test TO `S-T`.test1;
RENAME TABLE `S-T`.test1 TO `S-T`.test;
上述两种方式都是修改表名的方法但是方法一更容易理解与掌握,建议使用第一种
*//*
可以通过alter简单的来修改表名,关键字rename to
下面顺代说一下模式名与属性名的修改
模式名的修改已经!!!!不再支持
RENAME database olddbname TO newdbname
在以前的版本种可以通过上述方法进行修改,但在mysql8.0中已经不再支持
只能在shell中通过比较复杂的方式进行.
*/# 例3.14修改属性id
ALTER TABLE test MODIFY id CHAR(25);/* 修改表中的某个属性的类型要使用modify另外需要修改属的性必须在表中已经存在否则会报错还可以写作如下形式:ALTER TABLE test MODIFY COLUMN id char(25);*/# 例3.15对表中的name属性添加唯一性约束ALTER TABLE test ADD UNIQUE(name);/* add还可以向表中的某个属性添加列级完整性约束*//* drop table <表名> [restrict | cascade]; 使用restrict在删除表时,是存在条件限制的,如果存在引用,视图,和触发器等就不能删除。使用cascade可以实现强制删除,是一种级联式的删除,会将建立在该表上的相关视图,参照表全部删除但是在mysql是不会进行级联删除的,例如基本表删除后视图依然存在,但无法使用,会报错,可以参看课本87页*/# 例3.16 为学生表中的学号添加索引,默认升序
CREATE UNIQUE INDEX stusno ON student(sno);/* 创建索引默认为升序建立索引,当你将上述语句再执行一次,并不会报错,但是会有警告,因为这样做本身没有什么意义。索引本质上是一种加快查询的数据结构,能够极大的加快查询效率,索引分很多种,一般采用B+树;可以使用show keys in sc 查看sc上的索引及其类型。*/# 例3.17 为课程表中的课程号添加索引,升序
CREATE UNIQUE INDEX Coucno ON Course(Cno); # 例3.18同时为两个属性建立唯一索引
CREATE UNIQUE INDEX SCno ON SC( Sno ASC,Cno DESC); /*
创建索引 按照学号升序,以及课程号降序
*//*
ALTER TABLE tbl_name RENAME INDEX old_index_name TO new_index_name;
这种方法是用来修改索引名的
*/# 例3.19删除某个索引
DROP INDEX stusno ON student;
/*
用来删除索引
*//* ------------------------查询操作-------------------------------- */
# 例3.20查询全体学生的学号和姓名
SELECT sno, sname
FROMstudent;# 例3.21查询全体学生的学号和姓名
SELECT sname, sno, sdept
FROMstudent;# 例3.22查询全体学生的详细记录
SELECT *
FROMstudent;# 例3.23查询全体学生的姓名、出生年月、和所在院系,要求小写字母表示
SELECT sname, 2014 - sage as birthday, LOWER(sdept)
FROMstudent;/* 可以利用as为显示的属性起别名,同时as可以省略
2014-sage为一个表达式,mysql中是支持表达式的,即将sage中的每个值都带如表达式中参与运算,并作为结果输出
lower 为mysql内置的字符串函数,
还有upper、concat、substr、trim、instr等具体实例以后更新 */# 例3.24查询选修了课程的学号
SELECT sno
FROMsc;# 3.25查询选修了课程的学号(不重复)
SELECT DISTINCTsno
FROMsc;SELECT name
FROMtest;# 例3.26查询计算机科学系全体学生名单
SELECT sname
FROMstudent
WHEREsdept = 'CS';# 例3.27查询所有考试不及格学生的学号
SELECT sno
FROMsc
WHEREgrade < 60;# 例3.27查询所有年龄在20到23之间的学生
SELECT sname
FROMstudent
WHEREsage BETWEEN 20 AND 23;
参考 《数据库系统概论(第五版)》作者王珊
我蒟蒻 有些地方可能有点乱,将就看看唉
下一篇
数据库系统概论第三单元基础知识(一)相关推荐
- 串口发送tcp数据 源端口号_三分钟基础知识:用动画给面试官解释 TCP 三次握手过程...
作者 | 小鹿 来源 | 小鹿动画学编程 写在前边 TCP 三次握手过程对于面试是必考的一个,所以不但要掌握 TCP 整个握手的过程,其中有些小细节也更受到面试官的青睐. 对于这部分掌握以及 TC ...
- [Java面试三]JavaWeb基础知识总结.
[Java面试三]JavaWeb基础知识总结. 1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Int ...
- Abaqus梁单元基础知识
今天我们介绍一下梁单元的相关基础知识: 首先,对于长度方向大于截面尺寸10倍以上的结构,通过用梁单元简化,可以有效缩减模型规模,提高计算效率.因此,梁单元适用范围很广,是常用的结构单元之一. 以下是梁 ...
- 【练习题】心田花开:三年级基础知识+写作练习
学好语文打好基础很重要,多做多练也必不可少,三年级对于孩子们来说无疑是学习的分水岭,这时候就要更加注重语文知识的学习,心田花开整合了三年级语文基础+写作的练习题,为孩子们提升语文成绩贡献一份力. 一. ...
- 机器学习-机器学习概论(入门机器学习基础知识)
机器学习 简介 机器学习一词来源于Machine Learning的翻译,主要研究计算机模拟或者实现人类的行为,顾名思义,像学生一样,通过学习获取新的知识或者技能,完善自身的知识结构,并不断提升自己的 ...
- Kinect for Windows SDK开发入门(三):基础知识 下
原文来自:http://www.cnblogs.com/yangecnu/archive/2012/04/02/KinectSDK_Application_Fundamentals_Part2.htm ...
- 数据库系统概论实验三——创建及管理数据表
一.实验目的 1.熟悉数据表的特点: 2.熟悉在Management Stuio中创建.编辑及删除数据表: 3.熟悉使用T-SQL创建.编辑及删除数据表: 二.实验学时 2学时 三.实验要求 1.了解 ...
- 数据库系统概论第三章学习通作业(建表、查询、修改、删除、视图)
设有3个关系: S(S#,SNAME,SEX,AGE) SC(S#,C#,GRADE) C(C#,CNAME,TEACHER) 试用SQL语句完成下列大题1~4的任务: 用数据定义语言DDL定义上述三 ...
- 初学python类必须要知道的三个基础知识(入门理解)
一. 为什么要用到类: 类是一种更高级的封装,可以将多个功能函数按照一定的顺序组织成新的结构,这个结构有几个主要作用: 1.将复杂的组织功能装成一个整体,降低了代码使用的复杂度.外界可以直接使用而不用 ...
最新文章
- java 将Map拷贝到另一个Map对象当中
- 用的fileupload组件实现的大文件上传
- 你知道考的是平方数吗(记洛谷P1876题RE+WA的经历,Java语言描述)
- 基础篇:3.3.2)压铸件-材料选择
- iOS 应用状态详解
- ISO27001信息安全管理体系认证范围及用处
- 推荐16个超棒的国外免费PSD资源素材网站
- Duplicate Finder and Remover for Mac(重复文件查找删除工具)
- Git删除提交历史记录
- 评论回复功能 asp.net_微信重大更新!公众号推送时间线打乱+7大新功能上线!怎么玩?...
- Scratch节假日主题课:植树节种五棵树
- Guessing Camels
- 成为一名合格的java工程师
- 探讨Vue 数据监测原理-第四节-Vue.Set() API 介绍应用
- 盛世昊通:面向“双碳”目标,开拓汽车产业价值蓝海
- 解析北斗+UWB室内外一体化融合定位技术
- 宿主机使用wifi时虚拟机如何连网
- PS(2018)更换启动界面
- JAVA支付宝和微信(APP支付,提现,退款)
- 互联网不断地更新迭代!我的人生就是要不断的更新迭代!