InterSystems Caché 是一个多模型 DBMS 和应用服务器。
查看此处提供的更多详细信息。
文档。
使用UNIQUE关键字,可以指定索引中的每条记录都有一个唯一的值。
更具体地说,这确保了索引(以及包含索引的表)中的两条记录不能具有相同的排序值。
默认情况下,大多数索引使用大写字符串排序(使搜索不区分大小写)。
在本例中,值“Smith”和“SMITH”被认为是相等的,而不是唯一的。
CREATE INDEX不能指定非默认索引字符串排序规则。
通过在类定义中定义索引,可以为各个索引指定不同的字符串排序规则。
可以更改名称空间的默认排序规则,使字段/属性在默认情况下区分大小写。 更改此选项需要重新编译命名空间中的所有类并重新构建所有索引。 转到Management Portal,选择Classes选项,为存储的查询选择名称空间,并使用Compile选项重新编译相应的类。 然后重建所有指数。 它们将区分大小写。
注意:当表的数据被其他用户访问时,不要重建索引。 这样做可能会导致不准确的查询结果。
为表创建索引。
CREATE [UNIQUE | BITMAP | BITMAPEXTENT | BITSLICE ] INDEX index-name
ON [TABLE] table-name
(field-name, ...)
[AS index-class-name [ (parameter-name = parameter_value, ... ) ] ]
[WITH DATA (datafield-name, ...)]
用数据填充一个或多个索引。
BUILD INDEX [%NOLOCK] [%NOJOURN] FOR TABLE table-name [INDEX index-name [,index-name]]
BUILD INDEX [%NOLOCK] [%NOJOURN] FOR SCHEMA schema-name
BUILD INDEX [%NOLOCK] [%NOJOURN] FOR ALL
FOR TABLE table-name - 已存在表的名称。
表名可以是限定的(schema.table),也可以是非限定的(table)。
非限定表名接受默认模式名。INDEX index-name - 可选—索引名称或以逗号分隔的索引名称列表。
如果指定,则只构建这些索引。
如果未指定,将构建为表定义的所有索引。FOR SCHEMA schema-name - 现有模式的名称。
此命令为指定模式中的所有表构建所有索引。BUILD INDEX提供了三种语法形式来构建/重新构建所有已定义的索引:
修改视图。
ALTER VIEW view-name [(column-commalist)] AS query [WITH READ ONLY]
ALTER VIEW view-name [(column-commalist)] AS query [WITH [level] CHECK OPTION]
| 参数 | 描述 |
|---|---|
view-name | 被修改的视图,它具有与表名相同的命名规则。视图名可以是限定的(schema.viewname),也可以是非限定的(viewname)。非限定视图名接受默认模式名。 |
column-commalist | 可选-组成视图的列名。如果这里没有指定,可以在查询中指定列名,如下所示。 |
query | 作为视图基础的结果集(来自查询)。 |
WITH READ ONLY | 可选-指定不能通过此视图对视图所基于的表执行插入、更新或删除操作。默认情况下,允许通过视图进行这些操作,约束如下所示。 |
WITH level CHECK OPTION | 可选-指定如何通过此视图对视图所基于的表执行插入、更新或删除操作。级别可以是关键字LOCAL或CASCADED。如果没有指定级别,则WITH CHECK OPTION默认为级联。 |
2021 年 8 月的学习资料现在可以在learning.intersystems.com上独家获取!您可以:
注意:老是错过最新消息?别担心,我们会在9月恢复正常的邮件发送。
修改用户密码。
ALTER USER user-name IDENTIFY BY password
ALTER USER user-name IDENTIFIED BY password
| 参数 | 描述 |
|---|---|
| user-name | 待修改密码的已有用户名。用户名不区分大小写。 |
| password | 用户的新密码。密码必须至少包含3个字符,并且不能超过32个字符。密码区分大小写。密码可以包含Unicode字符。 |
ALTER USER命令允许更改用户的密码。可以随时更改自己的密码。要更改其他用户的密码,必须拥有%Admin_Secure:USE系统权限。
IDENTIFY BY和IDENTIFIED BY关键字是同义词。
user-name必须是已存在的用户。
指定一个不存在的用户将生成一个带有%msg的SQLCODE -400错误,如下所示:ERROR #838: User badname does not exist。可以通过调用$SYSTEM.SQL.Security.UserExists()方法来确定用户是否存在。
作为分隔标识符指定的用户名可以是SQL保留字,可以包含逗号(,)、句号(.)、插入符号(^)和两个字符的箭头序列(->)。
它可以以除星号(*)以外的任何有效字符开头。
DROP COLUMN可以删除指定为逗号分隔列表的多个列定义。每个列出的列名后面必须紧跟其RESTORY或CASCADE(如果未指定,则默认为RESTRICE)和%DELDATA或%NODELDATE(如果未指定,则默认为%NODELDATA)选项。
默认情况下,删除列定义不会从数据映射中删除存储在该列中的任何数据。
要同时删除列定义和数据,请指定%DELDATA选项。
删除列定义并不删除相应的列级特权。 例如,授予用户在该列上插入、更新或删除数据的权限。 这将产生以下后果:
由于这些原因,通常建议在删除列定义之前使用REVOKE命令从列中撤销列级特权。
RESTRICT关键字(或无关键字):如果列出现在索引中,或者定义在外键约束或其他唯一约束中,则不能删除该列。
为该列尝试DROP COLUMN失败,并出现SQLCODE -322错误。
默认为RESTRICT。
CASCADE关键字:如果该列出现在索引中,该索引将被删除。
可能有多个索引。
如果列出现在外键中,则将删除外键。
可能有多个外键。
修改表。
大家好,我简单的自我介绍一下,我是姚鑫,
首先Caché,M这门技术相对比较冷门,资料方面都是英文,没有系统的相关资料,记得刚入职时学习的东西都是很基础的,稍微有一些复杂的结构变化,就不知道如何下手。之后,群里的小伙伴总有人问我,希望我出一个系统的Caché视频,这件事我也酝酿了很久,目的就是帮助到更多的同学,让每个小伙伴在日后的工作学习中能更加的得心应手。遇到困难或问题时,大家可以随时在群里咨询,群里的氛围很和谐,有很多热心的大佬,不会说有那种自己觉得简单的问题,不好意思问,没人回答的情况。只要你觉得是个问题就可以发出来。
因为这段时间比较忙,准备的比较仓促,可能有一些内容会有遗漏,大家有啥想法可以群里留言,会后可以答疑,大家可以提出来,一起探讨一下,后续的会准备的更加充分一些。
SQL中用作运算符等的字符表
每个符号的名称后跟其ASCII十进制代码值。
指定SQL RowId属性。
<SqlRowIdProperty>prop</SqlRowIdProperty>
该元素的值是一个SQL标识符。
此元素仅由从早期InterSystems产品迁移的类使用。
<SqlRowIdProperty>元素的默认值为空字符串。
指定内部SQL表号。
<SqlTableNumber>123</SqlTableNumber>
该元素的值是一个表号。
此元素仅由从早期InterSystems产品迁移的类使用。
<SqlTableNumber>元素的默认值为空字符串。
指定用于串行对象的数据定义。
<State>state</State>
此元素的值是此存储定义中的数据定义的名称。
对于串行(嵌入式)类,此关键字指示使用哪个数据定义来定义对象的序列化状态(序列化时对象属性的排列方式)。这也是默认数据定义,默认结构生成器将向其添加未存储的属性。
<State>元素的默认值为空字符串。
指定流属性的默认存储位置。
指定使用默认存储为持久类分配新ID值的系统函数。
<IdFunction>increment</IdFunction>
这个元素的值可以是increment(使用$increment函数)或sequence(使用$sequence函数)。
如果持久化类不使用IdKey来确定对象ID值,则该元素允许指定用于分配ID值的函数($increment函数或$sequence函数)。
如果类使用$increment函数,则通过对<IdLocation>元素中定义的全局位置中存储的值进行递增来创建新的id。
如果类使用$sequence函数,它可能会保留id块,以便在快速数据摄入的情况下获得更快的速度。
如果没有使用所有保留的ID,则可能导致ID号之间的空白。
当随后的数据被吸收时,这些空白可能会也可能不会被填补。
一个副作用是,具有较高ID的类的实例不一定比具有较低ID的类的实例更新。
此外,在<IdLocation>元素中定义的全局位置上的值与当前分配的任何id都不直接相关。
<IdFunction>元素的默认值是使用类定义创建的类的递增值。
<IdFunction>元素的默认值是使用DDL CREATE TABLE语句创建的类的序列。
指定ID计数器的位置。
Object Script(二)
ObjectScript没有定义任何保留字:你可以自由地使用任何字作为标识符(如变量名)。为了达到这个目的,ObjectScript使用了一组内置的命令以及特殊的字符(比如函数名的"$"前缀),以便将标识符与其他语言元素区分开来。
指定XData块所属的XML名称空间。
要指定XData块所属的XML名称空间,请使用如下语法:
XData name [ XMLNamespace = "namespaceURL" ] { }
其中namespaceURL是XML名称空间的URI。
注意,这一项是用双引号括起来的。
该关键字指定XData块所属的XML名称空间。
如果省略这个关键字,则该XData块的内容不属于任何名称空间。
XData MyXData [ XMLNamespace = "http://www.mynamespace.org" ]
{
}
指定该类的数据存储位置。
<DataLocation>^Sample.PersonD</DataLocation>
element的值是一个全局变量名称,具有可选的前导下标。
一个表达式,它是存储该类数据的位置。
通常这将是一个全局变量引用,如^User.PersonD。
全局变量引用还可以包含一个或多个前导下标。
例如, ^User.Data("Person")。