MySQL基础操作
时间:2014-12-30 21:16 来源:linux.it.net.cn 作者:IT
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)
1,MySQL表复制
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 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 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 的一种编译过的模板,它可以使用变量参数进行定制。预处理语句可以带来两大好处:
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触发器示例
mysql> \d // mysql> create trigger tg1 before insert on t1 for each row > begin > insert into t2 values (new.id, new.name); > end //
mysql> create trigger tg2 before delete on t1 for each row > begin > delete from t2 where id = old.id; > end //
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清空表
(责任编辑:IT) |