当前位置:首页 » 编程语言 » sql表的用法
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql表的用法

发布时间: 2023-04-04 03:51:01

① 如何用sql创建一个表格

1、打开SQL Server,在数据库处,右键数据库,点击新建数据库。

② sql 表结构

column1 datatype [not null] [not null primary key], column2 datatype [not null],...)
说明:
datatype --是资料的格式,详见表。
nut null --可不可以允许资料有空的(尚未有资料填入)。
primary key --是本表的主键。
2、更改表格
alter table table_name add column column_name datatype
说明:增加一个栏位(没有删除某个栏位的语法。)
lter table table_name add primary key (column_name)
说明:更改表得的定义把某个栏位设为主键。
alter table table_name drop primary key (column_name)
说明:把主键的定义删除。
3、建立索引
create index index_name on table_name (column_name)
说明:对某个表格的栏位建立索引以增加查询时的速度。
4、删除
drop table_name
drop index_name
二、资料形态 datatypes
smallint
16 位元的整数。
interger
32 位元的整数。
decimal(p,s)
p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数后有几位数。如果没有特别指定,则系统会设为 p=5; s=0 。
float
32位元的实数。
double
64位元的实数。
char(n)
n 长度的字串,n不能超过 254。
varchar(n)
长度不固定且其最大长度为 n 的字串,n不能超过 4000。
graphic(n)
和 char(n) 一样,不过其单位是两个字符 double-bytes, n不能超过127。这个形态是为支援两个字符长度的字体,例如中文字。
vargraphic(n)
可变长度且其最大长度为 n 的双字符字串,n不能超过 2000。
date
包含了 年份、月份、日期。
time
包含了 小时、分钟、秒。
timestamp
包含了 年、月、日、时、分、秒、千分之一秒。
三、资料操作 dml(data manipulation language)
资料定义好之后接下来的就是资料的操作。资料的操作不外乎增加资料(insert)、查询资料(query)、更改资料(update) 、删除资料(delete)四种模式,以下分 别介绍他们的语法:
1、增加资料:
insert into table_name (column1,column2,...) values ( value1,value2, ...)
说明:
1.若没有指定column 系统则会按表格内的栏位顺序填入资料。
2.栏位的资料形态和所填入的资料必须吻合。
3.table_name 也可以是景观 view_name。
insert into table_name (column1,column2,...) select columnx,columny,... from another_table
说明:也可以经过一个子查询(subquery)把别的表格的资料填入。
2、查询资料:
基本查询
select column1,columns2,... from table_name
说明:把table_name 的特定栏位资料全部列出来
select * from table_name where column1 = xxx [and column2 > yyy] [or column3 <> zzz]
说明:
1.'*'表示全部的栏位都列出来。
2.where 之后是接条件式,把符合条件的资料列出来。
select column1,column2 from table_name order by column2 [desc]
说明:order by 是指定以某个栏位做排序,[desc]是指从大到小排列,若没有指明,则是从小到大排列
组合查询
组合查询是指所查询得资料来源并不只有单一的表格,而是联合一个以上的表格才能够得到结果的。
select * from table1,table2 where table1.colum1=table2.column1
说明:
1.查询两个表格中其中 column1 值相同的资料。
2.当然两个表格相互比较的栏位,其资料形态必须相同。
3.一个复杂的查询其动用到的表格可能会很多个。
整合性的查询:
select count (*) from table_name where column_name = xxx
说明:
查询符合条件的资料共有几笔。
select sum(column1) from table_name
说明:
1.计算出总和,所选的栏位必须是可数的数字形态。
2.除此以外还有 avg() 是计算平均、max()、min()计算最大最小值的整合性查询。
select column1,avg(column2) from table_name group by column1 having avg(column2) > xxx
说明:
1.group by: 以column1 为一组计算 column2 的平均值必须和 avg、sum等整合性查询的关键字一起使用。
2.having : 必须和 group by 一起使用作为整合性的限制。
复合性的查询
select * from table_name1 where exists ( select * from table_name2 where conditions )
说明:
1.where 的 conditions 可以是另外一个的 query。
2.exists 在此是指存在与否。
select * from table_name1 where column1 in ( select column1 from table_name2 where conditions )
说明:
1. in 后面接的是一个集合,表示column1 存在集合里面。
2. select 出来的资料形态必须符合 column1。
其他查询
select * from table_name1 where column1 like 'x%'
说明:like 必须和后面的'x%' 相呼应表示以 x为开头的字串。
select * from table_name1 where column1 in ('xxx','yyy',..)
说明:in 后面接的是一个集合,表示column1 存在集合里面。
select * from table_name1 where column1 between xx and yy
说明:between 表示 column1 的值介于 xx 和 yy 之间。
3、更改资料:
update table_name set column1='xxx' where conditoins
说明:
1.更改某个栏位设定其值为'xxx'。
2.conditions 是所要符合的条件、若没有 where 则整个 table 的那个栏位都会全部被更改。
4、删除资料:
delete from table_name where conditions
说明:删除符合条件的资料。
说明:关于where条件后面如果包含有日期的比较,不同数据库有不同的表达式。具体如下:
(1)如果是access数据库,则为:where mydate>#2000-01-01#
(2)如果是oracle数据库,则为:where mydate>cast('2000-01-01' as date) 或:where mydate>to_date('2000-01-01','yyyy-mm-dd')
在delphi中写成:
thedate='2000-01-01';
query1.sql.add('select * from abc where mydate>cast('+''''+thedate+''''+' as date)');
如果比较日期时间型,则为:
where mydatetime>to_date('2000-01-01 10:00:01','yyyy-mm-dd hh24:mi:ss')

③ SQL的基本语法

一、基础
1、说明:创建数据库
CREATE DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_admpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack
4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
A:create table tab_new like tab_old (使用旧表创建新表)
B:create table tab_new as select col1,col2… from tab_old definition only
5、说明:删除新表
drop table tabname
6、说明:增加一个列
Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:添加主键: Alter table tabname add primary key(col)
说明:删除主键: Alter table tabname drop primary key(col)
8、说明:创建索引:create [unique] index idxname on tabname(col….)
删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
9、说明:创建视图:create view viewname as select statement
删除视图:drop view viewname
10、说明:几个简单的基本的sql语句
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、说明:几个高级查询运算词
A: UNION 运算符
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
12、说明:使用外连接
A、left (outer) join:
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right (outer) join:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
C:full/cross (outer) join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
12、分组:Group by:
一张表,一旦分组 完成后,查询后只能得到组相关的信息。
组相关的信息:(统计信息) count,sum,max,min,avg 分组的标准)
在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据
在selecte统计函数中的字段,不能和普通的字段放在一起;
13、对数据库进行操作:
分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后接表明,附加需要完整的路径名
14.如何修改数据库的名称:
sp_renamedb 'old_name', 'new_name'

二、提升
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1(仅用于SQlServer)
法二:select top 0 * into b from a
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;
3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
4、说明:子查询(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)
5、说明:显示文章、提交人和最后回复时间
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6、说明:外连接查询(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
7、说明:在线视图查询(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数值1 and 数值2
9、说明:in 的使用方法
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
10、说明:两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
11、说明:四表联查问题:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
12、说明:日程安排提前五分钟提醒
SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5
13、说明:一条sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
具体实现:
关于数据库分页:
declare @start int,@end int
@sql nvarchar(600)
set @sql=’select top’+str(@end-@start+1)+’+from T where rid not in(select top’+str(@str-1)+’Rid from T where Rid>-1)’
exec sp_executesql @sql

注意:在top后不能直接跟一个变量,所以在实际应用中只有这样的进行特殊的处理。Rid为一个标识列,如果top后还有具体的字段,这样做是非常有好处的。因为这样可以避免 top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引则首先查询索引)
14、说明:前10条记录
select top 10 * form table1 where 范围
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
17、说明:随机取出10条数据
select top 10 * from tablename order by newid()
18、说明:随机选择记录
select newid()
19、说明:删除重复记录
1),delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
2),select distinct * into temp from tablename
delete from tablename
insert into tablename select * from temp
评价: 这种操作牵连大量的数据的移动,这种做法不适合大容量但数据操作
3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段
alter table tablename
--添加一个自增列
add column_b int identity(1,1)
delete from tablename where column_b not in(
select max(column_b) from tablename group by column1,column2,...)
alter table tablename drop column column_b
20、说明:列出数据库里所有的表名
select name from sysobjects where type='U' // U代表用户
21、说明:列出表里的所有的列名
select name from syscolumns where id=object_id('TableName')
22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
显示结果:
type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3
23、说明:初始化表table1
TRUNCATE TABLE table1
24、说明:选择从10到15的记录
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc

④ SQL语句创建表

CREATE TABLE 语句用于创建数据库中的表。

具体用法为:

CREATE TABLE 表名称

(

列名称1 数据类型,

列名称2 数据类型,

列名称3 数据类型,

....

)

(4)sql表的用法扩展阅读

创建表数据类型:

integer(size) int(size) smallint(size) tinyint(size):仅容纳整数。

decimal(size,d) numeric(size,d):容纳带有小数的数字。

char(size):容纳固定长度的字符串

varchar(size):容纳可变长度的字符串

date(yyyymmdd):容纳日期。

参考资料:网络-SQL CREATE TABLE

⑤ 怎样用SQL语句查询一个数据库中的所有表

查询一个数据库中的所有表sql语句是show tables;

显示所有数据库的命令是:show databases;要查看某个数据库先要进入数据库使用user <数据库名>命令;进入数据库之后才能查询数据库中有哪些表。使用以下命令即可查出所有表:

show tables;

(5)sql表的用法扩展阅读

mysql数据库的基本sql操作命令介绍:

1、显示当前数据库服务器中的数据库列表:mysql> SHOW DATABASES;

2、建立数据库:mysql> CREATE DATABASE 库名;

3、建立数据表:mysql> USE 库名;mysql> CREATE TABLE 表名 (字段名 VARCHAR(20), 字

名 CHAR(1));

4、删除数据库:mysql> DROP DATABASE 库名;

5、删除数据表:mysql> DROP TABLE 表名;

6、将表中记录清空:mysql> DELETE FROM 表名;

7、往表中插入记录:mysql> INSERT INTO 表名 VALUES ("hyq","M");

8、更新表中数据:mysql-> UPDATE 表名 SET 字段名1='a',字段名2='b' WHERE 字段名3='c';

9、用文本方式将数据装入数据表中:mysql> load data local infile "d:/mysql.txt" into table 表名;

10、导入.sql文件命令:mysql> USE 数据库名;mysql> source d:/mysql.sql;

⑥ 第五章 SQL定义表(一)

可以通过定义表(使用 CREATE TABLE )或通过定义投影到表的持久类来创建表:

由于以下原因,这两个名字之间的对应关系可能不相同:

表、视图或存储过程名称可以是限定的( schema.name ),也可以是限定的( name )。

模式名遵循标识符约定,需要特别注意非字母数字字符的使用。
模式名不应该指定为带分隔符的标识符。
尝试指定“USER”或任何其他SQL保留字作为模式名会导致 SQLCODE -312 错误。
INFORMATION_SCHEMA 模式名和相应的信息。
模式包名在所有命名空间中保留。
用户不应该在这个模式/包中创建表/类。

当执行一个创建操作(比如 create TABLE ),指定一个还不存在的模式时,InterSystems IRIS将创建新的模式。
InterSystems IRIS使用模式名生成相应的包名。
由于模式及其对应包的命名约定不同,用户应该注意非字母数字字符的名称转换注意事项。
这些名称转换的注意事项与表不同:

INFORMATION_SCHEMA 模式名和相应的信息。
模式包名在所有命名空间中保留。
用户不应该在这个模式/包中创建表/类

在所有名称空间中保留 IRIS_Shard 模式名。
用户不应在此模式中创建表、视图或过程。
存储在 IRIS_Shard 模式中的项不会通过编目查询或 INFORMATION_SCHEMA 查询显示。

初始设置是对所有名称空间(系统范围)使用相同的默认模式名。
可以为所有命名空间设置相同的默认模式名,也可以为当前命名空间设置默认模式名。

如果创建了一个具有非限定名称的表或其他项,InterSystems IRIS将为其分配默认模式名和相应的持久类包名。
如果一个命名的或默认的模式不存在,InterSystems IRIS将创建模式(和包),并将创建的项分配给该模式。
如果删除模式中的最后一项,InterSystems IRIS将删除该模式(和包)。
下面的模式名解析描述适用于表名、视图名和存储过程名。

系统范围的初始默认模式名是 SQLUser 。
对应的持久类包名是 User 。
因此,非限定表名 Employee 或限定表名 SQLUser 。
Employee 将生成类 User.Employee 。

因为 USER 是一个保留字,尝试用 USER 的模式名(或任何SQL保留字)指定限定名会导致 SQLCODE -1 错误。

要返回当前默认模式名,请调用 $SYSTEM.SQL.DefaultSchema() 方法:

或者使用以下预处理器宏:

可以使用以下任意一种方式更改默认模式名:

注意:当更改默认的SQL模式名称时,系统将自动清除系统上所有名称空间中的所有缓存查询。
通过更改默认模式名称,可以更改所有包含非限定表、视图或存储过程名称的查询的含义。
强烈建议在安装InterSystems IRIS时建立默认的SQL模式名,以后不要修改。

模式名用于生成相应的类包名。
因为这些名称有不同的命名约定,所以它们可能不相同。

可以通过将其设置为系统范围的默认模式来创建与SQL保留字同名的模式,但是不建议这样做。
名为 User 的默认模式根据类命名唯一性约定,生成相应的类包名称 User0 。

如果指定 _CURRENT_USER/name 作为默认模式名,其中name是选择的任意字符串,那么InterSystems IRIS将当前登录进程的用户名分配为默认模式名。
如果进程没有登录,则name将用作默认的模式名。
例如,如果进程没有登录, _CURRENT_USER/HMO 使用HMO作为默认模式名。

在 $SYSTEM.SQL.SetDefaultSchema() 中,指定 "_CURRENT_USER" 作为带引号的字符串。

访问一个现有的表(或视图,或存储过程)进行DML操作时,将从模式搜索路径中提供一个非限定的名称。
按照指定的顺序搜索模式,并返回第一个匹配项。
如果在搜索路径中没有找到匹配的模式,或者没有搜索路径,则使用默认的模式名。
(注意, #Import 宏指令使用了不同的搜索策略,不会“失败”到默认的模式名。)

如果非限定名与模式搜索路径中指定的任何模式或默认模式名不匹配,则会发出 SQLCODE -30 错误,例如: SQLCODE: -30 消息: Table 'PEOPLE' not found in schemas: CUSTOMERS,EMPLOYEES,SQLUSER 。

当创建一个基于odbc的查询以通过Mac上的Microsoft query从Microsoft Excel运行时,如果从可用的表列表中选择一个表,则生成的查询不包括该表的模式(相当于类的包)。
例如,如果选择从示例模式返回 Person 表的所有行,则生成的查询为:

因为InterSystems IRIS将不限定的表名解释为 SQLUser 模式中的表名,所以该语句要么失败,要么从错误的表返回数据。
要纠正这一点,编辑查询(在SQL View选项卡上),显式引用所需的模式。
然后查询应该是:

INFORMATION.SCHEMA 。
SCHEMATA persistent 类列出当前名称空间中的所有模式。

下面的示例返回当前命名空间中的所有非系统模式名:

Management Portal SQL界面的左侧允许查看模式(或匹配筛选器模式的多个模式)的内容。

每个表在其模式中都有一个唯一的名称。
一个表有一个SQL表名和一个对应的持久化类名;
这些名称在允许的字符、区分大小写和最大长度方面有所不同。
如果使用SQL CREATE TABLE 命令定义,则指定遵循标识符约定的SQL表名;
系统生成一个对应的持久化类名。
如果定义为持久类定义,则必须指定只包含字母和数字字符的名称;
这个名称既用作区分大小写的持久类名,也用作(默认情况下)对应的不区分大小写的SQL表名。
可选的 SqlTableName class 关键字允许用户指定不同的SQL表名。

当使用 CREATE TABLE 命令创建表时,InterSystems IRIS使用表名生成相应的持久化类名。
由于表及其对应类的命名约定不同,用户应该注意非字母数字字符的名称转换:

同一个模式中的视图和表不能具有相同的名称。
尝试这样做会导致 SQLCODE -201 错误。

可以使用 $SYSTEM.SQL.TableExists() 方法确定一个表名是否已经存在。
可以使用 $SYSTEM.SQL.ViewExists() 方法确定视图名是否已经存在。
这些方法还返回与表或视图名称对应的类名。
管理门户SQL interface Catalog Details表信息选项显示与所选SQL表名称对应的类名。

试图指定 “USER” 或任何其他SQL保留字作为表名或模式名会导致 SQLCODE -312 错误。
要指定SQL保留字作为表名或模式名,可以指定名称作为带分隔符的标识符。
如果使用带分隔符的标识符指定包含非字母数字字符的表或模式名,InterSystems IRIS将在生成相应的类或包名时删除这些非字母数字字符。

适用以下表名长度限制:

在SQL中,每条记录都由一个唯一的整数值标识,这个整数值称为 RowID 。
在InterSystems SQL中,不需要指定 RowID 字段。
当创建表并指定所需的数据字段时,会自动创建RowID字段。
这个 RowID 在内部使用,但没有映射到类属性。
默认情况下,只有当持久化类被投影到SQL表时,它的存在才可见。
在这个投影表中,将出现一个额外的 RowID 字段。
默认情况下,这个字段被命名为 “ID” ,并分配给第1列。

默认情况下,当在表中填充数据时,InterSystems IRIS将从1开始向该字段分配连续的正整数。 RowID 数据类型为 BIGINT(%Library.BigInt) 。为 RowID 生成的值具有以下约束:每个值都是唯一的。不允许使用 NULL 值。排序规则是精确的。 默认情况下,值不可修改。

默认情况下,InterSystems IRIS将此字段命名为 “ ID” 。但是,此字段名称不是保留的。每次编译表时都会重新建立 RowID 字段名。如果用户定义了一个名为 “ ID” 的字段,则在编译表时,InterSystems IRIS会将 RowID 命名为 “ ID1” 。例如,如果用户随后使用 ALTER TABLE 定义了一个名为 “ ID1” 的字段,则表编译会将 RowID 重命名为 “ ID2” ,依此类推。在持久性类定义中,可以使用 SqlRowIdName 类关键字直接为此类投影到的表指定 RowID 字段名。由于这些原因,应避免按名称引用 RowID 字段。

InterSystems SQL提供了 %ID 伪列名称(别名),无论分配给 RowID 的字段名称如何,该伪列名称始终返回 RowID 值。 (InterSystems TSQL提供了 $IDENTITY 伪列名称,其作用相同。)

ALTER TABLE 无法修改或删除 RowID 字段定义。

将记录插入表中后,InterSystems IRIS将为每个记录分配一个整数ID值。 RowID 值始终递增。它们不被重用。因此,如果已插入和删除记录,则 RowID 值将按升序排列,但可能不连续。

可以通过设置 SetDDLUseSequence() 方法,将InterSystems IRIS配置为使用 $INCREMENT 执行 ID 分配。若要确定当前设置,请调用 $ SYSTEM.SQL.CurrentSettings() 方法。

在持久性类定义中, IdLocation 存储关键字global(例如,对于持久性类 Sample.Person:<IdLocation> ^ Sample.PersonD </ IdLocation> )包含RowID计数器的最高分配值。 (这是分配给记录的最高整数,而不是分配给进程的最高整数。)请注意,此RowID计数器值可能不再与现有记录相对应。要确定是否存在具有特定RowID值的记录,请调用表的 %ExistsId() 方法。

通过 TRUNCATE TABLE 命令重置 RowID 计数器。即使使用 DELETE 命令删除表中的所有行,也不会通过 DELETE 命令将其重置。如果没有数据插入表中,或者已使用 TRUNCATE TABLE 删除所有表数据,则 IdLocation 存储关键字全局值未定义。

默认情况下, RowID 值不可用户修改。尝试修改 RowID 值会产生 SQLCODE -107 错误。覆盖此默认值以允许修改 RowID 值可能会导致严重的后果,只有在非常特殊的情况下并应格外谨慎。 Config.SQL.AllowRowIDUpdate 属性允许 RowID 值是用户可修改的。

通过定义一个用于投影表的持久类,可以定义 RowID 以具有字段或字段组合中的值。为此,请使用 IdKey index 关键字指定一个索引。例如,一个表可以具有一个 RowID ,其 RowId 通过在 PatientName [IdKey] 上指定索引定义 IdxId 来与 PatientName 字段的值相同;或者可以通过指定索引定义 IdxId 来将 PatientName 和 SSN 字段的组合值在 (PatientName,SSN)[IdKey]; 上。

当 RowID 基于多个字段时, RowID 值是由 || 连接的每个组成字段的值。操作员。例如, Ross,Betsy || 123-45-6789 。 InterSystems IRIS尝试确定基于多个字段的 RowID 的最大长度。如果无法确定最大长度,则 RowID 长度默认为512。

用作外键引用的 RowID 必须是公共的。

默认情况下,不能将具有公共 RowID 的表用作源表或目标表,以使用 INSERT INTO Sample.DupTable SELECT * FROM Sample.SrcTable 将数据复制到重复表中。

可以使用Management Portal SQL界面“目录详细信息字段”列出“隐藏”列来显示 RowID 是否被隐藏。

可以使用以下程序返回指定字段(在此示例中为 ID )是否被隐藏:

⑦ 总结了几个常用的sql server系统表的使用

1 sysobjects 表:包含数据有表对象、约束、聚集索引、主键、外键、存储过程、函数等的相关信息
2.sysfiles:主要反应指定数据库物理文件的占用空间大小及文件增长率的相关设置情况
3.sys.sysprocesses 是mssql数据库中一个非常重要的视图,主要用于返回当前db服务器中的运行中的进程ID
4.sys.stats简介

sys.stats主要用于存放MSSQL数据库中统计信息的统计,每条统计信息在sys.stats中都对应一行记录
5.sys.dm_exec_procere_stats 主要用于获取mssql自重新启动以来,缓存中存储过程中的运行情况
(
存储过程自启动以来执行涉及的逻辑读次数
存储过程自启动以来平均逻辑读次数
存储过程自启动以来执行次数
存储过程自启动以来运行耗时总时间
存储过程自启动以来平均运行耗时时间
存储过程自启动以来首次缓存时间
)
6.sys.proceres 表中记载指定数据库所涉及的全部存储过程,通过查询此系统表可以获取当前账户拥有查看权限的存储过程,
7.sys.messages 是系统表,里面存储过系统已经规划好的错误信息列表
请看一看,如有疑问,及时沟通!

⑧ sql语句创建表

CREATE TABLE 语句用于创建数据库中的表。

具体用法为:

CREATE TABLE 表名称

(

列名称1 数据类型,

列名称2 数据类型,

列名称3 数据类型,

....

)

(8)sql表的用法扩展阅读

创建表数据类型:

integer(size) int(size) smallint(size) tinyint(size):仅容纳整数。

decimal(size,d) numeric(size,d):容纳带有小数的数字。

char(size):容纳固定长度的字符串

varchar(size):容纳可变长度的字符串

date(yyyymmdd):容纳日期。

参考资料:网络-SQL CREATE TABLE

⑨ SQL表update用法

更新表名?

如:改表名有2006改为2007

declare @s varchar(8000)
set @s=''
select @s=@s+char(13)+char(10)
+'exec sp_rename '''+Name+''慎盯','''+replace(Name,'2006','2007')+''''
from sysobjects
where Name like '%2006%' and xtype='U' --加上
print @s
exec(@s)

go
--用游标

declare roy_cur cursor for
select Name
from sysobjects
where Name like '%2006%' and xtype='U' --加上表类型
declare @Tabname sysname,@s nvarchar(1000)
open roy_cur
fetch next from roy_cur into @Tabname
while @@fetch_status=0
begin
set @s='孙孝困exec sp_rename ''则念'+@Tabname+''','''+replace(@Tabname,'2006','2007')+''''--把表名为2006替换为2007
exec (@s)
fetch next from roy_cur into @Tabname
end
close roy_cur
deallocate roy_cur

⑩ sql 多表联查询怎么用

可以用谓词或联结实现:

连接实现:

select * from b join a on b.id=a.id where a.b=21

联结实现的条件是两表id来自同一值域,表示意义相同.在连接时其实两可以作成一个表的:

也就是

id,a.b,a.c,b.b.b.c

但由于空值的问题,导致了部分依赖所以才会拆分成两个表的.

使用谓词实现:

select * from b where id in (select id from a where a.b=21)

这个可以实现两表id来自同一值域,但表示意义不同的情况.也就是说两表中的id有无关性.

相比较而言,连接的方式更快一些,但这种情况是两表来自同一值域,且意义相同,如果不是这种情况,可能得不到你正确的值的.而使用谓词不管意义是否相同,都可以得到正确的值.

玩数据库必须知道这两个表是否具有相关性,也就是设计时的意义,否则优化词句什么的都没有办法去做的!