精华内容
下载资源
问答
  • 每天提交的n值可以在数据库修改,比如教师要求学生每天提交2数据库的n改为2,然后学生在天内只能提交2二天这个值得重置为2(想了很久还是不知道怎么在当前代码基础上增加这个功能,不想用quartz,也不...
  • 数据库能插入一条记录...后来我发现,数据库只能插入一条数据,当出入二条数据的时候就报错。 检查发现是主键没有设置自动增长,而且我插入的时候忽略的主键(id)。 修改字段自增: alter table 表名 change i...

    数据库能插入一条记录但是不能插入第二条

    今天小谷在做微信小程序时,跑一个插入功能报了如下错:

    [Err] 1062 - Duplicate entry '0' for key 'PRIMARY'
    

    后来我发现,数据库中只能插入一条数据,当出入第二条数据的时候就报错。
    检查发现是主键没有设置自动增长,而且我插入的时候忽略的主键(id)。
    修改字段自增:

    alter table 表名 change id id int not null auto_increment ;
    

    修改主键

    alter table 表名 add primary key(id);
    
    展开全文
  • Oracle update 执行更新操作后的数据恢复 ...第一步:查询执行更新操作的时间 select r.FIRST_LOAD_TIME,r.* from v$sqlarea r order by r.FIRST_LOAD_TIME desc ; 执行上面那SQL语句,在下图的SQL_T...

    Oracle update 执行更新操作后的数据恢复

    操作数据库,经常会出现误操作,昨天执行的更新操作之后发现更新错了,只能想办法数据恢复了,现在整理一下

    第一步:查询执行更新操作的时间

    select r.FIRST_LOAD_TIME,r.* from v$sqlarea r order by r.FIRST_LOAD_TIME desc ;

    执行上面那条SQL语句,在下图的SQL_TEXT字段找到你执行更新操作的那条更新语句,找到更新操作时间

    第二步:创建一张新表,把数据恢复到新创建的表里

    create table t_table_recove --新表
    as
    select * from table1--你操作的那张表 
    as 
    of timestamp to_timestamp('2016-08-25/11:20:09','yyyy-mm-dd hh24:mi:ss'); --执行更新操操作的时间

    第三步:恢复数据(table1是你执行更新操作的那张表 )

    delete  table1;--将原表的数据全部删除
    insert into table1 select * from t_table_recove;--恢复数据

    第四步:查询一下,你更新的数据又还原了

    1

    select from table1

     

    展开全文
  • //只能输入正整数 不大于 最大页数 //判断输入是否是数字 var pattern=/^[0-9]*[1-9][0-9]*$/; var currentPage; currentPage = document.getElementById("txtCurrentPage").value; //用...
  • 做项目在做一个用户首次登陆输入手机号码,发送随机密码的功能模块,首次点击完全没问题,系统会发送短信(中国移动的短信机的原理是连接它的数据库,插入一条数据即可)问题就出在连接数据库的问题上,再次发送,则...
  • 个好用的数据库

    2008-05-14 08:36:06
    在VC知识库六期上面有篇介绍"单独使用CRecordset"文章,可是上面的CRecordset打开方式只能使用CRecordset::forwardOnly,游标只能向前滚动,而且用这种方式,你根本无法从打开的记录集中获得本次查询得到了有...
  • MySQL数据库基本用法

    2021-01-20 18:03:43
    数据库 1. 数据库概述 1.1 数据库概述 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,...第一行是表头,其他行是内容,数据之间用逗号分隔,每行是一条数据,这

    数据库

    1. 数据库概述

    1.1 数据库概述

    什么是数据库

    数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作

    一个小例子

    假设我们现在没有数据库,我们想开发一个本地的电话本软件,也就是手机中通讯录,这个软件有记录的功能,需要记录联系人姓名,电话号码,生日,性别等信息,由于是要持久化数据,所以我们只能写到文件中,比如phone.txt.例如:
    在这里插入图片描述

    第一行是表头,其他行是内容,数据之间用逗号分隔,每行是一条数据,这样设计完成之后就可以按行读取,并且能够按照逗号进行拆分存入到JavaBean中去了,现在的程序架构是这个样子的:

    在这里插入图片描述

    功能被完美的实现了,但是随着程序的演进发现了一些问题,例如想要找到所有的男性电话,或者查找今天过生日的人来给他们发一些过节短信等等的功能,需要不断的编码,而本质上都是在读取其中的文件信息,并且最要命的是无论什么功能都需要把所有的硬盘数据先加载进内存当中,即使这些数据时不需要的,那么如何能做到屏蔽掉文件系统,只读取一些需要的数据呢,编码界有一句老话"所有的计算机问题都可以通过增加一个中间层来解决",于是你觉定增加一个中间层,这个中间层上有逻辑的数据结构,其实就是[编号,姓名,性别,电话号码,生日]这些东西, 这些东西被叫做表,而其中的每一项被称为"列",每一列都要有类型,例如字符型,日期型,数字型等等,并且可以使用专业的语句来进行查询,我们决定叫它SQL,即Structured Query Language 结构化查询语言,那么现在软件的架构变成了这种

    在这里插入图片描述

    同时由于在程序和物理层之间抽象了一层,所以在优化物理层存储的时候,可以不影响上层应用程序的逻辑,可以使用索引,B+树等缓存手段了

    这就是关系型数据库

    数据库管理系统

    • 什么是数据库管理系统
      数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。
    • 常见的数据库管理系统
      • MYSQL:开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。
      • Oracle:收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。
      • DB2:IBM公司的数据库产品,收费的。常应用在银行系统中
      • SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用
      • SQLite: 嵌入式的小型数据库,应用在手机端
    • 数据库与数据库管理系统的关系
      在这里插入图片描述

    1.2 数据库表

    数据库中以表为组织单位存储数据。
    表类似我们的Java类,每个字段都有对应的数据类型。
    那么用我们熟悉的java程序来与关系型数据对比,就会发现以下对应关系。

    Java 数据库
    类中属性 表中字段
    对象 记录

    1.3 数据表

    根据表字段所规定的数据类型,我们可以向其中填入一条条的数据,而表中的每条数据类似类的实例对象。表中的一行一行的信息我们称之为记录

    在这里插入图片描述

    2. SQL语句

    数据库是不认识JAVA语言的,但是我们同样要与数据库交互,这时需要使用到数据库认识的语言SQL语句,它是数据库的代码。
    结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
    创建数据库、创建数据表、向数据表中添加一条条数据信息均需要使用SQL语句

    3.1 SQL分类

    • 数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等
    • 数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insert,delete,update等
    • 数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户
    • 数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等

    3.2 SQL通用语法

    • SQL语句可以单行或多行书写,以分号结尾

    • 可使用空格和缩进来增强语句的可读性

    • MySQL数据库的SQL语句不区分大小写,建议使用大写,例如:SELECT * FROM user

    • 同样可以使用/**/的方式完成注释

    • MySQL中常用的数据类型如下:

      类型 描述
      int 整型
      double 浮点型
      varchar 字符串类型
      date 日期类型,格式为yyyy-MM-dd,只有年月日,没有时分秒

    详细的数据类型

    MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型

    数值类型

    MySQL支持所有标准SQL数值数据类型。
    这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。
    关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
    BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
    作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。

    类型 大小 范围(有符号) 范围(无符号) 用途
    TINYINT 1 字节 (-128,127) (0,255) 小整数值
    SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值
    MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
    INT或INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
    BIGINT 8 字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
    FLOAT 4 字节 (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度
    浮点数值
    DOUBLE 8 字节 (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度
    浮点数值
    DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值

    日期和时间类型

    表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
    每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
    TIMESTAMP类型有专有的自动更新特性,将在后面描述。

    类型 大小
    (字节)
    范围 格式 用途
    DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
    TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间
    YEAR 1 1901/2155 YYYY 年份值
    DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
    TIMESTAMP 4

    1970-01-01 00:00:00/2038

    结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07

    YYYYMMDD HHMMSS 混合日期和时间值,时间戳

    字符串类型

    字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。

    类型 大小 用途
    CHAR 0-255字节 定长字符串
    VARCHAR 0-65535 字节 变长字符串
    TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串
    TINYTEXT 0-255字节 短文本字符串
    BLOB 0-65 535字节 二进制形式的长文本数据
    TEXT 0-65 535字节 长文本数据
    MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据
    MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
    LONGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据
    LONGTEXT 0-4 294 967 295字节 极大文本数据

    CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
    BINARY和VARBINARY类类似于CHAR和VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
    BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。
    有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最大长度和存储需求。

    3 SQL

    3.1 DDL

    数据库操作

    • 创建数据库
    create database 数据库名;
    create database if not exists 数据库名; -- 如果不存在则创建
    
    • 1
    • 2
    • 查看数据库

    查看MySQL服务器中的所有数据库:

    show databases;
    
    • 1
    • 查看某个数据库的定义信息
    show create database 数据库名;
    
    • 1
    • 删除数据库
    drop database 数据库名称;
    
    • 1
    • 切换数据库
    use 数据库名;
    
    • 1

    表结构相关语句

    • 创建表

    格式:

    create table 表名(
       字段名 类型(长度) 约束,
       字段名 类型(长度) 约束
    );
    
    • 1
    • 2
    • 3
    • 4

    例如:

    CREATE TABLE sort (
      sid INT, #分类ID 
      sname VARCHAR(100) #分类名称
    );
    CREATE TABLE sort (
      sid INT, #分类ID 
      sname VARCHAR(100) #分类名称
    )CHARSET=utf8;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 主键约束
      主键是用于标识当前记录的字段。它的特点是非空,唯一。在开发中一般情况下主键是 不具备任何含义,只是用于标识当前记录

    格式:

    1. 在创建表时创建主键,在字段后面加上 primary key
    CREATE TABLE 表名(
        id int primary key,
        ....
    );
    
    • 1
    • 2
    • 3
    • 4
    1. 在创建表时创建主键,在表创建的最后来指定主键
    CREATE TABLE 表名(
        id int,
        ....,
        primary key(id)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. 删除主键:
    alter table 表名 drop primary key;
    
    • 1
    1. 主键自增长(只适用于MySQL)

    一般主键是自增长的字段,不需要指定,实现添加自增长语句,主键字段后加auto_increment,例如:

    CREATE TABLE sort (
      sid INT PRIMARY KEY auto_increment, #分类ID 
      sname VARCHAR(100) #分类名称
    );
    
    • 1
    • 2
    • 3
    • 4
    • 查看表

    查看数据库中所有的表

    show tables;
    
    • 1
    • 查看表结构
    desc 表名;
    
    • 1

    • 查看建表语句
    show create table 表名;
    
    • 1
    • 删除表

    格式:

    drop table 表名;
    
    • 1
    • 修改表结构

    删除列:

    alter TABLE 表名 DROP 列名;
    
    • 1

    修改表名:

    RENAME TABLE 表名 TO 新表名;
    
    • 1

    修改表的字符集

    alter TABLE 表名 CHARACTER SET 字符集
    
    • 1

    修改列名

    alter TABLE 表名 CHANGE 列名 新列名 列类型;
    
    • 1

    添加列

    alter table 表名 add 列名 列类型;
    
    • 1

    3.2 DML操作

    首先先知道查询表中所有数据的语句:

    SELECT * FROM 表名;
    
    • 1

    DML是对表中的数据进行增、删、改的操作。不要与DDL混淆了,包含:

    • INSERT: 插入
    • UPDATE: 更新
    • DELETE: 删除

    小知识:

    在mysql中,字符串类型和日期类型都要用单引号括起来: ‘tom’ ‘2015-09-04’
    空值:null

    3.2.1 插入操作: INSERT:

    语法:

    INSERT INTO 表名(列名1,列名2 ...)VALUES(列值1,列值2...);
    
    • 1

    注意:

    • 列名与与列值的类型、个数、顺序要一一对应
    • 可以把列名当做java中的形参,把列值当做实参
    • 值不要超出列定义的长度
    • 如果插入空值,请使用null
    • 插入的日期和字符一样,都使用引号括起来

    练习

    创建表 emp 并插入数据,表结构如下

    列名 列类型
    id int
    name varchar(100)
    gender varchar(10)
    birthday date
    salary float(10,2)
    entry_date date
    resume text
    create table emp(
    id int,
    name varchar(100),
    gender varchar(10),
    birthday date,
    salary float(10,2),
    entry_date date,
    resume text
    );
    
    INSERT INTO emp(id,name,gender,birthday,salary,entry_date,resume)
    VALUES(1,'zhangsan','female','1990-5-10',10000,'2015-5-5-','good girl');
    
    INSERT INTO emp(id,name,gender,birthday,salary,entry_date,resume)
    VALUES(2,'lisi','male','1995-5-10',10000,'2015-5-5','good boy');
    
    INSERT INTO emp(id,name,gender,birthday,salary,entry_date,resume)
    VALUES(3,'wangwu','male','1995-5-10',10000,'2015-5-5','good boy');
    
    -- 批量插入
    INSERT INTO emp VALUES
    (4,'zs','m','2015-09-01',10000,'2015-09-01',NULL),
    (5,'li','m','2015-09-01',10000,'2015-09-01',NULL),
    (6,'ww','m','2015-09-01',10000,'2015-09-01',NULL);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    3.2.2 修改操作: UPDATE

    语法:

    UPDATE 表名 SET 列名1=列值1,列名2=列值2... WHERE 列名=值
    
    • 1

    练习

    • 将所有员工薪水修改为5000元。
    UPDATE emp SET salary=5000
    
    • 1
    • 将姓名为zhangsan的员工薪水修改为3000元
    UPDATE emp SET salary=3000 WHERE name=’ zhangsan’;
    
    • 1
    • 将姓名为lisi的员工薪水修改为4000元,job改为ccc
    UPDATE emp SET salary=4000,gender='female' WHERE name='lisi';
    
    • 1
    • 将所有男性的薪水在原有基础上加1000
    UPDATE emp SET salary=salary+1000 WHERE gender='male';
    
    • 1

    删除操作

    语法

    DELETE FROM 表名 [WHERE 列名=值]
    
    • 1

    练习

    • 删除表中姓名为zhangsan的记录
    DELETE FROM emp WHERE name = 'zhangsan';
    
    • 1
    • 删除表中所有记录
    DELETE FROM emp;
    
    • 1

    3.3 DQL 操作

    DQL数据查询语言 (重要)
    数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。
    查询返回的结果集是一张 虚拟表

    语法

     SELECT 列名 FROM表名 
    [WHERE -> GROUP BY -> HAVING -> ORDER BY]
    
    • 1
    • 2

    SELECT selection_list /要查询的列名称/
    FROM table_list /要查询的表名称/
    WHERE condition /行条件/
    GROUP BY grouping_columns /对结果分组/
    HAVING condition /分组后的行条件/
    ORDER BY sorting_columns /对结果分组/
    LIMIT offset_start, row_count /结果限定/

    准备工作

    创建表stu
    在这里插入图片描述

    CREATE TABLE stu (
    	sid	CHAR(6),
    	sname		VARCHAR(50),
    	age		INT,
    	gender	VARCHAR(50)
    );
    INSERT INTO stu VALUES('S_1001', 'liuYi', 35, 'male');
    INSERT INTO stu VALUES('S_1002', 'chenEr', 15, 'female');
    INSERT INTO stu VALUES('S_1003', 'zhangSan', 95, 'male');
    INSERT INTO stu VALUES('S_1004', 'liSi', 65, 'female');
    INSERT INTO stu VALUES('S_1005', 'wangWu', 55, 'male');
    INSERT INTO stu VALUES('S_1006', 'zhaoLiu', 75, 'female');
    INSERT INTO stu VALUES('S_1007', 'sunQi', 25, 'male');
    INSERT INTO stu VALUES('S_1008', 'zhouBa', 45, 'female');
    INSERT INTO stu VALUES('S_1009', 'wuJiu', 85, 'male');
    INSERT INTO stu VALUES('S_1010', 'zhengShi', 5, 'female');
    INSERT INTO stu VALUES('S_1011', 'xxx', NULL, NULL);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    创建 雇员表:emp

    在这里插入图片描述

    CREATE TABLE emp(
    	empno		INT,
    	ename		VARCHAR(50),
    	job		VARCHAR(50),
    	mgr		INT,
    	hiredate	DATE,
    	sal		DECIMAL(7,2),
    	comm		decimal(7,2),
    	deptno		INT
    );
    INSERT INTO emp values(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
    INSERT INTO emp values(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
    INSERT INTO emp values(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
    INSERT INTO emp values(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
    INSERT INTO emp values(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
    INSERT INTO emp values(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
    INSERT INTO emp values(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
    INSERT INTO emp values(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20);
    INSERT INTO emp values(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
    INSERT INTO emp values(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
    INSERT INTO emp values(7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20);
    INSERT INTO emp values(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
    INSERT INTO emp values(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
    INSERT INTO emp values(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    部分表:dept

    在这里插入图片描述

    CREATE TABLE dept(
    	deptno		INT,
    	dname		varchar(14),
    	loc		varchar(13)
    );
    INSERT INTO dept values(10, 'ACCOUNTING', 'NEW YORK');
    INSERT INTO dept values(20, 'RESEARCH', 'DALLAS');
    INSERT INTO dept values(30, 'SALES', 'CHICAGO');
    INSERT INTO dept values(40, 'OPERATIONS', 'BOSTON');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    1. 基础查询

    1.1 查询所有列

    SELECT * FROM stu;
    
    • 1

    在这里插入图片描述

    1.2 查询指定列

    SELECT sid, sname, age FROM stu;
    
    • 1

    在这里插入图片描述

    2. 条件查询

    2.1 条件查询介绍

    • 条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:
    • =、!=、<>、<、<=、>、>=;
    • BETWEEN…AND;
    • IN(set);
    • IS NULL; IS NOT NULL
    • AND;
    • OR;
    • NOT;

    2.2 查询性别为女,并且年龄为50的学生信息

    SELECT * FROM stu
    WHERE gender='female' AND age<50;
    
    • 1
    • 2

    在这里插入图片描述

    2.3 查询学号为S_1001,或者姓名为liSi的记录

    SELECT * FROM stu
    WHERE sid ='S_1001' OR sname='liSi';
    
    • 1
    • 2

    在这里插入图片描述

    2.4 查询学号为S_1001,S_1002,S_1003的记录

    SELECT * FROM stu 
    WHERE sid IN ('S_1001','S_1002','S_1003');
    
    • 1
    • 2

    在这里插入图片描述

    2.5 查询学号不是S_1001,S_1002,S_1003的记录

    SELECT * FROM tab_student 
    WHERE s_number NOT IN ('S_1001','S_1002','S_1003');
    
    • 1
    • 2

    在这里插入图片描述

    2.6 查询年龄为null的记录

    SELECT * FROM stu
    WHERE age IS NULL;
    
    • 1
    • 2

    2.7 查询年龄在20-40之间学生的记录

    SELECT * 
    FROM stu
    WHERE age>=20 AND age<=40;
    
    • 1
    • 2
    • 3

    或者

    SELECT * 
    FROM stu 
    WHERE age BETWEEN 20 AND 40;
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    2.8 查询性别非男的学生记录

    SELECT * 
    FROM stu
    WHERE gender!='male';
    
    • 1
    • 2
    • 3

    SELECT * 
    FROM stu
    WHERE gender<>'male';
    
    • 1
    • 2
    • 3

    SELECT * 
    FROM stu
    WHERE NOT gender='male';
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    2.9 查询姓名不为null的学生记录

    SELECT * 
    FROM stu
    WHERE sname IS NOT NULL;
    
    • 1
    • 2
    • 3

    SELECT * 
    FROM stu
    WHERE NOT sname IS NULL;
    
    • 1
    • 2
    • 3

    3 模糊查询

    前面介绍的所有操作符都是针对已知值进行过滤的,不管是匹配一个还是多个值,测试大于还是小于已知值,或者检查摸个范围的值,共同点是过滤中使用的值都是已知的.但是,这种过滤方法并不是任何时候都好用,例如当想查询中包含a字母的学生时就需要使用模糊查询了。模糊查询需要使用关键字LIKE
    在使用like关键字时,通常和通配符配合使用

    • 通配符: 用来匹配一部分的特殊字符
      • _ : 匹配任意一个字符
      • % : 任意0~n个字符

    3.1 查询姓名由5个字母构成的学生记录

    SELECT * 
    FROM stu
    WHERE sname LIKE '_____'
    -- 模糊查询必须使用LIKE关键字。其中 “_”匹配任意一个字母,5个“_”表示5个任意字母
    
    • 1
    • 2
    • 3
    • 4

    3.2 查询姓名由5个字母构成,并且第5个字母为“i”的学生记录

    SELECT * 
    FROM stu
    WHERE sname LIKE '____i';
    
    • 1
    • 2
    • 3

    3.3 查询姓名以“z”开头的学生记录

    SELECT * 
    FROM stu
    WHERE sname LIKE 'z%';
    -- 其中“%”匹配0~n个任何字母。
    
    • 1
    • 2
    • 3
    • 4

    3.4 查询姓名中第二个字母是i的学生记录

    SELECT * 
    FROM stu
    WHERE sname LIKE '_i%';
    
    • 1
    • 2
    • 3

    3.5 查询姓名中包含“a”字母的学生记录

    SELECT * 
    FROM stu
    WHERE sname LIKE '%a%';
    
    • 1
    • 2
    • 3

    4. 字段控制查询

    4.1 去除重复记录

    去除重复记录(两行或两行以上记录中系列的上的数据都相同),例如emp表中sal字段就存在相同的记录。当只查询emp表的sal字段时,那么会出现重复记录,那么想去除重复记录,需要使用DISTINCT

    SELECT DISTINCT sal FROM emp;
    
    • 1

    在这里插入图片描述

    数据是没有重复的

    4.2 查看雇员的月薪和佣金之和

    因为sal和comm两列的类型都是数值类型,所以可以做加运算。如果sal或comm中有一个字段不是数值类型,那么会出错

    SELECT *,sal+comm FROM emp;
    
    • 1

    在这里插入图片描述

    而comm列有很多记录的值为NULL,因为任何东西与NULL相加结果还是NULL,所以结算结果可能会出现NULL。下面使用了把NULL转换成数值0的函数IFNULL:

    SELECT *,sal+IFNULL(comm,0) FROM emp;
    
    • 1

    在这里插入图片描述

    4.3 给列添加别名

    在上面查询中出现列名为sal+IFNULL(comm,0),这很不美观,现在我们给这一列给出一个别名,为total:

    SELECT *, sal+IFNULL(comm,0) AS total FROM emp;
    
    • 1

    在这里插入图片描述

    给列起别名时,是可以省略AS关键字的:

    SELECT *,sal+IFNULL(comm,0)  total FROM emp;
    
    • 1

    5. 排序

    排序使用 order by 列名 asc/desc 作为语法
    默认是asc(升序) 可以指定 desc 降序

    5.1 查询所有学生记录,按年龄升序排序

    SELECT *
    FROM stu
    ORDER BY age ASC;
    
    • 1
    • 2
    • 3

    或者

    SELECT *
    FROM stu
    ORDER BY age;
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    5.2 查询所有学生记录,按年龄降序排序

    SELECT *
    FROM stu
    ORDER BY age DESC;
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    5.3 查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序

    SELECT * FROM emp
    ORDER BY sal DESC,empno ASC;
    
    • 1
    • 2

    在这里插入图片描述

    6. 聚合函数

    聚合函数是用来做纵向运算的函数

    • COUNT():统计指定列不为NULL的记录行数;
    • MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
    • MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
    • SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
    • AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

    6.1 COUNT

    当需要纵向统计时使用COUNT(),COUNT小括号中可以放入指定列名,和* 如果是* 则代表查询的是结果集的行数,如果是列名,则是指定列的行数

    查询emp表中记录数

    SELECT COUNT(*) AS cnt FROM emp;
    
    • 1

    在这里插入图片描述

    查询emp表中有佣金的人数

    SELECT COUNT(comm) cnt FROM emp;
    
    • 1

    在这里插入图片描述

    注意,因为count()函数中给出的是comm列,那么只统计comm列非NULL的行数

    查询emp表中月薪大于2500的人数

    SELECT COUNT(*) AS '人数' FROM emp
    WHERE sal > 2500;
    
    • 1
    • 2

    在这里插入图片描述

    统计月薪与佣金之和大于2500元的人数

    SELECT COUNT(*) AS cnt FROM emp WHERE sal+IFNULL(comm,0) > 2500;
    
    • 1

    在这里插入图片描述

    查询有佣金的人数,有领导的人数

    SELECT COUNT(comm), COUNT(mgr) FROM emp;
    
    • 1

    在这里插入图片描述

    6.2 SUM和AVG

    当需要纵向求和时使用sum()函数。当需要求平均值时使用avg()函数

    • 查询所有雇员的月薪和
    SELECT SUM(sal) FROM emp;
    
    • 1

    • 查询所有雇员月薪和,以及所有雇员佣金和
    SELECT SUM(sal), SUM(comm) FROM emp;
    
    • 1

    • 查询所有雇员月薪+佣金和
    SELECT SUM(sal+IFNULL(comm,0)) FROM emp;
    
    • 1

    • 统计所有员工的平均工资
    SELECT AVG(sal) FROM emp;
    
    • 1

    6.3 MAX 和 MIN

    MAX和MIN 是用来查询最大值和最小值的

    • 查询员工的最高工资和最低工资:
    SELECT MAX(sal), MIN(sal) FROM emp;
    
    • 1

    7. 分组查询

    当需要分组查询时需要使用GROUP BY子句,例如查询每个部门的工资和,这说明要使用部门来分组

    注意:
    凡是和聚合函数同时出现的列名,一定要写在group by 之后
    分组时候是无法体现单个数据的
    group by 一般会合聚合函数配合使用,单独使用的时候意义不大

    7.1 分组查询

    • 查询每个部门编号和每个部门的工资和:
    SELECT deptno, SUM(sal)
    FROM emp
    GROUP BY deptno;
    
    • 1
    • 2
    • 3

    • 查询每个部门的部门编号以及每个部门的人数
    SELECT deptno,COUNT(*)
    FROM emp
    GROUP BY deptno;
    
    • 1
    • 2
    • 3

    • 查询每个部门的编号以及每个部门工资大于1500的人数:
    SELECT deptno,COUNT(*)
    FROM emp
    WHERE sal>1500
    GROUP BY deptno;
    
    • 1
    • 2
    • 3
    • 4

    7.2 HAVING字句

    • 查询工资总和大于9000的部门编号以及工资总和:
    SELECT deptno, SUM(sal)
    FROM emp
    GROUP BY deptno
    HAVING SUM(sal) > 9000;
    
    • 1
    • 2
    • 3
    • 4

    having和where的区别

    1. having是在分组后对数据进行过滤,而where是在分组前对数据进行过滤
    2. having后面可以使用聚合函数(统计函数),where后面不可以使用聚合函数

    WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而HAVING是对分组后数据的约束

    在这里插入图片描述

    • 统计出各个部门的各个岗位中,平均工资>1000的信息
    SELECT
      job,
      deptno,
      avg(sal)
    FROM emp
    GROUP BY job, deptno
    HAVING avg(sal) > 1000;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    8. LIMIT

    LIMIT用来限定查询结果的起始行,以及总行数。

    • 查询5行记录,起始行从0开始
    SELECT * FROM emp LIMIT 0, 5;
    
    • 1

    查询语句的书写顺序:

    select – from- where- group by- having- order by-limit

    查询语句的执行顺序:

    from - where -group by - having - select - order by-limit

     

    转载:https://blog.csdn.net/cfy137000/article/details/80038883

    展开全文
  • 要想学习和掌握它的诸多新特性,只能从Oracle手册入手,而数万页的11g手册不免让人心存畏惧,从中挑出对新特性的描述更需要双“火眼金睛”。  好消息!在本书1版出版时隔4年后,Thomas Kyte及时了解了大家的这...
  • 修改操作的对象也可以是元组的集合,相对于面向记录的数据库语言一次只能操作一条记录来 语言的使用简化了用户的处理,提高了应用程序的运行效率 语言简洁,方便易学 语言功能强大,格式规范,表达简洁,接近英语的语法...
  • 2,循环2数据请求三方接口(耗时)(每数据只能请求3次三方接口) 3,请求成功则修改数据(请求三方的次数+1)。 现在的问题是 并发情况下,两个线程同时进来,取到2数据(已经请求过...
  • 数据库 控制并发

    2013-03-21 10:36:07
    在调用并发的程序时,假设两个人同时提交了某一个并发请求,并且传入了同样的参数,假设在程序中使用了对状态的控制,例如两个UPDATE语句在修改一条记录时,第一个UPDATE语句修改后长时间未提交,第二个UPDATE语句...

    在调用并发的程序时,假设两个人同时提交了某一个并发请求,并且传入了同样的参数,假设在程序中使用了对状态的控制,例如两个UPDATE语句在修改同一条记录时,第一个UPDATE语句修改后长时间未提交,第二个UPDATE语句修改了同一条记录,并提交,这时就两个UPDATE语句就起冲突了。

    也可以使用另外一种方法,使用lock,将提交的并发锁住,其他提交的只能排队。

    1. -- lock   
    2. l_lockname         VARCHAR2(100);  
    3. l_lockhandle       VARCHAR2(200);  
    4. l_lock_output      NUMBER;  
    5. l_locked              BOOLEAN := FALSE;  
    6.    
    7. --阻止并发导入同一批数据   
    8. l_lockname := G_PKG_NAME||'_RESERVE';  
    9.    
    10. --lockname类似一把锁,它定义了一个唯一的名字,当并发请求执行main函数的时候,lockname会自己得到,   
    11. --如果在执行中的并发程序与其重名那么并发就不能执行。这里可以灵活应用,   
    12. --例如传入的参数为Header_id,而我们允许不同的HeaderId同时执行但是不允许相同的HeaderId同时执行,   
    13. --那么可以使l_lockname := G_PKG_NAME||p_header_id,那么就可以锁住相同的HeaderId。   
    14.   
    15. --获取资源锁    
    16. dbms_lock.allocate_unique( lockname => l_lockname,  
    17.                            lockhandle => l_lockhandle);  
    18. -- release when session out, request time out 1分钟   
    19. l_lock_output := dbms_lock.request(l_lockhandle, 6, 60, FALSE);  
    20. IF l_lock_output <> 0 THEN  
    21.   xxfnd_api.set_message( p_app_name => xxfnd_api.g_app_name,  
    22.                          p_msg_name => 'XXFND_CONC_LOCKED_ERR',  
    23.                          p_token1 => 'EVENT',  
    24.                          p_token1_value => 'Reserve Batch',  
    25.                          p_token2 => 'DATA',  
    26.                          p_token2_value => '');  
    27.   RAISE fnd_api.g_exc_error;  
    28. END IF;  
    29.    
    30. l_locked := TRUE;  
    31.    
    32. /**要特别注意的是一定要lockname释放掉,否则这个并发就永远别想执行**/  
    33. --需要释放lockname的地方除了程序正常的结束部分还有异常处理部分,都要使用   
    34.    
    35. IF l_locked THEN  
    36. --释放资源锁   
    37.   l_lock_output := dbms_lock.release(l_lockhandle);  
    38. END IF;  
    -- lock
    l_lockname         VARCHAR2(100);
    l_lockhandle       VARCHAR2(200);
    l_lock_output      NUMBER;
    l_locked              BOOLEAN := FALSE;
     
    --阻止并发导入同一批数据
    l_lockname := G_PKG_NAME||'_RESERVE';
     
    --lockname类似一把锁,它定义了一个唯一的名字,当并发请求执行main函数的时候,lockname会自己得到,
    --如果在执行中的并发程序与其重名那么并发就不能执行。这里可以灵活应用,
    --例如传入的参数为Header_id,而我们允许不同的HeaderId同时执行但是不允许相同的HeaderId同时执行,
    --那么可以使l_lockname := G_PKG_NAME||p_header_id,那么就可以锁住相同的HeaderId。
    
    --获取资源锁 
    dbms_lock.allocate_unique( lockname => l_lockname,
                               lockhandle => l_lockhandle);
    -- release when session out, request time out 1分钟
    l_lock_output := dbms_lock.request(l_lockhandle, 6, 60, FALSE);
    IF l_lock_output <> 0 THEN
      xxfnd_api.set_message( p_app_name => xxfnd_api.g_app_name,
                             p_msg_name => 'XXFND_CONC_LOCKED_ERR',
                             p_token1 => 'EVENT',
                             p_token1_value => 'Reserve Batch',
                             p_token2 => 'DATA',
                             p_token2_value => '');
      RAISE fnd_api.g_exc_error;
    END IF;
     
    l_locked := TRUE;
     
    /**要特别注意的是一定要lockname释放掉,否则这个并发就永远别想执行**/
    --需要释放lockname的地方除了程序正常的结束部分还有异常处理部分,都要使用
     
    IF l_locked THEN
    --释放资源锁
      l_lock_output := dbms_lock.release(l_lockhandle);
    END IF;


     

    补充说明:

    锁定模式 描 述 对应到TM锁中的模式
    nl_mode null锁定模式 Null
    ss_mode subshared锁定模式 RS
    sx_mode subexclusive锁定模式 RX
    s_mode shared锁定模式 S
    ssx_mode subshared exclusive锁定模式 RSX
    x_mode exclusive锁定模式 X

    调用dbms_lock.request函数以后的返回值包括:

    返 回 值 含 义
    0 申请锁定成功
    1 申请锁定时超时
    2 申请锁定时发生死锁
    3 传入参数错误
    4 已经获得了锁定,重复申请了锁
    5 传入的锁定句柄错误

    释放锁定

     

     

    一下是工作中用到的一次线程并发的案例

        

    create or replace function f_mms_di_getsubgroup (     i_in_prilevel            in           integer,         -- 0 urgency  , 1 normal     i_o_subgroupid           out          integer,     rec_o_taskinfo           out          t_mmstaskinfo%rowtype,     i_o_isfirst              out          integer,         --0: no   1: first subgroup     i_o_reportid             out          integer,     i_o_result               out          number           --0: unknown error                                                            --1: success                                                            --2: no task left ) return integeras    dt_l_current           date := sysdate;     i_l_taskid             integer;     i_l_interval           integer;     str_l_lockhandle       varchar2(128);     i_l_groupid            integer;     i_l_return             integer;     i_l_result             integer;     i_l_count              integer;     i_l_subject            varchar2(100);     i_l_taskname           varchar2(100);   begin    i_l_taskname :=rec_o_taskinfo.taskname;     i_o_result   := 1;       i_l_interval := f_conf_qr_getconfigvalue('valid_interval', 24);       --get a lock     dbms_lock.allocate_unique ( user || '.' || 'f_mms_di_getsubgroup', str_l_lockhandle );       i_l_return := dbms_lock.request ( str_l_lockhandle,                                       6,                                       1000,                                       false                                    );       if ( i_l_return <> 0 ) then        i_o_result := 1;         return 0;     end if;       for item in (select x.*                    from t_mmstaskinfo x                   where status in (0, 1)                      and x.sendbegindate <= dt_l_current                     and approvestatus = 1                     and isvalid = 1                   order by decode(i_in_prilevel, 0, mmslevel, 1 - mmslevel),updatetime                 ) loop         --- status is in ready sending ,send complete , treate it as the first time          if (item.status in (0, 3)) then            i_o_isfirst := 1;         else            i_o_isfirst := 0;         end if;           --expired ,change the status as complete         if (item.sendenddate < dt_l_current) then              if (item.status <> 3) then                  update t_mmstaskinfo a                    set a.status = 3,                        a.updatetime = systimestamp                  where mmstaskid = item.mmstaskid;               end if;               goto nextitem;         end if;            --- update status of          update t_mmstaskinfo a            set a.updatetime = systimestamp,                status = decode(status, 0, 1, status)          where mmstaskid = item.mmstaskid;           i_l_taskid := item.mmstaskid;           --- get mms  subject          select t.mmssubject           into i_l_subject           from t_mms_info t          where t.mmsid = (select tt.mmsid                             from t_mmstaskinfo tt                            where tt.mmstaskid = i_l_taskid);                                      ---- if the stauts is in  ready ,sending ,send complete          ---- then change the t_mmssubgroup status to 2 , dealing          if (item.status in (0, 1, 3)) then              update /*+rule*/t_mmssubgroup x                set updatetime = dt_l_current,                    status = 2              where taskid = item.mmstaskid                and status = 1                and rownum <= 1          returning x.subgroupid               into i_o_subgroupid;           end if;           if (sql%found) then                          -- get mmstaskinfo by taskid             select *               into rec_o_taskinfo               from t_mmstaskinfo              where mmstaskid = i_l_taskid;                           -- if the mmstaskinfo is the first time to be send             if (i_o_isfirst = 1) then                  select s_mmsreport_reportid.nextval                   into i_o_reportid                   from dual;                                   -- record t_mmsreport                 i_l_return := f_mms_di_recordbatchreport( i_o_reportid,                                                           i_o_isfirst,                                                           case rec_o_taskinfo.status                                                          when 5 then 2                                                                when 4 then 2                                                                else 1                                                           end,                                                           rec_o_taskinfo.groupid,                                                           rec_o_taskinfo.mmstaskid,                                                           i_l_subject,                                                           rec_o_taskinfo.taskname,                                                           0,                                                           0,                                                           i_l_result                                                         );             else                select nvl(max(reportid), -1)                   into i_o_reportid                   from t_mmsreport                  where taskid = rec_o_taskinfo.mmstaskid;             end if;               commit;             i_l_return := dbms_lock.release(str_l_lockhandle);             return 1;           else                        -- if the taskinfo's status in (0 ready to send ,1 sending ,3 sended)             -- get subgroup due to the mms taskinfo             if (item.status in (0, 1, 3)) then                select count(*)                   into i_l_count                   from t_mmssubgroup t                  where t.taskid = item.mmstaskid                    and t.status = 2                    and t.updatetime > dt_l_current - 30 / 24 / 60;               end if;               -- if there is no subgroup could be found which status is 2             -- change the status of mmsstaskinfo to 3 (completed)              if(i_l_count < 1) then                i_l_groupid := item.groupid;                 i_l_return := f_mms_di_modifymmsgroupstatus(i_l_groupid,                                                          i_l_result);                 update t_mmstaskinfo a                    set a.status = 3, a.updatetime = dt_l_current                  where mmstaskid = item.mmstaskid;             end if;           end if;       <<nextitem>>         null;     end loop;       commit;     i_l_return := dbms_lock.release(str_l_lockhandle);     i_o_result := 2;     return 1; exception     when others then        p_in_procexceptionlog('DB exception.');         rollback;         i_l_return := dbms_lock.release(str_l_lockhandle);         i_o_result := 0;         return 0; end f_mms_di_getsubgroup; 
    


     

     

    http://blog.csdn.net/a416090287/article/details/8245466

    展开全文
  • SQL 数据库中的事务

    2010-10-08 11:28:00
    SQL 数据库中的事务 11.4.1 事务的由来 使用DELETE 命令或UPDATE 命令对数据库进行更新时一次只能操作一个表,这会带来数据库的数据不一致的...假设后勤部编号为‘1012’ 第一条DELETE 语句修改depart
  • 数据库设计

    2008-11-06 16:53:00
    对于成千上万记录来说,检索确实是件耗费资源的事情,所以引入view的概念,我们可以用某种条件创建view ,view是表中元素的子集,当表做改变时,view也同步改变,但是不能修改view,换句话说view只能做查询用,从子...
  • android sqlite数据库使用

    热门讨论 2011-09-17 00:25:56
    在Android平台上可以操作数据库,这是第一次接触Android时的惊艳之一。在Android平台上,绑定了SQLite数据库,这个数据库系统也是极具性格的,它的最大的应用场景是嵌入式系统,进一步了解可以参看这里。 如果有JDBC...
  • oracle数据库经典题目

    2011-02-17 15:05:20
    支持一条、多条、零条记录的处理。 游标的基本操作步骤为: (1)声明游标,使用查询来定义游标的列和行 (2)打开游标,使用PL/SQL命令OPEN来打开一个声明的游标 (3)提取数据,从游标中重复提取每条记录到数据结构中,...
  • 简单说就是:一条线缆被记录在表中是N条,保持永远是N条不变,然后把数字“N”,生成条形码贴在线缆上,用手机扫描条形码就能知道,我们要查几条记录了,直接把指针移过支读取。 项目要成功的关键就是 要...
  • 修改tel列的位置,在第一列显示 alter table user modify tel varchar(15) default '02087654321' first; 修改tel列的位置,在指定列之后显示 alter table user modify tel varchar(15) default '02087654321' after...
  • 2.4.4 “检查、测试和试验的特征汇总表”的每一条记录设置一个特定特征的属性。这些属性决定在“Miscellaneous”窗体上相应的控件的显示信息(如果其要求值适用)。这些信息除了可以帮助用户了解特征以外,对一些...
  • 要求:在增加时候同一个网络类型和平台下数据只能增加一条。 操作: 1.增加时候只需要在数据库中按照网络类型和平台类型查找,有的话不允许增加。 2.修改时: ​ (1)不能够直接做增加时候的判断,因为很有可能用户...
  • 本文是《Oracle数据库学习笔记上》的二篇,承接上一篇文章的内容。 1、数据控制语言DML可以在下列条件下执行: 向表中插入数据 ...使用这种语法一次只能向表中插入一条数据。 为每一列添加一个新值...
  • 13、说明:一条sql 语句搞定数据库分页 select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段 具体实现: ...
  • "),或者没有安装相应的ISAM驱动程序,则此时VB会显示一条错误信息" Not Found Installable ISAM "。通常,INI文件在应用程序分发出去以前已经生成,或者在安装时动态生成,也可以在应用程序中自己生成。 通常这种...
  • .Net Framework 数据提供程序[有四个核心对象]:只进、只读访问数据 Connection Command ...例如:前进到了第3条结果,就不能再返回到第一条或第二条结果。 只读:是指只能读取数据,不能修改数据。
  • 数据库课程设计(基于B/S)

    热门讨论 2008-12-28 15:28:06
    [3] 李大友,数据库原理及应用(二版),清华大学出版社,2000 发出任务书日期: 年 月 日 指导教师签名: 计划完成日期: 年 月 日 基层教学单位责任人签章: 主管院长签章: 目录 概述 ……………………...
  • 无法修改数据库,给出提示 期望12 ,但给了16 ,检查了很多遍sql语句,但还是不行,之后就直接复制sql语句到sqlyog里面执行,第一次执行有问题,把16删到12之后就可以,之后恢复再次执行就可了,我把该语句复制到...
  • 范式篇之二第一范式

    2010-12-30 13:45:00
    第一范式是指数据表中的每一列都是不可分割的基本数据项(也就是说数据库中每一列都要存放一些最基本的数据),同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性;第一范式包括下列指导...
  • 在安装MySQl的时候,安装选择的字符集是UTF8,之后建立了数据表: CREATE TABLE test ( id BIGINT NOT NULL, ...我也是第一次遇到这样奇怪的问题。连头绪都没有。 我准备重新安装一次数据库试试。
  • 本书1章强调不要把数据库当成个黑盒,讨论了开发人员必须了解的数据库的基本特性和功能。2章提供了个创建Oracle数据库的绝好例子,从中你将深入地了解数据库和实例的概念。3章介绍了各种类型的文件,特别...
  • 实例207 利用聚合函数COUNT求日销售额大于某值的商品数 373实例208 利用聚合函数First或Last求数据表中第一条或最后一条记录 375 9.11 多表查询(连接查询) 377 实例209 利用FROM子句进行多表查询 377 实例...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 266
精华内容 106
关键字:

数据库只能修改第一条