public class DataBase { public static void main() { } } /* 4.5 SQL的数据类型与模式 4.5.1 SQL的日期与时间类型 SQL标准支持的时间类型: date:日历日期,年月日 time:一天中的时间,小时分钟秒,time(p)表示秒的小数点后的数字位 通过指定time with timezone,还可以吧时区信息连同时间时间一起存储 timestamp:date和time的组合。 date:'2010-04-05' time:'09:30:00' timestamp '2010-04-05 09:30:00' 我们可以利用case e as t形式的表达式,将一个字符串e转换成类型t, 其中t是date、time、timestamp中的一种。 我们可以利用extract(field from d),从date或time值d中提取出单独的域, 这里的域可以是year、month、day、hour、minute、或者second中的一种 SQL定义了一些函数用来获取当前日期和时间。例如: current_date返回当前日期 current_time返回当前时间(带时区) localtime返回当前的本地时间(不带时区) current_timestamp返回当前时间戳(带时区) localtimestamp返回当前本地时间戳(不带时区) SQL允许在上面列出的所有类型上进行比较运算,也允许在各种数据类型上进行算术 运算和比较运算。SQL还支持interval数据类型,它允许在日期、时间、和时间间 隔上进行计算。例如,x,y都是date类型,则x-y就是时间间隔类型。 */ /* 4.5.2 默认值 4.5.3 创建索引 创建索引语法: create index studentID_index on student(ID) 4.5.4 大对象类型 SQL中的大对象类型: clob:字符数据的大对象数据类型 blob:二进制数据的大对象类型 案例: book_review clob(10KB) image blob(10MB) movie blob(2GB) 对于包含大对象的结果元组而言,把整个大对象放入内存中是非常低效和不现实的。 相反,一个应用通常用一个SQL查询来检索出一个大对象的定位器,然后在宿主语言 中用这个定位器来操纵对象。应用本身也是用宿主语言书写的。 */ /* 4.5.5 用户定义的对象 SQL支持两种形式的用户定义数据类型:独特类型、结构化数据类型。 独特类型:主要利用类型检测机制,类似于C++中的typedef 语法: create type Dollars as numeric(12,2) final; create type Pounds as numeric(12,2) final; create table department (dept_name varchar(20), building varchar(15), budget Dollars); 允许使用: cast (department.budget to numeric(12,2)) 我们可以在转后后的数值上进行各种运算,但是完成后,我们需要另一个类型转换 表达式来吧数值类型转换会Dollars类型。 SQL提供drop type和alter type子句来删除或修改以前创建过的类型。 */ /* 4.5.6 create table的扩展 应用常常要求创建与某个表的模式相同的表。SQL提供了此语法: create table temp_instructor like instructor 当书写一个复杂查询时,把查询结果存储成一个新表通常是很有用的;这个表通常是临时的 这里需要两条语句,一条用于创建表,另一条用于把查询结果插入到表中。但是SQL提供了 更简单的方式实现: create table ts as (select * from instructor where dept_name = 'Music’) with data; 如果省略with data子句,表会被创建,但是不会被载入数据。 总结: create table xxx like ooo create table xxx as () with data */ /* 4.5.7 模式、目录与环境 当代数据库系统提供了三层结构的关系命名机制。最顶层由目录构成,每个目录都可以包含 模式。诸如关系和视图那样的SQL对象都包含在模式中。一些数据库实现用术语数据库代替 术语目录。 ——我之前创建了mybatis和book其实只对应于一个模式 要在数据上做任何操作,用户需要先连接到数据库。每个用户都有一个默认的目录和模式, 这个组合对用户来说是唯一的。当一个用户连接到数据库系统时,将为该连接设置好默认的 目录和模式。这对应与当用户登进一个操作系统时,把当前目录设置为用户的主目录。 为了唯一的标识一个关系,必须用一个名字,其包括三部分 catalog5.univ_shema.course 当名字的目录部分被认为是连接的默认目录时,可以省略目录部分。 默认目录和模式是为每个连接建立的SQL环境的一部分。环境还包括用户标识(也称为授权 标识符)。所有通常的SQL语句,包括DDL和DML,都在一个模式的环境中运行。 我感觉这儿说的模式,就是MySQL中的database */ /* 4.6 授权 我们可以在数据库的某个特定部分(如一个关系或视图)上授权给用户所有这些类型的权限, 或者完全不授权,或者这些授权的一个组合。 除了在数据上的授权外,用户还可可以被授予在数据库模式上的权限,如:允许用户创建、 修改或者删除关系。拥有某些形式的权限的用户还可以把这样的权限转授给其他用户,或者 撤销收回之前授出的权限。 */ /* 4.6.1 授权的授予与收回 SQL标准包括select、insert、update、delete权限。权限所有权限可以用作所有允许 权限的简写形式。一个创建了新关系的用户,将自动被授予该关系上的所有权限。 授予权限: grant <权限列表> on <关系名或视图名> to <用户/角色列表>; grant select on department to Amit, Satoshi; grant update(budget) on department to Amit, Satoshi; 回收权限: revoke <权限列表> on <关系名或视图名> from <用户/角色列表> revoke select on department from Amit,Satoshi; revoke update(budget) on department from Amit,Satoshi; */ /* 4.6.2 角色 SQL中创建角色: create role instructor: 然后角色可以像用户那样被授权: grant select on takes to instructor; 角色可以授予给用户,也可以授予给其他角色 create role dean; grant dean to Amit; //授予给其他用户 grant instructor to dean //授予给其他角色 一个用户或者一个角色的权限包括: 1.所有直接授予用户或者角色的权限 2.所有授予给用户或者角色所拥有的角色的权限 可能存在着一个角色链~~~ 当一个用户登录到数据库系统时,在此会话中用户执行的动作拥有所有这届授权该用户的权限 以及所有通过其他角色间接地授予该用户所拥有角色的权限。 */ /* 4.6.3 视图的授权 创建视图的用户不需要得到该视图上的所有权限。他得到的哪些权限不会为他提供超越他 已有权限的额外权限。 */ /* 4.6.4 模式的授权 SQL提供了一种references权限,允许用户在创建关系时声明外码。SQL的references权限 可以与update权限类似的方式授予到特定的属性上。 grant reference(dept_name) on department to Mariano; */ /* 4.6.5 权限的转移 默认情况下,我们是不允许用户再将得到的权限授予给另外的用户/角色。如果我们在授权时 允许接受者把自己得到的权限再传递给其他用户,我们在相应的grant命令后面附加with grant option子句。 grant select on department to Amit with grant option; 一个对象的(关系/视图/角色)的创建者,拥有该对像上的所有权限,包括给其他用户授权的权限。 */ /* 4.6.7 权限的回收 revoke语句可以申明restrict来防止级联回收: revoke grant on department from Amit restrict; 如果存在一个级联回收,就会报一个错误。 下面revoke语句仅仅回收grant option,并不是真正回收select权限: revoke grant option for select on department from Amit; SQL允许权限由一个角色授予,而不是由用户授予。SQL有一个与会话所关联的当前角色 的概念。默认情况下,一个会话所关联的当前角色是空的。一个会话所关联的当前角色可 以通过set role role_name来设置。指定的角色必须必须已经授予给用户,否则失效 ——当前会话环境中没有保存角色信息么??? 如果要在授予权限时将权限人设置为一个会话所关联的当前角色,并且当前角色不为空的话, 我们可以在授权语句后面加上: granted by current_role */
数据库系统概念:SQL的数据类型与模式、授权
猜你喜欢
转载自www.cnblogs.com/junjie2019/p/10564934.html
今日推荐
周排行