精华内容
下载资源
问答
  • sql server 修改表结构

    千次阅读 2014-06-06 22:50:18
    SQL脚本修改表结构 新建表: create table [表名] ( [自动编号字段] int IDENTITY (1,1) PRIMARY KEY , [字段1] nVarChar(50) default '默认值' null , [字段2] ntext null , [字段3] datetime, [字段4] ...

    文章来自http://blog.csdn.net/huwei2003/article/details/6076051

    --修改数据库名称、表名称、字段名

    --修改数据库名 
    sp_renamedb 'olddbname','newdbname'
    --修改表名
    sp_rename 'oldtablename','newtablename'
    --修改字段名  参数简单易懂:oldcolumnname:oldcolumnname 旧表名:如果多表字段重复的话可用table.oldcolumnname 指定
    sp_rename 'oldcolumnname','newcolumnname','column'



    SQL脚本修改表结构
    新建表:
    create table [表名]
    (
    [自动编号字段] int IDENTITY (1,1) PRIMARY KEY ,
    [字段1] nVarChar(50) default '默认值' null ,
    [字段2] ntext null ,
    [字段3] datetime,
    [字段4] money null ,
    [字段5] int default 0,
    [字段6] Decimal (12,4) default 0,
    [字段7] image null ,
    )

    删除表:
    Drop table [表名]

    Truncate table [表名] --不写log 而且自增字段复位从1开始

    插入数据:
    INSERT INTO [表名] (字段1,字段2) VALUES (1,'ABC')

    删除数据:
    DELETE FROM [表名] WHERE [字段名]>100

    更新数据:
    UPDATE [表名] SET [字段1] = 1,[字段2] = 'ABC' WHERE [字段三] = 'what'

    新增字段:
    ALTER TABLE [表名] ADD [字段名] NVARCHAR (50) NULL

    删除字段:
    ALTER TABLE [表名] DROP COLUMN [字段名]

    修改字段:
    ALTER TABLE [表名] ALTER COLUMN [字段名] NVARCHAR (50) NULL

    重命名表:(Access 重命名表,请参考文章:在Access数据库中重命名表)
    sp_rename '表名', '新表名', 'OBJECT'

    新建约束:
    ALTER TABLE [表名] ADD CONSTRAINT 约束名 CHECK ([约束字段] <= '2010-12-1')

    add constraint pk primary key (id) --主键约束

    add constraint pk primary key (id)alter table products add constraint some_name unique (product_no); --唯一值约束
    alter table products add foreign key (product_group_id) references product_groups;  --外键约束

    删除约束:
    ALTER TABLE [表名] DROP CONSTRAINT 约束名

    新建默认值
    ALTER TABLE [表名] ADD CONSTRAINT 默认值名 DEFAULT 'ABC' FOR [字段名]

    删除默认值
    ALTER TABLE [表名] DROP CONSTRAINT 默认值名


    展开全文
  •  1、如果给加了字段,会不会复制到订阅服务器呢?如果是删除1个字段呢?  2、如果新创建了1个,会不会被同步过去呢?  3、如果新建了一个存储过程,会不会同步过去呢? 本文将会通过实验,解决上述问题。 ...


    在SQL Server上配置好数据库复制后:

             

             1、如果给表加了字段,会不会复制到订阅服务器呢?如果是删除1个字段呢?

             2、如果新创建了1个表,会不会被同步过去呢?

             3、如果新建了一个存储过程,会不会同步过去呢?


    本文将会通过实验,回答上述问题。



    1、首先,需要配置数据库复制。

    这里为了简单起见,用了机器上的2个SQL Server 2008R2的实例。

    两个实例分别是:MSSQLSERVER、SQL2008R2。

    在配置时,以MSSQLSERVER为发布服务器,而SQL2008R2为订阅服务器,配置为请求订阅。


    详细的配置方法,可以参考这篇文章,区别在于下面的文章中是配置成了推送订阅,有什么不明白的,可以在给我留言:

    【SQL Server高可用性】数据库复制:SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表


    在两个实例上运行如下代码,来创建数据库和表:

    create database w
    go
    
    use w
    go
    
    create table www(id int primary key ,v varchar(10))
    


    下面是配置完成后的截图:

    发布服务器



    订阅服务器




    2、对于已经发布的表www,增加1列,会自动同步吗?

    在发布服务器上运行如下代码:

    alter table www
    add v2 varchar(10)

    从订阅服务器的图中,并没有发现www表上新增的v2列,说明没有同步过去,那么这样怎么办呢?



    这个时候,尝试“重新初始化订阅”:





    这里进行重新初始化,成功了。如果不成功,可以按照弹出的错误窗口的提示,禁用分发代理,然后再次重新初始化订阅就可以了:



    再次查看订阅服务器,发现www表,已经有了v2列了:



    接下来,在发布服务器上,再增加一个字段,发现订阅服务器也自动增加了这个字段,而不需要重新初始化:

    alter table www
    add v3 datetime
    



    然后,我们在发布服务器上删除v3字段,而订阅服务器上也自动删除了这个v3字段。

    但有时候,也会报错,这个时候,可以再次尝试一下,一般就能删除这个字段。


    3、新创建了1个表,会不会被同步过去呢?

    这个得看是什么表,如果没有主键,那么就没办法复制到订阅服务器了。而如果是有主键的表,就可以复制。


    先在发布服务器上创建2个表:

    --没有主键
    select * into abc
    from sys.objects
    
    
    --有主键
    create table abc123(a int primary key,b varchar(20),c datetime)
    

    我们发现,在发布服务器上创建表后,和新增、删除列不同,并不会自动复制到订阅服务器上,那么怎么办呢?


    其实,很简单,只需要找到发布,然后右键,选择“属性”:



    在弹出的框中,在左边选择“项目”,在右边去掉“仅显示列表中已选中的项目”,然后给abc123表打手勾,就可以了,也就是让SQL Server也复制这个表到订阅服务器,否则SQL Server也不知道是否需要复杂:



    不过,需要注意的是abc这个表上有一个红色的圈,因为是没有主键,这个表示不能复制的意思。


    再次查看订阅服务器,发现表已经同步,而且对每个被同步的表,都会有3个存储过程,分别对应insert、update、delete:



    如果没有同步,需要用上面提到的方法,重新初始化一下就可以了。



    4、如果新建了一个存储过程,会不会同步过去呢?

    其实这个和新建表是一样的,需要在设置发布的属性中的“项目”,把要发布的存储过程,打上勾就可以了。

    那如果想修改存储过程呢?

    这个一般会自动同步,所以修改后,自动就同步到订阅服务器了。


    展开全文
  • oracle中关于表的所有操作(创建删除表,修改表结构,创建约束,操作表数据,增删改查等) 1.创建表: a. 创建xs表中计算机专业学生的备份 Create table xs_jsj as select * from xs where zym=’计算机’; b....

      oracle中关于表的所有操作(创建删除表,修改表结构,创建约束,操作表数据,增删改查等)   
    1.创建表:
           a. 创建xs表中计算机专业学生的备份
               Create table xs_jsj as select * from xs where zym=’计算机’;
           b.完整的例子:
          Create table test (xm char(20) not null,zy varchar(30) default (‘计算机’));
                    -- Create table
                    create table DEPT
                                    (
                                        DEPTNO NUMBER(2) not null,
                                        DNAME VARCHAR2(14),
                                        LOC    VARCHAR2(13)
                                      )
                                    tablespace USERS
                                    pctfree 10
                                    initrans 1
                                    maxtrans 255
                            storage
                                    (
                                     initial 64K
                                     minextents 1
                                     maxextents unlimited
                                     );
                    -- Create/Recreate primary, unique and foreign key constraints
                                alter table DEPT
                                 add constraint PK_DEPT primary key (DEPTNO)
                                 using index
                                 tablespace USERS
                                 pctfree 10
                                 initrans 2
                                 maxtrans 255
                                 storage
                                 (
                                    initial 64K
                                    minextents 1
                                    maxextents unlimited
                     );
             c.规则
                 Alter table 命令有许多选项,一个记住语法的方法是Oracle执行这个操作需要的信息:
                    1)、你不得不告诉Oracle你准备alter什么表:
                             Alter table table_name
                    2)、然后,你准备做什么?Adding 一个约束
                             ALTER TABLE table_name ADD CONSTRAINT
                    3)、强烈建议但不要求为约束定义个名字。约束名不需要放在引号里,但会以大写字母形式存储在数据字典里,
                             ALTER TABLE temp ADD CONSTRAINT pk_temp
                    4)、表示约束类型将是Primary Key,Unique,Foreign Key,或Check约束
                             ALTER TABLE temp ADD CONSTRAINT pk_temp PRIMARY KEY
                    5)、跟在约束类型后面有几种特殊选项,Primary Key和Unique约束,需要指定约束的列;Check约束需要指定约束规则。
                            ALTER TABLE temp ADD CONSTRAINT pk_temp PRIMARY KEY (ID);
                    6)、Primary Key和Unique约束应当指定索引的表空间名,使用USING INDEX TABLESPACE子句.
                            ALTER TABLE temp ADD CONSTRAINT pk_temp PRIMARY KEY (ID) USING INDEX TABLESPACE student_index;
                            创建表及索引:
                                create table DEPT                              
                                                (
                                                 DEPTNO NUMBER(2) not null,
                                                 DNAME VARCHAR2(14),
                                                 LOC    VARCHAR2(13)
                                                )
                                                tablespace USERS
                                                 pctfree 10
                                                 initrans 1
                                                 maxtrans 255
                                                 storage
                                                 (
                                                    initial 64K
                                                    minextents 1
                                                    maxextents unlimited
                                                 );
                                                
                                                create table employees
                                                (empno number(5),
                                                deptno number(3) not null,
                                                                                    constraint emp_pk primary           key(empno,deptno)   //有名的主键
                                                using index tablespace index
                                                storage (initial 64K
                                                next 64K
                                                )
                                                )
                                               
                                                                                     alter table DEPT               
    add constraint PK_DEPT primary key (DEPTNO)
                                                 using index
                                                 tablespace USERS
                                                 pctfree 10
                                                 initrans 2
                                                 maxtrans 255
                                                 storage
                                                 (
                                                    initial 64K
                                                    minextents 1
                                                    maxextents unlimited
                                                 );
    2.修改表.
            Alter table table_name
            Add column_name type [default expression]    增加新列
              Modify datatype default expression           修改已有列和属性
        Storage storage_clause                 修改存储特征
        Drop drop_clause                             删除约束条件
           a.改变表所在的表空间
                                        alter   table   name   move   tablespace   newtablespace
            例: ①在表xs中添加两列.jsj,djsm
                       Alter table xs add(jxj num<img src="<img src="<img src="">">">ber(1),djsm varchar(40) default ‘奖金1000’);
                 ②在表xs中修改名为djsm的列的默认值
             Alter talbe xs modify(djsm default ‘奖金800’)
                 ③在表中删除名为jxj和djxm的列.
                             Alter table xs drop column jxj;
                     Alter table xs drop column djsm;
                 ④修改表xs_kc的存储特征
             Alter talbe xs pctfree 20 maxtrans 200
                 ⑤为表xs_jsj加上主键
             Alter table xs_jsj add (constraint “pk_jsj” primary key(xh));
                  ⑥ 增加列
                     语法:ALTER TABLE [schema.] table_name ADD column_definition type
                     例: ALTER TABLE orders ADD order_date DATE;
                 ⑦更改列
               语法:ALTER TABLE [schema.] table_name MODIFY column_name new_attributes;
                 例: ALTER TABLE orders MODITY (quantity number(10,3),status varchar2(15));
                  ⑧.更改表名:
                     alter table t rename to s;
                  ⑨.更改列名
                     alter table t rename column n to s;
     
     
    3.约束
    Oracle数据库的完整性约束规则
                唯一性约束(Unique constraint)
                唯一性约束可以保护表中多个数据列,保证在保护的数据列中任何两行的数据都不相同。唯一性约束与表一起创建,在唯一性约束创建后,可以使用ALTER TABLE语句修改。
                语法:
                    column_name data_type CONSTRAINT constraint_name UNIQUE
                    如果唯一性约束保护多个数据列,那么唯一性约束要作为表约束增加。语法如下:
                                     CONSTRAINT constraint_name (column) UNIQUE
                                     USING INDEX TABLESPACE (tablespace_name)
                                     STORAGE (stored clause)
        唯一性约束由一个B-tree索引增强,所以可以在USING子串中为索引使用特殊特征,比如表空间或存储参数。CREATE TABLE语句在创建唯一性约束的同时也给目标数据列建立了一个唯一的索引。 Feedom.net国内最早的网管网站
                                    CREATE TABLE insured_autos (policy_id NUMBER CONSTRAINT pk_policies PRIMARY KEY, vin VARCHAR2(10), coverage_begin DATE, coverage_term NUMBER, CONSTRAIN unique_auto UNIQUE (policy_id,vin) bitsCN_com
                                    USING INDEX TABLESPACE index STORAGE (INITIAL 1M NEXT 10M PCTINCREASE 0) )用户可以禁用未以性约束,但他仍然存在,禁用唯一性约束使用ALTER TABLE 语句
                ALTER TABLE insured_autos DISABLE CONSTRAIN unique_name;                   
    删除唯一性约束,使用ALTER TABLE....DROP CONSTRAIN语句                      ALTER TABLE insured_autos DROP CONSTRAIN unique_name;           注意用户不能删除在有外部键指向的表的唯一性约束。这种情况下用户必须首            先禁用或删除外部键(foreign key)。 bitscn.com中国网管联盟
            删除或禁用唯一性约束通常同时删除相关联的唯一索引,因而降低了数据库性能。经常删除或禁用唯一性约束有可能导致丢失索引带来的性能错误。要避免这样错误,可以采取下面的步骤:                                         
                1、在唯一性约束保护的数据列上创建非唯一性索引。
                2、添加唯一性约束
                        主键(Primary Key)约束 bitscn.com中国网管联盟                                    表有唯一的主键约束。表的主键可以保护一个或多个列,主键约束可与NOT NULL约束共同作用于每一数据列。NOT NULL约束和唯一性约束的组合将保证主键唯一地标识每一行。像唯一性约束一样,主键由B-tree索引增强。 09hr.com网管求职        创建主键约束使用CREATE TABLE语句与表一起创建,如果表已经创建了,可以使用ALTER TABLE语句。
                                    CREATE TABLE policies (policy_id NUMBER CONSTRAINT pk_policies PRIMARY KEY, holder_name VARCHAR2(40), gender VARCHAR2(1), marital_status VARCHAR2(1), date_of_birth DATE );
                                      与唯一性约束一样,如果主键约束保护多个数据列,那么必须作为一个表约束创建。 bitscn.com中国网管联盟
                                    CREATE TABLE insured_autos (policy_id NUMBER, vin VARCHAR2(40), coverage_begin DATE, coverage_term NUMBER, CONSTRAINT pk_insured_autos PRIMARY KEY (policy_id,vin) USING INDEX TABLESPACE index STORAGE (INITIAL 1M NEXT 10M PCTINCREASE 0) );             
                                      禁用或删除主键必须与ALTER TABLE 语句一起使用
                                    ALTER TABLE policies DROP PRIMARY KEY;
                                    ALTER TABLE policies DISABLE PRIMARY KEY;
    1、创建约束
                                CREATE TABLE students
                                 (student_id    VARCHAR2(10) NOT NULL,
                                 student_name VARCHAR2(30) NOT NULL,
                                 college_major VARCHAR2(15) NOT NULL,
                                 status        VARCHAR2(20) NOT NULL,
                                 state         VARCHAR2(2),
                                 license_no    VARCHAR2(30)) TABLESPACE student_data;
    2、创建主键
                                ALTER TABLE students
                                 ADD CONSTRAINT pk_students PRIMARY KEY (student_id)
                                 USING INDEX TABLESPACE student_index;
    3、创建Unique约束
                                ALTER TABLE students
                                 ADD CONSTRAINT uk_students_license
                                 UNIQUE (state, license_no)
                                 USING INDEX TABLESPACE student_index;
    4、创建Check约束
                                ALTER TABLE students
                                   ADD CONSTRAINT ck_students_st_lic
                                        CHECK ((state IS NULL AND license_no IS NULL) OR
                                              (state IS NOT NULL AND license_no is NOT NULL));
                                添加check约束
               alter table emp add constraint con check(dept_salary>0);
                con 为约束名, dept_salary为字段名
                                    
    5、创建外键约束
                                 ALTER TABLE students
                                 ADD CONSTRAINT fk_students_state
                                 FOREIGN KEY (state) REFERENCES state_lookup (state);
    6. 约束..
                        Alter table table_name add constrants BID primary key (bookno);
                        ALERT TABLE table_name MODIFY( column1 PRIMARY KEY);
          1、创建表的同时创建主键约束
                            (1)无命名 create table student (studentid  int  primary key not null,
                                                              studentname varchar(8),age int);
                            (2)有命名 create table students (studentid int ,studentname varchar(8),
                                                        age int,constraint yy primary key(studentid));
         2、删除表中已有的主键约束
                            (1)有命名 alter table students drop constraint yy;
                            (2)无命名 可用 SELECT * from user_cons_columns where ..;
                                 查找表中主键名称得student表中的主键名为SYS_C002715
                                 alter table student drop constraint SYS_C002715;
                          (3) 使约束失效:
                                 alter table tbl_employee disable constraint fk_emp;
                         删除约束:
                                alter table tbl_department drop constraint pk_dept;
                         查询约束:
    select CONSTRAINT_NAME from user_constraints where table_name='TBL_EMPLOYEE';
    select CONSTRAINT_NAME,COLUMN_NAME from user_cons_columns where table_name='TBL_EMPLOYEE';
         3. 删除表.
              Drop table table_name;
    4、操作表数据
               插入表记录:
                ①. a. insert into table_name col1,col2 values (val1,val2);
    例:Insrt into xs(xh,xm,) values (‘09’,to_date(‘19860210’,’yyyymmdd’));
                        insert into    depto values('100','xieyunchao','m','22',to_date('19861104','yyyy-mm-dd'),10000)
                     b.从一个表中向另一个表中插入数据
                 Insert into table1(col1,col2,col3) select (col1,col2,col3)
                       from othertable
                     c.使用子查询插入数据
                         insert into employee (empno,ename,sal,deptno)
                                  select empno,ename,sal,depto from emp;
                    d.INSERT INTO EMP (ENAME,HIREDATE) VALUE(‘AA’,TO_DATE(‘1980-12-09’,’YYYY-MM-DD’))
          ③. 删除表数据:
             Delete from table_name where condition;
          ④. 修改表记录
             Update table_name set column_name=expression,…where condition.
                    基于一张表修改另一张表的数据
                      UPDATE EMPLEE SET DEPTNO=(SELECT DENPNO FROM EMP WHERE EMPNO=7788)
                                     WHERE JOB=(SELECT JOB FROM EMP WHERE EMPNO=7788)
          ⑤. 删除所有记录但保留表结构.
             Truncate table table_name;
          ⑥.查询数据
                   查询表结构:DESC table_name
             Select ename,sal,12*sal+100 from emp
                   注:select count(dinstinct(deptno)) from emp
                   a.查询大于平均的:
                      select empno from emp a,(select avg(sal) as sal_sal from emp) b
                             where a.sal>b.sal_sal;
           如果列中有空值时,则结果也为空(关于null值的处理(p47)).
             如:select ename,name,12*sal+comm如果comm的值为null,结果也为null;
                          如上所示,comm为null时.则12*sal+comm也为null;解决方法是用nvl方法替换.
                  在两个表中查询:以下两种方式都是一样的.
                      a.select t_phone_operation.operation_name
                                                    from t_phone_operation ,t_phone_operation_charge
                                                    where t_phone_operation.operation_id=t_phone_operation_charge.operation_id and
                                                                                        t_phone_operation_charge.phone_num=’159..’;
                                       b.select operation_name from t_phone_operation where operation_id in (select operation_id from t_phone_operation_charge where phone_num='159...'
    使用日期格式显示日期:
    select ename,to_char(hiredate,’yyyy—mm---dd’) from emp
    select ename where hiredate>to_date(‘1999-12-31’,’yyyy-mm-dd’);
                 
     
                  使用别名的三种方式:
                      a.    select ename as name,sal salary,from emp
                      b.    select ename ” name”, sal*12 ”annual salary”
                  使用连接操作符:
                      Select ename || job as “employees” from emp
                  用连接字符:
                      Select ename ||’ ’||’ is a ’||’ ’||job as “employee details”
                  限制重复的行:
                      Select distinct deptno from emp
                  注意大小写:
                      Select ename,job,deptno from emp where job=’CLERK’
                  使用between ….and 运算符
                      Select ename,sal from emp where sal between 1000 and 1500;
                  使用in 运算符
                      Select empno,ename,sal,mgr from emp where mgr in(23,231,2345);  
                  Like运算符:(模糊查询)
                      %代表至多任意字符
                     _代表一个任意字符
                            如:select ename from emp where ename like ’s%’;
                      显示第三个字符为大写A的所有信息
                            SELECT ENAME ,SAL FROM EMP WHERE ENAME LIKE '__A%';
                      显示雇员名包含"_"的雇员信息(其中ESCAPE后的字符a为转义字符)
                            SELECT ENAME,SAL WHERE ENAME LIKE '%a_% ESCAPE 'a';
                 Null运算符(关于null值的处理(p47):)
                    测试一个值是否为空:
                            Select ename,mgr from emp where mgr is null (注意是is null ,不是=null)
                 使用NVL函数处理NULL值
                     NVL函数用于将NULL转换为实际值,其语法为NVL(exp1,exp2).如果是exp1 是null,则返回
                     exp2,如果exp1不为null,则返回exp1,参数exp1和exp2是任意相同的数据类型.
                     如:
                     SELECT ENAME, SAL,SAL+NVL(COM,0) AS "月收入" from EMP;
                 使用NVL2函数处理NULL值
                    语法为NVL(exp1,exp2,exp3),如果exp1不是null,则返回exp2,如果exp1是null,则返回exp3;
                 用WHERE语句限制日期
                    示例一.符合默认日期格式
                      select * from emp where hiredate>'01-1月-82'
                    示例2:不符合默认日期格式(需要用TO_DATE函数转换)
                      SELECT * FROM EMP WHERE  HIREDATE>TO_DATE('1994-9-24','yyyy-mm-dd');
                逻辑操作符:And or not
                Order by 子句
                           a.   使用order by 子句对查询数据排序
                                 ―――asc:升序,默认
                                 ―――desc:降序:
     
                           依据多列进行排序:
                                 Select ename,deptno,sal from emp order by deptno,sal desc
                    总结:
                    SELECT    [DISTINCT] {*,COLUMN[ALIAS],…..}    //DISTINCT不重复
                    FROM      tablename
                    WHERE     condition
                    ORDER BY   {column,expr,alias} [ASC|DESC]
                分组查询:
               常用分组函数:
                    MAX , MIN ,AVG ,SUM,COUNT,VARIANCE(取方差),STDDEV(取标准差)
    ●     当使用分组函数时,分组函数只能出现在选择列表,order by ,和having子句中,而不能出现在where 和group by子句中.
    ●     当执行SELECT 语句时,如果选择列表同时包含列,表达式,和分组函数,那么这些列和表达式必须出现在GROUP BY子句中.  
    select deptno,avg(sal),count(*) from emp group by deptno;
            having avg(sal)<2000;
    ●如果在select 语句中同时包含group by ,    having ,以及order by子句,则必须将order by子句放在最后.
    ●当限制分组结果时,必须要使用having ,而不能在WHERE 子句中使用分函数限制分组显示结果.
    子查询:
        子查询的作用:
    ●     在insert 或create table 语句中使用子查询,可以将表数据插入到目标表中.
    ●     通过update 子句中使用子查询,可以修改一列事多列数据.
    ●     通过在where ,having,start with 子句中使用子查询,可以提供条件值.
    单行子查询:
    select ename ,sal,deptno from emp where deptno=(select deptno from emp where ename=’scott’)
    多行子查询:
    select ename ,job,sal,deptno from emp where job in
     (select distinct job from emp where deptno=10)
    使用比较符:
    IN:匹配子查询结果中的任何一个就可以(见上例).
    ALL:必须要符合子查询结果中的所有值.
    ANY:只要符合子查询结果中的任何一个就可以.
    ALL的使用:
    SELECT ENAME,SAL,DEPTNO FROM EMP WHERE SAL>ALL
           (SELECT SAL FROM EMP WHERE DEPTNO=30)
    ANY 的使用:
       SELECT ENAME,SAL,DEPTNO FROM EMP WHERE SAL>ANY
    (SELECT SAL FROM EMP WHERE DEPT=’30’)
                    多列子查询:
                        SELECT ENAME ,JOB,SAL,DEPTNO FROM EMP WHERE (DEPTNO,JOB) =
                            (SELECT DEPTNO,JOB FROM EMP WHERE ENAME =’SMITH’)
    SELECT ENAME,SAL ,COMM,DEPTNO FROM EMP WHERE (SAL,NVL(COMM,-1)) IN (SELECT     SAL,NVL(COMM,-1)FROM EMP WHERE DEPTNO=30)
               
     
     
     
     
     
                ⑦.删除表数据:
                        Delete from table_name where condition;
                        DELETE FROM EMP WHERE DEPTNO=(SELECT DEPTNO FROM DEPT WHERE DNAME=’SALES’)
                ⑧. 修改表记录
                        Update table_name set column_name=expression,…where condition.
                        UPDATE TABLE_NAME SET COL1=A*1.1,COL2=B*2 WHERE
                        更新日期:
                        UPDATE TABLE_NAME SET HIREDATE =TO_DATE(‘1987/12/1’,’YYYY/MM/DD’);
                        更新关连数据
                        UPDATE EMP SET (ENAME,SAL,COMM)=(SELECT ENAME,SAL,COMM FROM EMP WHERE ENAME=’XX’)WHERE ENAME=’YY’
                        复制其他表数据
                        UPDATE EMPLEYEE SET DEPTNO=(SELECT DEPT FROM EMP WHERE EMPNO=7788)WHERE JOB=(SELECT JOB FROM EMP WHERE EMPNO=7788)
                ⑨.删除所有记录但保留表结构.
                        Truncate table table_name;
                       
                ⑩.事务
                 a. 当出现下面的事件时,事务便结束
                      ①. commit or rollback 被执行时.
                      ②. Ddl or dcl被执行时.create or drop 等
                      ③. 用户退出.
                      ④. 系统中止或当机.
                 b. 事务保存点.
                   update ....
                      savepoint update_done
                      insert ....
                      rollback TO update_done


    出处:http://blog.csdn.net/xieyunchao/archive/2008/03/25/2217229.aspx

    展开全文
  • 数据库表结构

    千次阅读 2018-08-20 16:28:54
    当前研发工作中经常出现因数据库、数据库表字段格式不规则而影响开发进度的问题,在后续开发使用原来数据库时,也会因为数据库的可读性不够高,表字段规则不统一,造成数据查询,数据使用效率低的问题,所以有...

    当前研发工作中经常出现因数据库表、数据库表字段格式不规则而影响开发进度的问题,在后续开发使用原来数据库表时,也会因为数据库表的可读性不够高,表字段规则不统一,造成数据查询,数据使用效率低的问题,所以有必要整理出一套合适的数据库表字段命名规范来解决优化这些问题。

    本文是一篇包含了数据库命名、数据库表命名、数据库表字段命名及SQL语言编码的规范文档,针对研发中易产生的问题和常见错误做了一个整理和修改,为日后涉及到数据库相关的研发工作做好准备。

     

     

    数据库规范化设计要求

    一、表中避免空列

    减少数据库处理记录的复杂性,

    1、空列数目少的时候,可以设置默认值。

    2、空列数目多的时候,可以设置单独一张表存储。

    二、表不应该有重复的值或列

    创建字典表

    三、唯一的标识某一条数据

    ID  

    如有必要添加 行号 进行排序显示管理

     

    四、数据库对象统一的前缀名

    t_department 

    五、尽量只存单一实体类型数据

    一个表中的字段不要太复杂 ,能分开的单独分开建表。

     

     


    数据库相关命名规范

     

    一、数据库命名规范

    采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,命名简洁明确,多个单词用下划线'_'分隔,一个项目一个数据库,多个项目慎用同一个数据库

     

    二、数据库表命名规范

    2.1数据表命名规范

    (1)采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,命名简洁明确,多个单词用下划线'_'分隔

    (2)全部小写命名,禁止出现大写

    (3)禁止使用数据库关键字,如:name,time ,datetime,password等(user ) 不然sql语句 写成 select * from [User]

    (4)表名称不应该取得太长(一般不超过三个英文单词)

    (5)表的名称一般使用名词或者动宾短语

    (6)用单数形式表示名称,例如,使用 employee,而不是 employees

    明细表的名称为:主表的名称+字符dtl(detail缩写)

    例如:采购定单的名称为:po_order,则采购定单的明细表为:po_orderdtl 

    (7)表必须填写描述信息(使用SQL语句建表时)

     

    2.2命名规范

    ①模块_+功能点  示例:alllive_log   alllive_category

    ②功能点  示例:live   message

    ③通用表  示例:all_user

     

    2.3待优化命名示例

    ①冗余:

    错误示例:yy_alllive_video_recomment    yy_alllive_open_close_log

    说明:去除项目名,简化表名长度,去”yy_”

     

    ②相同类别表命名存在差异,管理性差

    错误示例:yy_all_live_category    yy_alllive_comment_user

    说明:去除项目名,统一命名规则,均为”yy_alllive_”开头即可

     

    ③命名格式存在差异

    错误示例:yy_showfriend    yy_user_getpoints    yy_live_program_get

    说明:去除项目名,统一命名规则,动宾短语分离动宾逻辑顺序统一

     

    三、数据库字段命名规范

    3.1字段命名规范

    (1)采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,命名简洁明确,多个单词用下划线'_'分隔

    (2)全部小写命名,禁止出现大写

    (3)字段必须填写描述信息

    (4)禁止使用数据库关键字,如:name,time ,datetime password 等

    (5)字段名称一般采用名词或动宾短语

    (6)采用字段的名称必须是易于理解,一般不超过三个英文单词

    (7)在命名表的列时,不要重复表的名称

    例如,在名employe的表中避免使用名为employee_lastname的字段

    (8)不要在列的名称中包含数据类型

    (9)字段命名使用完整名称,禁止缩写

     

    3.2命名规范

    ①名词  示例:user_id    user_name    sex

    ②动宾短语  示例:is_friend   is_good

     

    3.3待优化命名示例

    ①大小写规则不统一

    错误示例:user_id    houseID

    说明:使用统一规则,修改为”user_id”,”house_id”

     

    ②加下划线规则不统一

    错误示例:username    userid    isfriend    isgood

    说明:使用下划线进行分类,提升可性,方便管理,修改为”user_name”,”user_id”,”is_friend”,”is_good”

     

    ③字段表示不明确

    错误示例:uid    pid

    说明:使用完整名称,提高可读性,修改为”user_id”,”person_id”

     

    3.4字段类型规范

    (1)所有字段在设计时,除以下数据类型timestamp、image、datetime、smalldatetime、uniqueidentifier、binary、sql_variant、binary 、varbinary外,必须有默认值,字符型的默认值为一个空字符值串’’,数值型的默认值为数值0,逻辑型的默认值为数值0

    (2)系统中所有逻辑型中数值0表示为“假”,数值1表示为“真”,datetime、smalldatetime类型的字段没有默认值,必须为NULL

    (3)用尽量少的存储空间来存储一个字段的数据

    使用int就不要使用varchar、char,

    用varchar(16)就不要使varchar(256)

    IP地址使用int类型

    固定长度的类型最好使用char,例如:邮编(postcode)

    能使用tinyint就不要使用smallint,int

    最好给每个字段一个默认值,最好不能为null

    (4)用合适的字段类型节约空间

    字符转化为数字(能转化的最好转化,同样节约空间、提高查询性能)

    避免使用NULL字段(NULL字段很难查询优化、NULL字段的索引需要额外空间、NULL字段的复合索引无效)

    少用text类型(尽量使用varchar代替text字段)

     

    3.5数据库中每个字段的规范描述 

       (1)尽量遵守第三范式的标准(3NF) 

         表内的每一个值只能被表达一次 

         表内的每一行都应当被唯一的标示 

         表内不应该存储依赖于其他键的非键信息

    (2)如果字段事实上是与其它表的关键字相关联而未设计为外键引用,需建索引

    (3)如果字段与其它表的字段相关联,需建索引

    (4)如果字段需做模糊查询之外的条件查询,需建索引

    (5)除了主关键字允许建立簇索引外,其它字段所建索引必须为非簇索引

     

    四、SQL语言编码规范 

    4.1大小写规范 

    (1)所有关键字必须大写,如:INSERT、UPDATE、DELETE、SELECT及其子句,IF……ELSE、CASE、DECLARE等

    (2)所有函数及其参数中除用户变量以外的部分必须大写

    (3)在定义变量时用到的数据类型必须小写

     

    4.2注释 

    注释可以包含在批处理中,在触发器、存储过程中包含描述性注释将大大增加文本的可读性和可维护性,本规范建议: 

    (1)注释以英文为主,实际应用中,发现以中文注释的SQL语句版本在英文环境中不可用,为避免后续版本执行过程中发生某些异常错误,建议使用英文注释

    (2)注释尽可能详细、全面创建每一数据对象前,应具体描述该对象的功能和用途,传入参数的含义应该有所说明,如果取值范围确定,也应该一并说明,取值有特定含义的变量(如boolean类型变量),应给出每个值的含义

    (3)注释语法:单行注释、多行注释 

    单行注释:注释前有两个连字符(--)对变量、条件子句可以采用该类注释

    多行注释:符号之间的内容为注释内容,对某项完整的操作建议使用该类注释

    (4)注释简洁,同时应描述清晰

    (5)函数注释: 

    编写函数文本--如触发器、存储过程以及其他数据对象--时,必须为每个函数增加适当注释,该注释以多行注释为主,主要结构如下: 

    CREATE PROCEDURE sp_xxx 

     

     

     

     数据库表设计需要满足

    1、功能需求

    2、性能需求

    3、扩展性需求

     

     

    参考:

    数据库设计规范化的 5 个要求

    数据库表设计的几条准则

    数据库表结构设计浅谈

     

     

    数据库表及字段命名规范(一)

    展开全文
  • Laravel创建数据库表结构

    千次阅读 2017-11-21 09:36:25
    迁移就像数据库的版本控制,允许团队简单轻松的编辑并共享应用的数据库表结构,迁移通常和Laravel的schema构建器结对从而可以很容易地构建应用的数据库表结构。如果你曾经告知小组成员需要手动添加列到本地数据库...
  • Oracle ERP 表结构

    千次阅读 2015-03-12 11:38:54
    BOM模块常用表结构  表名: bom.bom_bill_of_materials  说明: BOM清单父项目  BILL_SEQUENCE_ID NUMBER 清单序号(关键字) ASSEMBLY_ITEM_ID NUMBER 装配件内码 ORGANIZATION_ID NUMBER 组织代码 ASSEMBLY...
  • ECshop 数据库表结构 -- 表的结构

    千次阅读 2014-11-10 15:19:29
    ECshop 数据库表结构 -- 表的结构 `ecs_account_log` CREATE TABLE IF NOT EXISTS `ecs_account_log` ( `log_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID号', `user_id` mediumint(8) ...
  • 1.增加字段  alter table docdsp add dspcode char(200) 2.删除字段  ALTER TABLE table_NAME DROP COLUMN ...3.修改字段类型  ALTER TABLE table_name ALTER COLUMN column_name new_data_t
  • dz表结构详解

    千次阅读 2012-03-23 12:41:16
    dz表结构详解 cdb_access 用户权限表  cdb_adminactions 管理动作表 cdb_admingroups 管理组数据表 cdb_adminnotes 管理员留言  cdb_adminsessions 管理员后台在线记录 cdb_advertisements 广告资料表
  • Hbase shell命令大全与表结构详解案例展示

    千次阅读 多人点赞 2021-09-17 10:59:48
    true hbase(main):077:0> exists 'ns1:t3' Table ns1:t3 does not exist => false describe/desc 都是查看表结构详细信息 desc 'myns:t1' disable, disable_all, enable, enable_all, 设置表可用和不可用状态。...
  • EBS常用表结构

    千次阅读 2011-05-27 17:25:00
    BOM模块常用表结构 表名: bom.bom_bill_of_materials 说明: BOM清单父项目 BILL_SEQUENCE_ID NUMBER 清单序号(关键字) ASSEMBLY_ITEM_ID NUMBER 装配件内码 ORGANIZATION_ID NUMBER 组织代码 ASSEMBLY_TYPE ...
  • mysql 数据库表结构设计与规范

    千次阅读 2017-06-06 15:00:16
    mysql 数据库表结构设计与规范DDL(data difinition language)就是数据定义语言。1.sql语句的界定符[code]– 默认情况下” ; ” 代表sql语句的结束 delimiter 新的界定符 – 修改 // 为界定符 delimiter //2.创建...
  • phpcms v9 数据表结构

    千次阅读 2016-11-28 10:27:37
    1 : v9_admin 管理员 字段 类型 Null 默认 额外 注释 userid mediumint(6) unsigned PK   auto_increment 用户id username varchar(20) YES     用户名 ...
  • Oracle EBS 11i 表结构

    千次阅读 2009-07-29 11:45:00
    BOM模块常用表结构 表名: bom.bom_bill_of_materials 说明: BOM清单父项目 BILL_SEQUENCE_ID NUMBER 清单序号(关键字)ASSEMBLY_ITEM_ID NUMBER 装配件内码ORGANIZATION_ID NUMBER 组织代码ASSEMBLY_TYPE NUMBER...
  • 近日,伯毅同学给社区贡献了工作流核心表结构的剖析文章,非常细致,喜欢的伙伴请转走 1. 工作流总体存储结构 在 dolphinscheduler 库中创建的所有工作流定义(模板)都保存在 t_ds_process_definition 表中. 该数据库...
  • phpcms v9数据表结构

    千次阅读 2013-08-13 15:41:40
     1: v9_admin 管理员 ID 字段 类型 Null 默认 额外 注释 1 userid mediumint(6) unsigned PK auto_increment 用户id 2 username varchar(20) YES 用户名 3 pa
  • ECshop 数据库表结构以及创建语句

    千次阅读 2016-02-23 14:28:17
    ecs_account_log 用户帐号情况记录,包括资金和积分等 log_id mediumint 自增ID号 user_id mediumint 用户登录后保存在session中的id号,跟users中的user_id对应 user_money decimal 用户该笔记录的余额 ...
  • sql 修改表以及表字段

    万次阅读 2014-04-20 20:30:57
    用SQL语句添加删除修改字段 1.增加字段  alter table docdsp add dspcode char(200)  alter table tbl add meet_group int2 2.删除字段  ALTER TABLE table_NAME DROP COLUMN column_NAME 3.修改字段类型...
  • [架构师之路] 高可扩展表结构系列

    千次阅读 2017-11-28 19:20:28
    http://chuansong.me/n/1298388046739 啥,又要为增加一列属性? 2016-12-14 http://chuansong.me/n/1311070246933 这才是真正的扩展方案 2016-12-15 http://chuansong.me/n/1496202646316 100亿数据1万...
  • Django model update的各种用法介绍

    万次阅读 2019-07-22 21:37:08
    Django开发过程中对表(model)的增删改查是最...假如我们的表结构是这样的 那么我们修改用户名和状态可以使用如下两种方法: 方法一: User.objects.filter(id=1).update(username='nick',is_active=True) ...
  • harbor1.4.0高可用部署

    千次阅读 2018-03-21 16:46:21
    2.2.2 数据库中加载harbor表结构 在offline安装包解压后的目录中 docker cp ha/registry.sql mariadb:/tmp/ docker exec -it mariadb /bin/bash mysql -uroot -proot --default-character-set=utf8 create ...
  • db2数据库表修改列为主键

    千次阅读 2017-03-24 17:21:38
    需要对一个已经有数据的的列进行修改,列原属性是可以为空且有一个默认值,现在想修改为主键。 原来的ddl:column varchar(16) DEFAULT '0' 执行以下操作:(将列设为非空) alter table table_name alter ...
  • 在线DDL修改varchar字段属性时不锁

    千次阅读 2019-06-12 09:21:54
    《MySQL管理之道:性能调优、高可用与监控(第2版)》第2章MySQL 5.7与MariaDB 10.1的新特性,本章主要讲解MySQL 5.7 和 InnoDB 的一些增强性能,这些增强性能极大地提高了系统和MySQL的性能。本节为大家介绍在线DDL...
  • 老周以前也写过关于跳表的数据结构,但那是纯数据结构方面来分析的,今天我们就来从跳跃在 Redis 中的底层实现方向来分析。我们都知道 Redis 有五种常用的数据结构:String、Hash、List、Set 以及 ZSet,其中 ZSet...
  • Django之model改update用法介绍

    万次阅读 2019-10-17 19:59:10
    假如我们的表结构是这样的 class User(models.Model): username = models.CharField(max_length=255, unique=True, verbose_name='用户名') is_active = models.BooleanField(default=False, verbose_n...
  • 本文代码实现基本按照《数据结构》课本目录顺序,外加大量的复杂算法实现,一篇文章足够。能换你一个收藏了吧?
  • 1.节点的3个属性pre,data,next 2.头节点和尾节点head,rear 3.要完成迭代,需要让类继承Iterable,仿制迭代过程不可修改
  • 此文是根据杨尚刚在【QCON高可用架构群】中,针对MySQL在单海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处。 杨尚刚,美图公司数据库高级DBA,负责美图后端数据存储平台建设和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 80,141
精华内容 32,056
关键字:

修改表结构可用update