Mysql表复制
什么是mysql表复制?
复制mysql数据表。包括表的结构、数据、索引、默认值等
复制表结构
create table tablename_1 like tablename ;
解析:
tablename --> 被复制的表
tablename_1 --> 复制的表
复制表数据
create table tablename_1 select * from tablename ;
复制表结构和数据
create table tablename_1 like tablename ;
insert into tablename_1 select * from tablename ;
索引
什么是索引?
索引是一种帮助Mysql高效获取数据的数据结构
什么情况建立索引
- 频繁作为查询条件的字段
- 查询中与其他表关联的字段
什么情况不建立索引
- 频繁增删改的表
- 数据较少的表
- 数据重复且分布平均的表字段(重复太多索引意义不大)
索引分类
-
主键索引
-
唯一索引
索引列的值必须唯一,但允许有空值。 如果是组合索引,则列值的组合必须唯一。
-
普通索引
这是最基本的索引,没有任何限制。
-
全文索引
添加索引
语法:alter table tablename add 索引类型 索引名称(字段名)
alter table tablename add index index_name(name);
主键索引一般建表时都会设置为id
alter table tablename add primary key(name);
alter table tablename add unique unique_name(name);
删除索引
语法: alter table tablename drop index 索引名称
如果主键带有自增长,删除主键索引前必须取消自增长
假设自增长字段为id
alter table tablename change id id int;
alter table tablename drop primary key;
查看索引
show index from tablename
Mysql视图
什么是视图?
官方解释:视图是一种虚拟存在的表,一个逻辑表,本身不包含数据。作为一个select语句保存在数据字典中。
民间解释:执行定义好的查询的快捷方式(仅供参考)
视图的优点
- 简单
- 安全
- 数据独立
创建视图
create view viewname as sql语句;
示范代码:
create view sel_user as select * from user;
show tables;
select * from sel_user;
删除视图
drop view viewname;
查询视图
show tables;
预处理
什么是mysql预处理?
个人解释:将一条反复执行的sql语句中动态变化的部分用占位符代替(?)
预处理的优点
- 安全
- 提高效率(重用性)
语法
创建预处理语句
prepare prepare_name from 'sql语句';
删除预处理语句
drop prepare prepare_name;
如何调用预处理语句?
设置一个变量 set @i = 3;
execute prepare_name using @i;
示范代码:
prepare sel_id_name from 'select * from user where id = ?';
set @i=3;
EXECUTE sel_id_name using @i;
事务
使用事务的前提:表引擎必须为innodb
什么是事务
官方解释:作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。
四大特性
原子性
一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性(稳定性)
在事务开始之前和事务结束以后,数据库的完整性没有被破坏。写入的资料必须完全符合预设规则,否则事务撤回。
隔离性
多个并发事务同时对其数据进行读写和修改,如果一个事务处理的结果 影响了其他事务,则其他事务撤回。
持久性(可靠性 )
事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。(innodb表驱动会利用日志文件重构修改)
关键字
- 提交 commit
- 回滚 rollback
使用 commit和rollbacj开始和结束工作
知识点补充
查看表结构
desc tablename;
获取创建数据表语句
show create table tablename;
结果:
CREATE TABLE `t1` (
`id` int(12) unsigned NOT NULL AUTO_INCREMENT,
`name` char(15) DEFAULT NULL,
`sex` char(1) DEFAULT NULL,
`age` int(5) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb4
如何修改表结构
alter table tablename change 原字段名 新字段名 数据类型 [primary key | default | not null | ...];
博客来自 杨甩甩
转载请说明出处 盗版必究