mysql开发
开发DBA知识:数据库设计、SQL开发、内置函数、存储过程和存储函数、触发器、事件调度器...
存储过程和存储函数:在服务器端的能完成某些功能的sql语句。sql语句可以在服务器端,也可以由用户发送到服务器端,但是为了安全及高效,让sql语句在服务器端是合理的,用户只能调用这些具有一定功能的sql语句而完成操作。
触发器:触发器的功能就是让一些sql语句执行而带动其他sqk语句的执行。例如日志记录等。
事件调度器:周期性的执行某些sql语句。
管理DBA知识:安装、升级、备份、还原,监控分析及SQL优化,配置服务器变量(引擎、缓存、日志)、数据字典(数据的一种存储方式,方便查找,存储的是服务器上的元数据,如mysql、information_schema、performance_schema数据库)...
SQL数据类型:值类型(int、decimal,char、varchar、text,floult、double,ENUM、SET,bool)。
数值型:
int常用修饰符:auto_increment(用show last_insert_id();查看最后插入的id),primary key,unique,not null,unsigned,default(默认值)。
字符型:
char和text字符集的修饰符:null,not null,default(不能用于text),charcter set(用show variables like '%char%';查看),collation(排序规则,用show collation;查看)。
时间型:
枚举:enum(1-65535) ,set(1-64)
若enum中值为a,b,c则我们只能存a,b,c;而set中值为a,b,c则我们可以存他们的组合,如ab等。修饰符由null,not null,default
char与varchar比较:
定长是定义为多长就是多长存储,变长是定义的长度只是最长存储长度,实际的长度是数据的长度。
datetime与timestamp区别:
也就是说当改变时区后timestamp的值跟着改变,而datetime不会发生变化。
SQL数据类型作用:被索引及排序。
SQL_MODE:TRADITIONAL,STRICT_TRANS_TABLES,STRICT_ALL_TABLES。查看SQL_MODE用show global variables like '%sql_mode%';设置用set session variables sql_mode='stricts_all_tables';但此种修改方法在mysqld重启后就无效了。
SQL语言组成:DDL,DML,DCL。重点DML,包含的东西比较多,包括约束(主健、外健、唯一健、条件、非空、事务)、视图(保存好的select语句)。
DDL:
create:drop:
alter :
create table t5 select * from t3;和create table t4 like t3;两种方式均是根据一张表创建另一张表。前者是复制后者的数据到新表中,后者是复制表的结构到新表中。
MyISAM存储引擎的表有三个文件,都位于数据库目录(/var/lib/mysql/d1)中:表结构定义文件(t1.frm),表数据文件( t1.MYD)表索引文件(t1.MYI)。
InnoDB默认的存储方式为表结构文件在/var/lib/mysql/d1中,而表数据文件和表索引文件在/var/lib/mysql/ibdata1中,并且是所有InnoDB的表都在着一个文件中。这种存储方式不是很方便管理,因此下面这种才是好的存储方式。修改global variables中的innodb_file_per_table为on,则在/var/lib/mysql/d1下会创建t3.frm t3.ibd文件,为每个表创建单独的表空间文件。
DCL:重点select
Mysql的查询操作:单表查询、多表查询、联合查询。
select常用的修饰符有DISTINCT(不重复显示),SQL_CACHE(对查询的结果作缓存),SQL_NO_CACHE(对查询的结果不做缓存)。
where与having的区别是where是在分组前先对行过滤,而having是对分组后的聚合进行过滤。常用的聚合函数有sum(),avg(),count(),max(),min()。
limit num1,num2。num1代表偏移的行数,num2代表显示的行数。limit num1。num1代表显示的行数。
选择和投影:选择是对行的过滤,用where 条件;投影是对列的过滤,用select 字段。
常用的条件有:
多表查询:
交叉连接:将两张表做笛卡尔积。select * from table1,table2;
自然连接(内连接):根据两表中相等的列建立连接。select * from table1,table2 on table1.filed=table2.filed;
外连接:
左外连接:以左表为准,显示左表中所选字段的所有信息。右表中没有与之对应的就用NULL。select * from table1 left join table2 on table1.filed=table2.filed;
右外连接:....
全外连接:mysql没有全连接。
联合查询:使用union将两张表的结果合并输出,要求联合的两张表列数和列字段的数据类型一致。select name from table1 union select name from table2;
查看表的索引用show index from table;给表添加索引用 alter table table_name add index (filed);
视图:将select的查询结果当作一张表来用。create view view_name select filed1 .. from table;其查询结果和from的子查询是一样的。删除视图用drop view view_name。
子查询:
用在from的子查询:select filed1 .. from (select * from table2 where ..) as alias ;
授权:指定某个用户能看到数据库中的信息。grant all on database.table to user@host identified by password;视图的缺陷是当用户往视图中插入数据时会导致一些额外的麻烦。
insert|replace的区别:replace和insert都是往表中插入数据,但replace在插入数据时若遇到与原表中有主健或唯一健冲突会用新数据替换原数据。
--safe-updates用在update与delete操作时若没带where字句则会禁止操作。如果是清空整张表用truncate table table_name;