<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    少年阿賓

    那些青春的歲月

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

    #

    自定義類型:
    create or replace type mytype as object(
    id int,
    name varchar(20)
    )

    建表使用剛剛定義的mytype:
    create table MYTYPETABLE
    (
      ID     NUMBER,
      PERSON MYTYPE
    )


    相表里面插入數據:
    insert into mytypetable values (1,mytype(2,'abin'))


    查找數據:
    select t.id,t.person.id,t.person.name from mytypetable t

    posted @ 2012-09-09 22:37 abin 閱讀(371) | 評論 (0)編輯 收藏

    -- Create table
    create table ABIN
    (
      ID         NVARCHAR2(50),
      NAME       VARCHAR2(30),
      SID        VARCHAR2(180),
      CREATETIME NVARCHAR2(20)
    )
    tablespace USERS
      pctfree 10
      initrans 1
      maxtrans 255
      storage
      (
        initial 64K
        minextents 1
        maxextents unlimited
      );
    -- Create/Recreate indexes 
    create index AID on ABIN (ID)
      tablespace USERS
      pctfree 10
      initrans 2
      maxtrans 255
      storage
      (
        initial 64K
        minextents 1
        maxextents unlimited
      );
    create unique index ALLINDEX on ABIN (ID, NAME, SID)
      tablespace USERS
      pctfree 10
      initrans 2
      maxtrans 255
      storage
      (
        initial 64K
        minextents 1
        maxextents unlimited
      );
    create unique index USID on ABIN (SID)
      tablespace USERS
      pctfree 10
      initrans 2
      maxtrans 255
      storage
      (
        initial 64K
        minextents 1
        maxextents unlimited
      );



    -- Create table
    create table LEE
    (
      ID   NVARCHAR2(50) not null,
      NAME VARCHAR2(30),
      SID  VARCHAR2(180)
    )
    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 LEE
      add constraint SSSSSID primary key (ID)
      using index 
      tablespace USERS
      pctfree 10
      initrans 2
      maxtrans 255
      storage
      (
        initial 64K
        minextents 1
        maxextents unlimited
      );



    -- Create table
    create table LI
    (
      ID   NVARCHAR2(50) not null,
      NAME VARCHAR2(30),
      SID  VARCHAR2(180)
    )
    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 LI
      add constraint TTTID primary key (ID)
      using index 
      tablespace USERS
      pctfree 10
      initrans 2
      maxtrans 255
      storage
      (
        initial 64K
        minextents 1
        maxextents unlimited
      );



    create or replace procedure getProcess(tdate date,tid nvarchar2,tname varchar2)
    as
    mydate date;
    v_sql varchar2(4000);
    ssid varchar2(180):='';
    cursor mycur is select * from lee where name=tname;
    myrow lee%rowtype;
    shecur sys_refcursor;
    myexception EXCEPTION;
    mysqlcode nvarchar2(50);
    mysqlerrm varchar2(180);
    jdate abin.createtime%type;
    type hcur is ref cursor ;
    hecur hcur;
    herow li%rowtype;
    begin
         if(tid=1) then
                   begin
                      select to_date(to_char(sysdate,'yyyy-MM-dd HH24:mi:ss'),'yyyy-MM-dd HH24:mi:ss') into mydate from dual;
                      jdate:=to_char(mydate,'yyyy-MM-dd HH24:mi:ss');
                      dbms_output.put_line(jdate);
                   end;
                   if(to_char(tdate,'yyyy-MM-dd')=to_char(sysdate,'yyyy-MM-dd'))then
                           begin
                                dbms_output.put_line('this current tname is: '||tname);
                                select sid into ssid from lee where name=tname;
                                dbms_output.put_line('this current sid is: '||ssid);
                                if(ssid is not null)then  
                                    v_sql:='insert into abin (id,name,sid,createtime) values ('''||tid||''','''||tname||''','''||ssid||''','''||jdate||''')';    
                                    dbms_output.put_line('v_sql='||v_sql);
                                    execute immediate v_sql;
                                     dbms_output.put_line(' execute immediate v_sql='||v_sql);
                                    commit;
                                end if;
                           end;
                           dbms_output.put_line('this input equals');
                   end if;
                   if(to_char(tdate,'yyyy-MM-dd')=to_char(sysdate-1,'yyyy-MM-dd'))then
                           begin
                                select sid into ssid from li where name=tname;
                                if(ssid is not null)then
                                    v_sql:='insert into abin (id,name,sid,createtime)values ('''||tid||''','''||tname||''','''||ssid||''','''||jdate||''')';    
                                    execute immediate v_sql;
                                    commit;          
                                end if;       
                           end;
                           dbms_output.put_line(' this input not equals ');
                   end if;
         end if;
         if(tid=2) then
              begin
                    select to_date(to_char(sysdate,'yyyy-MM-dd HH24:mi:ss'),'yyyy-MM-dd HH24:mi:ss') into mydate from dual;
                    jdate:=to_char(mydate,'yyyy-MM-dd HH24:mi:ss');
                    dbms_output.put_line(jdate);
              end;
              dbms_output.put_line('tid :'||tid);
              open mycur;
              loop
              fetch mycur into myrow;
                    ssid:=myrow.sid;
                    dbms_output.put_line('ssid :'||ssid);
                    if(ssid is not null)then
                          v_sql:='insert into abin (id,name,sid,createtime)values ('''||tid||''','''||tname||''','''||ssid||''','''||jdate||''')';    
                          dbms_output.put_line('v_sql :'||v_sql);
                          execute immediate v_sql;
                          dbms_output.put_line('execute immediate v_sql :'||v_sql);
                          commit; 
                    end if;
              exit when mycur%NOTFOUND;
              end loop;
              if mycur%isopen then
              close mycur;   
              end if; 
         end if;  
         if(tid=3) then
              begin
                    select to_date(to_char(sysdate,'yyyy-MM-dd HH24:mi:ss'),'yyyy-MM-dd HH24:mi:ss') into mydate from dual;
                    jdate:=to_char(mydate,'yyyy-MM-dd HH24:mi:ss');
                    dbms_output.put_line(jdate);
              end;
              v_sql:='select * from li where name=:1';
              open shecur for v_sql using tname;
                   loop
                   fetch shecur into myrow ;   
                   ssid:=myrow.sid;
                   if(ssid is not null)then
                        v_sql:='insert into abin (id,name,sid,createtime)values ('''||tid||''','''||tname||''','''||ssid||''','''||jdate||''')';    
                        execute immediate v_sql;
                        commit;
                   end if;
                   exit when shecur%NOTFOUND;
                   end loop;
                   if shecur%isopen then
                      close shecur;
                   end if;
         end if;
         if(tid=4)then
              begin
                  select to_date(to_char(sysdate,'yyyy-MM-dd HH24:mi:ss'),'yyyy-MM-dd HH24:mi:ss') into mydate from dual;
                  jdate:=to_char(mydate,'yyyy-MM-dd HH24:mi:ss');
                  dbms_output.put_line(jdate);
              end;
              v_sql:='select * from li t where t.name=:1';
              open hecur for v_sql using tname;
              loop 
                   fetch hecur into herow;
                   ssid:=herow.sid;
                   if(ssid is not null)then
                        v_sql:='insert into abin (id,name,sid,createtime)values ('''||tid||''','''||tname||''','''||ssid||''','''||jdate||''')';    
                        execute immediate v_sql;
                        commit;  
                   end if;
              exit when hecur%NOTFOUND;
              end loop;
              if(hecur%isopen)then
                  close hecur;
              end if;     
              
         end if;
         if(tid=5)then
             RAISE myexception;
         end if;
         exception   
             when myexception then
               mysqlcode:=SQLCODE;
               mysqlerrm:=SQLERRM; 
               begin
                    select to_date(to_char(sysdate,'yyyy-MM-dd HH24:mi:ss'),'yyyy-MM-dd HH24:mi:ss') into mydate from dual;
                    jdate:=to_char(mydate,'yyyy-MM-dd HH24:mi:ss');
                    dbms_output.put_line(jdate);
               end;
               begin
                   v_sql:='insert into abin(id,name,sid,createtime) values ('''||mysqlcode||''','''||tname||''','''||mysqlerrm||''','''||jdate||''')';
                   dbms_output.put_line('v_sql='||v_sql);
                   execute immediate v_sql;
                   commit;
               end;
               when others then
                   rollback;
    end;



    測試代碼:
    declare
    mydate date:=to_date('2012-09-09','yyyy-MM-dd');
    tid nvarchar2(50):='4';
    tname varchar2(30):='abin';
    begin
           getProcess(mydate,tid,tname);
    end;

    posted @ 2012-09-09 19:55 abin 閱讀(551) | 評論 (0)編輯 收藏

    Java動態代理實現

    Kongxx

    在目前的Java開發包中包含了對動態代理的支持,但是其實現只支持對接口的的實現。

    其實現主要通過是java.lang.reflect.Proxy類和java.lang.reflect.InvocationHandler接口。

    Proxy類主要用來獲取動態代理對象,InvocationHandler接口用來約束調用者實現,如下,HelloWorld接口定義的業務方法,HelloWorldImplHelloWorld接口的實現,HelloWorldHandlerInvocationHandler接口實現。代碼如下:

    業務接口:

    public interface HelloWorld {

           void sayHelloWorld() ;

    }

    業務接口實現:

    public class HelloWorldImpl implements HelloWorld {

     

           public void sayHelloWorld() {

                  System.out.println("Hello World!");            

           }

    }

    InvocationHandler實現,需要在接口方法調用前后加入一部份處理工作,這里僅僅在方法調用前后向后臺輸出兩句字符串,其代碼如下:

    import java.lang.reflect.InvocationHandler;

    import java.lang.reflect.Method;

    public class HelloWorldHandler implements InvocationHandler {

           //要代理的原始對象

           private Object objOriginal;

           /**

            * 構造函數。

            * @param obj 要代理的原始對象。

            */

           public HelloWorldHandler(Object obj) {

                  this.objOriginal = obj ;

           }

           public Object invoke(Object proxy, Method method, Object[] args)

                         throws Throwable {

                 

                  Object result ;

                 

            //方法調用之前

                  doBefore();

                 

            //調用原始對象的方法

                  result = method.invoke(this.objOriginal ,args);

                 

            //方法調用之后

                  doAfter();

                 

                  return result ;

           }

          

           private void doBefore() {

                  System.out.println("before method invoke!");

           }

          

           private void doAfter() {

                  System.out.println("after method invoke!");

           }

    }

    測試代碼:

    import java.lang.reflect.InvocationHandler;

    import java.lang.reflect.Proxy;

     

     

     

     

     

     

    public class Test {

     

     

     

     

     

     

           public static void main(String[] args) {

     

     

     

     

     

     

                  HelloWorld hw = new HelloWorldImpl();

                 

                  InvocationHandler handler = new HelloWorldHandler(hw);

                 

                  HelloWorld proxy = (HelloWorld) Proxy.newProxyInstance(

                                hw.getClass().getClassLoader(),

                                hw.getClass().getInterfaces(),

                                handler);

     

                  proxy.sayHelloWorld();

           }

    }

    Ø         首先獲取一個業務接口的實現對象;

    Ø         獲取一個InvocationHandler實現,此處是HelloWorldHandler對象;

    Ø         創建動態代理對象;

    Ø         通過動態代理對象調用sayHelloWorld()方法,此時會在原始對象HelloWorldImpl. sayHelloWorld()方法前后輸出兩句字符串。

    運行測試類輸出如下:

    before method invoke!

    Hello World!

    after method invoke!

    此處Test類中的方法調用代碼比較多,在我們的實際應用中可以通過配置文件來來簡化客戶端的調用實現。另外也可以通過動態代理來實現簡單的AOP

    http://www.cnblogs.com/kongxx/archive/2005/08/08/209749.html 

    posted @ 2012-09-07 00:22 abin 閱讀(665) | 評論 (0)編輯 收藏

         摘要: 要對資料庫管理系統進行操作,最基本的就是使用SQL(Standard Query Language)語句,大部份的資料庫都支援標準的SQL語句,然而也有一些特定于資料庫的SQL語句,應用程式配合SQL語句進行資料庫查詢時,若使用到特定于資料庫的SQL語句,程式本身會有相依于特定資料庫的問題。使用Hibernate時,即使您不了解SQL的使用與撰寫,也可以使用它所提供的API來進行SQL語句查詢,o...  閱讀全文
    posted @ 2012-09-07 00:04 abin 閱讀(1867) | 評論 (0)編輯 收藏

    hibernate  Criteria 的使用介紹


    http://blog.csdn.net/alex197963/article/details/2628196
    posted @ 2012-09-06 23:59 abin 閱讀(394) | 評論 (0)編輯 收藏

    有倆種方法:
    一種是聲明系統游標,一種是聲明自定義游標,然后后面操作一樣,參數類型為
    in out 或out
    (1)聲明個人系統游標.(推薦)
    create or replace p_temp_procedure
    (
        cur_arg out sys_refcursor;     --方法1
    )
    begin
        open cur_arg for select * from tablename;
    end
    調用
    declare
        cur_calling sys_refcursor;
    begin
        p_temp_procedure(cur_calling);  --這樣這個游標就有值了
        for rec_next in cur_calling loop
         ....
        end loop;
    end;










    create or replace procedure getList(id in varchar2,mycur out sys_refcursor)
    is
    v_sql varchar2(4000);
    begin
    dbms_output.put_line('call it success');
    v_sql:='select * from userbean s where s.id=:1';
    open mycur for v_sql using id;
    commit;
    end;



    create or replace procedure my_procedure
    (mypageNo number,mypageSize number,myInfo_Cursor out sys_refcursor)
    as
    pageNO number;
    pageSize number;

    begin
    open myInfo_Cursor for
    select * from product
    where pid between 1 + (pageNo - 1) * pageSize and 4 + (pageNo - 1) * pageSize;

    end;




    declare
    my_cursor sys_refcursor;
    begin
    my_procedure(1,2,my_cursor);
    for rec_next in my_cursor loop
    dbms_output.put_line('pid:'||rec_next.pid||'  ptypeid:'||rec_next.ptypeid||'  proname:'||rec_next.proname||'  price:'||rec_next.price||'  pronum:'||rec_next.pronum);
    end loop;
    end;
    posted @ 2012-09-06 23:30 abin 閱讀(395) | 評論 (0)編輯 收藏

    package com.abin.lee.bean;

    /**
     * Userbean entity. @author MyEclipse Persistence Tools
     */

    public class UserBean implements java.io.Serializable {

     // Fields

     private String id;
     private String username;
     private String password;

     // Constructors

     /** default constructor */
     public UserBean() {
     }

     /** minimal constructor */
     public UserBean(String id) {
      this.id = id;
     }

     /** full constructor */
     public UserBean(String id, String username, String password) {
      this.id = id;
      this.username = username;
      this.password = password;
     }

     // Property accessors

     public String getId() {
      return this.id;
     }

     public void setId(String id) {
      this.id = id;
     }

     public String getUsername() {
      return this.username;
     }

     public void setUsername(String username) {
      this.username = username;
     }

     public String getPassword() {
      return this.password;
     }

     public void setPassword(String password) {
      this.password = password;
     }

    }





    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "<!--
        Mapping file autogenerated by MyEclipse Persistence Tools
    -->
    <hibernate-mapping>
        <class name="com.abin.lee.bean.UserBean" table="USERBEAN" schema="ABING">
            <id name="id" type="string">
                <column name="ID" length="80" />
                <generator class="assigned" />
            </id>
            <property name="username" type="string">
                <column name="USERNAME" length="80" />
            </property>
            <property name="password" type="string">
                <column name="PASSWORD" length="80" />
            </property>
        </class>
    </hibernate-mapping>






    package com.abin.lee.dao;

    import java.sql.SQLException;

    import org.hibernate.SQLQuery;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;

    public class UserDao {
     private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
     private static SessionFactory sessionFactory;
     static {
      sessionFactory=new Configuration().configure().buildSessionFactory();
     }
     public static Session GetSession(){
      Session session=(Session)threadLocal.get();
      if(null == session|| !session.isOpen()){
       if(null==sessionFactory){
        sessionFactory=new Configuration().configure().buildSessionFactory();
       }
       session=(sessionFactory!=null)?sessionFactory.openSession():null;
       threadLocal.set(session);
      }
      return session;
     }
     
     public static int insert(String id,String usr,String pwd) throws SQLException{
      UserDao UserDao=new UserDao();
      Session session=UserDao.GetSession();
      Transaction tx=session.beginTransaction();
      SQLQuery sqlQuery = session.createSQLQuery("{call insertObj(?,?,?)}");
      sqlQuery.setParameter(0, id);
      sqlQuery.setParameter(1, usr);
      sqlQuery.setParameter(2, pwd);
      int result=sqlQuery.executeUpdate();
      System.out.println("result="+result);
      return result;
     }
     
    }






    package com.abin.lee.test;

    import java.sql.SQLException;

    import junit.framework.TestCase;

    import com.abin.lee.dao.UserDao;

    public class UserTest extends TestCase{
     public void test() throws SQLException{
      UserDao user=new UserDao();
      int success=user.insert("abin","abing","bing");
      System.out.println("success="+success);
     }
    }








    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
              "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
              "

    <!-- Generated by MyEclipse Hibernate Tools.                   -->
    <hibernate-configuration>

     <session-factory>
      <property name="dialect">
       org.hibernate.dialect.OracleDialect
      </property>
      <property name="connection.url">
       jdbc:oracle:thin:@localhost:1521:xe
      </property>
      <property name="connection.username">abing</property>
      <property name="connection.password">abing</property>
      <property name="connection.driver_class">
       oracle.jdbc.driver.OracleDriver
      </property>
      <property name="myeclipse.connection.profile">
       OracleConnection
      </property>
      <mapping resource="com/abin/lee/bean/UserBean.hbm.xml" />
       
        </session-factory>

    </hibernate-configuration>









    create index aid on abin(id)
    create unique index usid on abin(sid)
    //組合索引
    create unique index allindex on abin(id,name,sid)
    http://blog.csdn.net/java05/article/details/5579183

    創建主鍵:
    create table abin1(
    id number(10,0) not null check(id>0),
    name nvarchar2(100),
    constraint abin1id primary key(id)
    );

    創建主鍵和外鍵
    create table abin2(
    id number(10,0) not null check(id>0),
    sid number(10,0) not null,
    name nvarchar2(100),
    constraint abin2id primary key(id),
    constraint abin2sid foreign key(sid) references abin1(id)
    )

    posted @ 2012-09-04 23:11 abin 閱讀(418) | 評論 (0)編輯 收藏

    約束作用:用來保持數據的完整性,防止無效數據進入到數據庫中。
    oracle數據庫中提供的5種約束,都是限定某個列或者列的組合的。
    1、主鍵約束(PRIMARY KEY):
    在一個表中能唯一的標識一行。主鍵可以限定在多個列上。
    3、唯一鍵約束(UNIQUE key):在一個表中能唯一的標識一行,唯一鍵也可以限定在多個列上。
    主鍵和唯一鍵的區別:
    a、一個表中最多只能有一個主鍵。可以多個唯一鍵。
    b、主鍵所限定的列不能為null,唯一鍵所限定的列可以為null.
    2、外鍵約束(FOREIGN key):
       引用表:有外鍵約束的列所在的表。
       被引用表:外鍵所引用的列。被引用的列只能是主鍵或者唯一鍵。
    4、非空約束(NOT null):表示該列上的數據不能有null值。
    5、檢查性約束(check):表示該列上的數據必須滿足某一個條件表達式。

    如何創建約束:
    1、在創建表的同時創建約束
       a.列級別約束:在每個列寫完之后寫約束。
              CREATE TABLE t_08132(id NUMBER(10) PRIMARY KEY ,
                                    NAME CHAR(10) NOT NULL,
                                    gender CHAR(2) CHECK (gender IN ('男','女')),
                                    email CHAR(20) UNIQUE
                                    )
              INSERT INTO t_08132 VALUES(1,'a','男','1@neusoft.com')                               
              INSERT INTO t_08132 VALUES(2,'a','男','2@neusoft.com')                               
              INSERT INTO t_08132 VALUES(3,'c','男','3@neusoft.com')                               
              INSERT INTO t_08132 VALUES(4,'d','','4@neusoft.com')                               
              INSERT INTO t_08132 VALUES(5,'e','妖','5@neusoft.com')       
              //外鍵約束
              CREATE TABLE t_08133( id NUMBER(10) PRIMARY KEY ,
                                    NAME CHAR(10) NOT NULL,
                                    deptno NUMBER(2) REFERENCES dept(deptno)                               
                                    )
              INSERT INTO t_08133 VALUES(1,'a',20) 
              //給約束命名         
              CREATE TABLE t_08134(id NUMBER(10) CONSTRAINT t4_id_pk PRIMARY KEY ,
                                    NAME CHAR(10) CONSTRAINT t4_name_nn NOT NULL,
                                    gender CHAR(2) CONSTRAINT t4_gen_ck CHECK (gender IN ('男','女')),
                                    email CHAR(20) CONSTRAINT t4_em_uk UNIQUE,
                                    deptno NUMBER(2) CONSTRAINT t4_deptno_fk REFERENCES dept(deptno)                               
                                    )
              INSERT INTO t_08134 VALUES(5,'e','男','5@neusoft.com',NULL)                      
              INSERT INTO t_08134 VALUES(6,'e','男','6@neusoft.com',NULL)                      
       b.表級別約束:在所有列寫完之后寫約束。注意,notnull約束不能寫在表級別上。
          CREATE TABLE t_08135(id NUMBER(10)  ,
                                    NAME CHAR(10) CONSTRAINT t5_name_nn NOT NULL,
                                    gender CHAR(2) ,
                                    email CHAR(20) ,
                                    deptno NUMBER(2) ,
                                    CONSTRAINT t5_id_pk PRIMARY KEY (ID),
                                    CONSTRAINT t5_gen_ck CHECK (gender IN ('男','女')),
                                    CONSTRAINT t5_em_uk UNIQUE(email),
                                    CONSTRAINT t5_deptno_fk FOREIGN KEY (deptno) REFERENCES dept(deptno)                               
                                   )
    約束的名字:一般規則 約束所在的表_約束所在的列_約束類型
     emp_empno_pk,通常只給主鍵、外鍵、唯一鍵命名。

    2、在創建表之后創建約束
    語法:
    Alter TABLE 表名 ADD [CONSTRAINT 約束名] 約束類型 [(列名列表)]
    CREATE TABLE t08161 (ID NUMBER,NAME CHAR(10),sex CHAR(2) ,email CHAR(10),deptno NUMBER)
    //在ID字段上添加主鍵約束
    ALTER TABLE t08161 ADD CONSTRAINT t1_id_pk PRIMARY KEY(ID)
    //在sex字段上添加檢查性約束
    ALTER TABLE t08161 ADD CONSTRAINT t1_email_ck CHECK (sex IN ('男','女'))
    //在email上添加唯一性約束
    ALTER TABLE t08161 ADD CONSTRAINT t1_email_uk UNIQUE (email)
    //在deptno上添加外鍵約束,引用于dept的deptno字段。
    ALTER TABLE t08161 ADD CONSTRAINT t1_deptno_fk FOREIGN KEY (deptno) REFERENCES dept(deptno)
    //在name上添加非空約束
    ALTER TABLE t08161 ADD CONSTRAINT t1_name_nn NOT NULL (NAME)    //加不上

    ALTER TABLE t08161 MODIFY NAME NULL  
    ALTER TABLE 表名 MODIFY 字段名 NULL/NOT NULL   //通過該語法設置某一個字段為null或者not NULL.
    //練習:
    創建表學生表,里面包含學號(主鍵),姓名(非空),年齡,入班日期,
    班級編號(外鍵,引用于dept表部門編號)
    要求,在創建完表之后建立約束。
    CREATE TABLE t08162 (sno NUMBER ,sname CHAR(10) ,sage NUMBER ,indate DATE,classno NUMBER)
    ALTER TABLE t08162 ADD PRIMARY KEY (sno)
    ALTER TABLE t08162 MODIFY sNAME NOT NULL
    ALTER TABLE t08162 ADD FOREIGN KEY(classno) REFERENCES dept(deptno)
    4、如何刪除約束
    ALTER TABLE 表名 DROP PRIMARY KEY|UNIQUE (列)|CONSTRAINT 約束名
    ALTER TABLE t08162 DROP PRIMARY KEY
    練習:刪除t08162上的classno上的外鍵約束
    ALTER TABLE t08162 DROP CONSTRAINT sys_c005467
    5、約束的啟用和禁用。
    語法:
    Alter TABLE 表名 Disable|ENABLE CONSTRAINT 約束名

    posted @ 2012-09-04 23:08 abin 閱讀(2172) | 評論 (0)編輯 收藏

    2.索引作用

    在索引列上,除了上面提到的有序查找之外,數據庫利用各種各樣的快速定位技術,能夠大大提高查詢效率。特別是當數據量非常大,查詢涉及多個表時,使用索引往往能使查詢速度加快成千上萬倍。

    例如,有3個未索引的表t1t2t3,分別只包含列c1c2c3,每個表分別含有1000行數據組成,指為11000的數值,查找對應值相等行的查詢如下所示。

     

    SELECT c1,c2,c3 FROM t1,t2,t3 WHERE c1=c2 AND c1=c3

    此查詢結果應該為1000行,每行包含3個相等的值。在無索引的情況下處理此查詢,必須尋找3個表所有的組合,以便得出與WHERE子句相配的那些行。而可能的組合數目為1000×1000×1000(十億),顯然查詢將會非常慢。

    如果對每個表進行索引,就能極大地加速查詢進程。利用索引的查詢處理如下。

    1)從表t1中選擇第一行,查看此行所包含的數據。

    2使用表t2上的索引,直接定位t2中與t1的值匹配的行。類似,利用表t3上的索引,直接定位t3中與來自t1的值匹配的行。

    3)掃描表t1的下一行并重復前面的過程,直到遍歷t1中所有的行。

    在此情形下,仍然對表t1執行了一個完全掃描,但能夠在表t2t3上進行索引查找直接取出這些表中的行,比未用索引時要快一百萬倍。

    利用索引,MySQL加速了WHERE子句滿足條件行的搜索,而在多表連接查詢時,在執行連接時加快了與其他表中的行匹配的速度。

    13.4.2 創建索引

    在執行CREATE TABLE語句時可以創建索引,也可以單獨用CREATE INDEXALTER TABLE來為表增加索引。

    1ALTER TABLE

    ALTER TABLE用來創建普通索引、UNIQUE索引或PRIMARY KEY索引。

     

    ALTER TABLE table_name ADD INDEX index_name (column_list)

    ALTER TABLE table_name ADD UNIQUE (column_list)

    ALTER TABLE table_name ADD PRIMARY KEY (column_list)

     

    其中table_name是要增加索引的表名,column_list指出對哪些列進行索引,多列時各列之間用逗號分隔。索引名index_name可選,缺省時,MySQL將根據第一個索引列賦一個名稱。另外,ALTER TABLE允許在單個語句中更改多個表,因此可以在同時創建多個索引。

    2CREATE INDEX

    CREATE INDEX可對表增加普通索引或UNIQUE索引。

     

    CREATE INDEX index_name ON table_name (column_list)

    CREATE UNIQUE INDEX index_name ON table_name (column_list)

     

    table_nameindex_namecolumn_list具有與ALTER TABLE語句中相同的含義,索引名不可選。另外,不能用CREATE INDEX語句創建PRIMARY KEY索引。

    3.索引類型

    在創建索引時,可以規定索引能否包含重復值。如果不包含,則索引應該創建為PRIMARY KEYUNIQUE索引。對于單列惟一性索引,這保證單列不包含重復的值。對于多列惟一性索引,保證多個值的組合不重復。

    PRIMARY KEY索引和UNIQUE索引非常類似。事實上,PRIMARY KEY索引僅是一個具有名稱PRIMARYUNIQUE索引。這表示一個表只能包含一個PRIMARY KEY,因為一個表中不可能具有兩個同名的索引。

    下面的SQL語句對students表在sid上添加PRIMARY KEY索引。

     

    ALTER TABLE students ADD PRIMARY KEY (sid)

     

    13.4.3 刪除索引

    可利用ALTER TABLEDROP INDEX語句來刪除索引。類似于CREATE INDEX語句,DROP INDEX可以在ALTER TABLE內部作為一條語句處理,語法如下。

     

    DROP INDEX index_name ON talbe_name

    ALTER TABLE table_name DROP INDEX index_name

    ALTER TABLE table_name DROP PRIMARY KEY

     

    其中,前兩條語句是等價的,刪除掉table_name中的索引index_name

    3條語句只在刪除PRIMARY KEY索引時使用,因為一個表只可能有一個PRIMARY KEY索引,因此不需要指定索引名。如果沒有創建PRIMARY KEY索引,但表具有一個或多個UNIQUE索引,則MySQL將刪除第一個UNIQUE索引。

    如果從表中刪除了某列,則索引會受到影響。對于多列組合的索引,如果刪除其中的某列,則該列也會從索引中刪除。如果刪除組成索引的所有列,則整個索引將被刪除

    posted @ 2012-09-04 23:00 abin 閱讀(1292) | 評論 (0)編輯 收藏

    僅列出標題
    共50頁: First 上一頁 28 29 30 31 32 33 34 35 36 下一頁 Last 
    主站蜘蛛池模板: 中字幕视频在线永久在线观看免费 | 亚洲国产另类久久久精品小说| 亚洲男女一区二区三区| 又粗又硬免费毛片| 国产成人精品免费午夜app| 亚洲黄色三级视频| 中文字幕精品无码亚洲字 | 国产美女做a免费视频软件| 99在线免费观看| 免费大片av手机看片高清| 亚洲一区二区三区乱码在线欧洲| 日本xxwwxxww在线视频免费| 中文字幕在线观看免费视频| 亚洲一线产区二线产区区| 久久精品亚洲一区二区三区浴池| 久草免费福利在线| 亚洲免费网站观看视频| 亚洲精品美女在线观看| 亚洲日韩图片专区第1页| 亚洲欧洲日产国码无码网站 | 亚洲国产婷婷六月丁香| 亚洲成网777777国产精品| 日本免费一二区在线电影| 毛片免费vip会员在线看| 四虎永久在线观看免费网站网址| 精品韩国亚洲av无码不卡区| 香蕉大伊亚洲人在线观看| 亚洲av无码电影网| 亚洲人妖女同在线播放| 免费精品国产自产拍观看| 午夜dj在线观看免费视频| 香蕉高清免费永久在线视频| 91频在线观看免费大全| 91精品国产免费久久久久久青草 | 国产亚洲人成网站在线观看| 国产一级淫片a视频免费观看| 久久国产乱子伦精品免费不卡| 亚洲欧洲国产精品香蕉网| 亚洲乱码中文字幕综合234| 18成禁人视频免费网站| 亚洲免费中文字幕|