SQL数据类型、基本表的定义、索引定义
来源:互联网 发布:微信点菜系统源码 编辑:程序博客网 时间:2024/05/17 03:09
前言
由于最近做消息中心后台开发,需要进行数据库的操作,在编写SQL(mybatis)上略感吃力,于是复习一下大学时代所学习的数据库的相关基础知识,直接从SQL开始。
I.SQL
与模式
II.本次学习所用到的几个表
Student
Course
CS
III.SQL的数据定义语句
IV.创建表
一般格式
create table <表名> (<列名> <数据类型> [列级完整性约束] [ , <列名> <数据类型> [列级完整性约束]] ... [,<表级完整性约束>] );
例如:
create table Student( Sno char(9) primary key, /*列级完整性约束, Sno为主码*/ Sname char(20) unique, /*列级完整性约束, Sname唯一*/ Ssex char(2), Sage smallint, Sdept char(20));
create table Course( Cno char(4) Primary key, /*列级完整性约束, Cno为主码*/ Cname char(40), Cpno char(4), /*Cpno是先行课*/ Ccredit smallint, foreign key (Cpno) references Course(Cno) /*表级完整性约束,Cpno 是外码,被参考Course,被参照Cno*/);
create table SC( Sno char(9), Cno char(4),Grade smallint, primary key (Sno, Cno), /* 主码有两个属性构成,必须作为表级完整性约束进行定义*/ foreign key (Sno) references Student(Sno), /*表级完整性约束,Sno 是外码,被参考Student,被参照Sno*/ foreign key (Cno) references Course(Cno) /*表级完整性约束,Cpno 是外码,被参考Course,被参照Cno*/);
insert into Student(Sno, Sname, Sage, Ssex, Sdept) values('200215121', '李勇', 20, '男', 'CS');insert into Student(Sno, Sname, Sage, Ssex, Sdept) values('200215122', '刘晨', 19, '女', 'CS');insert into Student(Sno, Sname, Sage, Ssex, Sdept) values('200215123', '王敏', 18, '女', 'MA');insert into Student(Sno, Sname, Sage, Ssex, Sdept) values('200215125', '张力', 19, '男', 'IS');insert into Course(Cno, Cname, Ccredit) values(2, '数学', 2);insert into Course(Cno, Cname, Ccredit) values(6, '数据处理', 2);insert into Course(Cno, Cname, Cpno, Ccredit) values(7, 'PASCAL语言', 6, 4);insert into Course(Cno, Cname, Cpno, Ccredit) values(5, '数据结构', 7, 4);insert into Course(Cno, Cname, Cpno, Ccredit) values(4, '操作系统', 6, 3);insert into Course(Cno, Cname, Cpno, Ccredit) values(1, '数据库', 5, 4);insert into Course(Cno, Cname, Cpno, Ccredit) values(3, '信息系统', 1, 4);insert into SC(Sno, Cno, Grade) values('200215121', '1', 92);insert into SC(Sno, Cno, Grade) values('200215121', '2', 85);insert into SC(Sno, Cno, Grade) values('200215121', '3', 88);insert into SC(Sno, Cno, Grade) values('200215122', '2', 90);insert into SC(Sno, Cno, Grade) values('200215122', '3', 80);
V.关于数据类型
各个数据库的数据类型不完全相同,选择数据类型的原则有两个,一个是取值范围,二是要做哪些数据运算。比如年龄:取值为100左右的正整数,取值范围很多数据类型都满足,比如char(3)、长整形、短整型;运算比如需要求平均年龄,这个只有长整形和短整型支持,考虑到存储空间的占用,故选用短整型。
更多数据类型请参考具体的数据库厂商说明书。
VI.修改基本表
一般格式
alter table <表名> [add <列名> <数据类型> [完整性约束]] [drop <完整性约束 名>] [alter column<列名> <数据类型>];
例如:
alter table Student add S_ontrance date; /*学生表增加入学时间列*/alter table Student alter column Sage int; /*修改学生表的Sage列的数据类型为int,这个在mysql中执行错误*/alter table Course add unique(Cname); /*增加课程名唯一的约束*/
VII.删除表
一般格式
drop table <表名> [restrict | cascade]
restrict:删除表示有限制的,如果该表有外键、视图、触发器、存储过程、函数等约束,则删除失败,缺省为restrict
cascade: 删除没有条件,删除该表时,相关联的对象,视图等都会被删除,使用值需谨慎;不同的数据库厂商对的实现细节还是有差距的,比如mysql如果该表有外键的话即使指定cascade也是无法删除的。
比如:在mysq下
drop table Student restrict;
提示错误信息:
[SQL] drop table Student restrict ;
[Err] 1451 - Cannot delete or update a parent row: a foreign key constraint fails
drop table Student cascade;
[SQL] drop table Student cascade;
[Err] 1451 - Cannot delete or update a parent row: a foreign key constraint fails
验证一个表只有视图的情况下:restrict和cascade的差别:首先给SC表创建一个视图,然后删除该表,SC表无其他关联约束:
create view v_sc as select * from SC;drop table SC restrict;drop table SC cascade;
可以看到在mysql的实现下restrict,cascade 都可以删除表,但是视图没有删除,在这一点上表现是一致的。
VIII.建立索引
建立索引是加快查询的有效手段。
一般格式
create [unique] [cluster] index <索引名称> on <表名>(<列名>[<次序>] [,<列名>[<次序>]]...);
/**建立索引*/create unique index StuNoIndex on Student(Sno);
IX.删除索引
一般格式
drop index<索引名称> on <表名>
drop index StuNoIndex on Student;
索引一旦建立,由系统使用并维护,不需用户干预。建立索引是为了减少查询时间,如果数据频繁增删改,系统会花费许多时间来维护索引,从而降低了数据库系统的效率,这个时候可以删除一些不必要的索引。在RDBMS中一般采用B+树、HASH索引来实现,B+树具有动态平衡的优点,Hash索引则具有查找快速的优点。索引是数据库的内部实现技术,属于内模式范畴。至于某一索引在创建时是采用B+树还是Hash索引则由具体的RDBMS来决定。
- SQL数据类型、基本表的定义、索引定义
- 关于基本数据类型的定义
- swift -基本数据类型的定义与使用
- 基本数据类型以及变量的定义
- sql索引的定义以及用法总结
- SQL 基本定义
- C++基本数据类型简便定义
- SQL语句,数据库的创建、定义修改删除基本表
- PL/SQL定义复合数据类型
- Sql Server2005定义数据类型分类
- oracle PL/SQL的基本构成,块结构和基本语法要求,数据类型,变量定义,运算符和函数
- oracle PL/SQL的基本构成,块结构和基本语法要求,数据类型,变量定义,运算符和函数
- 不熟悉数据类型的定义
- TI 数据类型的定义
- 数据类型的定义
- 数据类型定义的重要性
- 抽象数据类型的定义
- 数据类型的定义
- 关于ajax的学习笔记(心得)
- 121. 122.123 Best Time to Buy and Sell Stock
- LDS文件格式分析
- 德国CeBIT 2017,数字冰雹开启智慧城市决策新视角
- 淘淘商城第二天
- SQL数据类型、基本表的定义、索引定义
- 高并发相关
- Android tv 获取第三方icon的颜色,并填充该背景
- 几个不错的Android开源音视频播放器
- artTemplate if else 简洁语法
- 什么是Object
- MySQL数据库(三)---约束、修改数据表
- Maven详解之聚合与继承
- smmu学习笔记之device的platform_data和driver_data