Mysql基础操作

表复制
mysql> create table t1(
    ->  id int unsigned not null auto_increment primary key,
    -> name varchar(30)
    -> );
mysql> desc t1;
mysql> insert into t1(name) values("user1");
mysql> insert into t1(name) values("user2");
mysql> create table t2 like t1;
mysql> desc t2;
mysql> insert into t2 select * from t1;


mysql索引
mysql> create index in_name on t1(name);
mysql> show index from t1;
mysql> drop index in_name on t1(name);
mysql> show index from t1;
mysql> create unique index un_name on t1(name);
mysql> show index from t1;
mysql> drop index un_name on t1;
mysql> show index from t1;




mysql> alter table t1 add index in_name(name);
mysql> show index from t1;
mysql> alter table t1 drop in_name;
mysql> alter table t1 modify id int unsigned not null;
mysql> alter table t1 drop primary key;
mysql> desc t1;
mysql> show index from t1;
mysql> alter table t1 add  unique(name);
mysql> alter table t1 add primary key (id);


mysql视图
create view v_t1 as select * from t1;


msyql内置函数
mysql> select unix_timestamp();


mysql预处理语句
mysql> prepare stmt1 from "select * from t1 where id>?";
mysql> set @i=1;
mysql> execute stmt1 using @i;
+----+-------+
| id | name  |
+----+-------+
|  2 | user2 | 
+----+-------+
1 row in set (0.02 sec)
mysql> set @i=2;
mysql> execute stmt1 using @i;
mysql> drop prepare stmt1;


mysql事物处理
mysql> show create table t1;
mysql> alter table t1 engine=innodb;


mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)


mysql> delete from t1 where id=1
    -> ;
Query OK, 1 row affected (0.01 sec)


mysql> savepoint p1;
Query OK, 0 rows affected (0.00 sec)


mysql> delete from t1 where id=2;
Query OK, 1 row affected (0.00 sec)


mysql> savepoint p2;
Query OK, 0 rows affected (0.00 sec)


mysql> from * from t1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from * from t1' at line 1
mysql> select * from t1;
Empty set (0.00 sec)


mysql> rollback to p1;
Query OK, 0 rows affected (0.01 sec)


mysql> select * from t1;
+----+-------+
| id | name  |
+----+-------+
|  2 | user2 | 
+----+-------+
1 row in set (0.00 sec)


mysql> rollback to p1;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from t1;
+----+-------+
| id | name  |
+----+-------+
|  2 | user2 | 
+----+-------+
1 row in set (0.00 sec)
mysql> rollback;
mysql> select * from t1;
+----+-------+
| id | name  |
+----+-------+
|  1 | user1 | 
|  2 | user2 | 
+----+-------+
2 rows in set (0.00 sec)


mysql存储
mysql> \d //
mysql> create procedure p1()
    -> begin
    -> set @i=0;
    -> while @i<10 do
    -> select @i;
    -> set @i=@i+1;
    -> end while;
    -> end;
    -> //
Query OK, 0 rows affected (0.05 sec)
\d;
call p1();
show procedure status \G;
show create procedure p1 \G;




mysql触发器
mysql> truncate t1;
Query OK, 1 row affected (0.03 sec)
mysql> truncate t2;
Query OK, 0 rows affected (0.00 sec
mysql> create trigger t1 before insert on t1 for each row                                               
    -> begin insert into t2(name) values(new.name);  
    -> end //
Query OK, 0 rows affected (0.01 sec)


mysql> \d //
mysql> create trigger t2 before delete on t1 for each row
    -> begin
    -> delete from t2 where id=old.id;
    -> end //
Query OK, 0 rows affected (0.00 sec)
mysql> show trigger t2 //
mysql> drop trigger t2;


重排auto_increment值
delete 是一行一行删除数据
truncate 是整个删除


清空表的时候。不能用
delete from tablename;
而是要用:
truncate table tablename
这样auto_increment就恢复成1了
或者清空内容之后直接用alter命令恢复表
alter table tablename auto_increment=1;

你可能感兴趣的:(Mysql基础操作)