# id为主键 name是惟一键 create table Mark(id int not null primary key ,name varchar(250) unique key); create table Mark(id int, name varchar(250), primary key(id), unique key(name));
create table students_to_teacher(to_id int, stu_id int, tea_id int, foreign key(stu_id) references students(id), foreign key(tea_id) references teacher(id));
# 建立普通索引 create index 索引名称 on 表名(列名) # 删除普通索引 drop index 索引名称 on 表名 # 查看索引 show index from 索引名
# 建立惟一索引 create unique index 索引名称 on 表名(列名) # 删除惟一索引 drop unique index 索引名称 on 表名
-rw-rw---- 1 mysql mysql 65 8月 27 14:31 db.opt -rw-rw---- 1 mysql mysql 8614 8月 27 14:31 students.frm -rw-rw---- 1 mysql mysql 98304 8月 27 14:31 students.ibd db.opt文件:主要用来存储当前数据库的默认字符集和字符校验规则 students.frm文件:存放表结构的 students.ibd文件:存储了当前表的数据和相关的索引数据 所以,表数据和表结构分离, 每一个表单独使用一个表文件来存储数据和索引
-rw-rw---- 1 mysql mysql 10630 8月 27 13:12 user.frm -rw-rw---- 1 mysql mysql 504 8月 27 13:15 user.MYD -rw-rw---- 1 mysql mysql 2048 8月 27 14:30 user.MYI user.frm:为表结构 user.MYD:为表数据 user.MYI:为表索引
# lock tables 方式施加锁 lock tables 表名称 read # 读锁 lock tables 表名称 write # 写锁 # 给表解锁 unlock tables; # flush tables 方式施加锁 flush tables 表名称 with read lock; #读锁 flush tables 表名称 with write lock; # 写锁
事物日志:html
redo日志
:记录SQL执行的语句,这些SQL语句尚未同步到磁盘上,没有修改数据。若是数据奔溃,能够经过撤销SQL执行的语句来进行还原。可是,若是已经同步到磁盘上的SQL语句而言,就只能使用undo来回滚以前的数据了;undo日志
:记录没有执行SQL的样子,也就是记录修改数据以前的数据记录下来;ACID机制:mysql
automicity
:原子性,整个事物中的全部操做要么所有成功提交,要么所有失败回滚;consistency
:一致性,数据库老是从一个一致性状态转化为另外一个一致性状态;isolation
: 隔离性,事物不会相互影响,一个事物所做出的操做在提交以前,是不能为其余事物所见,隔离有多种级别,主要是为了并发;durability
:持久性,事物一旦提交,其所做的修改会保存在数据库中,不能丢失;1.query_cache_min_res_unit:查询缓存分配内存块的最小的分配单位,较小的值较少内存浪费,可是会致使更加平凡的内存分配操做 ,较大的值会致使浪费 2.query_cache_limit:可以缓存的最大查询结果,对有较大结果的查询语句,建议在select中使用SQL_NO_CACHE 3.query_cache_size:查询缓存总共可用的内存空间,单位是字节,必须是1024整数倍 4.query_cache_type:ON , OFF , DEMAND 5.query_cache_wlock_invalidate:若是某个数据表被其余的链接锁定,是否仍然能够从查询缓存中返回结果,默认值为off,表示能够返回数据,on为不容许
缓存命中率计算公式: Qcache_hits / (Qcache_hits+Com_select)
general_log = {ON|OFF} # 是否启用查询日志 general_log_file = /logs/mysql/general_log # 当log_output为FILE类型时,日志信息的记录位置; log_output = {TABLE|FILE|NONE} log_output = TABLE,FILE
1.执行时长超出指定时长的操做 show global variables like 'long_query_time'; 查看指定的时长 set global long_query_time = 自定义时长 2.slow_query_log = {ON|OFF}:是否启用慢查询日志 set global slow_query_log = ON 3.slow_query_log_file = mariadb1-slow.log # 过滤条件 4.log_slow_filter=admin,filesort,filesort_on_disk,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk 5.log_slow_rate_limit = 1 指定记录速率 6.log_slow_verbosity = 指定内容级别
# 错误日志信息产生的来源 mysqld启动和关闭过程当中输出的信息; mysqld运行中产生的错误信息; event scheduler运行一个event时产生的日志信息 在主从复制架构中的从服务器上启动从服务器线程时产生的日志信息; # 如何开启错误日志 log_error = /path/to/somefile log_warnings = {ON|OFF}:是否记录警告信息于错误日志中;
# 日志记录的格式分类 基于“SQL语句”记录: statement 基于“行”记录:row “混合模式” :mixed,系统自行判断 # 二进制日志文件的构成 日志文件:mysql-bin.文件序号 例如: mysql-bin.000001 索引文件:mysql-bin.index 例如:mysql-bin.index
1.站在数据集是否完整的角度上 彻底备份,部分备份 2.站在彻底备份的基础上 增量备份,差别备份 3.站在是否影响数据集读写的角度上 热备份:在线备份,读写操做不受影响; 温备份:在线备份,读操做可继续进行,但写操做不容许 冷备份:离线备份,数据库服务器离线,备份期间不能为业务提供读写服务 MyISAM存储引擎: 可以实现温备 InnoDB存储引擎: 可以实现热备 4.站在数据存储角度上 物理备份:直接复制数据文件进行的备份 逻辑备份:从数据库中“导出”操做数据的SQL语句,再执行,实现备份
mysqldump
:逻辑备份工具,适用于全部存储引擎,温备;可是对InnoDB存储引擎支持热备;scp, tar
等文件系统工具:物理备份工具,适用于全部存储引擎;冷备;彻底备份,部分备份,不适用于Innodb存储引擎;lvm2的快照
:几乎热备;借助于文件系统工具实现物理备份;mysqlhotcopy
: 几乎冷备;仅适用于MyISAM存储引擎