mysql旧数据已删,主键intDB2 自增主键最大值 达到最大值,数据库无法正常插入数据,怎么让主键重复利用已经被删除的值

如果是MySQL表,那么任务就很简单,一句SQL可以搞定。而DB2表,就要费一点周折了。

首先,我们来看一眼目标表:

这个表,有字段有数据,我们需要做的是,给它加一个唯一性的ID列。

我们可以通过工具获得其DML如下:

}

    1. 数据库,就是存储数据的仓库,只能通过sql语言来访问,数据库也是一个文件系统。通常,MySQL、Oracle等数据库,也被称为关系型数据库,其保存的不仅仅只是数据,还包括数据实体与实体之间的关系。(而如同Redis等这类则属于非关系型数据库,也叫NoSql数据库,不使用SQL语言进行操作)

    2. SQL语言:结构化查询语言,属于非过程性语言,用于操作关系型数据库的语言,具有查询、操纵、控制和定义关系型数据库的功能。

SQL语句分为四类,分别是DDL(数据定义类SQL语句)、DML(数据操纵类SQL语句)、DCL(数据控制类SQL语句)、DQL(数据查询类SQL语句);注意,每一个SQL语句写完后都需要添加一个英文分号结尾

用于定义数据库中存储的对象,如数据表、视图、索引等

这是最简单创建数据库的写法,比如 创建一个数据库,并且设置其中所有数据的编码格式,不写编码格式时,数据库的编码格式默认为utf8;校对规则是对应着编码格式的,一种编码格式对应着多个校对规则,一般不用写,使用默认的即可;注意:用 []括起来的表示可以写也可以不写,而且编码格式中不写"-",也就是说 不写"utf-8"而是写"utf8",另外在SQL语句中字符串用单引号括起来,比如创建一个使用utf8编码集的数据库 用于指定接下来要操作哪一个数据库,或者说选择哪一个数据库操作,执行该语句后就会连接到这个数据库中 用于查询一个数据库创建时设置的信息 查看当前正在使用哪一个数据库

    5. 数据库的备份与恢复:进行该操作时,mysql数据库不能处于登录状态,命令后面没有分号结束,

字段名 字段类型(数据最大长度) [字段约束], [字段名 字段类型(数据最大长度) [字段约束],]...
    • char表示定长字符串,也就是说数据中字符串的字符个数是一定的,如果存入字符串数据的长度不足,那么也会用空格补足长度,超过设定的最大长度就会报错,无法存储,比如 name varchar(8),存入hello,那么name字段在这一行的数据长度仍为8
    • varchar表示变长字符串,表示存入字符串数据的长度只要不超过设定的最大长度,不会使用空格补足数据长度,否则就会报错,无法存储,也就是说当前字段值的数据长度是可变的,比如 name varchar(8),存入hello,那么name字段在这一行的数据长度为5
  • 大数据类型:blob、text,不常用,通常我们会使用一个文件所在的路径的字符串来代替
    • blob表示字节数据,常用存储电影等大量数据
    • text表示字符数据,常用语存储文本内容
    • date表示只包含日期数据,也就是年月日,格式为YYYY-MM-DD
    • time表示只包含时间数据,也就是时分秒,格式为HH:MM:SS
    • timestamp表示包含日期和时间数据,也就是年月日 时分秒,如果插入字段时字符为空,则字段值会默认自动从当前系统时间获取到字段值,并存储
    • datetime表示包含日期和时间数据,也就是年月日 时分秒,如果插入字段时字符为空,则字段值也为空
//以创建一个员工表为例

    2. 约束:约束用来保证数据的有效性以及完整性,分为单表约束(字段约束)和多表约束(表级约束)。

  • 主键约束 PRIMARY KEY:用于指定某一个字段作为当前表的主键字段,主键字段的值不允许重复且不允许为空,而且主键可以被其他表引用,作为外键,实现数据表间的关系。
  • 唯一约束 UNIQUE:用于指定字段的值是唯一的,不可重复的。
  • 非空约束 NOT NULL:用于指定字段的值不可以为空。
  • 自动递增约束 AUTO_INCREMENT:只适用于数值类型的字段,用于当添加一条新数据进入表中时,该字段的值会自动加1。
//建立员工表,并添加约束
//主键约束可以直接写在字段之后,或者如上写法
 
  • 多表外键约束(foreign key):通过主键和外键就可以建立起两个表之间的关系。外键必须是另一个表的主键;外键可以重复;外键可以为NULL;一张表中可以有多个外键;如果A表中a字段下有数据外键依赖于B表中b字段下的数据,那么不能独自删除B表中b字段下被依赖的某一行数据;比如员工表与部门表之间的关系
 
//创建部门表,部门表主键为deptid
//创建员工表,员工主键为id,员工所属部门就通过外键部门表的deptid建立关系
);//CONSTRAINT 关键字用于为约束起名,比如当前表的外键约束就被命名为deptid 
//如果employee 表已经创建但未添加外键,则可以通过以下语句
 
//分别像两个表中插入数据
//则此时无法单独执行下列语句
 






为表中的某个字段添加外键约束:







 







3. 修改字段:可以修改字段的属性,比如字段值的类型,长度和约束等,语法为
约束; 该语法用于修改字段值的类型,长度或约束
约束; 该语法用于修改字段名、值的类型、长度或约束

    修改和删除字段必须注意字段的约束问题,以及当前字段下是否有数据的问题:如果有数据,那么修改字段时,字段类型必须不变,或者向同一类型更大范围的数据类型更改,比如int类型可以变成bigint类型,绝对不能转为字符串等类型,也不能向同一类型更小范围的数据类型更改,比如int类型变成smallint类型。

 

 

对数据表中的数据进行增加、删除、更改操作

 
指定要插入数据的字段。注意,字段值必须要与字段类型和长度匹配,字符串与日期类型字符串必须用单引号括起来,插入空值时可以不指定或者插入null,对于主键字段,是必须要插入值的。
//以员工表插入数据为例
 



可以通过where条件子句来判断要修改那些行的值,如果不写where子句,则指定的字段的值全部修改给定的新值;








可以通过where条件子句来判断要删除那些行的值,如果不写where条件子句,则会删除整个表中的数据;




 
 

用于设置用户权限以及控制事务语句

 
 
 
表示查找表中所有的字段的值。对查询字段进行一些运算,并且可以为查询到的字段起一些别名。比如
  • in 或 not in :表示确定某字段的是否在一个指定的集合范围,这个集合包括所有可能出现的值,比如 in ('cs','cf')
  • '_xx',表示以xx结尾的三个字符的字符串,而 like '%xx' 就表示以xx结尾的任意长度的字符串。

指定依据排序的字段的数据类型必须是数值类型;字段可以是表中的字段,也可以是select 关键字后紧跟不属于表中的字段;asc表示升序,desc表示降序;order by排序语句必须写在select语句的最后面。

3. 基本查询语句+聚集函数:对某一字段的所有数据进行一些运算操作,聚集函数包括

  • count(字段):统计该字段下共有多少行数据
  • sum(字段):求该字段下所有数值之和,要求字段的值的类型必须是数值类型
  • max(字段):求该字段下所有数值中最大的,要求字段的值的类型必须是数值类型
  • min(字段):求该字段下所有数值中最小的,要求字段的值的类型必须是数值类型
  • avg(字段):求该字段下所有数值的平均数,要求字段的值的类型必须是数值类型
//查询表中所有学生的math和english成绩之和 //把括号中math+english计算结果看做一个新的字段,而这个新的字段的每行的值就是原表中每行math+english的计算结果,然后将新字段下所有值相加.但是如果math或english字段有任何一行数据为null,则该行上math+english的值也为null,也就是 78+null=null; 所以这种方式是错误的,下面的写法才是正确的 //也就是说,null与任何类型的数据相加减,结果都为null //但在纵向上(列)的数值类型字段的数据使用sum等聚集函数时,null会被忽略掉,count不会,因为count是统计有多少行数据的,并不涉及对字段中每一行具体的值的运算.

聚集函数中的参数字段,可以是表中的单个字段,也可以是表中多个字段的运算形式;

4. 基本查询语句+分组查询(group by):指定多个字段作为分组依据,字段数据相同的为一组;指定多个字段作为分组依据时,会首先将第一个字段作为分组依据进行第一次分组,然后再第一次分组后的各个组内依据第二个字段在进行分组,依次按照字段书写顺序进行分组下去。

对于聚集函数,其查询所得并不是整个表范围,而是在分组范围之内,在每个组内进行聚集函数的运算。

having子句后跟条件语句,其必须紧跟group by子句之后,where子句与having子句都有过滤的作用,但where是是过滤的是未进行分组之前的数据,但having子句是作用于分组之后每个分组的数据;而且where子句的条件语句中不能拥聚集函数,但having子句的条件语句中则可以使用。

//创建新表订单商品类
//查询订单中每一类商品的总价,以及该类名称
//查询购买了每类商品买了几个,每类商品中价格最高的商品
//查询每类总价大于10000的商品类
 


3. 表与表之间的关系与数据库设计

 
 
  • 一对多:例如一个班级对应多个学生的关系,而一个学生只对应一个班级
  • 多对多:例如一个学生可以选择多门课程,一门课程可以被多个学生选择
  • 一对一:例如一张学生证对应着一个学生,一个学生对应着一张学生证
 
2. 一对多关系如何建表(1:n):以员工表和部门表的关系为例,通过主键和外键即可建立起任意两个表之间的一对多关系。也就是说
  • 在n方表中添加一个外键字段,而这个外键字段指向 1 方表的主键
  • 不需要建立额外的关系表,多方表的外键就是 1 方表的主键
 

3. 多对多关系建表(m:n):以学生和选课之间的关系为例,要在两张表之间建立多对多关系,必须建立第三张表。即
  • 需要创建第三张表作为关系表,表中至少有两个字段作为外键,分别指向两张多对多关系表的主键。
  • 关系表中的字段,都是两张多对多关表中的主键字段的组合
 

4. 一对一关系建表(1:1):以学生和学生证的表关系为例,有两种方法建立关系
  • 可以建立第三张中间表来表示两张表之间的关系
  • 可以通过外键来建立关系,在两个表任意一个表中添加一个外键字段指向另一个表的主键字段,并且将这个外键字段添加唯一约束,也就是unique。
 
5. 总结:以购物网站表结构为例,其包括用户表user,订单表order,商品表,商品类别表。
 
1. 笛卡尔积:假设有两个表,A表与B表,其中的数据如下

    2. 多表查询——内连接查询:前提是两个表有关系,并且是通过外键约束来建立关系

    其他条件语句进行过滤];
//查询属于 id为1的部门 的员工
 

 建立连接关系条件语句:就是  一个表的主键字段=另一个表的外键字段

 
3. 多表查询——外连接查询:外链接查询是要区分左外连接与右外连接的,外连接方式不同,查询结果可能不同

  

如果使用左外连接,则主要看主表,会先把主表中的数据全部显示,然后再显示附表中对应的数据,如果附表中没有,则会填充NULL;

以上面语句的执行为例,则结果为


 
如果使用右外连接,则主要看附表,会先把附表中的数据全部显示,然后再依据附表已显示的数据显示主表中对应的数据,如果主表中没有,则会填充NULL;以上面语句的执行为例,则结果为







  • 如果过连接查询的两个表中都没有多余的数据,也就是主键字段下的每行字段值,外键字段下都有对应相等的字段值,那么内连接与外连接查询结果是相同的。
  • 如果两个表中有一个表中包含有多余的数据,那么内连接就相当于 左外连接查询与右外连接查询结果的交集,也就是去掉多余数据行。
 
 
1. 一个查询语句不仅可以由一个select语句组成,还可以由多个select语句嵌套进行查询
  • 可以将一个select语句查询出的结果作为另一个select语句查询的表(可以给这个表起别名来方便引用),也就是放在from关键字后面,那么外层的select关键字后选择查询的字段只能是内层select关键字后选择查询的字段,
  • 可以将一个select语句查询出的结果作为另一个select语句where语句后的条件语句的一部分,来进行一些条件过滤。
 
 
  • >|<|<> all(子查询):表示字段值必须大于|小于|不等于子查询结果集中所有的值

}

1.如果你在cmd中输入命令的时候,输错了用\c跳出来

九.操作文件的一行内容(记录)

#对于清空记录有两种方式,但是推荐后者 truncate t1; #当数据量比较大的情况下,使用这种方式,删除速度快

修改id为主键并且递增

级别1:对所有的库,下的所有的表,下的所有的字段 '''*.*代表所有的库下的所有的表''' 同意select权限开放,开放的是*.*的select权限开放给用户 级别2:对db1库,下的所有的表,下的所有的字段 级别3:对表db1.t1,下的多有字段 修改完权限后要记得刷新权限
1.创建本地用户并赋予权限

用户本地登录,就无需IP地址了

2.创建用户只要Ip能配通,所有的用户都能登录

#mysql5.5以上:修改方式有所改动 #3. 查看修改结果:
}

我要回帖

更多关于 DB2 自增主键最大值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信