精华内容
下载资源
问答
  • http://blog.csdn.net/zh2qiang/article/details/5323981  SQLServer 中含自增主键,通常不能直接指定ID值插入,可以采用以下方法插入。 1. SQLServer 自增主键创建语法:identity(seed, increment)其中seed ...

    http://blog.csdn.net/zh2qiang/article/details/5323981

     

    SQLServer 中含自增主键的表,通常不能直接指定ID值插入,可以采用以下方法插入。

    1. SQLServer 自增主键创建语法:
    identity(seed, increment)
    其中
    seed 起始值
    increment 增量
    示例:
    create table student(
          id int identity(1,1),
          name varchar(100)
    )

    2. 指定自增主键列值插入数据(SQL Server 2000)
    先执行如下语句
    SET IDENTITY_INSERT [ database. [ owner. ] ] { table }  ON
    然后再执行插入语句
    最后执行如下语句
    SET IDENTITY_INSERT [ database. [ owner. ] ] { table }  OFF
    示例:
    表定义如下
    create table student(
          id int identity(1,1),
          name varchar(100)
    )
    插入数据
    set IDENTITY_INSERT student ON
    insert into student(id,name)values(1,'student1');
    insert into student(id,name)values(2,'student2');
    set IDENTITY_INSERT student OFF

    展开全文
  • MySQL数据库中有自增主键ID,当用SQL插入语句中插入语句带有ID列值记录的时候; 如果指定了该列的值,则新插入的值不能和已有的值重复,而且必须大于其中最大的一个值; 也可以不指定该列的值,只将其他列的值...

    MySQL数据库表中有自增主键ID,当用SQL插入语句中插入语句带有ID列值记录的时候;

    1. 如果指定了该列的值,则新插入的值不能和已有的值重复,而且必须大于其中最大的一个值;
    2. 也可以不指定该列的值,只将其他列的值插入,让ID还是按照MySQL自增自己填;

    具体:

    1.创建数据库

    create table if not exists userInfo (
    id int PRIMARY KEY AUTO_INCREMENT,
    name varchar(50) NOT NULL,
    password varchar(50) NOT NULL);
    

    2.插入数据记录

    insert into userInfo values(1,'aaa','1212');
    
    • 当数据表中有自增长主键时,当用SQL插入语句中插入语句带有ID列值记录的时候;
      1. 如果指定了该列的值,则新插入的值不能和已有的值重复,而且必须大于其中最大的一个值;
      2. 也可以不指定该列的值,只将其他列的值插入,让ID还是按照MySQL自增自己填;
        这种情况在进行插入的时候,两种解决方法:
        ①可以把id的值设置为null或者0,这样子mysql都会自己做处理
        ②手动指定需要插入的列,不插入这一个字段的数据!
    #方法①:
    insert into userInfo values(null,'ddf','8979');
    insert into userInfo values(0,'ddf','8979');
    
    #方法②:
    insert into userInfo(name,password) values('ddf','8979');
     
      展开全文
    • MySql之DDL操作创建表(添加主键, 外键约束以及基本的数据类型)

      1.创建表基本语句

      CREATE TABLE users(
      username VARCHAR(50) PRIMARY KEY,
      userpwd VARCHAR(50) NOT NULL,
      userage INT ,
      usersex VARCHAR(20),
      birth TIMESTAMP,
      roles_id INT,
      constraint fk_users_roles foreign key(role_id) references roles(roleid)
      );

      说明:

      1.创建用户表, 添加主键username, 非空约束 userpwd, 外键role_id
      2.constraint fk_users_roles可以省略,简写为foreign key(role_id) references roles(roleid)

      2.声明主键的方式小结

      (1) create table users (
      username varchar(50) primary key
      );

      (2)create table users(
      username varchar(50) ,
      userpwd varchar(50),
      primary key (username)
      );

      可以声明联合主键
      create table users(
      username varchar(50),
      userpwd varchar(50),
      birth datetime,
      primary key (username, userpwd)
      );

      (3)create table users (
      username varchar(50),
      userpwd varchar(50)
      );

      alter table users add primary key (username, userpwd);

      3创建外键的方式小结

      (1)create table users(
      username varchar(50),
      role_id int ,
      constraint fk_users_roles foreign key (role_id) references roles(roleid)
      );

      可以添加两个主键
      CREATE TABLE roles_menus (
      roles_id INT ,
      menus_id INT,
      PRIMARY KEY (roles_id, menus_id),
      CONSTRAINT fk_users_roles FOREIGN KEY (roles_id) REFERENCES roles(roleid),
      CONSTRAINT fk_users_menus FOREIGN KEY (menus_id) REFERENCES menus(menuid)
      );

      (2)create table users(
      username varchar (50) primary key,
      role_id int
      );

      alter table users add constraint fk_users_roles foreign key (role_id) references roles(roleid);


      4.其它的常用的命令

      show datebases; //查看所有的数据库
      use usersys; //使用名字叫usersys 的数据库
      show tables; //查看当前数据库中所有的表单
      desc users //查看创建的users 表的字段信息

      5.MySQL 数据类型

      int 整型

      double 浮点型

      double(6,2) 表示 总位数6位 小数点后2位
      

      varchar 可变长度字符

      varchar(10)  'aa' 占两个字节   
      数据库中 utf-8编码(出中文外一个字符一个字节,中文占3个字节 )
      

      char 不可变长度字符串类型

      char(10) 10表示的是字节数  'aa '占十个字节 
      

      日期类

      date 日期形 yyyy-MM-dd 格式

      time 事件形 hh:mm:ss

      timestamp 时间戳 yyyy-MM-dd hh:mm:ss 注意时间戳在mysql中会自动的赋值 在insert 语句中给null 就可以

      datetime 日期时间 yyyy-MM-dd hh:mm:ss

      展开全文
    • 场景数据表已经创建没有指定主外键,逻辑上存在主外键关系,需要查询两张有关系的表数据案列这两个指定主外键,其中user的depId为dep的主键,现在需要将姓名和部门展示。sql实现:select user.*,dep.* from ...

      场景

      数据表已经创建没有指定主外键,逻辑上存在主外键关系,需要查询两张有关系的表数据

      案列


      这两个表未指定主外键,其中user表的depId为dep的主键,现在需要将姓名和部门展示。

      sql实现:

      select user.*,dep.* from user,dep where user.depId=dep.id;

      解决办法:

      创建响应的实体类,创建相应的hbm.xml文件,

      public class User {
      	
      	private Long id  ;
      	private String depId;
      	private String name ;
      	private Dep dep;
      	
      	public Long getId() {
      		return id;
      	}
      	public void setId(Long id) {
      		this.id = id;
      	}
      	public String getDepId() {
      		return depId;
      	}
      	public void setDepId(String depId) {
      		this.depId = depId;
      	}
      	public String getName() {
      		return name;
      	}
      	public void setName(String name) {
      		this.name = name;
      	}
      	public Dep getDep() {
      		return dep;
      	}
      	public void setDep(Dep dep) {
      		this.dep = dep;
      	}
      	
      	
      
      }
      
      package com;
      
      public class Dep {
      	
      	private Long Id;
      	private String name;
      	public Long getId() {
      		return Id;
      	}
      	public void setId(Long id) {
      		Id = id;
      	}
      	public String getName() {
      		return name;
      	}
      	public void setName(String name) {
      		this.name = name;
      	}
      	
      }
      

      在user类中,定义了Dep dep,配置hbm.xml文件可以使用hibernate tool工具自动生成

      修改hbm.xml文件,主要是加入

      many-to-one

      关系,可以保持dep的hbm文件不变,只修改user的hbm文件

      <many-to-one name="dep" class="com.Dep"
                           column="depId" insert="false" update="false" fetch="select" lazy="false"
               not-found="ignore"></many-to-one>

      即可产生关联,可观察后台,生成的sql语句

      结果来看先查询了user表,然后按user表中的depI的作为条件查询了Dep表

      上述常用属性介绍

      name为被关联的表的实体变量名称,class为关联的全限定名的类,column为需要关联的列,即为user表的depId,

      这个时候就有个疑问了,表dep没有指定哪一个字段和depId相关联,为何达到了关联的相关呢?

      按照生成的sql来看,被关联的dep表的id为相关列,在hbm文件中指定为主键,这时,被找到自动关联了。

      以下为网上收集来的属性,以供参考


      通过many-to-one元素,可以定义一种常见的与另一个持久化类的关联。 这种关系模型是多对一关联(实际上是一个对象引用-译注):这个表的一个外键引用目标表的 主键字段。

      <many-to-one
              name="propertyName"
              column="column_name"
              class="ClassName"
              cascade="cascade_style"
              fetch="join|select"
              update="true|false"
              insert="true|false"
              property-ref="propertyNameFromAssociatedClass"
              access="field|property|ClassName"
              unique="true|false"
              not-null="true|false"
              optimistic-lock="true|false"
              lazy="proxy|no-proxy|false"
              not-found="ignore|exception"
              entity-name="EntityName"
              formula="arbitrary SQL expression"
              node="element-name|@attribute-name|element/@attribute|."
      
              embed-xml="true|false"
              index="index_name"
              unique_key="unique_key_id"
              foreign-key="foreign_key_name"
              
      />

       

       

      name: 属性名。

       

      column (可选): 外间字段名。它也可以通过嵌套的 <column>元素指定。

       

      class (可选 - 默认是通过反射得到属性类型): 关联的类的名字。

       

      cascade(级联) (可选): 指明哪些操作会从父对象级联到关联的对象。

       

      fetch (可选 - 默认为 select): 在外连接抓取(outer-join fetching)和序列选择抓取(sequential select fetching)两者中选择其一。

       

      update, insert (可选 - 默认为 true) 指定对应的字段是否包含在用于UPDATE 和/或 INSERT 的SQL语句中。如果二者都是false,则这是一个纯粹的 “外源性(derived)”关联,它的值是通过映射到同一个(或多个)字段的某些其他属性得到 或者通过trigger(触发器)、或其他程序生成。

       

      property-ref: (可选) 指定关联类的一个属性,这个属性将会和本外键相对应。 如果没有指定,会使用对方关联类的主键。

       

      access (可选 - 默认是 property): Hibernate用来访问属性的策略。

       

      unique (可选): 使用DDL为外键字段生成一个唯一约束。此外, 这也可以用作property-ref的目标属性。这使关联同时具有 一对一的效果。

       

      not-null (可选): 使用DDL为外键字段生成一个非空约束。

       

      optimistic-lock (可选 - 默认为 true): 指定这个属性在做更新时是否需要获得乐观锁定(optimistic lock)。 换句话说,它决定这个属性发生脏数据时版本(version)的值是否增长。

       

      lazy (可选 - 默认为 proxy): 默认情况下,单点关联是经过代理的。lazy="no-proxy"指定此属性应该在实例变量第一次被访问时应该延迟抓取(fetche lazily)(需要运行时字节码的增强)。 lazy="false"指定此关联总是被预先抓取。

       

      not-found (可选 - 默认为 exception): 指定外键引用的数据不存在时如何处理: ignore会将行数据不存在视为一个空(null)关联。

       

      entity-name (可选): 被关联的类的实体名。

       

      formula (可选): SQL表达式,用于定义computed(计算出的)外键值。

      cascade属性设置为除了none以外任何有意义的值, 它将把特定的操作传递到关联对象中。这个值就代表着Hibernate基本操作的名称, persist, merge, delete, save-update, evict, replicate, lock, refresh, 以及特别的值delete-orphanall,并且可以用逗号分隔符 来组合这些操作,例如,cascade="persist,merge,evict"或 cascade="all,delete-orphan"。更全面的解释请参考第 10.11 节 “传播性持久化(transitive persistence)”. 注意,单值关联 (many-to-one 和 one-to-one 关联) 不支持删除孤儿(orphan delete,删除不再被引用的值).

      一个典型的简单many-to-one定义例子:

      <many-to-one name="product" class="Product" column="PRODUCT_ID"/>

      property-ref属性只应该用来对付遗留下来的数据库系统, 可能有外键指向对方关联表的是个非主键字段(但是应该是一个惟一关键字)的情况下。 这是一种十分丑陋的关系模型。比如说,假设Product类有一个惟一的序列号, 它并不是主键。(unique属性控制Hibernate通过SchemaExport工具进行的DDL生成。)

      <property name="serialNumber" unique="true" type="string" column="SERIAL_NUMBER"/>

      那么关于OrderItem 的映射可能是:

      <many-to-one name="product" property-ref="serialNumber" column="PRODUCT_SERIAL_NUMBER"/>

      当然,我们决不鼓励这种用法。

      如果被引用的唯一主键由关联实体的多个属性组成,你应该在名称为<properties>的元素 里面映射所有关联的属性。

      假若被引用的唯一主键是组件的属性,你可以指定属性路径:

      <many-to-one name="owner" property-ref="identity.ssn" column="OWNER_SSN"/>


      欢迎转载,如有不当之处,敬请提出


      展开全文
    • 分区不建议创建主键的原因

      千次阅读 2017-06-14 17:31:06
      摘要: 分区尽量不要建主键,因为建主键的同时会建一个唯一性的全局索引,在drop分区表时如果不指定update global indexes则 会使索引失效,导致数据无法入库。 如果非要建主键,要2种方法: 1.应用上drop 分区...
    • CREATE TABLE 表名 ( ...... CONSTRAINT 约束名称 PRIMARY KEY(受约束列名); );
    • 表创建之后如何增加主键

      千次阅读 2019-07-15 16:34:15
      表创建完成之后需要加主键,可以用: alter table 【表名】 add constraint 【主键名】 primary key (【字段】);...那如何在表创建时主键呢? 创建用户: 第一种: create table user (sno char(5) pri...
    • **************** 创建主键(三种方法) **************** ...创建学生: ...(sno char(5) primary key,/*学号*/ /*可以直接指定主键*/ sname char(20) not null,/*姓名*/ ssex char(3) not null,
    • [mysql主键、外键约束]表创建完成后,再添加主键约束 今天在做数据库作业,发现了问题,我不小心忘了写主键约束,查了书籍,全都是在插入数据时写的约束,上网找到了一个解决方案试验后找到了它的公式。 alter ...
    • MySQL表必须主键吗?

      千次阅读 2020-11-04 19:06:27
      一般情况下,我们所使用的储存引擎是innodb,那今天我就基于存储引擎是innodb的情况来讨论下是否必须主键 聚簇索引 提到innodb就先介绍下聚簇索引的概念,聚集索引定义了数据的物理存储顺序。如何理解聚集...
    • MySQL InnoDB数据表缺少主键会怎样

      千次阅读 2020-07-03 17:46:05
      MySQL数据表使用InnoDB作为存储引擎的时候,数据结构就是使用B+树,而数据本身存储在主键索引上,也就是通常所说的聚簇索引,也就是每个都需要有个聚簇索引树,但是,在建表的时候却发现可以不用指定主键,那么...
    • 创建数据表

      千次阅读 2019-05-21 16:00:42
      文章目录一、创建数据表 一、创建数据表 在之前我们使用的emp、dept、salgrade的数据都是数据库提供的,我们也可以在自己使用语句创建数据表,基本语法如下: CREATE TABLE 名称(  字段 1 字段类型,  ...
    • Hibernate操作没有主键数据表

      千次阅读 2015-01-22 09:22:32
      在数据库中中间往往可能没有主键,而Hibernate检索的时候是根据主键检索的,这样就无法直接检索中间中的数据。对于这种情况Hibernate会自动生成一个主键...没有指定主键。 这是使用Hibernate的反向工程自动创建P
    • oracle添加数据时主键自动增长

      千次阅读 2015-05-22 13:46:53
      CREATE TABLE STUDENT( --创建学生 ID ...此时给学生添加数据时 必须指定idINSERT INTO STUDENT VALUES(1,'Tom');下面用触发器和序列结合使得添加数据时id自动增长 不要指定了 --创建序列CREATE SEQUENCE SEQ_...
    • 使用的环境是HUE中的Oozie的workflow任何调用sqoop命令,该死的oozie的日志和异常提示功能太辣鸡了,最后发现是重复数据导致数据进入mysql表时出现主键冲突进而导致数据同步失败。 (1)众所周知hive是没有主键与...
    • MySQL数据库中有自增主键ID,当用SQL插入语句中插入语句带有ID列值记录的时候; 如果指定了该列的值,则新插入的值不能和已有的值重复,而且必须大于其中最大的一个值;也可以不指定该列的值,只将其他列的值...
    • 数据的基本操作之创建数据表

      千次阅读 2015-01-27 15:40:35
      数据是数据库中最重要、最基本的操作对象,是数据存储的基本单位。...数据属于数据库,在创建数据表之前,应该先在对象管理器中选择在哪个数据库中进行,如果没有选择数据库,则不能创建数据表
    • sql自增主键溢出解决方案: 简单粗暴法 重置自增字段法 偷换ID法 笨方法 注意注意 简单粗暴法 适用于数据不重要的情况下,可以进行情况,建议先备份数据 第一种 清空所有数据 --直接释放所有数据 ...
    • mysql insert插入实现如果数据表主键重复则更新,没有重复则插入的四种方法1、replace语句:替换已有的行 replace语句是insert语句的一个变种 当添加新行 1)如果主键值重复,那么覆盖中已有的行 2)...
    • DB2创建表 主键自增长

      千次阅读 2014-05-10 22:45:10
      有时在建表的时候想把一个无关列作为一个主键。 比如建立一张客户,如果客户希望以电话作为主键唯一标示一列,并且业务逻辑上也说的通,但是 在以下两方面可能是有问题的 1.电话是一个字符串,作为主键没有...
    • MySql-聚集索引-为什么必须主键

      千次阅读 2017-11-02 17:17:39
      前几天跟搞C++游戏服务器一同事联动实现一个业务,看到他创建表默认没有主键,于是我建议他添加,同事铮铮有词说,业务根本用不着,多一个字段多浪费,我瞬间无语,于是跟他解说为什么必须添加?针对MySQL5.6版本中...
    • 在mysql中我们经常会出现不小心删除一行数据然后再添加数据时自增主键没有从指定数字开始的问题,如图 解决方法 执行以下sql语句可以指定表种自增主键的起始序号 alter table 要修改的名称 AUTO_INCREMENT=起始...
    • 比较规范的数据库设计(包括我们公司)都会有一条不成文的规定,那就是给每张一个自增主键。那么自增主键除了有数据的唯一性外,还有什么所用呢?为什么要有自增主键? 之前我转发的《58到家数据库30条军规解读...
    • MySQL创建数据表(中) 三、数据字段属性 1、unsigned【无符号】 可以让空间增加一倍 比如可以让-128~127增加到0~255 注意:只能用在数值型字段 2、zerofill【前导零】 e.g. createtable if not ...
    • 1、单字段主键:create table tb_emp ( id int(11) primary key, name varchar(25), depId int(11), ...定义完所有列之后指定主键:create table tb_emp ( id int(11), name varchar(25), deptId int(11...
    • Oracle建表并指定主键自增

      万次阅读 2018-10-08 16:10:32
      Oracle不允许在建表直接指定某个字段自增,需要通过建立序列 所以想要为某个字段指定自增,需要1.建表;2.建立序列;3.建立触发器 一:建表语句 Oracle数据库建表语句 ORACLE中的关键字这里均用大写表示,中...
    • 最近遇到关于使用Oracle数据库,JdbcTemplate插入数据无法返回主键的问题,如下代码: KeyHolder keyHolder = new GeneratedKeyHolder();// 创建一个主键持有者 jdbcTemplate.update(new PreparedStatementCreator...

    空空如也

    空空如也

    1 2 3 4 5 ... 20
    收藏数 187,391
    精华内容 74,956
    关键字:

    创建数据表时必须指定主键