1 付键 也就是FK formary key
程序交流中心,这是专门为新手学习设立的论坛
二、SQL
Structur query language
结构化查询语言,是 *** 作关系型数据库中的对象。
DDL(Data definition language 数据定义语言),用于建表或删表 *** 作,以及对表约束进行修改
create table , alter table , drop table 对表结构的增删 *** 作。
DML(Data manipulation language 数据 *** 作语言),向表中插入纪录,修改纪录
insert , update , delete , merge
transaction ,事务控制语言,由DML语句组成的,commit; ,rollback;
select 查询语句
dcl 授权语句 grant
三、Oracle
DBMS 数据库管理系统
有Oracle提供,还提供AS,应用服务器
DBA 数据库管理员
四、相关 *** 作
1、sqlplus 访问数据库命令(本地访问/远程访问),和数据库建立连接的命令,是数据库 *** 作的环境
sqlplus 用户名/密码
2、show user 显示当前用户的用户名
改变身份可以直接connect 用户名/密码 --- 这个是sqlplus命令
在sqlplus中可以使用 ! 可以在shell和sqlplus间切换,!shell命令 可以在sqlplus中使用shell命令。
实际上是sqlplus开了子进程来执行shell命令。
3、Oracle数据库中的表分两类:用户表(用户使用 *** 作的表),系统表(数据库系统维护的表,也叫数据字典)
对用户表的DDL *** 作出发了对系统表的DML *** 作!
五、基本语法
1、select查询语句
select table_name from user_tables;(查询系统表)
以上的查询语句就是查询本用户下所拥有的所有表的表名。
投影 *** 作,只查看选择的字段的信息。
选择 *** 作,查看字段中的特定某些信息。
联接 *** 作,多表查询,通过表间连接,查寻出多表中的信息
(1)select table_name from user_tables;(查询系统表)
以上的查询语句就是查询本用户下所拥有的所有表的表名。
(2)sqlplus的buffer中会缓存最后一条sql语句,可以使用"/"来执行这最后一条sql语句,也可以使用
edit命令来编辑最后一条sql语句。
l命令(list)(sqlplus命令)可以显示buffer中最后一条命令。
sqlplus命令可以缩写
(3)desc [表名]
这是一条sqlplus命令,注意他不是sql语句,这条命令用于查看表的结构。descript的缩写
[字段名] [字段的类型],这是使用完desc命令后显示的表结构。
(4)select [表的字段名1],[表的字段名2], from 表名;
select from 表名; 查寻表中所有字段的信息
(5)关键字不等拆分,sql语句,以及表名,字段名是大小写不敏感的。
sql语句要以";"结尾,来表示sql语句结束,如果不加";"系统不会执行此条sql语句,并提示。
在Oracle中字符显示是左对齐,数值右对齐。
(6)在select 语句中可以使用数学表达式。
select [表达式(必须包含本表字段名)],[], from 表名;
运算的优先级的先乘除后加减,同级自左向右运算,括号改变优先级。
(7)别名
select [字段名或表达式] ["别名"],[] [""], from 表名;
可以通过在字段名或表达式后加空格"别名",可以给列,或者表达式结果其别名。
表达别名必须加双引号。
(8)字符串拼接使用||符号
select 目标字段名||" "||目标字段名 from 表名;
注意:在Oracle中的字符串要用''包含
别名中需要使用空格,或是大小写敏感时需要用""包含。
练习:
自己写一条SQL语句,执行的结果是select from ;
其中是每张系统表的表名
即在每张系统表的表名前加“select from” ,后加“;”
select 'select from '||table_name||';' from user_tables;
2、处理错误
(1)!oerr ora [错误号] ,系统可以显示错误的原因和如何修改。如果命令错误输入可以使用edit或ed来修改输入错误。
实际上是在编辑缓存文件中的最后一条sql语句。
也可以使用 (change) c /错误字段/正确字段,来进行替换 *** 作进行修改。
只有在Linux平台使用
! 相当于 host ,没有断连接,只是切换了一下,执行shell命令
(2)edit命令来编辑最后一条sql语句。
3、sqlplus设置
set pause on 回车响应,分屏显示,只在本会话中有效
set pause off 关闭分屏显示。
set pause "" 设置分屏显示的提示信息。
set pause on 先输出提示信息,回车响应,分屏显示
set head off 提头输出关闭
set feed off 结尾输出关闭
set echo off 回写关闭
spool 文件名sql 写入指定文件
spool off 关闭写入。
4、sql脚本
也就是在文件中写有sql语句的文件,可以在sqlplus中运行。
引入sql脚本
sqlplus 用户名/密码 @sql脚本 (注意:在用户名密码输入结束后一定要加空格然后再写@sql脚本)
在脚本中最后一行写上“exit”,则运行完脚本以后,回到shell上
5、
Oracle中的空值 空值会当无穷大处理,其实空值根本就不会存储,只是看作是无穷大。
Oracle中控制处理函数 NVL(字段名,值),这个字段中的空值替换为指定值,如果不为空,则会返回其原值。
例:select (salary12)(NVL(commission_pct,0)/100+1) salary,first_name from s_emp;
distinct关键字,去掉重复行(这个关键字会触发排序 *** 作)
例: select distinct dept_id,title from s_emp;
dept_id与title的联合不唯一
注意:distinct,关键字之后会对from之前的字段进行排重 *** 作。
6、column命令 --- sqlplus命令
column命令 列格式的定义
column 目标列名 查看这个类是否定义了格式
column 目标列名 format a 设置列宽。
column last_name heading 'Employee|Name' FORMAT A15
设置题头
这其中的'|'是换行符
column salary justify left format $99,99000
定义数字显示格式
注意:如果不满足显示的格式,就会把数据显示为"#"
column salary justify left format $00,00000
会出现$00,92800 ,用0补齐
column 列名 clear (清除列格式定义)
注意:只有sqlplus命令才有简写,并且在使用sqlplus命令时结尾也不能加分号。
六、选择 *** 作
1、order by
排序子句 ASC(默认,升序) DESC(降序)
order by 目标列名(别名) 排序顺序(不写排序顺序,会默认为升序排序)
例:select first_name from s_emp order by first_name;
select first_name from s_emp order by first_name desc;
注意:升序空值在结果的末尾,降序空值在结果的最前面。
2、where子句
where子句使用在 select from 后面,用来选择所需(符合条件的)的记录
where后面跟的是表达式 也就是 XXX=XXX, XXX between X and X ,XXX in(X,X,X)
like '' 通配查询
between and ,表示结果在这之间,between and是一个闭区间,
也就相当于 <= and >= 。
!=,<>,^=,这三个都标识不等于,<=,>=,=,这些运算符都可以使用。
in (va1,val2,) 判断结果是否在这个枚举中存在
like '' 字符串通配查询,'%'表示多个字符,'_',表示一个字符。
注意:转义的用法:like ‘S\_%’ escape ‘\’
and 表示只有两个条件同时满足
or 表示条件只要满足其中只一就可以
all 是要求都满足条件。
not ,则是可以与以上的条件产生反效果。
空值会对not in造成影响,也就是不等于任何值,但是空值例外。
is null 使用来判断值是否为空。
注意:Oracle中的字符串是严格区分大小写的。
(1)注意数据类型,数字类型直接写,字符用'' ,缺省格式的Date可以用'',只有别名
才用" "包含。
(2)选择合适的运算符
七、单行函数
1字符函数
字符是大小写敏感的
转小写 lower(字段名) --- 其中的参数可以是一个字符串常量或是一个字段名
转大写 upper(字段名)
首字母大写 initcap(字段名)
字符串拼接 concat(字段1, 字段2)
截取子串 substr(字段名, 起始位置,取字符个数)
dual表,是专门用于函数测试和运算的,他只有一条记录
字符串拼接 concat(,)
求指定子串 substr(,起始位置,取字符个数)
可以使用"-"表示从右向左取,取的时候可以从左往友取。
例:select substr(first_name,-2,2) sub from s_emp;(取后两个)
select substr(first_name,2,2) sub from s_emp;(取前两个)
2,数值函数
四舍五入 round(数据,保留小数点后几位)
可以用负数表示小数点前,0,表示小数点后第一位,也就是保留个位,-1表示个位(保留到十 位)。
例:select round(1536,1) from dual;
截取数字函数 trunc(数据,保留的位数(小数点后位数)) 截取个位之后补0
例:select trunc(123456,1) from dual;
3,日期函数
日期格式,
全日期格式 世纪信息,年月日,时分秒。
缺省日期格式,日-月-年 dd-mon-rr
修改当前会话的日期格式,会按照指定的格式输出日期
alter session set nls_date_format='yyyy mm dd hh24:mi:ss';
返回当前日期 sysdate
例:select sysdate from dual;
select sysdate+1 from dual; 获得明天的日期,加1,单位是天
日期是格式敏感的
求两个日期间相隔了多少个月 months_between(date1,date2)
加减指定数量的月份 add_months(date,月数),月数可以为负,负值就是减去相应的月数。
从date日期开始的第一个星期五 next_day(date,FriDay)
返回月末的日期 last_day(date)
截取日期 trunc(date,'年或月或日或时分秒')
例:select next_day(sysdate,2) from dual;
例:select trunc(add_months(sysdate,1),'month') from dual;
ROUND('25-MAY-95','MONTH') 01-JUN-95
ROUND('25-MAY-95 ','YEAR') 01-JAN-95
TRUNC('25-MAY-95 ','MONTH') 01-MAY-95
TRUNC('25-MAY-95 ','YEAR') 01-JAN-95
练习:
返回下个月的第一天的日期
select round(last_day(sysdate),'MONTH') from dual;
select add_months(trunc(sysdate,'MONTH'),1);
4,不同数据类型间转换函数
将日期转成字符 tochar(date,'日期格式')
日期格式要用有效格式,格式大小写敏感 'yyyy mm dd hh24:mi:ss',
'year'(全拼的年),'mm'(数字表示的月) 'month'(全拼的月),'day'(星期的全拼),'ddspth' (日期的全拼) 'yy mm dd'
例:select to_char(sysdate,'yyyy mm dd hh24:mi:ss')from dual;
将字符转换成数字 to_number('')
将数字转字符to_char(number,'fmt') fmt是数字格式
将字符串转成日期 to_date('','日期格式')
例:select to_char(to_date('2006 11 03','yyyy mm dd'),'dd-month-yy') from dual;
1、等值连接
select [表别名1字段名1],[表别名2字段名2],
from 表1 表别名1 ,表2 表别名2
where 表别名1字段名3=表别名2字段名4;
表连接时,当表与表之间有同名字段时,可以加上表名或表的别名,加以区分,使用时要用
表名字段名或表别名字段名(列名)。当表的字段名是唯一时,可以不用加上表名或表的别名。
注意:当为表起了别名,就不能再使用表名字段名。
例:select afirst_name,alast_name,bname
from s_emp a,s_dept b
where adept_id=bid;
2、非等值连接
select [表别名1字段名1],[表别名2字段名2],
from 表1 表别名1 ,表2 表别名2
where 表别名1字段名3 表别名2字段名4
可以使比较运算符,也可以使其他的除了'='的运算符
例:select eename, dgrade,esal
from emp e,salgrade d
where esal between dlosal and dhisal;
3、自连接
用别名把一张表中的数据分成两部分,然后在使用条件过滤。
select [表别名1字段名1],[表别名2字段名2],
from 表1 表别名1 ,表1 表别名2
where 表别名1字段名3=表别名2字段名4;
例:select afirst_name ename,bfirst_name cname
from s_emp a,s_emp b
where amanager_id=bid;
以上所提到的表连接,都叫做内连接,严格匹配两表的记录。
4、外连接
会使用一方表中的所有记录去和另一格表中的记录按条件匹配,空值也会匹配,这个表中的所有记录都会显示,数据库会模拟出记录去和那些不匹配的记录匹配。
例:select afirst_name enamei,aid,bfirst_name cname,bid
from s_emp a,s_emp b
where amanager_id=bid(+);
即用a表中的数据去匹配b表的,若b表中有null,系统模拟纪录与其匹配
注意:要把那一方的记录全部都显示出来,还有注意条件(+)跟在要全部选出的对端。
外连接的应用:
列出哪个部门没有员工
select edeptno,ddeptno
from emp e,dept d
where edeptno(+)=ddeptno
and edeptno is null;
三、组函数
group 组
group by 分组子句,按指定的分组规则分组 ,这个group by 子句可以跟在 select 语句后或是 having后面。
group by子句也会出发排序 *** 作,会按分组字段排序。
select [组函数或分组的字段名] , from 表名 group by [字段名1],[字段名2],;
例:select avg(salary) from s_emp group by dept_id;
注意:组函数可以处理一组数据,返回一个值。
组函数会忽略空值。
avg(),求平均值,sum(),求和 这两个函数的参数只能是number型的。
以下所提到的函数可以使用任意类型做参数。
count(),用来统计记录数,可以使用排重命令。count()默认使用的是all。
max(),min()求最大值和最小值,
count(),统计表中记录数。
例:select max(bname),avg(asalary), max(cname)
from s_emp a,s_dept b,s_region c
where adept_id=bid and bregion_id=cid
group by bdept_id;
注意:只要写了group by子句,
select后就只能用group by后的字段或者是组函数。
where子句只能够过滤记录,放单行函数。
having子句可以过滤组函数结果或是分组的信息,且写在group by子句后。
例:
select max(bname),avg(asalary), max(cname)
from s_emp a,s_dept b,s_region c
where adept_id=bid and bregion_id=cid
group by bid
having sum(asalary)>4000;
column 也可以定义有别名的列的格式。
column "别名" 格式定义
注意:要先过滤掉不需要的记录,然后再进行分组 *** 作,提高效率。
四、子查询
子查询,就是可以嵌在任何的sql语句中的select语句。
在select语句中嵌套子查询时,会先执行子查询。一般的会将子查询放在运算符的右边。
注意:在使用子查询时,要注意这个运算符是单行的(也就是只能是单值),还是多行运算符(范围,多值,in)。
配合使用子查询返回的结果必须符合运算符的用法。
例:
select first_name,title
from s_emp
where title=any(select title from s_emp
where last_name='Smith')
and upper(last_name)!='SMITH';
select first_name,title
from s_emp
where title in (select title from s_emp
where last_name='Smith')
and upper(last_name)!='SMITH';
五、将业务需求转换成可 *** 作的表
一: 需求分析
二: 画E-R图
三: 转换成表关系
四: 割接(新老系统交接)
五:
E-R图属性:
为强制且非空属性
o 可选属性(可以有值也可以没有)
# 表示此属性唯一且非空
实体关系:
mastbean maybean
数量关系: 多对一关系
一对多关系
一对一关系
多对多关系
第一范式,所有的属性都必须是单值,也就是属性只表示单一的意义。(记录可以重复,没有任何限制)
第二范式,属性要求唯一且非空,(记录不可重复,但是数据可能会出现冗余)。
第三范式,非主属性只能依赖于主属性,不能依赖于其他非主属性。(解决数据冗余问题)
六、约束
约束是针对表中的字段进行定义的。
primary key (主键约束 PK)保证实体的完整性,保证记录的唯一
主键约束,唯一且非空,并且每一个表中只能有一个主键,有两个字段联合作为主键,只有两个字段放在一起唯一标识记录,叫做联合主键。
foreign key (外建约束 FK)保证引用的完整性,
外键约束,外键的取值是受另外一张表中的主键或唯一值得约束,不能够取其他值,只能够引用主键会唯一键的值,被引用的表,叫做parent table(父表),引用方的表叫做child table(子表),要想创建子表,就要先创建父表,后创建子表,记录的插入也是如此,先父表后子表,删除记录,要先删除子表记录,后删除父表记录,要修改记录,如果要修改父表的记录要保证没有被子表引用。要删表时,要先删子表,后删除父表。
unuque key(唯一键),值为唯一
index(索引)是数据库特有的一类对象,view(示图)
典型的一对多 class 对应多个学生。
student table class table
______________________________ _________________________
| id | name | address| class_id| | id |class_desc|class_num|
|(PK)|______|________|___(FK)__| |(pk)|__________|_________|
| | | | | | | | |
一对一
student tabel shenfenzheng table
____________________ _________________________________
| id | name | address| | s_id |shenfen_desc|shenfen_num|
|(PK)|______|________| |(PK,FK)|____________|___________|
| | | | | | | |
多对多
student tabel zhongjian table kecheng table
____________________ _________________________________ __________________
| id | name | address| | s_id |shenfen_desc|shenfen_num| | kid | kechengname|
|(PK)|______|________| |(FK,FK)|____________|___________| | (PK)|____________|
| | | | |联合主键| | | | | |
引用对方表的主键,当作本身的主键,所以这个表的主键,既是主键又是外建
建表和其他相关 *** 作
DDL语句
创建表:
create table 表名 ( 字段名1 类型(数据长度)(default ) 约束条件, 字段名2 类型(数据长度) 约束条件 );
Oracle数据库中的数据类型
varchar(长度),可变长字符串,char(长度) 定长
number(,),number 表示浮点数,或者是整数
long 大对象,clog 字符的大对象,相当于文本文件在表中只存放一个相当于只针对值
blog 二进制的大对象,也是以相当于指针的形式存放的。
primary key约束:
主键约束的定义:
第一种定义形式:
create table test(c number primary key ); 列级约束
第二种定义形式:
create table test(c number , primary key(c) ) ; 表级约束
create table test( c1 number constraints pkc1 primary key ); 此约束有名字: pkc1
create table test(c number , c2 number , primary key (c ,c1) ) ; 用表级约束可以实现联合主键
foregin key (fk) 外键约束:
(先定义父表,再定义子表)
carete table parent(c1 number primary key );
create table child (c number primary key , c2 number references parent(c1));
或表级约束定义:
create table child( c number primary key , c2 number , foreign key(c2) references parent(c1));
如果两个字段都为唯一且非空,这时可以定义成UK+NOT NULL
(PK或UK)一对多(FK)
(PK+UK)一对一(FK) 或 (PK)一对一(PK)
多对对多关系,一般都通过一张中间表来分解成两个一对多的表
建立表
create table[schema]table
schema: 一个用户对应一个schema 不同用户下的表不能互相查看
select count() from s_dept; <===> select count() from sd0611s_dept;
一个表中只能存储一个LONG类型
CLOB 存储大的文本对象
BLOB 存储大的二进制对象
create table test(c1 number primary key); 设置主键
create table test(c1 number constraints test_c1 primary key); 定义约束名,默认约束名为SYS_ 在列后面定义约束称为列级约束
create table test(c1 number primary key(c1)); 所有列定义完后再定义约束称为表级约束(能定义联合主键)
cretae table test(c1 number,c2 number,priary key(c1,c2)); 定义联合主键
create table child(c1 number primary key); 先要定义父表
create table child(c1 number primary key, c2 number references parent(c1)); 然后定义子表 references parent定义外键
create table child(c1 number primary key, c2 number references parent(c1) on delete cascate); on delete cascate为级联删除
create table child(c1 number primary key, c2 number references parent(c1) on delete set null); on delete set null删除后将外键置空
create table child (c1 number primary key, c2 number,foreignkey(c2) references parent(c1));
二、约束
1、非空约束(not null)
这是一个列级约束
在建表时,在数据类型的后面加上 not null ,也就是在插入时不允许插入空值。
例:create table student(id number primary key,name varchar2(32) not null,address varchar2(32));
2、unique 唯一约束
唯一约束,是会忽略空值的,唯一约束,要求插入的记录中的值是为一的。
例:create table student(id number,name varchar2(32),address varchar2(32),primary key (id),unique (address));
如果创建一个uk,系统自动建一个唯一索引
3、pk、uk
Oralce支持级联删除,不支持级联更新
4、check约束
检查约束,可以按照指定条件,检查记录的插入。check中不能使用尾列,不能使用函数,不能引用其他字段。
例:create table sal (a1 number , check(a1>1000));
为了能最小化磁盘I/O MyISAM 存储引擎采用了很多数据库系统使用的一种策略 它采用一种机制将最经常访问的表保存在内存区块中
对索引区块来说 它维护着一个叫索引缓存(索引缓冲)的结构体 这个结构体中放著许多那些最常使用的索引区块的缓冲区块 对数据区块来说 MySQL没有使用特定的缓存 它依靠 *** 作系统的本地文件系统缓存本章首先描述了 MyISAM 索引缓存的基本 *** 作 然后讨论在MySQL 中所做的改进 它提高了索引缓存性能 同时能更好地控制缓存 *** 作
线程之间不再是串行地访问索引缓存 多个线程可以并行地访问索引缓存 可以设置多个索引缓存 同时也能指定数据表索引到特定的缓存中索引缓存机制对 ISAM 表同样适用 不过 这种有效性正在减弱 自从MySQL 开始 MyISAM 表类型引进之后 ISAM 就不再建议使用了 MySQL 更是延续了这个趋势 ISAM 类型默认被禁用了
可以通过系统变量 key_buffer_size 来控制索引缓存区块的大小 如果这个值大小为 那么就不使用缓存 当这个值小得于不足以分配区块缓冲的最小数量( )时 也不会使用缓存
当索引缓存无法 *** 作时 索引文件就只通过 *** 作系统提供的本地文件系统缓冲来访问(换言之 表索引区块采用的访问策略和数据区块的一致)
一个索引区块在 MyISAM 索引文件中是一个连续访问的单元 通常这个索引区块的大小和B树索引节点大小一样(索引在磁盘中是以B树结构来表示的 这个树的底部时叶子节点 叶子节点之上则是非叶子节点)
在索引缓存结构中所有的区块大小都是一样的 这个值可能等于 大于 或小于表的索引区块大小 通常这两个值是不一样的
当必须访问来自任何表的索引区块时 服务器首先检查在索引缓存中是否有可用的缓冲区块 如果有 服务器就访问缓存中的数据 而非磁盘 就是说 它直接存取缓存 而不是存取磁盘 否则 服务器选择一个(多个)包含其它不同表索引区块的缓存缓冲区块 将它的内容替换成请求表的索引区块的拷贝 一旦新的索引区块在缓存中了 索引数据就可以存取了
当发生被选中要替换的区块内容修改了的情况时 这个区块就被认为 脏 了 那么 在替换之前 它的内容就必须先刷新到它指向的标索引
通常服务器遵循LRU(最近最少使用)策略 当要选择替换的区块时 它选择最近最少使用的索引区块 为了想要让选择变得更容易 索引缓存模块会维护一个包含所有使用区块特别的队列(LRU链) 当一个区块被访问了 就把它放到队列的最后位置 当区块要被替换时 在队列开始位置的区块就是最近最少使用的 它就是第一候选删除对象
共享访问索引缓存
在MySQL 以前 访问索引缓存是串行的 两个线程不能并行地访问索引缓存缓冲 服务器处理一个访问索引区块的请求只能等它之前的请求处理完 结果 新的请求所需的索引区块就不在任何索引缓存环冲区块中 因为其他线程把包含这个索引区块的缓冲给更新了
从MySQL 开始 服务器支持共享方式访问索引缓存
没有正在被更新的缓冲可以被多个线程访问
缓冲正被更新时 需要使用这个缓冲的线程只能等到更新完成之后
多个线程可以初始化需要替换缓存区块的请求 只要它们不干扰别的线程(也就是 它们请求不同的索引区块 因此不同的缓存区块被替换)
共享方式访问索引缓存令服务器明显改善了吞吐量
多重索引缓存
共享访问索引缓存改善了性能 却不能完全消除线程间的冲突 它们仍然争抢控制管理存取索引缓存缓冲的结构 为了更进一步减少索引缓存存取冲突 MySQL 提供了多重索引缓存特性 这能将不同的表索引指定到不同的索引缓存
当有多个索引缓存 服务器在处理指定的 MyISAM 表查询时必须知道该使用哪个 默认地 所有的 MyISAM 表索引都缓存在默认的索引缓存中 想要指定到特定的缓存中 可以使用 CACHE INDEX 语句
如下语句所示 指定表的索 t t 和 t 引缓存到名为 hot_cache 的缓存中
mysql> CACHE INDEX t t t IN hot_cache; + + + + + | Table | Op | Msg_type | Msg_text | + + + + + | test t | assign_to_keycache | status | OK | | test t | assign_to_keycache | status | OK | | test t | assign_to_keycache | status | OK | + + + + +
注意 如果服务器编译支持存 ISAM 储引擎了 那么 ISAM 表也使用索引缓存机制 不过 ISAM 表索引只能使用默认的索引缓存而不能自定义
CACHE INDEX 语句中用到的索引缓存是根据用 SET GLOBAL 语句的参数设定的值或者服务器启动参数指定的值创建的 如下 mysql> SET GLOBAL keycache key_buffer_size= ;想要删除索引缓存 只需设置它的大小为 mysql> SET GLOBAL keycache key_buffer_size= ;索引缓存变量是一个结构体变量 由名字和组件构成 例如 keycache key_buffer_size keycache 就是缓存名 key_buffer_size 是缓存组件 默认地 表索引在服务器启动时指定到主(默认的)索引缓存中 当一个索引缓存被删掉后 指定到这个缓存的所有索引都被重新指向到了默认索引缓存中去 对一个繁忙的系统来说 我们建议以下三条策略来使用索引缓存 热缓存占用 %的总缓存空间 用于繁重搜索但很少更新的表 冷缓存占用 %的总缓存空间 用于中等强度更新的表 如临时表 冷缓存占用 %的总缓存空间 作为默认的缓存 用于所有其他表 使用三个缓存的一个原因是好处在于 存取一个缓存结构时不会阻止对其他缓存的访问 访问一个表索引的查询不会跟指定到其他缓存的查询竞争 性能提高还表现在以下几点原因 热缓存只用于检索记录 因此它的内容总是不需要变化 所以 无论什么时候一个索引区块需要从磁盘中引入 被选中要替换的缓存区块的内容总是要先被刷新 索引被指向热缓存中后 如果没有需要扫描全部索引的查询 那么对应到B树中非叶子节点的索引区块极可能还保留在缓存中 在临时表里必须频繁执行一个更新 *** 作是相当快的 如果要被更新的节点已经在缓存中了 它无需先从磁盘中读取出来 当临时表的索引大小和冷缓存大小一样时 那么在需要更新一个节点时它已经在缓存中存在的几率是相当高的
中点插入策略
默认地 MySQL 的索引缓存管理系统采用LRU策略来选择要被清除的缓存区块 不过它也支持更完善的方法 叫做 中点插入策略
使用中点插入策略时 LRU链就被分割成两半 一个热子链 一个温子链 两半分割的点不是固定的 不过缓存管理系统会注意不让温子链部分 太短 总是至少包括全部缓存区块的 key_cache_division_limit 比率 key_cache_division_limit 是缓存结构体变量的组件部分 因此它是每个缓存都可以设置这个参数值
当一个索引区块从表中读入缓存时 它首先放在温子链的末尾 当达到一定的点击率(访问这个区块)后 它就提升到热子链中去 目前 要提升一个区块的点击率( )对每个区块来说都是一样的 将来 我们会让点击率依靠B树中对应的索引区块节点的级别 包含非叶子节点的索引区块所要求的提升点击率就低一点 包含叶子节点的B索引树的区块的值就高点
提升起来的区块首先放在热子链的末尾 这个区块在热子链内一直循环 如果这个区块在该子链开头位置停留时间足够长了 它就会被降级回温子链 这个时间是由索引缓存结构体变量的组件 key_cache_age_threshold 值来决定的
这个阀值是这么描述的 一个索引缓存包含了 N 个区块 热子链开头的区块在低于 Nkey_cache_age_threshold/ 次访问后就被移动到温子链的开头位置 它又首先成为被删除的候选对象 因为要被替换的区块还是从温子链的开头位置开始的
中点插入策略就能在缓存中总能保持更有价值的区块 如果更喜欢采用LRU策略 只需让 key_cache_division_limit 的值低于默认值
中点插入策略能帮助改善在执行需要有效扫描索引 它会将所有对应到B树中高级别的有价值的节点推出的查询时的性能 为了避免这样 就必须设定 key_cache_division_limit 远远低于 以采用中点插入策略 则在扫描索引 *** 作时那些有价值的频繁点击的节点就会保留在热子链中了
索引预载入
如果索引缓存中有足够的区块用来保存全部索引 或者至少足够保存全部非叶子节点 那么在使用前就载入索引缓存就很有意义了 将索引区块以十分有效的方法预载入索引缓存缓冲 从磁盘中顺序地读取索引区块
没有预载入 查询所需的索引区块仍然需要被放到缓存中去 虽然索引区块要保留在缓存中 因为有足够的缓冲 它们可以从磁盘中随机读取到 而非顺序地
想要预载入缓存 可以使用 LOAD INDEX INTO CACHE 语句 如下语句预载入了表 t 和 t 的索引节点(区块)
mysql> LOAD INDEX INTO CACHE t t IGNORE LEAVES; + + + + + | Table | Op | Msg_type | Msg_text | + + + + + | test t | preload_keys | status | OK | | test t | preload_keys | status | OK | + + + + +
增加修饰语 IGNORE LEAVES 就只预载入非叶子节点的索引区块 因此 上述语句加载了 t 的全部索引区块 但是只加载 t 的非叶子节点区块
如果使用 CACHE INDEX 语句将索引指向一个索引缓存 将索引区块预先放到那个缓存中去 否则 索引区块只会加载到默认的缓存中去
索引缓存大小
MySQL 引进了对每个索引缓存的新变量 key_cache_block_size 这个变量可以指定每个索引缓存的区块大小 用它就可以来调整索引文件I/O *** 作的性能
当读缓冲的大小和本地 *** 作系统的I/O缓冲大小一样时 就达到了I/O *** 作的最高性能了 但是设置索引节点的大小和I/O缓冲大小一样未必能达到最好的总体性能 读比较大的叶子节点时 服务器会读进来很多不必要的数据 这大大阻碍了读其他叶子节点
目前 还不能控制数据表的索引区块大小 这个大小在服务器创建索引文件 ` MYI 时已经设定好了 它根据数据表的索引大小的定义而定 在很多时候 它设置成和I/O缓冲大小一样 在将来 可以改变它的值 并且会全面采用变量 key_cache_block_size
重建索引缓存
索引缓存可以通过修改其参数值在任何时候重建它 例如
mysql> SET GLOBAL cold_cache key_buffer_size= ;
如果设定索引缓存的结构体变量组件变量 key_buffer_size 或 key_cache_block_size 任何一个的值和它当前的值不一样 服务器就会清空原来的缓存 在新的变量值基础上重建缓存 如果缓存中有任何的 脏 索引块 服务器会先把它们保存起来然后才重建缓存 重新设定其他的索引缓存变量并不会重建缓存
lishixinzhi/Article/program/Oracle/201311/16615
在前面的一篇文章《Visual C#中轻松浏览数据库记录》中 我们介绍了用Visual C#如何把数据表中的字段值绑定到文本框的属性上和如何 *** 作数据记录指针 随意浏览数据表中的记录 本文就接着上一篇的内容 来介绍用Visual C#如何来修改和删除数据记录
一 程序设计和运行的环境设置 ( )视窗 服务器版 ( )Microsoft Access Data Component 以上版本 ( MADC ) ( )本文程序使用的数据库的介绍
为了方便起见 在选用数据库方面选用了本地数据库Access 当然你也可以选用其他类型的数据库 只需要更改文章后面的程序源代码中数据库的引擎 并更改对应的代码就可以了 本程序中使用的数据库名称为sample mdb 在此数据库中有一张数据表books 此数据表的结构如下 字段名称 字段类型 代表意思 Bookid 数字 序号 booktitle 文本书籍名称 bookauthor 文本书籍作者 bookprice 数字 价格 bookstock 数字书架号
二 程序设计难点和应该注意的问题 在程序设计中的重点和难点就是如何用Visual C#删除记录和如何修改记录 下面就这二个问题进行必要的论述 ( )如何用Visual C#正确删除数据表中的记录
在用Visual C#删除记录的时候要注意的是 必须从二个方面彻底删除记录 即从数据库和用Visual C#编程时产生的一个DataSet对象中彻底删除 在程序设计的时候 如果只是删除了DataSet对象中的记录信息 这种删除是一种伪删除 这是因为当他退出程序 又重新运行程序 会发现 那个要删除的记录依然还存在 这是因为DataSet对象只是对数据表的一个镜像 并不是真正的记录本身 但如果只是从数据库中删除记录 因为我们此时程序用到的数据集合是从DataSet对象中读取的 子DataSet对象中依然保存此条记录的镜像 所以就会发现 我们根本没有删除掉记录 但实际上已经删除了 此时只有退出程序 重新运行 才会发现记录已经删除了 本文使用的方法是删除以上二个方面的记录或记录镜像信息 当然你也可以使用其他的方法 譬如 首先从数据库中删除记录 然后重新建立数据连接 重新创建一个新的DataSet对象 这种方法虽然也可以达到相同目的 但显然相对繁杂些 所以本文采用的是第一种方法 直接删除 在程序中具体的实现语句如下 //连接到一个数据库 string strCon = Provider = Microsoft Jet OLEDB ; Data Source = sample mdb ; OleDbConnection myConn = new OleDbConnection ( strCon ) ; myConn Open ( ) ; string strDele = DELETE FROM books WHERE bookid= + t_bookid Text ; OleDbCommand myCommand = new OleDbCommand ( strDele myConn ) ; //从数据库中删除指定记录 myCommand ExecuteNonQuery ( ) ; //从DataSet中删除指定记录信息 myDataSet Tables [ books ] Rows [ myBind Position ] Delete ( ) ; myDataSet Tables [ books ] AcceptChanges ( ) ; myConn Close ( ) ;
( )用Visual C#来修改数据表中的记录 在用Visual C#修改记录和删除记录 在程序设计中大致差不多 具体的实现方式也是通过SQL语句调用来实现的 下面就是在程序中修改记录的具体语句 //连接到一个数据库 string strCon = Provider = Microsoft Jet OLEDB ; Data Source = sample mdb ; OleDbConnection myConn = new OleDbConnection ( strCon ) ; myConn Open ( ) ;
//从数据库中修改指定记录 string strUpdt = UPDATE books SET booktitle = + t_booktitle Text + bookauthor = + t_bookauthor Text + bookprice = + t_bookprice Text + bookstock = + t_bookstock Text + WHERE bookid = + t_bookid Text ;
OleDbCommand myCommand = new OleDbCommand ( strUpdt myConn ) ; myCommand ExecuteNonQuery ( ) ; myConn Close ( ) ;
( )在了解了如何用Visual C#删除和修改记录以后 结合《Visual C#中轻松浏览数据库记录》一文的内容 就可以得到用Visual C#完成删除和修改数据记录的比较完整程序代码 以下是本文中介绍程序的运行后的程序界面
点击小图放大 本文中程序运行后的界面三 用Visual C#实现删除和修改数据库记录的完整源程序代码 using System ; using System Drawing ; using System ComponentModel ; using System Windows Forms ; using System Data OleDb ; using System Data ; public class DataEdit : Form { private System ComponentModel Container ponents ; private Button delete ; private Button update ; private Button lastrec ; private Button nextrec ; private Button previousrec ; private Button firstrec ; private TextBox t_bookstock ; private TextBox t_bookprice ; private TextBox t_bookauthor ; private TextBox t_booktitle ; private TextBox t_bookid ; private Label l_bookstock ; private Label l_bookprice ; private Label l_bookauthor ; private Label l_booktitle ; private Label l_bookid ; private Label label ; private System Data DataSet myDataSet ; private BindingManagerBase myBind ; private bool isBound = false ; //定义此变量 是判断组件是否已经绑定数据表中的字段
public DataEdit ( ) { // 对窗体中所需要的内容进行初始化 InitializeComponent ( ) ; //连接到一个数据库 GetConnected ( ) ; } //清除程序中用到的所有资源 public override void Dispose ( ) { base Dispose ( ) ; ponents Dispose ( ) ; } public void GetConnected ( ) { try{ //创建一个 OleDbConnection对象 string strCon = Provider = Microsoft Jet OLEDB ; Data Source = sample mdb ; OleDbConnection myConn = new OleDbConnection ( strCon ) ; string strCom = SELECT FROM books ; //创建一个 DataSet对象 myDataSet = new DataSet ( ) ; myConn Open ( ) ; OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom myConn ) ; myCommand Fill ( myDataSet books ) ; myConn Close ( ) ; //判断数据字段是否绑定到 TextBoxes if ( !isBound ) { //以下是为显示数据记录而把数据表的某个字段绑定在不同的绑定到文本框 Text 属性上 t_bookid DataBindings Add ( Text myDataSet books bookid ) ; t_booktitle DataBindings Add ( Text myDataSet books booktitle ) ; t_bookauthor DataBindings Add ( Text myDataSet books bookauthor ) ; t_bookprice DataBindings Add ( Text myDataSet books bookprice ) ; t_bookstock DataBindings Add ( Text myDataSet books bookstock ) ; //设定 BindingManagerBase //把对象DataSet和 books 数据表绑定到此myBind对象 myBind = this BindingContext [ myDataSet books ] ; isBound = true ; } } catch ( Exception e ) { MessageBox Show ( 连接数据库发生错误为 + e ToString ( ) 错误! ) ; } } public static void Main ( ) { Application Run ( new DataEdit ( ) ) ; } private void InitializeComponent ( ) { this ponents = new System ComponentModel Container ( ) ; this t_bookid = new TextBox ( ) ; this previousrec = new Button ( ) ; this l_bookauthor = new Label ( ) ; this delete = new Button ( ) ; this t_booktitle = new TextBox ( ) ; this t_bookauthor = new TextBox ( ) ; this t_bookprice = new TextBox ( ) ; this l_bookprice = new Label ( ) ; this t_bookstock = new TextBox ( ) ; this l_bookstock = new Label ( ) ; this l_booktitle = new Label ( ) ; this update = new Button ( ) ; this nextrec = new Button ( ) ; this lastrec = new Button ( ) ; this firstrec = new Button ( ) ; this label = new Label ( ) ; this l_bookid = new Label ( ) ; t_bookid Location = new System Drawing Point ( ) ; t_bookid Size = new System Drawing Size ( ) ;
t_booktitle Location = new System Drawing Point ( ) ; t_booktitle Size = new System Drawing Size ( ) ;
t_bookauthor Location = new System Drawing Point ( ) ; t_bookauthor Size = new System Drawing Size ( ) ;
t_bookprice Location = new System Drawing Point ( ) ; t_bookprice Size = new System Drawing Size ( ) ;
t_bookstock Location = new System Drawing Point ( ) ; t_bookstock Size = new System Drawing Size ( ) ; //以下是设定在程序中使用到的Label属性 l_bookid Location = new System Drawing Point ( ) ; l_bookid Text = 序 号 ; l_bookid Size = new System Drawing Size ( ) ; l_bookid Font = new System Drawing Font ( 宋体 f ) ; l_bookid TextAlign = System Drawing ContentAlignment MiddleCenter ; l_booktitle Location = new System Drawing Point ( ) ; l_booktitle Text = 书 名 ; l_booktitle Size = new System Drawing Size ( ) ; l_booktitle Font = new System Drawing Font ( 宋体 f ) ; l_booktitle TextAlign = System Drawing ContentAlignment MiddleCenter ; l_bookauthor Location = new System Drawing Point ( ) ; l_bookauthor Text = 作 者 ; l_bookauthor Size = new System Drawing Size ( ) ; l_bookauthor Font = new System Drawing Font ( 宋体 f ) ; l_bookauthor TextAlign = System Drawing ContentAlignment MiddleCenter ; l_bookprice Location = new System Drawing Point ( ) ; l_bookprice Text = 价 格 ; l_bookprice Size = new System Drawing Size ( ) ; l_bookprice Font = new System Drawing Font ( 宋体 f ) ; l_bookprice TextAlign = System Drawing ContentAlignment MiddleCenter ;
l_bookstock Location = new System Drawing Point ( ) ; l_bookstock Text = 书 架 号 ; l_bookstock Size = new System Drawing Size ( ) ; l_bookstock Font = new System Drawing Font ( 宋体 f ) ; l_bookstock TextAlign = System Drawing ContentAlignment MiddleCenter ;
//以下设定程序中用到的功能按钮的属性及对应的事件 delete Location = new System Drawing Point ( ) ; delete ForeColor = System Drawing Color Black ; delete Size = new System Drawing Size ( ) ; delete Font = new System Drawing Font ( 宋体 f ) ; delete Text = 删除记录 ; delete Click += new System EventHandler ( GoDelete ) ;
update Location = new System Drawing Point ( ) ; update ForeColor = System Drawing Color Black ; update Size = new System Drawing Size ( ) ; update Font = new System Drawing Font ( 宋体 f ) ; update Text = 修改记录 ; update Click += new System EventHandler ( GoUpdate ) ;
firstrec Location = new System Drawing Point ( ) ; firstrec ForeColor = System Drawing Color Black ; firstrec Size = new System Drawing Size ( ) ; firstrec Font = new System Drawing Font ( 宋体 f ) ; firstrec Text = 首记录 ; firstrec Click += new System EventHandler ( GoFirst ) ;
previousrec Location = new System Drawing Point ( ) ; previousrec ForeColor = System Drawing Color Black ; previousrec Size = new System Drawing Size ( ) ; previousrec Font = new System Drawing Font ( 宋体 f ) ; previousrec Text = 上一条 ; previousrec Click += new System EventHandler ( GoPrevious ) ;
nextrec Location = new System Drawing Point ( ) ; nextrec ForeColor = System Drawing Color Black ; nextrec Size = new System Drawing Size ( ) ; nextrec Font = new System Drawing Font ( 宋体 f ) ; nextrec Text = 下一条 ; nextrec Click += new System EventHandler ( GoNext ) ;
lastrec Location = new System Drawing Point ( ) ; lastrec ForeColor = System Drawing Color Black ; lastrec Size = new System Drawing Size ( ) ; lastrec Font = new System Drawing Font ( 宋体 f ) ; lastrec Text = 尾记录 ; lastrec Click += new System EventHandler ( GoLast ) ;
label Location = new System Drawing Point ( ) ; label Text = 用Visual C#来修改和删除数据库中的记录 ; label Size = new System Drawing Size ( ) ; label ForeColor = System Drawing SystemColors Desktop ; label Font = new System Drawing Font ( 宋体 f ) ; //设定程序的主窗体的属性 this Text = 用Visual C#来修改和删除数据库中的记录! ; this AutoScaleBaseSize = new System Drawing Size ( ) ; this FormBorderStyle = FormBorderStyle FixedSingle ; this ClientSize = new System Drawing Size ( ) ; //在主窗体中加入组件 this Controls Add ( delete ) ; this Controls Add ( update ) ; this Controls Add ( lastrec ) ; this Controls Add ( nextrec ) ; this Controls Add ( previousrec ) ; this Controls Add ( firstrec ) ; this Controls Add ( t_bookstock ) ; this Controls Add ( t_bookprice ) ; this Controls Add ( t_bookauthor ) ; this Controls Add ( t_booktitle ) ; this Controls Add ( t_bookid ) ; this Controls Add ( l_bookstock ) ; this Controls Add ( l_bookprice ) ; this Controls Add ( l_bookauthor ) ; this Controls Add ( l_booktitle ) ; this Controls Add ( l_bookid ) ; this Controls Add ( label ) ;
} // 删除记录 对应的事件 protected void GoDelete ( object sender System EventArgs e ) { try{ //连接到一个数据库 string strCon = Provider = Microsoft Jet OLEDB ; Data Source = sample mdb ; OleDbConnection myConn = new OleDbConnection ( strCon ) ; myConn Open ( ) ; string strDele = DELETE FROM books WHERE bookid= + t_bookid Text ; OleDbCommand myCommand = new OleDbCommand ( strDele myConn ) ; //从数据库中删除指定记录 myCommand ExecuteNonQuery ( ) ; //从DataSet中删除指定记录 myDataSet Tables [ books ] Rows [ myBind Position ] Delete ( ) ; myDataSet Tables [ books ] AcceptChanges ( ) ; myConn Close ( ) ; } catch ( Exception ed ) { MessageBox Show ( 删除记录错误信息 + ed ToString ( ) 错误! ) ; } } // 修改记录 按钮对应的事件 protected void GoUpdate ( object sender System EventArgs e ) { int i = myBind Position ; try{ //连接到一个数据库 string strCon = Provider = Microsoft Jet OLEDB ; Data Source = sample mdb ; OleDbConnection myConn = new OleDbConnection ( strCon ) ; myConn Open ( ) ;
//从数据库中修改指定记录 string strUpdt = UPDATE books SET booktitle = + t_booktitle Text + bookauthor = + t_bookauthor Text + bookprice = + t_bookprice Text + bookstock = + t_bookstock Text + WHERE bookid = + t_bookid Text ;
OleDbCommand myCommand = new OleDbCommand ( strUpdt myConn ) ; myCommand ExecuteNonQuery ( ) ; myConn Close ( ) ; } catch ( Exception ed ) { MessageBox Show ( 修改指定记录错误 + ed ToString ( ) 错误! ) ; } myBind Position = i ; } // 尾记录 按钮对应的事件 protected void GoLast ( object sender System EventArgs e ) { myBind Position = myBind Count ; } // 下一条 按钮对应的事件 protected void GoNext ( object sender System EventArgs e ) { if ( myBind Position == myBind Count ) MessageBox Show ( 已经到尾记录! ) ; else myBind Position += ; } // 上一条 按钮对应的事件 protected void GoPrevious ( object sender System EventArgs e ) { if ( myBind Position == ) MessageBox Show ( 已经到首记录! ) ; else myBind Position = ; } // 首记录 按钮对应的事件 protected void GoFirst ( object sender System EventArgs e ) { myBind Position = ; } } 四 编译源程序代码 生成执行文件 得到了Data cs源程序代码以后 经过下面编译命令编译成功后 即可得到执行文件data exe csc /t:winexe /r:system windows forms dll /r:system data dll data cs
lishixinzhi/Article/program/net/201311/15222
删除表用
drop语句
:drop table tablename;
解释:上面语句的意思就是删除表名为tablename的表。
删除记录用
delete语句
:delete from tablename where username = '123';
解释:上面语句的意思就是删除tablename表中username字段的值为123的所有记录。
备注:drop通常是删除的对象,delete通常删除的是某些特定条件下的记录。
对象归档后一般存储在sqlite3本地数据库中, 可以使用数据库语句管理归档的内容, 被归档的源对象存在于缓存中, 不需要手动管理, 该对象如果使用MRC模式需要 [Object release];来释放, 如果使用的是ARC模式,无需手动管理, 系统会自动释放
1、明白一些概览:
1)上传的并没有真正的存储在oracle数据库里,orcale数据库里其实存储的是的路径。
2)从浏览器上传到后端Action,action调用相应文件存储逻辑(文件存储系统)由文件存储系统完成的存储,并返回文件的路径。最后将这个路径保存到oracle数据库(这个部分可以很简单也可以很复杂视实际情况而定)。
2、相关删除逻辑,通过数据库里的文件路径找到实际的存储位置执行删除。删除成功后再删除数据库里相关记录。
任务管理器打开,一直点进去就可以了,这是可视化 *** 作啊
还有就是用SQL语句修改
use 数据库
go
然后下面的语句给你参考,哈
(1)数据记录筛选:
sql="selectfrom数据表where字段名=字段值orderby字段名[desc]"
sql="selectfrom数据表where字段名like'%字段值%'orderby字段名[desc]"
sql="selecttop10from数据表where字段名orderby字段名[desc]"
sql="selectfrom数据表where字段名in('值1','值2','值3')"
sql="selectfrom数据表where字段名between值1and值2"
(2)更新数据记录:
sql="update数据表set字段名=字段值where条件表达式"
sql="update数据表set字段1=值1,字段2=值2……字段n=值nwhere条件表达式"
(3)删除数据记录:
sql="deletefrom数据表where条件表达式"
sql="deletefrom数据表"(将数据表所有记录删除)
(4)添加数据记录:
sql="insertinto数据表(字段1,字段2,字段3…)values(值1,值2,值3…)"
sql="insertinto目标数据表selectfrom源数据表"(把源数据表的记录添加到目标数据表)
(5)数据记录统计函数:
AVG(字段名)得出一个表格栏平均值
COUNT(|字段名)对数据行数的统计或对某一栏有值的数据行数统计
MAX(字段名)取得一个表格栏最大的值
MIN(字段名)取得一个表格栏最小的值
SUM(字段名)把数据栏的值相加
引用以上函数的方法:
sql="selectsum(字段名)as别名from数据表where条件表达式"
setrs=connexcute(sql)
用rs("别名")获取统的计值,其它函数运用同上。
(5)数据表的建立和删除:
CREATETABLE数据表名称(字段1类型1(长度),字段2类型2(长度)……)
例:CREATETABLEtab01 (namevarchar (50), datetimedefaultnow ())
DROPTABLE数据表名称(永久性删除一个数据表)
4记录集对象的方法:
rsmovenext将记录指针从当前的位置向下移一行
rsmoveprevious将记录指针从当前的位置向上移一行
rsmovefirst将记录指针移到数据表第一行
rsmovelast将记录指针移到数据表最后一行
rsabsoluteposition=N将记录指针移到数据表第N行
rsabsolutepage=N将记录指针移到第N页的第一行
rspagesize=N设置每页为N条记录
rspagecount根据pagesize的设置返回总页数
rsrecordcount返回记录总数
rsbof返回记录指针是否超出数据表首端,true表示是,false为否
rseof返回记录指针是否超出数据表末端,true表示是,false为否
rsdelete删除当前记录,但记录指针不会向下移动
rsaddnew添加记录到数据表末端
rsupdate更新数据表记录
SQL语句的添加、删除、修改虽然有如下很多种方法,但在使用过程中还是不够用,不知是否有高手把更多灵活的使用方法贡献出来?
添加、删除、修改使用dbExecute(Sql)命令执行 *** 作
╔----------------╗
☆ 数据记录筛选 ☆
╚----------------╝
注意:单双引号的用法可能有误(没有测式)
Sql = "Select Distinct 字段名 From 数据表"
Distinct函数,查询数据库存表内不重复的记录
Sql = "Select Count() From 数据表 where 字段名1>#18:0:0# and 字段名1< #19:00# "
count函数,查询数库表内有多少条记录,“字段名1”是指同一字段
例:
set rs=connexecute("select count(id) as idnum from news")
responsewrite rs("idnum")
sql="select from 数据表 where 字段名 between 值1 and 值2"
Sql="select from 数据表 where 字段名 between #2003-8-10# and #2003-8-12#"
在日期类数值为2003-8-10 19:55:08 的字段里查找2003-8-10至2003-8-12的所有记录,而不管是几点几分。
select from tb_name where datetime between #2003-8-10# and #2003-8-12#
字段里面的数据格式为:2003-8-10 19:55:08,通过sql查出2003-8-10至2003-8-12的所有纪录,而不管是几点几分。
Sql="select from 数据表 where 字段名=字段值 order by 字段名 [desc]"
Sql="select from 数据表 where 字段名 like '%字段值%' order by 字段名 [desc]"
模糊查询
Sql="select top 10 from 数据表 where 字段名 order by 字段名 [desc]"
查找数据库中前10记录
Sql="select top n form 数据表 order by newid()"
随机取出数据库中的若干条记录的方法
top n,n就是要取出的记录数
Sql="select from 数据表 where 字段名 in ('值1','值2','值3')"
╔----------------╗
☆ 添加数据记录 ☆
╚----------------╝
sql="insert into 数据表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)"
sql="insert into 数据表 valuess (值1,值2,值3 …)"
不指定具体字段名表示将按照数据表中字段的顺序,依次添加
sql="insert into 目标数据表 select from 源数据表"
把源数据表的记录添加到目标数据表
╔----------------╗
☆ 更新数据记录 ☆
╚----------------╝
Sql="update 数据表 set 字段名=字段值 where 条件表达式"
Sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式"
Sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n "
没有条件则更新整个数据表中的指定字段值
╔----------------╗
☆ 删除数据记录 ☆
╚----------------╝
Sql="delete from 数据表 where 条件表达式"
Sql="delete from 数据表"
没有条件将删除数据表中所有记录)
╔--------------------╗
☆ 数据记录统计函数 ☆
╚--------------------╝
AVG(字段名) 得出一个表格栏平均值
COUNT(|字段名) 对数据行数的统计或对某一栏有值的数据行数统计
MAX(字段名) 取得一个表格栏最大的值
MIN(字段名) 取得一个表格栏最小的值
SUM(字段名) 把数据栏的值相加
引用以上函数的方法:
sql="select sum(字段名) as 别名 from 数据表 where 条件表达式"
set rs=connexcute(sql)
用 rs("别名") 获取统的计值,其它函数运用同上。
╔----------------------╗
☆ 数据表的建立和删除 ☆
╚----------------------╝
CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… )
例:CREATE TABLE tab01(name varchar(50),datetime default now())
DROP TABLE 数据表名称 (永久性删除一个数据表)
╔--------------------╗
☆ 记录集对象的方法 ☆
╚--------------------╝
rsmovenext 将记录指针从当前的位置向下移一行
rsmoveprevious 将记录指针从当前的位置向上移一行
rsmovefirst 将记录指针移到数据表第一行
rsmovelast 将记录指针移到数据表最后一行
rsabsoluteposition=N 将记录指针移到数据表第N行
rsabsolutepage=N 将记录指针移到第N页的第一行
rspagesize=N 设置每页为N条记录
rspagecount 根据 pagesize 的设置返回总页数
rsrecordcount 返回记录总数
rsbof 返回记录指针是否超出数据表首端,true表示是,false为否
rseof 返回记录指针是否超出数据表末端,true表示是,false为否
rsdelete 删除当前记录,但记录指针不会向下移动
rsaddnew 添加记录到数据表末端
rsupdate 更新数据表记录
以上就是关于数据库如何删除表中的一段区间内的所有数据全部的内容,包括:数据库如何删除表中的一段区间内的所有数据、MySQL数据库优化(七)、用Visual C#来修改和删除数据库记录等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)