本帖最后由 yun 于 2016-11-27 20:45 编辑
1、Mysql数据库默认有三个数据库:
Information_schema:这个数据库是一个虚拟数据库,跟视图有些类似。主要用来存储其它数据库的信息,比如数据库名称和表的名称,以及列的数据类型等等 实质是:存储数据的结构
Mysql:主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和 理信息。不可以删除,如果对mysql不是很了解,也不要轻易修改这个数据库里 的表信息。 Performance_schema:主要用于收集数据库服务器性能参数(版本5.5之后就多出来了) Test:这是一个测试数据库,mysql刚安装好的就有,里面没有表,可以删除
2、数据库类型
Int 整形 char varchar varchar2 字符型 text 文本 Data time datatime 日期时间类型 时间戳 timestamp
3、数据库类型属性
Null 数据列可包含空值 Not null 数据列不允许出现null值 Default xxx 插入记录的时候,将取默认值 Primary key 主键 Auto_increment 插入记录的时,没有指定值,在上一条记录值上自动加1,仅适整数类型 Character set name 指定表中所使用的字符集,不指定就是用数据库默认的字符集
4、数据语言的分类:
数据定义语言:Data definition language,简称DDL,其包括createdrop alter等语句 Create table/database 表名/数据库名; Drop table 表名;(记录和结构都被删除) Alter table 表名 add column 新增加的列名 类型; Alter table 表名 modify 列名 类型;(修改表当中列的属性) Alter table 表名 change column(可以省略) 旧列名 新列名 类型;
数据操纵语言:Data manipulation language,简称DML,其包括insertupdate delete语句 Insert into 表名(列名,列名,…)values(值1,值2,…); Update 表名 set 列名=新值,列名=新值 where 列名=值; Delete from 表名 where 列名=值;(只删除记录,不删除结构)
数据查询语言:Data retrieval language,简称DRL,其包括select语句 Dual 是一个虚表,可用来计算,例如:select 1+3 ‘sum’ from dual;
查询可分为:模糊查询、排序查询,分组查询,多表联合查询 模糊查询 like Select * from 表名 where 列名 like ‘%c’;(查询列名中值当中最后一个字母为c 的记录)
数据排序查询 select * from teacher_tab where name like'%l%' order by createDate desc,age desc; (先按照createDate进行降序排序,如果出现日期相同的话,在按照age对其进行降序排序)
分组查询 Select gender,count(gender) from teacher_tab group by gender; (查询男女各多少人),切忌:查询语句中如果有group by语句,那就必须有聚合函数,比如count(),now()等
Select gender,count(gender) from teacher_tab group by gender having gender=’m’; 或者 Select gender,count(gender) from teacher_tab where gender=’m’ group by gender;这种写法效率比较低 (查询性别为女的总人数)
分页查询 Select * from teacher_tab limit 0,3;(查询表前三条记录) 第一个数字:代表的是从哪筛选,这个数字代表的是索引值,索引默认从0开始的,也就相当于表当中的第一条记录。 第二个数字:代表的是帅选几条记录出来
事务控制语言:transaction control language,简称TCL,其包括commit,rollback等语句。
事务的定义:对数据库的多步操作,每一步操作就相当于一个事务
事务默认的提交方式是自动提交的,即autocommit=true
事务保存点:savepoint 前提:必须设置手动提交即set autocommit=false Update teacher_tab set gender=’m’ whereid=2; Delete from teacher_tab where id=8; Savepoint p1;
Delete from teacher_tab where id=7;
此时如果认为id=7的那条记录是属于误删,想恢复的话,就可以使用rollback进行回滚,即 rollback to p1;记录就恢复了。 如果直接使用rollback,则之前的所有操作就全部恢复了。
Mysql第三方客户端管理工具:navicat
Mysql聚合函数:
Avg count sum min max Count(*),其结果包含null值 Count(字段),其不包含null值。
Mysql条件控制语句:
Case语句: 语法:case 值 when 条件判断 then 值 when 条件判断 then 值 else 值 end; Select case …
If语句: 语法:If(exp1,exp2,exp3),如果条件表达式exp1成立的话,返回exp2;否则返回exp3
Ifnull语句: 语法:ifnull(exp1,exp2)如果exp1部位空的话,返回exp1;否则返回exp2
Nullif语句: 语法:nullif(exp1,exp2),如果exp1=exp2,则返回null值;否则返回exp1
Mysql字符函数
Mysql日期时间函数
Mysql外键
定义:另一张表的主键,用来与其它表进行关键。
外键语法:foreignkey(字段)references表名(字段)
Alter table emp add foreign key(dept_id)references dept(id);
查看外键的名称:showcreate table emp;
Mysql表的连接 内连接 语法:select …from 表1 (inner) join 表2 where 条件 select * from emp e join dept d wheree.dept_id=d.id;
外连接 分为:左外连接(leftjoin)和右外连接(rightjoin) select e.name,d.name from emp e left joindept d on e.dept_id=d.id;(左外连接:显示左表全部)
select e.name,d.name from emp e right joindept d on e.dept_id=d.id;(右外连接:显示右表全部)
交叉连接 select e.name,d.name from emp e cross joindept d ;(交叉连接:相当于下面的语句) 或者 select e.name,d.name from emp e,dept d;
自连接
select e1.name from emp e1 right join empe2 on e1.id=e2.gmr;
select e1.name from emp e1 left join emp e2on e1.id=e2.gmr;
mysql子查询
select name,salary from emp wheresalary=(select max(salary) from emp); 查询最高工资的员工姓名
select avg(salary),dept_id from emp wheredept_id is not null group by dept_id; 查询每个部门的平均工资
select name,salary from emp where salary>(selectavg(salary) from emp); 查询工资大于平均工资的员工
Mysql数据库索引
语法:create index索引名 on 表名(列名)
作用:主要用来提高查询的速度,优化mysql查询性能。
唯一索引:和普通索引的区别:该唯一索引上所有列值都是唯一的,不能重复
语法:createunique index 索引名 on 表名(列名)
删除索引:dropindex 索引名 on 表名;
主键索引:当创建表的时候,添加主键的时候,主键索引就被自动添加上了。
禁用索引:altertable 表名 disablekeys;
开启索引:altertable 表名 enable keys;
设计索引的原则:1、最适合索引的列是出现在where字句中的列,或连接字句中的列,即on后面的列。而不是出现在爱select后面的列。 2、索引列的值越多不相同的,索引的效果越好。
3、索引的列一般用条件判断时所用的列(经常用的列)
|