慎用SELECT INTO复制表

很多时候我们习惯于用SELECT INTO
复制一个表或表结构,因为它方便,快捷,而且在某些情况下效率比INSERT INTO 效率要高一些。但是要注意: SELECT INTO
复制表或表结构的时候,只是得到了一个“外壳”,就像克隆人一样,只是得到了一个躯体,个人的意识、回忆都不会克隆的。像原表的主键、外键、约束、触发
器、索引都不会被复制过来。这点要注意哦,在某些情况下,没有注意的话,会照成“灾难后果的”,下面给个脚本例子,给大家演示下SELECT
INTO复制表或表结构时,没有得到原表的主键、外键、约束....

准备数据Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->USE [MyAssistant]
GO

SET ANSI_NULLS ON
GO

--创建
IF OBJECT_ID(N'Groups') IS NOT NULL
    BEGIN
        PRINT 'This table have been existed';
        DROP TABLE Groups;
    END
ELSE
    BEGIN
        CREATE TABLE [dbo].[Groups]
        (
            [GroupID]        SMALLINT    IDENTITY(1, 1),
            [GroupName]      NVARCHAR(50),
            [Description]    NVARCHAR(100),
            CONSTRAINT [PK_Groups_GroupID] PRIMARY KEY(GroupID)
        )
    END
GO

--添加数据
INSERT INTO dbo.Groups
VALUES ('SuperAdmin', '超级管理员');

INSERT INTO  dbo.Groups
VALUES('CusServGroup', '客服部门组');

INSERT INTO  dbo.Groups
VALUES('CommonGroup', '普通部门组');
GO

DROP TABLE dbo.Users
CREATE TABLE [dbo].[Users]
(
  [UserId]        BIGINT IDENTITY(1, 1) NOT NULL ,
  [UserName]      NVARCHAR(25) NULL ,
  [PassWord]      NVARCHAR(50) NULL ,
  [Sex]           BIT NULL ,
  [GroupID]       SMALLINT ,
  CONSTRAINT [PK_Users_UserId] PRIMARY KEY CLUSTERED ( [UserId] ASC ),
  CONSTRAINT [FK_Users_Groups_GroupID] FOREIGN KEY(GroupID) REFERENCES Groups(GroupID)
)
GO

ALTER TABLE [dbo].[Users] ADD CONSTRAINT [DF_Users_Sex]  DEFAULT ((0)) FOR [Sex]
GO

CREATE TRIGGER TRG_Users ON dbo.Users
AFTER DELETE
AS
SET IDENTITY_INSERT dbo.Users ON;

INSERT INTO UserHistory
(UserId, UserName, PassWord, Sex, GroupID)
SELECT * FROM deleted
GO

INSERT  INTO dbo.Users( UserName, PassWord, Sex, GroupID )
VALUES  ( 'Kerry', '312ddfjdf',  1,    1          )

INSERT  INTO dbo.Users( UserName, PassWord, Sex, GroupID )
VALUES  ( 'test',  '312ddfjdf', 0, 3   )

 

我们用下面的语句复制下表Users,我们具体可以从下图中看到表User与TestUser结构的不同了

SELECT * INTO TestUser FROM  dbo.Users

 

 

时间: 2024-12-31 21:27:38

慎用SELECT INTO复制表的相关文章

mysql 复制表数据,表结构的3种方法

 什么时候我们会用到复制表?例如:我现在对一张表进行操作,但是怕误删数据,所以在同一个数据库中建一个表结构一样,表数据也一样的表,以作备份.如果用mysqldump比较麻烦,备份.MYD,.MYI这样的文件呢,操作起来也还是麻烦. 一,复制表结构 方法1: mysql> create table a like users; //复制表结构 Query OK, 0 rows affected (0.50 sec)   mysql> show tables; +------+ | Tables_i

Oracle高级复制

文章摘要: Oracle作为数据库平台,并且有的项目使用到了Oracle的数据库复制技术,其中也遇到了一些问题,因此在这里,我对Oracle的复制技术谈一下我个人的理解,希望能够对采用Oracle数据库的项目组有所帮助.其中在文中使用到的SQL脚本都是经过检验可以运行的.          -------------------------------------------------------------------------------- 正文:     Oracle高级复制 在开始之

mysql 常用操作(整理)

原文地址:http://blog.csdn.net/lxh090821/article/details/9410943 1       登录数据库 格式: mysql -h主机地址 -u用户名 -p用户密码–P端口 –D数据库–e "SQL 内容" >mysql -uroot -p 数据库名称 2       修改密码 格式:mysqladmin -u用户名 -p旧密码 password 新密码 Mysqladmin  -uroot  -password ab12 注:因为开始时

MaxCompute常见错误汇总(更新ing)

从今天开始,小编会为大家陆续解读MaxCompute常见问题,帮助大家快速上手MaxCompute,玩转大数据计算平台,同时,也欢迎大家一起补充. 十大常见错误码 No1.FAILED: ODPS-0130131 报错信息:FAILED: ODPS-0130131:[1,15] Table not found - table test0517.dual cannot be resolved 用户场景:用虚拟表计算,select sum(1+1) from dual 问题分析:表不存在,MaxCo

mysql 忽略主键冲突、避免重复插入的几种方式

mysql 忽略主键冲突.避免重复插入的几种方式 方案一:使用 ignore 关键字 方案二:使用 replace into 方案三:ON DUPLICATE KEY UPDATE  方案一:使用 ignore 关键字 如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用: insert ignore into table_name(email,phone,user_id) values('test9@163.com','99999','9999'),这

MySQL日常应用和操作记录

整理日常操作SQL,更新中. 1.知道一个字段名,怎样查到它在数据库里的哪张表里? USE Information_schema;SELECT TABLE_NAME FROM COLUMNS WHERE COLUMN_NAME='字段名称'; MySQL中查看库表字段信息都在information_schemal中,获取数据字典等信息都要通过这个视图. 如: select table_name from columns where column_name='user_id'; 2. 如何查找一个

mysql学习笔记之mysql常用的命令

注:location为库名    Contact为表名 1.修改登录的密码: mysqladmin -uroot -p password 改后的密码 2.数据库,表管理进入 mysqlmysql -h hostname -uroot -p 3.创建数据库 mysql> create database location 4.导入数据结构---数据库的恢复,数据库是无法恢复的,只能恢复数据中的数据 (location必须为已存在的数据库) *mysql -uroot -p location <./

mysql 常用命令集锦(Linux/Windows)_Mysql

  查看数据库状态:service mysqld status   启动数据库:service mysqld start   进入数据库:mysql -u root -p123456;   列出数据库:show databases;   选择数据库:use databaseName;   列出表格:show tables:   显示表格列的属性:show columns from tableName:   建立数据库:source fileName.txt;   匹配字符:可以用通配符_代表任何

MySQL错误代码大全_Mysql

B.1. 服务器错误代码和消息 服务器错误信息来自下述源文件: · 错误消息信息列在share/errmsg.txt文件中."%d"和"%s"分别代表编号和字符串,显示时,它们将被消息值取代. · 错误值列在share/errmsg.txt文件中,用于生成include/mysqld_error.h和include/mysqld_ername.h MySQL源文件中的定义. · SQLSTATE值列在share/errmsg.txt文件中,用于生成include/s