MySQL
一、入门
1.查看所有数据库
show database;
2.选择某个数据库
use shop;
3.查看库中表
show tables;
4.显示当前用户
select user();
5.退出
quit;
二、mysql
1.DDL(数据定义语言):
Create Table,Drop Table,Alter Table等
1)操作表;
- 创建库
create database 库名; - 创建表单
create table student(
id int(10) primary key auto_increment,
stuName varchar(20) not null,
school varchar(20) comment ‘字段的注释,是学校’,
score float(5,2),
birthday date,
sex char(2) default ‘女’
);
Primary key:主键
主键的目的可以确定唯一 一行数据
Auto_increment : 设置主键自增;
localhost是本地的意思
2)显示
- 显示表的详情
desc student;
- 显示表的创建语句
show create table student(重要)
3)删除
- 删除表
drop table student;
- 删除数据库
drop datebase java90;
4)表的修改语句
- 单独增加一行
alter table class add aa int(3);
- 修改一行内容内的某个内容
alter table class change aa age int(3);
- 修改表,设置某列添加约束
alter table class modify sex char(1) not null;
- 修改表名称
alter table class rename(as) dat;
- 修改字段的注释
alter table dat modify sex char(20) comment’ 修改字段注释’;
2.DML(数据操作语言):Selesct,Insert,Update,Delete等
1)插入数据
insert into class (姓名,chinese,math,english) values ('王二',92,87,60);
//字符串用单引号‘ ’;
//日期也用单引号‘ ’;
//增加多行
insert into class (姓名,math,chinese,english) values
('李',90,60,20),
('王',50,60,73),
('张',23,90,80);
- 迁移数据
insert into class_chinese select 学号,姓名,chinese from class;
2)数据更新( 修改)
- 全部修改
update class set math=100;
- 指定修改
update class set math=60 where 学号 = 5;
and 和 or , <>与!=一样
3)删除数据
delete from class_copy //删除完
delete from class where 学号=5 //删行
truncate from 表名:
- a.速度快;
- b.自动主键从1开始重置
4)查询数据
- 整个数据
select math from class;
- 指定行数据
select * from class where 学号=5;(尽量不适用*号,可以有效的增加搜索效率)
+修改名字
select 姓名 as id from class;
- 定义的有自己的规范(与表无关)
select 1+1;
select now();//now()时间函数
- 精确小数
float查询的不是个精确值,但是效率高;
decimal较为准确;
5)函数及关键字
max( ) //最大值
min( ) //最小值
avg( ) //平均值
count( ) //求数据条款
sum( ) //求和
- 注意:where后面不能跟聚合函数,having后面可以跟聚合函数;
select max(fsalary) as 最大工资 from t_employee where fsalary>5000;
- 分类
order by 子句,只能用于select语句的最后;
select * from t_employee ORDER BY fsalary;
注意:默认升序为升序查询asc升序,desc降序;
- 常用函数
select now( );
select curdate() as 今天;不带时分秒
select hour(now( ));
- 其他
ifnull(arg1,arg2);
arg1为null输出arg2
- like模糊查询
-
- 匹配单个字符:
例如:张_ 张三可以,张三三不行
-
- 匹配多个字符:
例如: 张% 张三三
%张% d张a
- in关键字
select * from t_employee where fage In(23,25,28);
- 在范围内选择
between ….and…
select * from t_employee where between 20 and 25;
- 数据分组
select AVG(fsalary) ‘平均工资’,company as ‘公司’ from t_employee group by company;
- union高效有用(很重要,不容易锁)
select temp.temp as '表头',temp.max from(
select '正式员工的最高年龄' as temp,MAX(fage) as max from t_employee
union all
select '最高工资' as temp,MAX(fsalary) as max from t_employee
)as temp;
6)事务具备几个特点:
- 1)原子性;
- 2)一致性;
- 3)持久性;
- 4)隔离性;
例子:start TRANSACTION; //开启事务
insert into class(姓名,math,english,chinese) values ('孙',45,56,26);
COMMIT; //提交事务
7)case (if的意思)
select fname as 姓名,
(case fage
when 20 then '小年轻'
when 28 then '老家伙'
else '中等家伙'
end
) as '职称' from t_employee;
注意: end不能忘
8)外键(不重要通常不用)
- 添加外键
alter table t_student add constraint fx foreign key(Schoolid) references t_school(id);
- 删除外键
alter table t_student drop foreign key fx
3.DCL(数据控制语言):存储权限 访问权限
- 修改密码
update mysql.user set password=password('新密码') where user=
('用户名');
- 刷新权限
flush privileged;
4.表链接方式(数据库)
内连接,外连接,交叉连接
- 1.内连接
- a. where连接
select t_student.id,t_student.name,t_school.name as '学校' from t_student,t_school where t_student.Schoolid=t_school.id;
- b.Join… On
select st.id,st.name,sc.name as '学校' from t_student st join t_school sc on st.Schoolid = sc.id where st.name like '张%';
特点: 如果a表有4条记录,b表有两条记录,使用内连接只会查询两个有匹配条件的数据
2)外连接
- a.lelf join … on
- b.right join…on
- c.full join … on( mysql 不支持,union代替)
3)交叉连接(不常用)
5.检索
- Explain 优化的质量排序:
system>const>eq_ref>ref>range>index>aLL
- 一般来说,ref>range这种程度就已经优化的相当完美了,system>const这两个是较为理想的优化形式。