精华内容
下载资源
问答
  • # 这我的代码 值中的第一个参数id 视频中也这样写的没有报错, # 而我报错了 String sql = "insert into t_user values(null ,'hu',9999)"; # 这报错异常 ...## 异常的大致意思是id不能为空
  • oracle 11g不能导出表的解决方法 在oracle 11g r2中,发现传统的exp居然不能导出的表,然后查询一下, ...具体是什么意思呢? 如果这个参数设置true,你新建了一个表T1,并且没有向其中插入数据

    oracle 11g不能导出空表的解决方法

    在oracle 11g r2中,发现传统的exp居然不能导出空的表,然后查询一下,
    发现需要如下的步骤去搞,笔记之。

    oracle 11g 新增了一个参数:deferred_segment_creation,含义是段延迟创建,默认是true。具体是什么意思呢?

    如果这个参数设置为true,你新建了一个表T1,并且没有向其中插入数据,那么这个表不会立即分配extent,也就是不占数据空间,只有当你insert数据后才分配空间。这样可以节省少量的空间。

    解决办法

    1 设置deferred_segment_creation 参数为FALSE后,无论是空表还是非空表,都分配segment。

       在sqlplus中,执行如下命令:

       SQL>alter system set deferred_segment_creation=false;

       查看:
       SQL>show parameter deferred_segment_creation;

       该值设置后只对后面新增的表产生作用,对之前建立的空表不起作用。

       注意并且要重新启动数据库,让参数生效

    2  使用ALLOCATE EXTENT的说明

       使用ALLOCATE EXTENT可以为数据库对象分配Extent。其语法如下:

       -----------
       ALLOCATE EXTENT { SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer }
       -----------

       可以针对数据表、索引、物化视图等手工分配Extent。

       ALLOCATE EXTENT使用样例:

        ALLOCATE EXTENT
        ALLOCATE EXTENT(SIZE integer [K | M])
        ALLOCATE EXTENT(DATAFILE 'filename')
        ALLOCATE EXTENT(INSTANCE integer)  www.2cto.com
        ALLOCATE EXTENT(SIZE integer [K | M]   DATAFILE 'filename')
        ALLOCATE EXTENT(SIZE integer [K | M]   INSTANCE integer)
       
        针对数据表操作的完整语法如下:

       -----------
        ALTER TABLE [schema.]table_name ALLOCATE EXTENT [({ SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer})]
       -----------

        故,需要构建如下样子简单的SQL命令:

       -----------
       alter table aTabelName allocate extent
       -----------

    3.2 构建对空表分配空间的SQL命令,

        查询当前用户下的所有空表(一个用户最好对应一个默认表空间)。命令如下:

       -----------
       SQL>select table_name from user_tables where NUM_ROWS=0;
       -----------

       根据上述查询,可以构建针对空表分配空间的命令语句,如下:

       -----------
       SQL>Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
       -----------

       批量输出上述生成的SQL语句,建立C:\createsql.sql,其内容如下:

       -----------
       set heading off;
       set echo off;
       set feedback off;
       set termout on;
       spool C:\allocate.sql;
       Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
       spool off;  www.2cto.com
       -----------

       执行C:\createsql.sql,命令如下:
       -----------
       SQL>@ C:\createsql.sql;
       -----------

       执行完毕后,得到C:\allocate.sql文件。

       打开该文件会看到,已经得到对所有空表分配空间的命令SQL语句。

    3.4 执行SQL命令,对空表分配空间:

       执行C:\allocate.sql,命令如下:
       -----------
       SQL>@ C:\allocate.sql;
       -----------
      
       执行完毕,表已更改。

    3.4 此时执行exp命令,即可把包括空表在内的所有表,正常导出。
    展开全文
  • 在oracle 11g r2中,发现传统的exp居然不能导出的表,然后查询一下,  发现需要如下的步骤去搞,笔记之。  oracle 11g 新增了一个参数:deferred_segment_creation,含义是段延迟创建,默认是true。具体...
       在oracle 11g r2中,发现传统的exp居然不能导出空的表,然后查询一下, 
    发现需要如下的步骤去搞,笔记之。 

    oracle 11g 新增了一个参数:deferred_segment_creation,含义是段延迟创建,默认是true。具体是什么意思呢? 

    如果这个参数设置为true,你新建了一个表T1,并且没有向其中插入数据,那么这个表不会立即分配extent,也就是不占数据空间,只有当你insert数据后才分配空间。这样可以节省少量的空间。 

    解决办法 

    1 设置deferred_segment_creation 参数为FALSE后,无论是空表还是非空表,都分配segment。 

       在sqlplus中,执行如下命令: 

       SQL>alter system set deferred_segment_creation=false; 

       查看: 
       SQL>show parameter deferred_segment_creation; 


       该值设置后只对后面新增的表产生作用,对之前建立的空表不起作用。 

       注意并且要重新启动数据库,让参数生效 

    2  使用ALLOCATE EXTENT的说明 


       使用ALLOCATE EXTENT可以为数据库对象分配Extent。其语法如下: 

       ----------- 
       ALLOCATE EXTENT { SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer } 
       ----------- 

       可以针对数据表、索引、物化视图等手工分配Extent。 

       ALLOCATE EXTENT使用样例: 

        ALLOCATE EXTENT 
        ALLOCATE EXTENT(SIZE integer [K | M]) 
        ALLOCATE EXTENT(DATAFILE 'filename') 
        ALLOCATE EXTENT(INSTANCE integer) 
        ALLOCATE EXTENT(SIZE integer [K | M]   DATAFILE 'filename') 
        ALLOCATE EXTENT(SIZE integer [K | M]   INSTANCE integer) 
       

        针对数据表操作的完整语法如下: 

       ----------- 
        ALTER TABLE [schema.]table_name ALLOCATE EXTENT [({ SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer})] 
       ----------- 


        故,需要构建如下样子简单的SQL命令: 

       ----------- 
       alter table aTabelName allocate extent 
       ----------- 



    3.2 构建对空表分配空间的SQL命令, 


        查询当前用户下的所有空表(一个用户最好对应一个默认表空间)。命令如下: 

       ----------- 
       SQL>select table_name from user_tables where NUM_ROWS=0; 
       ----------- 


       根据上述查询,可以构建针对空表分配空间的命令语句,如下: 

       ----------- 
       SQL>Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 
       ----------- 


       批量输出上述生成的SQL语句,建立C:\createsql.sql,其内容如下: 

       ----------- 
       set heading off; 
       set echo off; 
       set feedback off; 
       set termout on; 
       spool C:\allocate.sql; 
       Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0; 
       spool off; 
       ----------- 


       执行C:\createsql.sql,命令如下: 
       ----------- 
       SQL>@ C:\createsql.sql; 
       ----------- 

       执行完毕后,得到C:\allocate.sql文件。 

       打开该文件会看到,已经得到对所有空表分配空间的命令SQL语句。 


    3.4 执行SQL命令,对空表分配空间: 

       执行C:\allocate.sql,命令如下: 
       ----------- 
       SQL>@ C:\allocate.sql; 
       ----------- 
      
       执行完毕,表已更改。 


    3.4 此时执行exp命令,即可把包括空表在内的所有表,正常导出。 
    展开全文
  • 常用约束:PRIMARY KEY(PK) 标识该字段为该表的主键,可以唯一的标识记录FOREIGN KEY(FK) 标识该字段为该表的外键NOT NULL标识该字段不能为空UNIQUE KEY(UK) 标识该字段的值唯一的AUTO_INCREMENT...

    一、约束介绍

    约束是一种限制,它通过对表的行或列的数据做出限制,来确保数据的完整性、一致性。约束条件与数据类型宽度一样都是可选参数。

    常用约束:

    PRIMARY KEY(PK) 标识该字段为该表的主键,可以唯一的标识记录FOREIGN KEY(FK) 标识该字段为该表的外键NOT NULL标识该字段不能为空UNIQUE KEY(UK) 标识该字段的值是唯一的

    AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键)DEFAULT为该字段设置默认值

    UNSIGNED 无符号

    ZEROFILL 使用0填充

    (一)、not null与default

    not null 用于约束列不允许为空

    null 列的默认约束为null  允许为空

    default 默认值,创建列时可以指定其默认值,插入数据为设置时,自动添加为默认值。

    972ec616fe0a15bda9395eb6839dd902.png

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    mysql> create table test1(id int not null,name varchar(11) default 'aaa');

    Query OK,0 rows affected (0.26sec)

    mysql> insert into test1 value(null,'abc');

    ERROR1048 (23000): Column 'id' cannot be nullmysql> insert into test1(id) value(1);

    Query OK,1 row affected (0.29sec)

    mysql> select * fromtest1;+----+------+

    | id | name |

    +----+------+

    | 1 | aaa |

    +----+------+

    1 row in set (0.00 sec)

    test

    (二)、unique

    设置唯一约束,当你需要限定你的某个表字段每个值都唯一,没有重复值时使用。

    允许为空

    4ae312ce7beaefd6f664d310eafe2eec.png

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    mysql> create table test2(id int not null ,name varchar(11),phone int(11) unique);

    Query OK,0 rows affected (0.50sec)

    mysql> desctest2;+-------+-------------+------+-----+---------+-------+

    | Field | Type | Null | Key | Default | Extra |

    +-------+-------------+------+-----+---------+-------+

    | id | int(11) | NO | | NULL | |

    | name | varchar(11) | YES | | NULL | |

    | phone | int(11) | YES | UNI | NULL | |

    +-------+-------------+------+-----+---------+-------+

    3 rows in set (0.00sec)

    mysql> insert into test2 value(1,'abc',111111);

    Query OK,1 row affected (0.29sec)

    mysql> insert into test2 value(1,'abc',111111);

    ERROR1062 (23000): Duplicate entry '111111' for key 'phone'mysql>

    test

    联合唯一:(多个唯一)

    07f3490080dacdf4d65b960a5d860ea6.png

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    mysql> create table test3 (id int not null,name varchar(11),phone int(11),unique(id,phone));

    Query OK,0 rows affected (0.47sec)

    mysql> insert into test3 value(1,'aaa',123);

    Query OK,1 row affected (0.29sec)

    mysql> insert into test3 value(1,'bbb',123);

    ERROR1062 (23000): Duplicate entry '1-123' for key 'id'mysql> insert into test3 value(1,'bbb',555);

    Query OK,1 row affected (0.29 sec)

    test

    (四)、primary key

    站在约束角度看primary key=not null unique。主键primary key是innodb存储引擎组织数据的依据,innodb称之为索引组织表,一张表中必须有且只有一个主键。

    主键约束列不允许重复,也不允许出现空值。每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别创建。当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。(通常id字段被设置为主键)

    --基本模式

    create table temp(

    idint primary key,

    namevarchar(20)

    );--组合模式

    create table temp(

    idint,

    namevarchar(20),

    pwdvarchar(20),primary key(id, name)

    );

    (五)、auto_increment

    约束字段为自动增长

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    #不指定id,则自动增长create tablestudent(

    idint primary keyauto_increment,

    namevarchar(20),

    sex enum('male','female') default 'male');

    mysql> descstudent;+-------+-----------------------+------+-----+---------+----------------+

    | Field | Type | Null | Key | Default | Extra |

    +-------+-----------------------+------+-----+---------+----------------+

    | id | int(11) | NO | PRI | NULL | auto_increment |

    | name | varchar(20) | YES | | NULL | |

    | sex | enum('male','female') | YES | | male | |

    +-------+-----------------------+------+-----+---------+----------------+

    mysql> insert into student(name) values

    -> ('aaa'),-> ('bbb')->;

    mysql> select * fromstudent;+----+------+------+

    | id | name | sex |

    +----+------+------+

    | 1 | aaa | male |

    | 2 | bbb | male |

    +----+------+------+

    #也可以指定id

    mysql> insert into student values(4,'asb','female');

    Query OK,1 row affected (0.00sec)

    mysql> insert into student values(7,'wsb','female');

    Query OK,1 row affected (0.00sec)

    mysql> select * fromstudent;+----+------+--------+

    | id | name | sex |

    +----+------+--------+

    | 1 | aaa | male |

    | 2 | bbb | male |

    | 4 | asb | female |

    | 7 | wsb | female |

    +----+------+--------+

    #对于自增的字段,在用delete删除后,再插入值,该字段仍按照删除前的位置继续增长

    mysql> delete fromstudent;

    Query OK,4 rows affected (0.00sec)

    mysql> select * fromstudent;

    Emptyset (0.00sec)

    mysql> insert into student(name) values('ysb');

    mysql> select * fromstudent;+----+------+------+

    | id | name | sex |

    +----+------+------+

    | 8 | ysb | male |

    +----+------+------+

    #应该用truncate清空表,比起delete一条一条地删除记录,truncate是直接清空表,在删除大表时用它

    mysql> truncatestudent;

    Query OK,0 rows affected (0.01sec)

    mysql> insert into student(name) values('aaa');

    Query OK,1 row affected (0.01sec)

    mysql> select * fromstudent;+----+------+------+

    | id | name | sex |

    +----+------+------+

    | 1 | aaa | male |

    +----+------+------+

    row in set (0.00 sec)

    test

    (六)、foreign key

    外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。

    现在有两个表,第一个学生表 有三个字段,学号、姓名、班级 第二个学校表 有班级, 老师 等字段, 每个学生都有班级,那班级这个字段就需要重复存储,很浪费资源,我们可以建一个班级表,让学生关联这个班级表。

    #表类型必须是innodb存储引擎,且被关联的字段,即references指定的另外一个表的字段,必须保证唯一create tableclass(

    idint primary key,

    namevarchar(20) not null)

    #cls_id外键,关联父表(department主键id),同步更新,同步删除create tablestudent(

    idint primary key,

    namevarchar(20) not null,

    dpt_idint,constraint fk_name foreign key(cls)referencesclass(id)on delete cascade

    on update cascade)engine=innodb;

    foreign key注意:

    1、被关联的字段必须是一个key,通常是id字段

    2、创建表时:必须先建立被关联的表,才能建立关联表

    3、插入记录时:必须先往被关联的表插入记录,才能往关联表中插入记录

    4、删除时:应该先删除关联表中的记录,再删除被关联表对应的记录

    二、表与表之间的关系

    如何才能找出两张表之间的关系呢?

    分析步骤:

    #1、先站在左表的角度去找

    是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreignkey右表一个字段(通常是id)

    #2、再站在右表的角度去找

    是否右表的多条记录可以对应左表的一条记录,如果是,则证明右表的一个字段foreignkey左表一个字段(通常是id)

    #3、总结:

    #多对一:

    如果只有步骤1成立,则是左表多对一右表

    如果只有步骤2成立,则是右表多对一左表

    #多对多

    如果步骤1和2同时成立,则证明这两张表时一个双向的多对一,即多对多,需要定义一个这两张表的关系表来专门存放二者的关系

    #一对一:

    如果1和2都不成立,而是左表的一条记录唯一对应右表的一条记录,反之亦然。这种情况很简单,就是在左表foreign key右表的基础上,将左表的外键字段设置成unique即可

    建立表与表之间的关系:

    多对一:

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    =====================多对一=====================

    create tablepress(

    idint primary keyauto_increment,

    namevarchar(20)

    );create tablebook(

    idint primary keyauto_increment,

    namevarchar(20),

    press_idint not null,foreign key(press_id) referencespress(id)on delete cascade

    on update cascade);insert into press(name) values('北京工业地雷出版社'),

    ('人民音乐不好听出版社'),

    ('知识产权没有用出版社')

    ;insert into book(name,press_id) values('九阳神功',1),

    ('九阴真经',2),

    ('九阴白骨爪',2),

    ('独孤九剑',3),

    ('降龙十巴掌',2),

    ('葵花宝典',3)

    ;

    View Code

    多对多:

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    =====================多对多=====================

    create tableauthor(

    idint primary keyauto_increment,

    namevarchar(20)

    );

    #这张表就存放作者表与书表的关系,即查询二者的关系查这表就可以了create tableauthor2book(

    idint not null uniqueauto_increment,

    author_idint not null,

    book_idint not null,constraint fk_author foreign key(author_id) referencesauthor(id)on delete cascade

    on update cascade,constraint fk_book foreign key(book_id) referencesbook(id)on delete cascade

    on update cascade,primary key(author_id,book_id)

    );

    #插入四个作者,id依次排开insert into author(name) values('egon'),('alex'),('yuanhao'),('wpq');

    #每个作者与自己的代表作如下1egon:1九阳神功2九阴真经3九阴白骨爪4独孤九剑5降龙十巴掌6葵花宝典2alex:1九阳神功6葵花宝典3yuanhao:4独孤九剑5降龙十巴掌6葵花宝典4wpq:1九阳神功insert into author2book(author_id,book_id) values(1,1),

    (1,2),

    (1,3),

    (1,4),

    (1,5),

    (1,6),

    (2,1),

    (2,6),

    (3,4),

    (3,5),

    (3,6),

    (4,1)

    ;

    View Code

    一对一:

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    #一定是student来foreign key表customer,这样就保证了:

    #1学生一定是一个客户,

    #2客户不一定是学生,但有可能成为一个学生create tablecustomer(

    idint primary keyauto_increment,

    namevarchar(20) not null,

    qqvarchar(10) not null,

    phonechar(16) not null);create tablestudent(

    idint primary keyauto_increment,

    class_namevarchar(20) not null,

    customer_idint unique, #该字段一定要是唯一的foreign key(customer_id) referencescustomer(id) #外键的字段一定要保证uniqueon delete cascade

    on update cascade);

    #增加客户insert into customer(name,qq,phone) values('李飞机','31811231',13811341220),

    ('王大炮','123123123',15213146809),

    ('守榴弹','283818181',1867141331),

    ('吴坦克','283818181',1851143312),

    ('赢火箭','888818181',1861243314),

    ('战地雷','112312312',18811431230)

    ;

    #增加学生insert into student(class_name,customer_id) values('美术一班',3),

    ('声乐二班',4),

    ('美术一班',5)

    ;

    View Code

    展开全文
  • 在oracle 11g r2中,发现传统的exp居然不能导出的表,然后查询一下,  发现需要如下的步骤去搞,笔记之。    oracle 11g 新增了一个参数:deferred_segment_creation,含义段延迟创建,默认true。...
  • 在oracle 11g r2中,发现传统的exp居然不能导出的表,然后查询一下, 发现需要如下的步骤去搞,笔记之。   oracle 11g 新增了一个参数:deferred_segment_creation,含义是段延迟创建,默认是true。具体...
  • /* 标 志 当 前 正 设 置 的 功 , 如 CurrentMode=CLOCK 或CurrentMode=ALART 等*/ void timerplus(void); /************************** 函数部分 *************************/ <p>void sys...
  • 解释:包围函数(function(){})的第一对括号向脚本返回未命名(匿名)的函数,随后一对括号立即执行返回的未命名函数,括号内匿名函数的参数 作用:创建一个命名空间只要把自己所有的代码都写在这个特殊的函数...
  • 解释:包围函数(function(){})的第一对括号向脚本返回未命名的函数,随后一对括号立即执行返回的未命名函数,括号内匿名函数的参数。 作用:可以用它创建命名空间,只要把自己所有的代码都写在这个特殊的函数...
  • 解释:包围函数(function(){})的第一对括号向脚本返回未命名的函数,随后一对括号立即执行返回的未命名函数,括号内匿名函数的参数。 作用:可以用它创建命名空间,只要把自己所有的代码都写在这个特殊的函数...
  • orcle11gr2表导出来

    2014-12-10 08:41:08
    oracle 11g不能导出表的解决方法  在oracle 11g r2中,发现传统的exp居然不能导出的表,然后查询一下,  ...具体是什么意思呢?    如果这个参数设置true,你新建了一个表T1,并且没有向
  • 说明Val函数,在它不能识别数字的第一个字符上,停止读入字符串。那些被认为数值的一部分的符号和字符,例如美圆号与逗号,都不能被识别。但是函数可以识别进位制符号&O(八进制)和&H(十六进制)。空白、...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 148
精华内容 59
关键字:

参数不能为空是什么意思