mysql知识点阶段总结

1. 创建数据库,使用数据库
create database db2;
use db2;
2. 创建表
create table dept(
dept_id int primary key auto_increment,
dept_name varchar(20),
dept_loc varchar(20));
create table emp(
  emp_no int primary key auto_increment,
  emp_name varchar(30) not null,
  emp_job varchar(30) ,
emp_mgr int ,
  emp_hiredate date,
  emp_sal decimal,
  emp_comm decimal,
  dept_no int);
3. 向表中插入数据
insert into dept(dept_name,dept_loc) values ('生产部','河南'),('销售部','北京'),('总部','上海');

insert into dept values(null,'今天','明天');#主键必须是自动增长;


insert into emp(emp_name,emp_job,emp_mgr,emp_hiredate,emp_sal,emp_comm,dept_no)
values('高洪','经理',2,'2012-11-25',6000,3000,2),
      ('佳佳','老板',null,'2010-11-25',8000,5000,3),
('baby','总监',1,'2016-11-25',6000,3000,1);


4. ddl语句:创建表,修改表结构(表增加一列),删除表;
修改dept表的表结构:
 
1.(增加列)给dept表增加一列:alter table dept add dept_age int;
2.给dept表增加多列:alter table dept add (
 dept_sex int ,
 detp_weight int);
 
3.(修改列的列定义)把dept表中的dept_age列的类型int 变成varcher类型:
alter table dept modify dept_age varchar(30);
  
4.(改变列名)把dept表中的dept_age列名变成age:
alter table dept change dept_age age int ;
5.(重新命名表名)把dept表的名字变成dept_tb:
alter table dept rename to dept_tb;
6.(删除列)把dept表的dept_age列删除;
alter table dept drop dept_age;
7.(删除主键)把 dept 表的主键列dept_no 删除;
alter table dept drop primary key;#主键不能使自动增长;
8.(添加主键)给test表添加主键:
alter table test add primary key (test_no);#没有定义主键;
9.(删除表)删除dept表;
drop table dept;


5. dml语句:插入数据(insert into ),更新数据(update .. set ..)和删除数据(delete from ...)
1.(更新数据):update dept set dept_loc='新安县' where dept_no=2;
2.(删除数据列):delete from dept where dept_no=4;
3.(将字段变成非空) :alter table test modify test_name varchar(40) not null;
 (将字段变成空):alter table test modify test_name varchar(20) null;
4.(将字段变成唯一):alter table test modify test_name varchar(20) unique;
 ( 删除字段唯一限制): alter table test drop key test_name;#唯一的字段不用加(),主键需要加();
5.(增加外键):alter table emp add constraint fk_1 foreign key (dept_no) references dept(dept_no);
  (删除外键): 通过 show create table emp;查出系统生成的 constraint (约束名称) emp_ibfk_1;
第一步:alter table emp drop foreign key emp_ibfk_1;
第二步:alter table emp drop key dept_no;#创建外键时,没有指定外键名,[constraint fk_1];
6. 数据库三大范式:
   第一范式:每一数据项不可以分割;
   第二范式:有主键;
   第三范式:数据项不能依赖于除主键之外的字段;
7. 几种连接:
(内连接):select d.dept_no ,dept_name,emp_name,emp_sal from emp e join dept d on e.dept_no = d.dept_no where emp_sal>6000;
(自连接) :select e.emp_no,e.emp_name,m.emp_name from emp e join emp m on e.emp_mgr=m.emp_no;
#e表当做职员表,m表当做领导表;
8. (左外连接):select e.emp_name,m.emp_name from emp e left join emp m on e.emp_mgr=m.emp_no;#e表示驱动表
(右外连接) :select e.emp_name,m.emp_name from emp m right join emp e on e.emp_mgr=m.emp_no;#e表示驱动表
9. 子查询:
(非关联子查询):select emp_name from emp where emp_sal=(select min(emp_sal) from emp);#同一张表中查询;表中最低工资
(关联子查询):select e1.dept_no,d.dept_name ,e1.emp_name,e1.emp_sal from emp e1 join dept d on e1.dept_no=d.dept_no
where  e1.emp_sal=(select min(e2.emp_sal) from emp e2 where e2.dept_no=e1.dept_no);
#找出e1.dept_no --->1--->e2.dept_no=1--->min(e2.emp_sal)=6000;找出每个部门中工资最低的;
        select e.dept_no ,d.dept_name ,avg(e.emp_sal) from emp e join dept d on e.dept_no=d.dept_no group by
d.dept_no having avg(e.emp_sal)>6000;
10. (事物):要做的事,要完成的任务,有几句insert|update|delete语句组成;
(事物特性)ACID:
A:原子性,事物不可分割;
C: 统一性,sql语句同时成功,同时失败,保持一致;
I: 隔离性,事物之间相互隔离,互不影响;
D: 持久性,写入数据库,就生效了;

(取消自动提交事物)set autocommit=off;
  delete from dept where dept_no=4;
  savepoint p;
  insert into  dept values(null,"总部","hongsehgn");
  rollback to p;      #p到这行内容无效
  commit;             #把dept_no=4的记录删除;
11. (视图):
(视图定义):相当于一个变量,代表一个查询语句;
(视图的定义):create view v1 as select * from dept;
(视图的使用): select dept_no,dept_name from v1;   


12. (分页查询):select * from emp limit 1,3;#从第二条记录开始向后数3条记录,显示;
 :select *from emp limit (n-1)*count,count;#显示第n页的count条记录;































你可能感兴趣的:(阶段总结)