> 数据库 > MySQL >

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自动增长值

(责任编辑:IT)