mysql -- 学习记录
show databases; //列出所有数据库
select databases; //显示当前数据库
create database 数据库名 ; // 创建数据库
drop database 数据库名 ; //删除数据库
show full tables ; // 查看表结构 (显示所有表)
show open tables ; // 列举表缓存中当被代开的非 temporary 表
show table status ; // 查看表状态
DDL:
create database test character set utf8 ; // 创建数据库并设置字符集
alter table 表名 add 列名 数据类型 ; // 添加一列
desc 表名 ; // 查看表字段信息
alter table 表名 drop 列名 ;// 删除一列
rename table 原始表名 to 修改后的名字 ; // 修改表名
show cretae table 表名 ; // 查看表的创建语句
alter table 表名 character set 编码 ; // 修改字符编码
alter table 表名 change 原始列名 新列名 数据类型 ; // 修改列名
drop table 表名 ; // 删除表名
DML:
insert into 表名(表字段) values (); // 插入
update 表名 set 列名=新值 where 条件 ;// 修改
delete from 表名 [ where 列名 = 列值 ] ; // 删除
truncate table 表名 ;// 清空表
1. delete 删除表中数据,表结构还在,删除后的数据可以找回
2. truncate 删除是吧表直接 drop ,然后在创建一个同样的新表,删除的数据不能找回,执行速度比delete快、
执行快的原因:
因为delete执行删除过程是每次从表中删除行,并且同时将该行为的删除操作作为事务记录再日志中保存以便进行回滚
truncate 则一次性从表中删除所有数据
范式:
第一范式:数据表每一列(属性)都是不可分割的基本数据项,要求数据的每一每一列都只能存放但单一值
第二范式:要求数据表里的所有数据都要和该数据的主键有完全相依关系
第三范式:所有非键属性都只和候选键有相关性,也就是说所有非键属性互相之间应该是无关的。
反范式:
试图通过增加冗余数据或通过分组数据来优化数据库读取性的过程
show varianles like '%query_log%' ; 查看慢日志是否开启 (所有执行时间超过 log_query_time 秒的 sql 语句都会被记录在慢查询日志 中)