精华内容
下载资源
问答
  • <p>If we consider that a truncate is emptying the content of a table, it avoids the metadata/file interactions to translate a URI based truncate into a range truncate with a start cursor on the first ...
  • Truncate table" in the export data? Some times we need export full table for copy it on other server. <p>thank you. <ul><li><strong>Original URL</strong>: ...
  • TRUNCATE TABLE

    2013-06-27 10:43:24
    默认情况下,IDENTITY_INSER就是off 这种情况下,你写insert 语句时,identity栏位,不要写值,系统会自动帮你写入。 举例说明: ...insert into #aa(dt,pay)values('2012-4-12',100) --不能向 ...
    默认情况下,IDENTITY_INSER就是off
    这种情况下,你写insert 语句时,identity栏位,不要写值,系统会自动帮你写入。

    举例说明:
    create table #aa(id int identity(1,1),dt datetime,pay int)
    go
    insert into #aa(dt,pay)values('2012-4-12',100) --不能向 id栏位写值,系统会自动写
    go
    insert into #aa(id,dt,pay)values(100,'2012-4-14',200) --如果像这样写了,就会报错
    go

    如果你需要写,可以把off改成on。
    如:
    set IDENTITY_INSERT #aa on
    insert into #aa(id,dt,pay)values(100,'2012-4-14',200) --这样就不会报错了。
    实际应用,应该不会要这样,一般设为 identity,就是要利用系统自动写入的功能,保证不重复。


    TRUNCATE TABLE:

    1.DELETE
     ・DML语言
     ・可以回退
     ・可以有条件的删除

    DELETE FROM 表名
      WHERE 条件

    2.TRUNCATE TABLE
     ・DDL语言
     ・无法回退
     ・默认所有的表内容都删除
     ・删除速度比delete快。

    TRUNCATE TABLE 表名


    USE SET IDENTITY_INSERT ON


    set IDENTITY_INSERT t_menu on
    insert into t_menu(menu_id,locale_id,area_id,menu_level,name,sequence,text,process)
    select '14999',2052,0,'BASE','MAIN',0,'接收','RECEIPT'
    展开全文
  • ve been trying to add multi-schema support to the database_cleaner gem, and ran into a bug when doing the following: <code>db.from(*db.tables(qualify: true)).truncate</code>. The problem arises if a ...
  • mssql truncate table

    2011-01-30 11:25:00
    truncate table 表名清除表数据,保留表结构 insert into sm.dbo.dukeselect * from sm.dbo.duke 该语句为被插入的表要与插入的表数据结构保持一致(最好清除该表与 truncate 配合使用) 转载于:...

    truncate table 表名
    清除表数据,保留表结构

     

    insert into sm.dbo.duke
    select * from sm.dbo.duke

    该语句为被插入的表要与插入的表数据结构保持一致(最好清除该表与 truncate 配合使用)

    转载于:https://www.cnblogs.com/yubo2010/archive/2011/01/30/truncate.html

    展开全文
  • 1,对其它用户下的表执行trundate table操作 开发说在用dwetl下执行调用shop用户下的表的时候提示...SQL> insert into Z_TRUNCATE_T select 1 from dual; 1 row created. SQL> commit; Commit complete. SQL> select
  • <div><pre><code>sql create schema shop;...[2019-08-09 15:50:51] TRUNCATE TABLE category RESTART IDENTITY [90106-199] </code></pre>该提问来源于开源项目:h2database/h2database</p></div>
  • 数据插入-INSERT INTO 1.直接插入行 1.语句结构: INSERT INTO 表名 VALUES(插入值) 注:插入值可以是完整的行,即每个列都有值;也可以是部分行,即有的列值是NULL或者缺省。 这两种的语句区别是: (1)插入完整...

    1. 数据插入-INSERT INTO

    在这里插入图片描述INSERT INTO会修改原表

    1.1直接插入行

    1.语句结构:
    INSERT INTO 表名 VALUES(插入值)

    注:插入值可以是完整的行,即每个列都有值;也可以是部分行,即有的列值是NULL或者缺省。

    这两种的语句区别是:

    (1)插入完整的行:
    INSERT INTO 表名 VALUES(插入值)

    (2)插入不完整的行:
    INSERT INTO 表名(插入字段名) VALUES (字段对应的插入值)
    其中,插入字段名和插入值应当一一对应

    举例:
    这里的例子中 pro_info表、prod_info2表是一摸一样的,包括主键。
    (1)插入完整行

    INSERT INTO pro_info VALUES(1,'火腿肠','55g','2019/2/4',12,15.5.21)
    

    (2)插入部分行/完整行

    INSERT INTO pro_info(prod_id, prod_name...) VALUES (1,'火腿肠',.....)
    

    注:
    (1)如果插入的部分行,指定部分列,这个列名和其内容对应即可,所以可以调整列的顺序,可以只给部分行,表结构发生变化也不影响。
    (2)注意引号的使用。
    (3)其实写上表名(字段名)更好,因为可以控制顺序,避免某个表在未知的情况下,列的顺序改了,那么在插入数据时就会导致错误。
    (4)插入值可以是空值,直接在VALUES不填充内容。

    示例

    例1,插入完整行,8列

    INSERT INTO prod_info2 
    values('T0092','测试商品','test','test','test',12,3,'NJ0109');
    

    注:要与表格中列的格式相对应,比如字符串就用引号,数字就用数字,日期就用日期。

    在这里插入图片描述运行插入代码后,会出现‘affected 1 rows’,说明插入了一行。如果插入的数据在表中不显示那么就点一下红圈位置刷新一下。

    注意: 主键列的值是不能重复,也不能是空值。

    例2,插入不完整行,4列

    INSERT INTO prod_info2(prod_id, prod_name, brand, type) 
    VALUES ('T0093','测试商品','test','test');
    

    结果不展示了

    例3,改变一下顺序(这样就不担心表变化之后,语句执行错位,所以体现出增加字段的优势)

    INSERT INTO prod_info2( type, prod_id, prod_name, brand) 
    VALUES('test', 'T0094','测试商品','test');
    

    1.2 插入检索出来的数据行

    在这里插入图片描述语句结构:
    INSERT INTO 表名(插入字段名) VALUES (插入值)

    将select 字段 from… where … group by …替代VALUES+插入值

    注:
    (1)将两个字段名对应起来
    (2)这里所有子句都可以使用,比如WHERE,GROUP BY,HAVING
    (3)可以调整列的顺序,可以只给部分列值。当加上插入字段名时,那么表结构发生变化也不影响
    (4)字段数据类型保持一致
    (5)字段顺序保持一致

    示例:
    (1)插入完整的检索列

    INSERT INTO prod_info2 
    SELECT CONCAT('f',p.prod_id),
           p.prod_name, 
           p.brand,
           p.type, 
           p.class,
           p.cost,
           p.sale_price,
           p.supplier_id
    FROM prod_info AS p 
    WHERE p.prod_id = '10001';
    

    注: 这里用CONCAT进行拼接的原因?

    因为这里的例子中 pro_info表、prod_info2表是一摸一样的,包括主键。sql 表中主键值唯一,且不能重复,所以需要在插入字段时,拼接点内容让主键变化,这里只是为了展示所以这么拼接,没有别的含义。

    例2,插入不完整的检索列

    INSERT INTO prod_info2(prod_id ,prod_name, brand, type) 
    SELECT CONCAT('g',p.prod_id),
           p.prod_name, 
           p.brand,
           p.type
    FROM prod_info AS p 
    WHERE p.prod_id = '10001';
    

    例3,变化一下插入列字段的顺序,这里是type和brand调换了顺序,相应的内容也要调换顺序。

    INSERT INTO prod_info2(prod_id, prod_name, type, brand) 
    SELECT CONCAT('h',p.prod_id),
           p.prod_name, 
           p.type, 
           p.brand
    FROM prod_info AS p 
    WHERE p.prod_id = '10001';
    

    例4,插入多行检索数据,注意主键的唯一性

    INSERT INTO prod_info2
    SELECT 
          CONCAT('g',p.prod_id) ,
          p.prod_name, 
          p.brand,
          p.type, 
          p.class,
          p.cost,
          p.sale_price,
          p.supplier_id
    FROM prod_info AS p 
    WHERE p.prod_id LIKE '200%'; #prod_id以200%开头的数据有7行
    

    2.数据更新-UPDATE

    在这里插入图片描述数据更新UPDATE会修改原表

    结构:
    UPDATE 表名 (指定要更新的表,有且仅有1个,必须是真实的表)
    SET 字段 = 值 (更新多个字段,逗号隔开,可以是计算表达式)
    WHERE 过滤条件 (指定更新行,否则全部更新。过滤条件可以有0个或者多个)

    注:
    (1)等号=是赋值符号
    (2)更新的表必须是真实的表。比如不能是联结表,联结表是虚拟表。
    (3)更新多个字段用逗号
    (4)要指定更新的行,否则全部更新
    (5)可以更新值为空值,但是必须要求原表允许该列为空值
    比如:set goal = NULL

    2.1 数据更新–直接修改

    操作时,先测试更新的内容是不是要更新的表。
    例1,把class列全部改成零食
    测试、更新

    #测试
    SELECT p2.class FROM prod_info2 AS p2;
    #更新
    UPDATE prod_info2 
    SET class = '日用品'; #全部改为日用品
    

    结果:
    在这里插入图片描述例2,将t2开头的都改成零食
    测试、更新

    #先测试过滤条件
    SELECT p2.* 
    FROM prod_info2 AS p2
    WHERE p2.prod_id LIKE 'g%';
    #再更新
    UPDATE prod_info2 
    SET class = '零食'
    WHERE prod_id LIKE 'g%'; 
    

    结果:改变了8行
    在这里插入图片描述
    例3 把id为3开头的改为饮料
    测试、更新、检查

    #测试
    SELECT p2.* 
    FROM prod_info2 AS p2
    WHERE p2.prod_id LIKE '3%';
    #更新
    UPDATE prod_info2 
    SET class = '饮料'
    WHERE prod_id LIKE '3%';
    #检查是否更新
    SELECT p2.* 
    FROM prod_info2 AS p2
    WHERE p2.prod_id LIKE '3%';
    

    结果:
    在这里插入图片描述
    例4,把全场价格打九折
    测试、更新、检查

    #测试价格
    SELECT *
    FROM prod_info2 AS p2;
    #更新价格
    UPDATE prod_info2
    SET sale_price = 0.9 * sale_price;
    #检查
    SELECT *
    FROM prod_info2 AS p2;
    

    例5,部分商品九折,比如把抽纸或者饮料价格九折
    测试、更新、检查

    #测试
    SELECT p2.* 
    FROM prod_info2 AS p2
    WHERE p2.prod_name = '抽纸' OR p2.class = '饮料';
    #更新
    UPDATE prod_info2
    SET sale_price = sale_price * 0.9
    WHERE prod_name = '抽纸' OR class = '饮料';
    #检查
    SELECT p2.* 
    FROM prod_info2 AS p2
    WHERE p2.prod_name = '抽纸' OR p2.class = '饮料';
    

    例6,销售价格打九折,同时供应商价格也九折

    #测试
    SELECT p2.sale_price, p2.cost
    FROM prod_info2 AS p2;
    #更新
    UPDATE prod_info2 
    SET sale_price = sale_price / 0.9,
        cost = cost / 0.9;  
    

    更新两个字段,set子句中间用 逗号!!! 隔开。

    2.2 数据更新- -表之间两列数值替换

    例,将prodinfo2中cost数据替换为prodinfo中的cost数据
    操作:
    1.在更新过程中进行联结,用INNER JOIN
    2.在set语句后写上联结条件,(下面写了三个列联结,因为中间有些列做了修改,有些是空值,条件多得到的表越小,空值越少)
    3.

    #表之间数据替换--先关联,后替换
    #比如把p2表的采购价格替换为p的采购价格
    #先检索测试
    SELECT p2.* , p.*
    FROM prod_info as p INNER JOIN prod_info2 AS p2
    WHERE p2.prod_name = p.prod_name
     AND p2.brand = p.brand
     AND p2.type = p.type;
    #更新(在更新语句之后直接加上联结语句)
    UPDATE prod_info2 AS p2
    INNER JOIN prod_info AS p
    SET p2.cost = p.sale_price
    WHERE p2.prod_name = p.prod_name
     AND p2.brand = p.brand
     AND p2.type = p.type ;
    

    数据删除–DELETE

    deldete 修改原表数据。
    修改原表数据的时候,最好是先检查要修改的行,再去修改。
    在这里插入图片描述删除表中数据–语句结构:
    DELETE FROM 表名 WHERE 过滤条件

    注:删除的只是表中的数据,但表仍然存在

    例1:

    #测试
    SELECT * FROM prod_info2 p2 WHERE p2.prod_name = '测试商品';
    #6条数据
    DELETE FROM prod_info2 WHERE prod_name = '测试商品';
    

    结果:
    在这里插入图片描述例2,不加过滤条件,删除表中所有数据
    代码:

    DELETE FROM prod_info2;
    

    结果:
    在这里插入图片描述

    清空整张表内容(效率更高)—语句结构:
    TRUNCATE TABLE 表名
    注:删除表中所有内容,但表仍然存在

    例:

    TRUNCATE TABLE prod_info2 ;
    

    结果:
    在这里插入图片描述

    展开全文
  • 参考:...好好学习,以备不时之需。 模拟数据: create table scott.truncate_test tablespace users as select * from Hr.EMPLOYEES; insert into scott.truncate_test select * fr

    参考:http://www.hellodba.com/reader.php?ID=217

    好好学习,以备不时之需。


    模拟数据:
    create table scott.truncate_test  tablespace users
    as
    select * from Hr.EMPLOYEES;


    insert into scott.truncate_test
    select * from scott.truncate_test;
    commit;

    select count(1) from  scott.truncate_test;

    SQL> select tablespace_name from dba_tables where table_name='TRUNCATE_TEST';
    SQL> select file_name from DBA_DATA_FILES  where TABLESPACE_NAME='USERS';
    cp /u01/app/awr/users01.dbf /tmp/users01.dat
    chown oracle:oinstall /tmp/users01.dat


    执行truncate table:
    truncate table scott.truncate_test;
    select count(1) from  scott.truncate_test;


    运行FY_Recover_Data
    --sys用户
    SQL> @/home/oracle/FY_Recover_Data.SQL


    --开始恢复
    exec fy_recover_data.recover_truncated_table('SCOTT','TRUNCATE_TEST',1,'/tmp','/u01/app/awr/users01.dbf;');  
    注:执行上的SQL产生2个表空间(2个数据文件),还有1个copy文件。


    declare
    tgtowner varchar2(30);
    tgttable varchar2(30);
    datapath varchar2(4000);
    datadir varchar2(30);
    rects varchar2(30);
    recfile varchar2(30);
    rstts varchar2(30);
    rstfile varchar2(30);
    blksz number;
    rectab varchar2(30);
    rsttab varchar2(30);
    copyfile varchar2(30);
    begin
    tgtowner := 'SCOTT';  
    tgttable := 'TRUNCATE_TEST';   
    datapath := '/u01/app/awr/';     
    datadir := 'DUMP_FILE_DIR';    
    sys.Fy_Recover_data.prepare_files(tgtowner, tgttable, datapath, datadir, rects, recfile, rstts, rstfile, blksz);
    sys.Fy_Recover_data.fill_blocks(tgtowner, tgttable, datadir, rects, recfile, rstts, 8, tgtowner, tgtowner, rectab, rsttab, copyfile);
    sys.Fy_Recover_data.recover_table(tgtowner, tgttable, tgtowner, rectab, tgtowner, rsttab, datadir, datadir, recfile,datadir, copyfile, blksz);
    end;
    /


    Fy_Recover_data.prepare_files(tgtowner, tgttable, datapath, datadir, rects, recfile, rstts, rstfile, blksz);
                    *
    ERROR at line 19:
    ORA-06550: line 19, column 17:
    PLS-00302: component 'PREPARE_FILES' must be declared
    ORA-06550: line 19, column 1:
    PL/SQL: Statement ignored
    ORA-06550: line 20, column 17:
    PLS-00302: component 'FILL_BLOCKS' must be declared
    ORA-06550: line 20, column 1:
    PL/SQL: Statement ignored
    ORA-06550: line 21, column 17:
    PLS-00302: component 'RECOVER_TABLE' must be declared
    ORA-06550: line 21, column 1:
    PL/SQL: Statement ignored




    数据比较:
    select count(1) from scott.TRUNCATE_TEST$$;

      COUNT(1)
    ----------
           214
    恢复后scott.TRUNCATE_TEST$$数据内容和truncate之前相同,恢复完成。

    恢复数据后,把恢复时产生的2个表空间删除,再删除对应数据文件
    drop tablespace FY_REC_DATA INCLUDING CONTENTS;
    drop tablespace FY_RST_DATA INCLUDING CONTENTS;
    $ cd /tmp
    $ rm FY_REC_DATA_COPY.DAT FY_REC_DATA.DAT FY_RST_DATA.DAT


    展开全文
  • oracle的truncate table的操作

    千次阅读 2010-11-11 17:28:00
    oracle对于truncate table的操作有着自己的独特做法,truncate一个表几十条数据和千万条数据所用的时间都差不多,说穿了oracle对这类操作只做数据字典的更新,并不对实际数据操作。sys@ORCL> create table big_table...
  • <div><pre> ...# Internet host table user:~$ sudo /tmp/rmate-new.bash /etc/hosts <p>Buffer opens with only: # # Copyrigh </pre><p>该提问来源于开源项目:aurora/rmate</p></div>

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,061
精华内容 424
关键字:

intotabletruncate