mysql总结

来源:互联网 发布:回转交易 知乎 编辑:程序博客网 时间:2024/06/08 02:44
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_hireadate date,
   emp_sal decimal,
   emp_comm decimal,
   dept_no int);
3、向表中插入数据
insert into dept (dept_name,dept_loc)valuse('生产部','河南'),('销售部','北京'),('总部','上海');
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条记录;

原创粉丝点击