MySQL学习心得

以下是个人看书和看Mysql技术内幕的一点学习心得,跟大家分享,有错误请指出,谢谢。

2018/08/07更新:四种连接区别

Mysql 导出数据: select  * into  outfile  '/tmp/bump.txt'  fields terminated  by ','  optionally   enclosed  by ' " '             lines   terminated  by '\n'  from  linuxtest.test2 

Mysql 导入数据: Load data infile  '/tmp/dump.txt'  into  table    linuxtest1.test fields  terminated  by  ','  optionally  enclosed by '  " ' lines   terminated  by '\n' 

cast 数据类型转化:select cast(number as signed) from tablename  将varchar类型的number字段转换成整数

substr 字符串截取: select sbustr(number,1,2) from tablename;从字符串第一个位置开始,截取两个字符。字符串的初始位置编码是1

select *,row_number() over(partition by 字段) from tablename where ....;窗口函数,发现这个函数在聚合的时候比group by更加灵活

引擎区别

mysql主要有两大引擎,Myisam和innodb。之前默认是myisam,在5.7版本之后默认为inndb了。两者的主要区别如下

1、Innodb 支持事务

2、Innodb支持外键

3、Innodb是行锁,myisam是表锁。所以innodb适用于高并发,但是高并发不是换个引擎就能解决的

 

三大范式

1、数据库字段单元保证最小,不能再分,例如地区:能够准确到上海即上海,而不用中国

2、字段要与主键有相关性  

3、字段与主键的相关性要是直接相关(非间接相关)

Innodb引擎事务

1、原子性:即整个事务是不可切分的;不能只执行其中某一部分

2、一致性:事务发生前后,数据库状态变化应该是一致的

3、隔离性:事务之间是孤立的,不会相互影响

4、持久性:事务一旦执行完毕,数据库的变化是持久的

日期比较可以用 select * from tablename where data> #2018-03-21# 利用#号进行日期大小比对,还可以使用内置的datediff 函数,或者year,day;或者强制转换为整数形,进行大数比较

MySQL分区

提高查找效率可分为LIST、RANGE等

show variables like 'symlink';展示MYISAM 是否可以迁移;


set password for root = password('123');更改数据库密码

mysqladmin -u USER -p password PASSWORD

delimiter 定义MYSQL程序终止符

alter table table_name rename to new_tab_name、rename table old_name to new_name 数据表改名;

alter table  tab_name disable keys   索引失效

alter table tab_name enable keys     索引有效

show  variables like 'have_cache_query'   缓存查询 

procedure() 表示一个历程

procedure analyse():语句分析,用于分析SQL运行过程,从而进行一定优化(主要是时间消耗)

explain  查询分析,用来做相应的SQL优化

character set utf-8  数据库编码

truncate table tablename 删除所有数据,但表结构保留     delete  from tablename where 1=1 类似效果,表结构保留数据删除

drop table tablename 表结构与数据一起删除

create tigger trgginer_name 创建触发器;

insert into table values(0)

update table set sep=LAST_INSERT_ID(seq+1);

select LAST_INSERT_ID()

LAST_INSERT_ID()函数     更新整列值

convert();数据类型转换;

show create table 表名 查看建表信息

cast(now() as unsigned) 数据类型转换

collation()字符串排序;

\g:每行显示一个结果;


\c:取消输入,回到初始状态;

DATE_SUB:减去指定时间间隔;

CURDATE:返回当前日期;

INTERVAL:返回True or False;

NULL:能为空;

NOT NULL:表示不能为空;

enum:枚举类型; enum('F','M') NOT NULL;

default-storage-engine=innodb;更改默认引擎;

federated:引擎是通过方程数据表检索而来,数据表并不保存在本地。

show variables like 'version,datadir,engine';查数据库信息

Load DATA   加载文件数据

load data local infile 'name.txt' into table member

source  导入文件.sql语句

IF()紧随其后的表达式进行求值,返回后面两个参数值;IF(death IS NULL,0,1)

concat    合并字符串

_ 只能匹配一个字符,% 匹配字符串

@变量名:=值;MYSQL赋值方法

count(列名) 统计一列中非NULL的值

with rollup  汇总group by统计的数据


Linux alias:定义指令别名;     unalias删除指令别名; character:定义编码规格;


collation   显示数据库编码    show collation

set names 'utf8'   编码修改


alter table tablename engine = MyISAM  引擎修改

convert:字符集编码转换;convert(@s1 using latin1)

zerofull:0填充,满足字符串长度

left join     以左表为主表,将右表数据对左表进行补充,join失败的字段填充null

right join  以右表为主,同上

inner join  内连接  显示两张表相关的共有信息

full join   全连接  显示两张表所有的信息

unsigned:无符号数;

转载注明出处。谢谢!

你可能感兴趣的:(数据库学习)