JAVA学习笔记(Mysql)

2017-09-25  本文已影响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)

上一篇 下一篇

猜你喜欢

热点阅读