MySQL基础操作

1,MySQL表复制
  • 复制表结构  mysql> create table t1 like t2;
  • 复制表数据  mysql> insert into t1 select * from t2;

2,MySQL索引操作

  • 创建索引(可以用来创建普通索引,唯一索引,不能创建主键索引)

    create index index_name on table_name (field_name);

    create unique index index_name on table_name (field_name);

  • 删除索引

    drop index index_name on table_name;

  • Alter方式创建索引

    alter table table_name add index index_name (field_name);

    alter table table_name add unique index index_name (field_name);

    alter table table_name add primary key (field_name);

  • Alter方式删除索引

    alter table table_name drop index index_name;

    alter table table_name drop primary key;

3,MySQL创建视图

   示例:mysql> create view view_name as select * from test where id > 1 and id <10;

   善于使用? 可得到帮助信息,如mysql> ? view 

   创建完视图后,可通过mysql> show tables;查看视图,数据库存储目录中将增加一个以视图名命名的frm文件(表结构文件)

   删除视图,mysql> drop view view_name;

注意:当视图所依赖的表损毁或被删除时,视图将发生错误。

4,MySQL预处理语句

  • 预处理语句示例

   mysql> prepare stm_name from 'select * from test where id > ?';

   mysql> set @i=1;

   mysql> execute stm_name using @i ;

   mysql> set @i=5;

   mysql> execute stm_name using @i ;

  • 删除预处理语句

   mysql> drop prepare stm_name;

很多更成熟的数据库都支持预处理语句的概念。什么是预处理语句?可以把它看作是想要运行的 SQL 的一种编译过的模板,它可以使用变量参数进行定制。预处理语句可以带来两大好处:

  • 查询仅需解析(或预处理)一次,但可以用相同或不同的参数执行多次。当查询准备好后,数据库将分析、编译和优化执行该查询的计划。对于复杂的查询,此过程要花费较长的时间,如果需要以不同参数多次重复相同的查询,那么该过程将大大降低应用程序的速度。通过使用预处理语句,可以避免重复分析/编译/优化周期。简言之,预处理语句占用更少的资源,因而运行得更快。
  • 提供给预处理语句的参数不需要用引号括起来,驱动程序会自动处理。如果应用程序只使用预处理语句,可以确保不会发生SQL 注入。(然而,如果查询的其他部分是由未转义的输入来构建的,则仍存在 SQL 注入的风险)。

5,MySQL事务处理

MySQL中InnoDB存储引擎支持事务处理,MyISAM存储引擎不支持事务机制

查看是否为自动提交模式

mysql> show variables like 'auto%';

可以看出,自动提交模式开启,关闭自动提交

mysql> set autocommit = 0;

mysql> delete from test where id = 5;

mysql> rollback;

可以看到删除的记录由于回滚操作,仍存在于表中。

设置回滚点为 p1

mysql> delete from test where id = 5;

mysql> savepoint p1;

设置回滚点为p2

mysql> delete from test where id = 6;

mysql> savepoint p2;

回滚到p1状态,此时id=6的记录被删除,id=5的记录被保留

mysql> rollback to p1;

当已确定的提交,使用commit显式提交

mysql> commit;

6,MySQL存储操作

更改sql结束符为//  或用delimiter //命令

mysql> \d //                  
mysql> create procedure p1()
            begin
            set @i=0;
            while @i<10000 do
            insert into t1 value (@i);                 #t1表仅有一个字段id 从0递增插入
            set @i=@i+1;
            end while
            end //
更改回sql结束符为;
mysql> \d ;            
调用并执行存储        
mysql> call p1();        
删除存储p1    
mysql> drop procedure p1; 
7,MySQL触发器示例
  • 当往表t1中插入数据时,也把数据插入t2表

mysql> \d //

mysql> create trigger tg1 before insert on t1 for each row

         > begin

         > insert into t2 values (new.id, new.name);

         > end //

  • 当从t1表中删除数据时,也从t2表中删除该数据

mysql> create trigger tg2 before delete on t1 for each row

         > begin

         > delete from t2 where id = old.id;

         > end //

  • 当更新t1中的数据记录时,同时更新t2表中的数据

mysql> create trigger tg3 before update on t1 for each row

         > begin

         > update t2 set name=new.name where id=old.id;

         > end //

mysql> \d ;

  • 查看触发器

mysql> show triggers;

  • 删除触发器

mysql> drop trigger tg1;

8,MySQL清空表

  • 清空表时尽量不要使用delete from table_name,该操作将一行一行删除记录,速度缓慢
  • 使用truncate table table_name 清空表,速度快,且使auto_increment字段自动设置为1
  • 可以使用alter table table_name auto_increment=1更改表的auto_increment自动增长值

你可能感兴趣的:(mysql,触发器,索引,事务,预处理)