美文网首页
JAVA学习笔记(Mysql)

JAVA学习笔记(Mysql)

作者: 晨星资源 | 来源:发表于2017-09-25 01:05 被阅读18次

    Mysql中drop、truncat、delete的用法区别:

        1.truncat和delete只删除数据不删除表的结构(定义);drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.

    2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.runcate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger

    3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动 显然drop语句将表所占用的空间全部释放truncate语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate 会将高水线复位(回到最开始).

    4.速度,一般来说: drop> truncate > delete

    5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及. 使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大. 想删除表,当然用drop 想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还 是用delete.如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据

    总结:

    DROP用于删除表,数据库等.

    TRUNCATE和DELETE都是删除表数据.

    但是TRUNCATE相当于初始化,比如如果有自增长ID,用TRUNCATE删除后,自增长Id会从1开始,(truncat会释放表所占的空间)而delete则不会.

    相同点:

    1.truncate和不带where子句的delete、以及drop都会删除表内的数据。

    2.drop、truncate都是DDL语句(数据定义语言),执行后会自动提交。

    不同点:

    1. truncate 和 delete 只删除数据不删除表的结构(定义)

    drop 语句将删除表的结构被依赖的约束(constrain)、触发器(trigger)、索引(index);依赖于该表的存储过程/函数将保留,但是变为 invalid 状态。

    2. delete 语句是数据库操作语言(dml),这个操作会放到 rollback segement 中,事务提交之后才生效;如果有相应的 trigger,执行的时候将被触发。truncate、drop 是数据库定义语言(ddl),操作立即生效,原数据不放到 rollback segment 中,不能回滚,操作不触发 trigger。

    3.delete 语句不影响表所占用的 extent,高水线(high watermark)保持原位置不动;drop 语句将表所占用的空间全部释放。truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage;truncate 会将高水线复位(回到最开始)。

    4.速度,一般来说: drop> truncate > delete

    5.安全性:小心使用 drop 和 truncate,尤其没有备份的时候.否则哭都来不及;使用上,想删除部分数据行用 delete,注意带上where子句. 回滚段要足够大.;想删除表,当然用 drop;想保留表而将所有数据删除,如果和事务无关,用truncate即可。如果和事务有关,或者想触发trigger,还是用delete。如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。

    6.delete是DML语句,不会自动提交。drop/truncate都是DDL语句,执行后会自动提交。

    7.TRUNCATE   TABLE   在功能上与不带   WHERE   子句的   DELETE   语句相同:二者均删除表中的全部行。但   TRUNCATE   TABLE   比   DELETE   速度快,且使用的系统和事务日志资源少。DELETE   语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE   TABLE   通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

    8.TRUNCATE   TABLE   删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用   DELETE。如果要删除表定义及其数据,请使用   DROP   TABLE   语句。

    9、对于由   FOREIGN   KEY   约束引用的表,不能使用   TRUNCATE   TABLE,而应使用不带   WHERE   子句的   DELETE   语句。由于   TRUNCATE   TABLE   不记录在日志中,所以它不能激活触发器。

    10、TRUNCATE   TABLE   不能用于参与了索引视图的表。




                                         基础语句学习


    一、数据库操作

         1、查看数据库

               show   databases;

          2、创建数据库:

              create database db_name;    //db_name为数据库的名字

           3、使用数据库:

               use   db_name;

            4、删除数据库:

               drop databses db_name;

    二、创建表:

    1、创建表:

         create table table_name(

                   id tinyint unsigned not null auto_increament; //id值,无符号、非空、递增,可以做主键

                   name varchar(20) not null;

                    score tinyint unsigned not null default 10;  //设置默认值为10

                    primary key(id);

                    ENGINE = InnoDB //设置表的存储引擎,一般常用InnoDB和MyIsAM;InnoDB可靠,支持事务;MyISAM高效不支持全文检索

                    default charset=utf8;  //默认的编码,防止数据库中文乱码

    )

    2、复制表:

         create table table2  select * from table_name1;

    3、创建临时表:

           create temporary tabel table_name;

    4、查看数据库中可用的表:

         show tables;

    5、查看表的结构:

          desc table_name;

         show columns from table_name;

    6、删除表:

         drop table if exists table_name;

    7、表重命名:

           rename table name_old to name_new;

           alter table name_old rename name_new;

    三、修改表:

             ALTER TABLE tb_name ADD[CHANGE,RENAME,DROP] ...要更改的内容...

            alter table table_name add column  address varchar(10) not null ;

           alter table table_name drop address;

    四、插入数据:

    1、插入数据:

          insert   into table_name (colums)   values  (values);

    2、插入检索出来的数据:

        insert  into table_name1  (name,score)  select name,score  from table_name2;

    五、更新数据:

         update table_name set name="www" wherd id=1;

    六、删除数据:

          delete from table_name where id  =  2;

    七、条件控制:

    1、WHERE 语句:

          SELECT * FROM tb_name WHERE id=3;

    2、HAVING 语句:

           SELECT * FROM tb_name GROUP BY score HAVING count(*)>2;

    3、相关条件控制符:

            =、>、<、<>、IN(1,2,3......)、BETWEEN a AND b、NOT

            AND 、OR

            Linke()用法中      %  为匹配任意、  _  匹配一个字符(可以是汉字)

             IS NULL 空值检测

    八、MySQL的正则表达式:

            1、Mysql支持REGEXP的正则表达式:

                 select *  from table_name where name regexp '^[A-D]'; // 找出以A-D为开头的name

              2、特殊字符需要转义



    1.取url字段后三位字符:

    select substring(url,-3) from link;

    select right(url,length(url)-5) from link

    2.从左开始第3位取(包括第三位):

    select substring(url,3)from link

    3.取左边的3位

    select substring(url,1,3) from link

    4.中间截取(从第1位开始取7位,如sDate字段值是 2013-06-07)

    select SUBSTRING(sDate, 1,7) from forumdata;

    5.正常的模糊查询

    select * from student where name like '%hello%';

    6.一个字段共有13位,查询倒数四五位为31的

    select * from student  where SUBSTRING(ordersn, 9,2) = 31;

    7.找出比deptno=30的员工最低工资高的其他部门的员工

    select * from emp where sal>ANY(select sal from emp where deptno=30)nd deptno<>30;

    8.找出比deptno=30的员工最高工资高的其他部门的员工

    select * from emp where sal>ALL(select sal from emp where deptno=30) and deptno<>30;

    9.查询前10行记录

    select * from student where rownum<=10;

    10.查第几行的数据

    select * from emp where  rownum<=3  and  empno not in (select empno from emp where

    rownum<=3)

    相关文章

      网友评论

          本文标题:JAVA学习笔记(Mysql)

          本文链接:https://www.haomeiwen.com/subject/nhhfqxtx.html