1、如何创建和删除数据库?
创建数据库 CREATE DATABASE 数据库名;
删除数据库 drop database 数据库名;
2、MyISAM与InnoDB的区别?
1)事务:MyISAM 不支持事务 InnoDB 支持
2)行锁/表锁:MyISAM 支持表级锁 InnoDB 支持行锁和表锁
3)MVCC(多版本并发控制):InnoDB 支持 MyISAM 不支持
4)外键:MyISAM 不支持 InnoDB支持
5)全文索引:MyISAM 支持,InnoDB后期版本支持(5.7 版本及以后支持)
6)行数:InnoDB 不保存表的总行数,执行 select count(*) from table 时 需要全表扫描;MyISAM支持,用一个变量保存表的总行数,查总行数速度很快
7)索引:InnoDB 是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。辅助索引需要两次查询,先查询 到主键,再通过主键查询到数据。MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针,主键索引和辅助索引是独立的
3、char与varchar的区别
char 是一种固定长度的字符串类型
varchar 是一种可变长度的字符串类型
4、建表语句中varchar(50)中50的指是什么?
字段最多存放 50 个字符 如 varchar(50) 和 varchar(200) 存储 “ConstXiong” 字符串所占空间是一样的,后者在排序时会消耗更多内存
5、int(10)中10指什么?
INT[(M)] [UNSIGNED] [ZEROFILL] M 默认为11
10 就是上述语句里的 M,指最大显示宽度,最大值为 255 最大显示宽度意思是,如果是 int(10),字段存的值是 10,则,显示会自动
在之前补 8 个 0,显示为 0000000010 int 类型在数据库里面存储占 4 个字节的长度
有符号的整型范围是 -2147483648 ~ 2147483647 无符号的整型范围是 0 ~ 4294967295
6、DELETE和TRUNCATE的区别是什么?
DELETE 命令从一个表中删除某一行或多行数据
TRUNCATE 命令永久地从表中删除每一行数据
7、MySQL如何获取当前日期?
SELECT CURRENT_DATE();
8、如何获取MySQL的版本?
SELECT VERSION();
9、什么是触发器,MySQL都有哪些触发器?
触发器是指一段代码,当触发某个事件时,自动执行这些代码
MySQL 数据库中有六种触发器:
Before Insert
After Insert
Before Update
After Update
Before Delete
After Delete
2)使用场景:
可以通过数据库中的相关表实现级联更改
实时监控表中字段的更改做出相应处理
注意:滥用会造成数据库及应用程序的维护困难
3)mysql触发器介绍和使用
触发器是mysql数据库针对某张表发生增删改操时自动执行的一段语句集合,它是跟某张表关联绑定的,不像存储过程那种需要被动调用。触发器可以用来检验数据完整性,日志跟踪记录等。注意:不能在mysql本身系统数据库的表上创建触发器,要在其他数据库的表上
创建。
4)创建触发器的结构:
create trigger trigger_name
before/after insert/update/delete
on table_name
for each row #行级触发器
begin
具体语句…
end
5)触发器针对的是数据库中表的每一行记录
每行数据在操作前后都会有一个对应的状态,触发器将没有操作之前的状态保存到 old 关键字中,将操作后的状态保存到 new 中
语法:old/new.字段名
需要注意的是,old 和 new 不是所有触发器都有
触发器类型 new和old的使用
INSERT型触发器 没有 old,只有 new,new 表示将要(插入前)或者已经增加(插入后)的数据
UPDATE型触发器 既有 old 也有 new,old 表示更新之前的数据,new 表示更新之后的数据
DELETE型触发器 没有 new,只有 old,old 表示将要(删除前)或者已经被删除(删除后)的数据
举例说明,在mysql里testdb数据库下的两个表,person以及person_log(是记录每次在person表里修改操作的日志)
mysql> use testdb;
mysql> show create table person\G;
*************************** 1. row ***************************
Table: person
Create Table: CREATE TABLE `person` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` text CHARACTER SET utf8,`addr` text CHARACTER SET utf8,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
ERROR:
No query specified
mysql> show create table person_log\G;
*************************** 1. row ***************************
Table: person_log
Create Table: CREATE TABLE `person_log` (`id` int(11) NOT NULL AUTO_INCREMENT,`operation` varchar(20) NOT NULL,`optime` datetime NOT NULL,`opinfo` varchar(100) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
1 row in set (0.01 sec)
先创建一个在delete操作后,发生的触发器person_delaft_trigger。这个触发器的作用,就是当在person表里删除记录后,在日志表person_log里插入一条记录,把删除的信息输入。
mysql> delimiter $
mysql> create trigger person_delaft_trigger after delete on person for each row insert into person_log(operation,optime,opinfo) values(‘delete’,now(),concat('delrow: ‘,old.name,’ ',old.addr))$ #这里是delete操作,只有old关键字,记录的是删除的记录数据
刚开始的表数据:
当我们进行一个删除操作后:
10、MySQL显示表前 50 行
SELECT * FROM tablename LIMIT 0,50;
11、如何连接MySQL服务端、关闭连接?
连接:使用指令 mysql -u -p -h -P (-u:指定用户名 -p:指定密码 -h:主机 -P:端口) 连接 MySQL 服务端
关闭:使用指令 exit 或 quit
12、int(10)、char(16)、varchar(16)、datetime、text的意义?
int(10) 表示字段是 INT 类型,显示长度是 10
char(16)表示字段是固定长度字符串,长度为 16
varchar(16) 表示字段是可变长度字符串,长度为 16
datetime 表示字段是时间类型
text 表示字段是字符串类型,能存储大字符串,最多存储 65535 字节数据
13、说说你知道的MySQL存储引擎
InnoDB
默认事务型引擎,被广泛使用的存储引擎
数据存储在共享表空间,即多个表和索引都存储在一个表空间中,可通过配置文件修改
主键查询的性能高于其他类型的存储引擎
内部做了很多优化,如:从磁盘读取数据时会自动构建hash索引,插入数据时自动构建插入缓冲区
通过一些机制和工具支持真正的热备份
支持崩溃后的安全恢复
支持行级锁
支持外键
MyISAM
拥有全文索引、压缩、空间函数
不支持事务和行级锁、不支持崩溃后的安全恢复
表存储在两个文件:MYD 和 MYI
设计简单,某些场景下性能很好,例如获取整个表有多少条数据,性能很高
其他表引擎:Archive、Blackhole、CSV、Memory
25 索引的种类有哪些?
普通索引:最基本的索引,没有任何约束限制。
唯一索引:和普通索引类似,但是具有唯一性约束,可以有 null
主键索引:特殊的唯一索引,不允许有 null,一张表最多一个主键索引
组合索引:多列值组成一个索引,用于组合搜索,效率大于索引合并
全文索引:对文本的内容进行分词、搜索
覆盖索引:查询列要被所建的索引覆盖,不必读取数据行
26 MyISAM索引与InnoDB索引的区别?
InnoDB 索引是聚簇索引,MyISAM 索引是非聚簇索引
InnoDB 的主键索引的叶子节点存储着行数据,主键索引非常高效
MyISAM 索引的叶子节点存储的是行数据地址,需要再寻址一次才能得到数据
InnoDB 非主键索引的叶子节点存储的是主键和其他带索引的列数据,因此查询时做到覆盖索引会非常高效