您的位置:新葡亰496net > 网络数据库 > 新葡亰496net:MySQL学习笔记一,MySQL学习笔记

新葡亰496net:MySQL学习笔记一,MySQL学习笔记

发布时间:2019-09-22 11:09编辑:网络数据库浏览(79)

    课程回看

    1. 一对一提到 案例1:查询每一个职员和工人的名字和主持领导的名字

      select e.ename 员工姓名,m.ename 领导姓名
      from emp e join emp m
      on e.mgr=m.empno;
      

       

      案例2: 查询主任领导名称为blake的享有职工名字 

      select e.ename 员工姓名,m.ename 领导姓名 from emp e join emp m on e.mgr=m.empno where m.ename='blake'
      

       

      案例3:查询有商品的分类新闻及上级分类信息往titemcategory表内部插入以下数据 id 162 name 办公用品 id 229 name 文具 id 913 name 户外用品 -插入数据

       insert into titemcategory (id,name) values(162,'办公用品'),(229,'文具'),(913,'户外用品');
      

       

       -查询全数有商品的归类id

      SELECT DISTINCT categoryid FROM titem WHERE categoryid IS NOT NULL
      

       

      * -查询分类详细的情况*

      select * from titemcategory where id in (SELECT DISTINCT categoryid FROM titem WHERE categoryid IS NOT NULL)
      

       

       -查询上级分类

       select n.*,c.name 上级分类名称 from (select * from titemcategory where id in (SELECT DISTINCT categoryid FROM titem WHERE categoryid IS NOT NULL)) n join titemcategory c on n.parentid=c.id
      

       

      -查询有商品的归类消息及上级分类音信达成步骤:1.通过子查询查到有商品的分类id 2.把当前比物连类和上司分类通过内接二连三创立关联 3.然后把分类的id作为筛选标准 -轻松写法 

      select c.*,m.name 上级分类 from titemcategory c join titemcategory m on c.parentid=m.id where c.id in (SELECT DISTINCT categoryid FROM titem WHERE categoryid IS NOT NULL);
      

       

    2. 一对多涉及

      机关 员工 分类 商品 客户 地址 userid -一对多的表中 在多的表中增添关系字段

      案例1:查询每一种分类下所对应的具有商品

      select *
      from t_item_category c left join t_item i
      on c.id=i.category_id
      

       

      案例2:查询部门平均薪金 大于 全体职工的平均薪俸的享有单位下的享有职员和工人

      SELECT * FROM emp 
      WHERE deptno IN (SELECT deptno FROM emp
      WHERE deptno IS NOT NULL
      GROUP BY deptno
      HAVING AVG(sal)>(SELECT AVG(sal) FROM emp))
      

       

      案例3:上题结果上再多呈现出 部门的名字

       select n.*,d.dname from(SELECT * FROM emp WHERE deptno IN (SELECT deptno FROM emp WHERE deptno IS NOT NULL GROUP BY deptno HAVING AVG(sal)>(SELECT AVG(sal) FROM emp)))n join dept d on n.deptno=d.deptno
      

       

    3. 多对多涉及 -多对多要求单独通过新建的涉嫌表保存数据

      create table teacher(id int primary key auto_increment,name varchar(20));
      
      insert into teacher values(null,'唐僧'),(null,'赵本山'),(null,'刘老师'); create table student(id int primary key autoincrement,name varchar(10)); insert into student values(null,'八戒'),(null,'悟空'),(null,'宋小宝'),(null,'小沈阳'),(null,'小明'),(null,'小红'); create table ts(tid int,sid int); insert into t_s values(1,1),(1,2),(2,3),(2,4),(3,5),(3,6),(1,5),(2,5); 案例1:查询每个老师对应的所有学生信息 1. 子查询 select name from student where id in (select sid from ts where tid in(select id from teacher)) 2. 内连接 SELECT n.name tname,s.name FROM (SELECT * FROM teacher t JOIN ts ts ON t.id=ts.tid)n JOIN student s ON n.sid=s.id
      

       

      案例2:查询 小明 对应的具备老师 

      SELECT n.name tname,s.name FROM (SELECT * FROM teacher t JOIN t_s ts ON t.id=ts.tid)n JOIN student s ON n.sid=s.id where s.name='小明'
      

       

      案例3:刘先生 对应的富有学生音信 

      SELECT n.name tname,s.name FROM (SELECT * FROM teacher t JOIN t_s ts ON t.id=ts.tid)n JOIN student s ON n.sid=s.id where n.name='刘老师';
      

       

    一、数据库的创导

    mysql -uroot -proot

    MySQL 学习笔记 一

     

    视图

      create database database_name  DEFAULT CHARACTER SET utf8;  //创制叁个数据库  

    查询全数 show databases;

    创建 create database 库名;

    查询详细的情况 show create database 库名;

    点名字符集 create database 库名 character set utf8;

    删除 drop database 库名;

    使用 use 库名;

    导入数据库 source 路线;

    查询全部 show tables;

    创建 create table t1(name varchar,age int);

    查询实际情况 show create table t1;

    点名引擎和字符集 create table t1(name varchar,age int) engine=myisam/innodb charset=utf8;

    ----------------innodb:扶助数据库的复杂性操作,包蕴外键、事务等

    ----------------myisam:只协助数据基础的增删改查操作

    翻看表字段 desc 表名;

    删除表 drop table 表名;

    修改表名 rename table 原名 to 新名;

    修改表的引擎和字符集 alter table 表名 engine=myisam/innodb charset=utf8;

    增添表字段

    --最末尾: alter table 表名 add 字段名 字段类型;

    --最前头: alter table 表名 add 字段名 字段类型 first;

    --XX前面: alter table 表名 add 字段名 字段类型 after xxx;

    删去表字段 alter table 表名 drop 字段名;

    修改表字段的名字和项目 alter table 表名 change 原字段名 新字段名 新字段类型;

    修改表字段的门类和岗位 alter table 表名 modify 字段名 字段类型 地点;

    除去并新建 truncate table 表名;

    保存数据 insert into 表名 values(字段值,字段值,...);

    钦赐字段插入 insert into 表名 values ;

    询问数据 select * from 表名 where 条件;

    修改数据 update 表名 set 字段名=字段值,字段名=字段值,... where 条件;

    剔除数据 delete from 表名 where 条件;

    查询到的字段更名 select 原字段名 新字段名 from 表名;

    询问去重 select distinct 字段名 from 表名;

    in 查询有些字段的值为三个的时候 select * from where 字段名 in(值1,值2,...);

    查询某些字段的值不为**的时候 select * from where 字段名 not in(值1,值2,...);

    between查询在**之间 select * from where 字段名 between 值1 and 值2;

    查询不在**之间的 select * from where 字段名 not between 值1 and 值2;

    模糊查询: like

    _:代表单个未知字符

    %:代表0个可能多个未知字符

    升序 select * from 表名 order by 字段 asc;

    降序 select * from 表名 order by 字段 desc;

    分组 select 字段 from 表名 group by 字段;

    分页查询 select * from 表名 limit *每页数量,每页数量 -----limit 7,7

    取余 mod -----7%2

    获得当明天期 时间 select now();

    收获当前几日子 select curdate();

    得到当前时刻 select curtime();

    从年月日时分秒中领取日期 select date;

    从年月日时分秒中领取时间 select time;

    从年与日时转手中领到时间分量:

    年 select extract(year from now; ------select extract(year from 字段) from 表名;

    月 select extract(month from now;

    日 select extract(day from now;

    时 select extract(hour from now;

    分 select extract(minute from now;

    秒 select extract(second from now;

    日期格式化:

    %Y 四位年 YYYY

    %y 两位年 yy

    %m 两位月

    %c 一位月

    %d 日

    %H 24小时

    %h 12小时

    %i 分

    %s 秒

    -------select date_format,'%Y年%m月%d日 %H时%i分%s秒');

    非标准格式调换为正式格式

    str_to_date('非标准格式的光阴',格式); --------select str_to_date('2018年11月16日 15时49分08秒','%Y年%m月%d日 %H时%i分%s秒');

    ifnull ----update emp set comm = ifnull;

    创设表的时候定义主键和自增 注释 create table 表名(字段名 字段类型 primary key auto_increment comment '内容',....);

    翻看自动提交状态 show variables like '%autocommit%';

    安装自动提交的景观 set autocommit=0/1;

    敞开事务 begin;

    交由业务 commit;

    保存回滚点 savepoint 名;

    回滚到回滚点 rollback to 名;

    平均值 avg; ------select avg from emp;

    最大值 max; ------select max from emp;

    最小值 min; ------select min from emp;

    求和 sum; ------select sum from emp;

    总结数据 count; ------select count from emp;

    拼接 concat('xx','xx');

    收获长度 select char_length from emp;

    获得字符串在别的一个字符串中冒出的地点 instr(str,substr);

    插入字符串 insert(str,start,length,newstr);

    转大写 upper;

    转小写 lower;

    去两端空白 trim;

    截取字符串

    从左截取 left;

    从右截取 right;

    自定义截取 substring(str,start,len);

    重复 repeat;

    轮换 replace(str,要替换的,替换后的);

    反转 reverse;

    向下取整 select floor;

    四舍五入 select round; ------select round(23.4782,2) 23.48

    非四舍五入 select truncate -----select truncate 23.87

    随机数 rand() 0-1

    获取3、4、5 随机数 select floor 3;

    内接连 select from 字段 from 表1 join 表2 on 等值条件

    外连接 select from 字段 from 表1 left join 表2 on 等值条件

    创制视图 create view 视图名 as 子查询 with check option;

    创立或交流视图 create or replace view 视图名 as 子查询;

    除去视图 drop view 视图名;

    格式: constraint 约束名称 foreign key references 依赖的表名

    格式: create index 索引名 on 表名)

    去除索引 drop index 索引名 on 表名;

    一、数据库简介

    时间:2016-3-28 19:40

    视图概述

    -数据库中存在多种对象,表和视图都是数据库中的对象 **表和视图不能重名**
    -视图是张虚拟的表,是通过sql的查询语句查询的结果集的表保存成了一个视图 
    -视图中的数据 会随着真实表中的数据改变而改变
    -视图实际上就是代表了一部分sql语句
    

    -创制视图

    -格式:create view 视图名 as 子查询;
    
    create view v_emp_10 as (select * from emp where deptno=10); 
    
    案例:创建emp表的部门是20 工资小于3000的 视图
        只保存名字 工资 部门id
    
    create view v_emp_20 as (select ename,sal,deptno from emp
        where deptno=20 and sal<3000);
    
    案例:创建emp表 每个部门的工资平均值 的视图
    
    create view v_emp_dept_avg as (select deptno,avg(sal) from emp group by deptno)
    

     

    -假设创立视图的时候利用了外号,那视图今后的操作只认知外号

    -视图的利用办法 和 table 同样 -格式:select * from 视图名

     select * from v_emp_10;
    

     

    • 修改视图 -格式:create or replace view 原视图名 as 新的子查询

      create or replace view v_emp_10 as
      (select * from emp where deptno=10 and sal<3000);
      

       

    • 视图的归类 -视图分为:轻易视图和复杂视图 -轻松视图:在开创视图的子查询中 不分包:关联合检查询、去重、函数、分组的视图称为轻松视图 -复杂视图:和精炼视图相反

    • 对视图举办dml操作,只针对轻便视图能够利用 因为复杂查询普通意况只是为了浏览数据的,不须求也不能够扩充增加和删除改的操作

    视图的字段 遵从原表字段的束缚 - 视图的数码污染 假若往视图中插入一条在视图中不具体 可是在原表中体现的数额,称之为数据污染,不提出那样操作 唯有insert命令才会现出数量污染,因为update和delete命令只好操作视图中有个别数据

    • with check option create view vemp10 as select * from emp where deptno=10 with check option;

    • 视图的效应

      1. 重用子查询 升高支付效能
      2. 界定数量的访问 比方:能够创设一个视图把原表的灵敏音信过滤掉就可以 
        create view v_emp as select empno,ename,deptno,comm,job from emp
        
    • 干活中对视图一般只举办DQL,不行使DML

    • 去除视图

      drop view vemp10;
      

       

      -案例:制造三个复杂视图:呈现部门的平均薪水,最高级程序员资,最低薪资,报酬总量,部门职工人数;

      create view v_emp_deptinfo as
      select deptno,avg(sal),max(sal),min(sal),sum(sal),count(*) 
      from emp 
      group by deptno;
      

       

      drop database database_name;  //删除数据库

    注意:

    1、where前面不能写聚合函数,使用having

    2、假设成立视图的子查询中使用了别称,则对视图操作时只好使用别称

    3、not null 无法为空

    4、unique 不能够重复

    5、primary key 主键,无法为空,不可能重复

    6、auto_increment 自增

    7、突显一行 select depto,group_concat from emp group by deptno;

    1、 根据数据库的腾飞时间各样,首要出现了以下系列数据库系统:

     

    目录原理

      1.1 DOS常用命令

    Ø 网状型数据库

     

    目录概述

    1. 目录是用来进步查询速度的本领
    2. 假定不利用索引mysql会从第一条数据依次将来查询,假若数据量异常的大,特别耗费时间
    3. 加多索引能够交给查询质量,可是假如数据量相当的小,增多索引恐怕会减低功效
    4. 目录的改换是数据库内部生成,如若查询数据时开掘某些字段已经增进过索引会自动使用

    5. 复合索引

      制造索引时只要设置三个索引字段 则名称叫复合索引

    6. 制造表的时候平素增添索引

      create table t11 (id int,name varchar(10), age int, index index_name(name(10)));
      

       

    7. 改动表的索引 

      alter table t11 add index index_age(age);
      

       

    8. 剔除索引

      drop index index_age on t11;
      

       

        1.1.1 数据库命令

    Ø 档期的顺序型数据库

    学习就怕心浮气躁,有个三脚猫的武功,就感到什么都会了。                                                                                                                                                   ——  赠自个儿

    目录总计

    1. 索引不是越多越好 
    2. 数据量小的时候不需要用到索引
    3. 经常出现在 where、order by、 distinct的字段添加索引,效果会更好
    4. 不要在经常做增删改的表中添加索引
    

          mysqld install      // 安装MySQL数据库服务

    Ø 关系型数据库

     

    MySQL 约束

                    net start mysql 或 net stop mysql     // 运行或终止MySQL服务

    Ø 面向对象数据库

    新手不挨训,怎么升高。

    独一约束(UNIQUE)

    如果数据库中的数据需要保证唯一性则添加此约束
    CREATE TABLE T1( ID INT, AGE INT UNIQUE, NAME VARCHAR(20));
    

     

          mysql -u username -p  // 登入MySQL管理种类  

    上面4中数据库系统中,关系型数据库使用最为遍布。面向对象数据库则是由面向对象语言催生的风行数据库,近年来的一部分数据库系统,如:SQL Server 二〇〇五、Oracle10g等都从头增添面向对象的性状。

     

    非空约束(NOT NULL)

    如果某个字段的值不能为null 需要使用此约束
    
    create table t2(id int,age int not null,name varchar(10));
    -以下两种都不可以
    insert into t2 (id,name)values(2,'a');
    insert into t2 values(3,null,'b');
    

     

          use database_name;  // 援用数据库

    二、常用基本SQL语句/语法

     
    ——数据库的基本概念

    暗中认可约束(DEFAULT)

    如果需要让某个字段插入数据时有默认值时使用此约束
    create table t3 (id int,age int default 0,name varchar(10));
    

     

          show databases;    // 展现全体数据库

    Ø SQL语句基础理论

    一、定义:
        1、数据库指的是以自然措施存款和储蓄在联合、能为多少个顾客提供分享,具备尽或然小的冗余度的风味,是与应用程序互相独立的多寡集结。

    主键约束(PRAV4IMAEscortY KEY)

    1. 非空、唯一
    2.如何添加主键
    -创建表时添加主键
        create table t4(id int primary key,age int );
        create table t5(id int,age int,primary key(id));
    -创建表之后添加主键
        alter table t6 add primary key(id);
        alter table t6 modify id int primary key
    -删除主键约束
        alter table t3 drop primary key;
    -自增约束 auto_increment
    1.当字段赋值为null的时候,字段自动增长 
    2.如果删除了某一条数据 自增的数值不回减少
    3.如果插入数据时指定了一个特别大的数,下次自增则从这个数基础上 1
    

     

          source path(.sql文件路径)  //导入数据库文件,生成数据库,即基于sql脚本生成数据库;例如:source F:mysql.sql

    SQL是操作和探究关系型数据库的职业语言,标准SQL语句可用以操作然后关系型数据库。

        2、数据库是依据某种数据结构(档案的次序性,网状型,关系型)组织起来并寄存二级存款和储蓄器(外部存款和储蓄器)中的数据会集。这种数量集结具备如下特征:尽可能不重复,以最优办法为有个别特定组织的有余应用服务,其数据结构独立于选取它的应用程序,对数码的增加和删除改查由联合软件扩充管理和操纵。

    外键约束(FOREIGN KEY)

    1. 行事中,除非卓殊情况,一般不利用外键,使用代码通过逻辑实行限制
    2. 外键约束是保险二个或三个表之间数据的一致性和完整性的
    3. 表的外键平日采取的是另一张表的主键
    4. 外键能够另行、能够是null、但不能是另一张表海市蜃楼的数据
    5. 应用外键约束的法规 -必得保险两张表使用同一的仓库储存引擎 -存储引擎必需是innodb,myisam不扶助外键约束 -外键和涉嫌字段必需有一般的数据类型,数字长度必需一致 -外键约束对应的字段必得创建索引,尽管一纸空文索引,mysql会活动创制索引

        1.1.2 数据表操作命令

    正规的SQL语句普通划分为以下项目:

    二、数据库发展阶段:
        1、人工管理阶段
        2、文件系统阶段
            文件分享性差,不易于同步。
        3、数据库系统阶段

    始建国门外键约束

    1. mysql支持外键的列级语法,但是没有效果,是为了保证和sql的规范的一致性
    2. 表级约束的添加方式
    -格式:CONSTRAINT 约束名 FOREIGN KEY(当前表添加约束的字段名) REFERENCES 关联表表名(关联表的字段名)
    create table classes(id int primary key auto_increment,name varchar(20));
    insert into classes values(null,'一班'),(null,'二班');
    CREATE TABLE student(
    id INT AUTO_INCREMENT PRIMARY KEY,         
    name VARCHAR(20),                                
    class_id INT,
    CONSTRAINT fk_class_id FOREIGN KEY(class_id) REFERENCES classes(id)
    );
    1.创建班级(classes)表 id name
    2.创建学生表(student)id name classid
    给classid添加外键约束 
    3.先往班级表中插入数据 然后往学生表插入数据,
    

     

    测量检验插入错数据 和删除 被波及的班级数据

          show tables;         // 突显某数据库中全部表

    查询语句:驷不比舌是因为select关键字达成,查询语句是SQL语句中最复杂,功用最丰裕的话语。

    三、数据库类别:
        1、档次模型(树状结构)
        2、网状模型(独有概念,尚未达成)
        3、关系模型(一数据库中,三个表便是二个关联)

    CHECK约束

    mysql语法支持,但是没有效果
    create table t7(id int,name varchar(10),
    age int,check(age>20));
    

     

          desc table _name;   //展现表的字段消息

    DML(Data Munipulation Language,数据操作语言)语句,那组DML语句修改后数据将保持较好的一致性;操作表的言辞,如插入、修改、删除等;

    四、常见的关系型数据库:
        1、SqlServer:
            微软旗下数据库
            适用于Windows平台
            服务器版须要付费
        2、MySQL
            属于Oracle公司
            质量较高
            社区版无需付费
            体量小、速度快、总体具有费用低
            开源
            适用平台:
                Windows
                Linux
                Unix
        3、DB2
            IBM公司旗下数据库
                IBM一九七〇年第二遍建议关系型数据库模型。
                IBM1973年提出了SEQUEL语言,即SQL语言的前身。

    怎么是专门的学问

    事务是一组原子性的 SQL 查询, 或者说是一个独立的工作单元. 在事务内的语句, 要么全部执行成功, 要么全部执行失败
    

          show create table table_name;  //显示表的创始音信

    DDL(Data Definition Language,数据定义语言)语句,操作数据对象的语言,有create、alter、drop。

    五、从四个地点学习数据库

    事务的 ACID 性质

    **必须背下以下4点 面试常考**
    -原子性:最小的单元,不可分割
    -一致性: 保证sql执行的一致 要么都成功,要么都失败,保证执行前后数据一致
    -隔离性:多个事务并发时,互不影响
    -持久性:commit提交之后,数据保存到数据库中
    

     

       1.2 查询关系运算符

    DCL(Data Control Language,数据调整语言)语句,首要有grant、revoke语句。

        1、数据库是哪些存款和储蓄数据的

    MySQL事务

    1.查看事务是否是自动提交
        show variables like '%autocommit%';
    2.关闭自动提交
        set autocommit=0;
    
    begin 开始事务
    commit 提交事务
    rollback 回滚事务
    

     

    • =、 !=、 <>、<、<=、>、>=;
    • between   ·····  and ········;
    • in(set) ; //set是集合
    • is null;is not null
    • and ;
    • or;
    • not;
    • like  '%三';          //%意味着任意多少个字符,_表示跋扈单个字符

    业务调控语句:重在有commit、rollback和savepoint多个首要字落成

            字段  记录  表 约束(主键、外键、唯一键、非空、check、default、触发器)

    专门的职业案例

    转账案例:
    
    1.创建user表
        create table user(id int,name varchar(20), money int);
        insert into user values(1,'苍老师',2000),(2,'刘老师',100);
    2.转账sql
        update user set money=money 500 where id=2;
        update user set money=money-500 where id=1;
    

     

    学科回想:

    1.怎样是视图 实际上海电视台图正是一段sql语句

    2.视图中多少实际上都以原表中的数据,假如改换视图中的数据 原表数据跟着变动

    3.防止出现数据污染 能够通过丰硕 with check option 幸免现身数据污染

    4.视图平常只进行询问操作

    5.视图成效:子查询复用、限制数量的访谈

    6.索引index 须求调整 创造命令和删除命令

    7.约束:unique、not null、primary key、default foreign key,check

    8.事务 背下来四大特色: 原子性、一致性、隔绝性、长久性

    day01:

    数据库相关的sql:show databases create database db1 character set utf8 show create database db1 drop database db1;

    表相关: create table show tables; show create table t1; desc t1; rename table t1 to t2; alter table t1 change age age2 int; alter table t1 modify age long first/after id; add age int; drop age; drop table t1;

    insert update delete select

    day02:

    1.主键 自增 not null 注释:comment

    2.去重 distinct

    3.事务

    4.sql分拣 ddl 数据定义语言 create alter drop truncate:删除表内全部数据,内部贯彻原理:先删除表再创制三个新表 试行功能高 dml 数据操作语言 insert update delete select 支持专业 dql 数据查询语言:select tcl 事务调控语言:begin commit rollback dcl 数据调整语言:调整权限

    5.数据类型 整数: int bigint 浮点数: double decimal(m,d)

    6.字符串: char varchar text

    7.日期:date time datetime timestamp

    day03:

    聚合函数:sum count avg min max

    字符串:charlength instr(x,y) locate(x,y) insert(str,begin,length,newStr) lower upper left right substring(str,begin,length) trim() replace(str,old,new); repeat(str,2); reverse

    日期相关:now date(now()) time(now()) extract(year from now()) month day time hour second minute dateformat(now(),'%Y-%m-%d %H-%i-%s') strtodate('','')

    数学:  - * / % mod(2,3)
    数学函数: floor  round() rand()
    

      1.3 内一而再和外接连

    DDL语句

        2、数据库是什么操作数据的

    练习

    1.案例:创建一张表customer2,id number(4),
    name varchar2(50),password varchar2(50)
    ,age number(3),address varchar2(50),修改
    customer2表的时候设置主键约束
    pk_id_name_cus2修饰id和name列。
    
    
    
    
    2.案例:创建一张book3表,id number(4),
    name varchar2(50),author varchar2(50),
    pub varchar2(50),numinput number(10)。
    修改book3的时候,设置主键约束
    pk_id_name_b3修饰id和name列,设置唯一约束uq_author_pub_b3修饰author和pub列
    
    
    
    3.案例:删除temp中的唯一约束uk_name_pwd
    
    4.案例:在book表中author和pub列上添加索引index_author和index_pub
    
    
    5.案例:删除book中在pub和author上的索引
    
    
    6.案例:创建一个视图emp_view1,查询emp表中所有的数据,查询语句作为视图emp_view1
    
    
    7.案例:创建一个视图dept_view,查询dept表中所有的数据,查询语句作为视图dept_view
    
    
    8.案例:创建一个视图emp_view2,查询emp表中所有员工的编号,姓名,职位,工资,上级领导的编号以及工资的等级,该等级的最低工资和最高工资,查询语句作为emp_view2
    
    
    9.案例:查询emp表中10,20号部门员工的编号,姓名,职位,工资,所属部门的编号,使用查询语句来修改视图emp_view1
    
    
    10.案例:删除视图emp_view1,emp_view2
    

        >内连接:

    DDL语句是操作数据库对象的说话,包蕴成立create、删除drop、修改alter数据库对象。

            insert、update、delete、T-Sql、存款和储蓄进度、函数、触发器

            select  t1.id,t1.name,t1.age,t2.score  from table1_name t1  join table2_name t2 on t1.id=t2.id

    常见数据库对象

        3、数据库是哪些突显数据的

            或:

    对象名称

    对应关键字

    描述

    table

    表是数据库存储的逻辑单元,以行和列的形式存在;列是字段,行就是一条数据记录

    数据字典

     

    就是系统表,存储数据库相关信息的表,系统表里的数据通常有数据库系统维护。系统表结构和数据,开发人员不应该手动修改,只能查询其中的数据

    视图

    view

    一个或多个数据表里的数据的逻辑显示,视图就是一张虚拟的表,并不真正存储数据

    约束

    constraint

    执行数据检验规则,用于保证数据完整性的规则

    索引

    index

    用于提高查询性能,相当于书的目录

    函数

    function

    用于完成一个特定的计算,具有返回值和参数

    存储过程

    procedure

    完成某项完整的业务处理,没有返回值,但可通过传出参数将多个值传个调用环境

    触发器

    trigger

    相当于一个事件的监听器,当数据库发生特定的事件后,触发器被触发,完成响应处理

            select(着重的严重性)

            select  t1.name,t1.age,t2.score  from table1_name t1 , table2_name t2 where t1.id=t2.id

    上边的对象都得以因而用create、alter、drop完结有关的创办、修改、删除操作。

    ——数据库是哪些消除多少存储难题的

        >外连接:

    常用数据类型

    表的相干数据

            select  t1.id,t1.name,t1.age,t2.score  from table1_name t1  left join table2_name t2 on t1.id=t2.id    //左连接

    列类型

    说明

    tinyint/smallint/mediumint int(integer)/bigint

    1字节、2字节、3字节、4字节、8字节整数,又可分有符号和无符号两种。这些整数类型的区别仅仅表现范围不同

    float/double

    单精度、双精度浮点类型

    decimal(dec)

    精确小数类型,相当于float和double不会产生精度丢失问题

    date

    日期类型,不能保存时间。当Java里的Date对象保存到该类型中,时间部分丢失

    time

    时间类型,不能保存日期。当Java的Date对象的保存在该类型中,日期部分丢失

    datetime

    日期、时间类型

    timestamp

    时间戳类型

    year

    年类型,仅保存年份

    char

    定长字符串类型

    varchar

    可变长度字符串类型

    binary

    定长二进制字符串类型,它以二进制形式保存字符串

    varbinary

    可变长度的二进制字符串类型,二进制形式保存字符串

    tingblob/blob

    mediumblob/longblob

    1字节、2字节、3字节、4字节的二进制大对象,可存存储超图片、音乐等二进制数据,分别可存储:255/64K/16M/4G的大小

    tingtext/text

    mediumtext/longtext

    1字节、2字节、3字节、4字节的文本对象,可存储超长长度的字符串,分别可存储:255/64K/16M/4G的大小的文本

    enum(‘val1’, ‘val2’, …)

    枚举类型,该列的值只能是enum括号中出现的值的之一

    set(‘value1’, ‘value2’, …)

    集合类型,该列的值可以是set中的一个或多个值

        字段(列)

            或:

    Ø 常用查询

            一个事物的某叁个静态特征(属性)。

            select  t1.id,t1.name,t1.age,t2.score  from table1_name t1 right join table2_name t2 on t1.id=t2.id    //右连接

    MySQL停止符是“;”停止。

        记录(行)

            select  t1.id,t1.name,t1.age,t2.score  from table1_name t1 full join table2_name t2 on t1.id=t2.id    //全连接,MySQL不支持!

    1、    显示全部数据库

            字段的结缘,表示的是三个切实的事物

       1.4 数据库备份和苏醒

    show databases;

        表

        a. 备份  

    2、    删除数据库

            记录的构成,表示的是大同小异类型事物的群集

          mysqldump -u root -p123 database_name>d:myDBdemo.sql 

    drop database dbName;

        表和字段、记录的涉及

        b. 恢复

    3、    创立数据库

            字段表示的是事物的性格

           mysql -u root -p123 database_name<d:myDBdemo.sql

    create database [if not exists] dbName;

            记录表示的是东西自己

          或:

    中括号部分可选的,推断该数额不设有就创办

            表是事物的汇集

          步向供给还原到的目标数据库;

    4、    切换、使用钦定数据库

     

          source d:myDBdemo.sql

    use dbName;

        列

     

    5、    呈现当前利用数据库全体的表对象

            字段的另一名称

    二、基本表的创制

    show tables;

        属性(列)

      2.1 创建表

    6、    显示表结构describe(desc)

            字段的另一种称谓

       数据类型:int,char,varchar,text(字符串类型),blob(字节类型);double(5,2)表示最多5位,其中2位小数。

    desc tableName;

        元组(行)

        create table 表名

    7、    创立一张表

            行、记录的另一种称谓

        (

    create table user (

     

          字段名1 数据类型 [not null] [默认值],

            --int 整型

    ——MySQL数据库的下载和装置

          字段名2 数据类型,

            uId int,

    设置到位后装置数据库字符集为UTF-8:
        查看字符集:show variables like 'character%';
        修改字符集:
            打开my.ini文件,在ini文件中#意味着注释。
            添加:default-character-set=utf8
                      character-set-server=utf8
        修改形成后重启服务器。

          字段名3 数据类型

            --小数

    1、MySQL安装成功后会在七个目录中积攒文件
        >   D:Program FilesMySQL Server 5.6
            DBMS管理程序
        >   C:ProgramDataMySQL Server 5.6data
            DBMS数据库文件,卸载数据库时不会删除该目录,须要协调手动删除。

        );

            uPrice decimal,

    2、MySQL首要文件
        >   D:Program FilesMySQL Server 5.6binmysql.exe
            顾客端程序,用来操作服务器,但必需保障服务器已经起步技艺接二连三数据库。
        >   D:Program FilesMySQL Server 5.6binmysqld.exe
            服务器程序,必得先运维它,然后客户端能力三番两次服务器。
        >   D:Program FilesMySQL Server 5.6binmy.ini
            服务器配置文件。

      例如:

            --普通长度文本,default设置暗中同意值

    3、C:ProgramDataMySQLMySQL Server 5.6data
        该目录下的每贰个索引都表示二个数据库,举个例子该目录下有三个mysql目录,表达DBMS中有一个名称为mysql的databases。
        在各类数据库目录下会有0~N个扩充名叫frm的文件,每种frm文件表示一个table,不要使用文本编辑器张开。

        create table student

            uName varchar(255) default ‘zhangsan’,

    4、my.ini
        配置MySQL的端口:默认为3306,
        配置字符编码:
            *   [client]下安顿顾客端编码:default-character-set=utf8
            *   [mysqld]下安顿服务器编码:character-set-server=utf8
        配置二进制数据大小上限:
            *   在[mysqld]下配置:max_allowed_packet=8M

        (

            --超长文本

    5、导出数据库及数码
        mysqldump -uroot -pAdmin123 mydb3 >f:sql1.sql

          stu_num int auto_increment,  //自增量

            uRemark text,

    ——MySQL数据库基本操作

          stu_name char(10) not null,

            --图片

    1、服务器的运转与结束
        在services中运行或终止。
        1)开启服务:net start mysql
        2)关闭服务:net stop mysql
        服务器:向来处在监听状态,等待接受命令
    2、MySQL客商端登陆
        mysql -uroot -p123 -hlocalhost
        >   -u:表示客商名
        >   -p:表示密码
        >   -h:表示主机(IP地址)
            *   root客户得以采用任性IP,普通客户则绑定IP。
    3、退出顾客端
        exit、quit
    3、查看数据库
        查看所有数据库:show databases;
        information_schema:提供访谈数据库元数据的方法。
        mysql:与数据库系统服务有关的数据。
        performance_schema:采摘服务器数据库品质的参数
        test:客户测量检验表。
                
    查看全体数据库:show databases;
    切换成当下数据库:use 数据库名;
    查看当前数据库中全部表:show tables;
    查询某表中的数据:select * from 表名;

          stu_gender char(2),

            uPhoto blob,

    ——处理数据库

          stu_score int,

            --日期

    1、数据库相关概念
        1)数据库 DataBase
            分类:
                针对于系统数据库
                    information_schema
                    mysql
                    performance_schema
                        用于帮忙数据库系统符合规律运转的数据库。
                客商数据库:
                    针对于特定类型供给所创制的数据库
            组成:
                逻辑结构:
                    数据库汉语件的团队结构。
                物理结构:
                    存款和储蓄在磁盘上的文书结构。
        2)数据库管理类别 DBMS
            DataBase Management System
            管理数据库的平台:
            服务器
            客户端

          primary key(stu_num),  //主键

            uBirthday datetime

    2、管理办法
            1)可视化管理
                比方navicat管理数据库
            2)SQL语言管理
                Structured Query Language
                针对于数据库操作的语言,程序开拓进度中所供给的言语。
                分类:
                    DDL:Data Description Language,数据定义语言
                        用于创建,从无到有。

          foreign key(stu_name) references anotherTable_name(stu_name)  //外键

    );

                        对数据库或表的组织进行操作。

        );

    8、    子查询建表方法

                    DML:Data Manipulation Language,数据操作语言
                        操作数据库,举例增加和删除改。
                        insert  delete  update 

      2.2 常用约束

    局地列名相配形式:

                    DQL:Data Query Language,数据查询语言
                        select  查询

          主键约束: primary key(字段名);  //或在概念字段时直接在背后扩张 primary key

    create table userInfo (

                    DCL:Data Control Language,数据调控语言
                        对客商的创造及授权。
                        revoke  create  table  from  user1

        外键约束: foreign key(字段名) references 表名(字段名);

    name varchar(20),

                    DAC:Data Administrate Command,数据管理命令。

        非空约束: 字段名 数据类型 not null

    sex char

                    TCC:Thing Control Command,事务调整命令。

        独一性约束: 字段名 数据类型 unique

    )

    3、数据库的田间处理表明
        1)创设:create database 数据库名;    创造在暗中同意data目录下。
        2)删除:drop database 数据库名;

        默认约束: 字段名 数据类型 default 默许值

    as

    ——管理表

        自增量: 字段名 数据类型 auto_increment  //暗中同意初阶值为1,增量为1;如需从100始发,能够安装为auto_increment=100

    select name, sex from user;

    1、表的相关概念
        关全面据库(Relational DataBase, GranTurismoDB):正是基于关系模型的数据库,在管理器中,关周到据库是数量和数据库对象的结缘关系型数据库基础数据是数据表。

      2.3 修改表

    地点的列名和子查询的列名以及项目要相应

    2、实体
        数据表是由行row和列column组成的二维表,每行描述多个实体,数据表中的列日常叫做字段,他表示数据表中寄存实体的共有属性。
        属性值的不等代表分化的实业。
        数据表中蕴藏的数据就是具备差异性质的的不及实体的汇合。

        alter table 旧表名 rename 新表名  //修改表名

    全方位列超级模特式:

    3、数据表的保管
        设计某类实体具备什么等属性(字段)、表结构
            类似于规划类,该类具备啥等属性。
            依据项目其实需求布置如何表,每一种表包蕴哪些字段。
        对质量有如何限定条件——约束。

        alter table 表名 modify 字段名 数据类型;  //修改字段数据类型

    create table userInfo

        数据类型:
            整型:
                int
                    占4个字节。
                tinyint
                    占1个字节,在数据库优化的时候能够选择tinyint。
            浮点型:
    新葡亰496net:MySQL学习笔记一,MySQL学习笔记。            float / double
                    double(5, 2)表示最多5位整数,个中必得有2位小数,即最大值为999.99
            浮点型:
                decimal(6,2)
                    用于进行十进制运算,正确度高,不会放弃二进制数据,常用来表示金额。
                    一共七位数,小数占2位。
                    此时decimal占8个字节。
                    在陈设数据库时要留神不要浪费空间。 
            日期:
                date:
                    占3个字节。
                    日期类型,不可能保留时间
                    格式:YYYY-MM-DD
                    范围:1000-01-01 到 9999-12-31
                    借使超过范围,则存款和储蓄0000-00-00
                time:
                    占3个字节。
                    时间等级次序,不可能保留日期
                datetime:
                    占8个字节。
                    日期、时间项目,即年月日时分秒
                timestamp:
                    占4个字节,何况能够象征年月日时分秒.
                    能够象征收交阿秒。
                    ts timestamp default CURRENT_TIMESTAMP(那是一个常量,表示系统当下时刻。)
                    因为timestamp也足以代表年月日时分秒,并且所需空间是datetime的二分之一,所以在规划数据库时能够用时间戳表示时间
                year:
                    表示年,占1个字节,范围是一九〇四-2155年,若无则0000。
            字符:
                char(m)
                    m指的是字符数,并非字节数。
                    定长字符串,数据长度相差钦赐长度,会自动补足到内定长度。
                    最大值为255。
                    一般用于保存时间等固定长度字符串。
                varchar
                    可变长度字符串类型,最大值为65535。
                    会单独行使四个字节保存字符串长度。
            大字符串类型(CLOB):(MySQL唯有)
                tinytext:2^8-1B  255
                text:2^16-1B  65535
                mediumtext:2^24-1B  3KB
                longtext:2^32-1B  4GB
            BLOB:(大字节类型)

        alter table 表名 change 旧字段名 新字段名 新数据类型  //修改字段名

    as

        注意:数据库优化
            当每一条记下都以定长数据时,会小幅的拉长数据库的搜寻功能。
            因为每一行的尺寸皆以永远的,所以寻找时的定址、寻址非常的慢。
            当存在数量浪费和频率升高二种景况还要设有是,以功用为准。(不能够浪费太多)
            时间与上空是一对争执体,无非是岁月换空间,恐怕空间换时间。
            当数码表中的某一列影响了总体进程并且不也许进展空间优化时,何况该列修改频率也不高,
            那么能够将该列单独收取存为一张表。
            在付出进度中,数据库优化往往是把频仍用到的音信囤积到一张表中,优先思虑寻找功效。
            偶尔用的新闻和相比攻陷空间的新闻,优先思索空间占有,单独存款和储蓄到别的一张表中。
            况且一般时间并不应用datetime存款和储蓄,而是采纳时间戳,因为datetime就算直观,但不便于总括,影响效能。

        alter table 表名 add 新字段名 数据类型  //增添字段

    select * from user;

    4、SQL管理表结构
        1)建表语法
            use 数据库名;
            create table [if not exists] 表名
            (
                id int not null,
                name varchar(20) not null
            );

        alter table 表名 drop 字段名  //删除字段

    一贯将全体表的门类和数据备份到新表userInfo中

        2)查看表结构
            desc t1;    description描述
            查看表结构。
            show create table t1;
            查看创造表的历程。

        alter table 表名 AUTO_INCREMENT=100  //设置自增量起初值为100

    9、    增多表字段

        3)列的特色
            是不是为主键
            是还是不是为空
            是不是为机关增进列
            是还是不是有暗许值

       2.4 删除表

    增添单列

            以上特征都属于数据表的约束

        drop table [if exist] 表名;

    alter table user add tel varchar(11) default ‘02012345678’;

        4)表字段修改
            修改字段定义:
                修改数据类型用modify
                alter table 表名
                modify 字段名 数据类型;
     
            修改字段名用change
                alter table 表名;
                change 旧字段名 新字段名 新数据类型;
     
            增加字段:
                alter table 表名 
                add 字段名 数据类型 (完整性约束规范)

    三、视图的创设

    添增加列

                /*要是想在率先个职责扩大字段,须求在数据类型前边加上first*/
                /*假若想在钦定地方增加,能够选择after 字段名;   在该字段之后加多*/

        create view view_name(字段名,字段名,字段名)

    alter table user

            删除字段:
                alter table 表名 drop 字段名;

        as <select查询语句>

    add (

            删除表:
                drop table 表名;

      例如:

    photo blob,

    5、管理约束
        概念:
            对四个表中的性质操作的限制叫做约束。
            约束是数据库提供的自动强制数据完整性的一种办法,它是经过定义列的取值准绳来保障数据的完整性。
        数据完整性:
            实体完整性:要求数据表中不可能冒出重复行(千篇一律数据行)
            域完整性:域,范围,其实便是性质,供给列的数据类型,取值范围,特定值等符合规定供给
            援引完整性:需要多个或两个以上表之间的涉及,关种类在数值上保持一致。
            自定义完整性:针对于具体表的切实规定。
        约束类型:
            1)主键约束
                primary key
                维护实体完整性
                该字段独一,而且不能够为null
                常常是未有专业含义的号码做主键
                含有主键的表叫做主键表

        create view stu_sub(stu_num,stu_name)  //制造视图

    birthday date

                主键经常都以整数,不提议利用字符串当主键(假使主键是用以集群式服务,能够虚构用字符串当主键)。

        as select stu_num,stu_name

    );

                主键的值一般不容许修改,除非本记录被去除。

          from student;

    上边就同期增添了多列字段

            2)外键约束
                foreign key
                维护引用完整性
                不是本表的主键,但却是另一个表的主键。
            问题:

        drop view stu_sub;  //删除视图

    10、    修改表字段

                借使删表,先删主键表如故先删外键表?

    四、触发器

    修改tel列

            答案:先删外键表

        create trigger trigger_name  //创立触发器

    alter table user modify tel varchar(15) default ‘02087654321’;

                假设先删主键表,会报错,因为那会变成外键表中的数码援用战败。

        on table(表名)

    修改tel列的岗位,在第一列呈现

                如若外键表存在,则主键表无法删除。

        for insert|delete|update

    alter table user modify tel varchar(15) default '02087654321' first;

            3)独一约束
                unique
                维护实体完整性
                和主键的差距:unique允许有且唯有五个null(Oracle中允许null 重复)

        as <sql_statement>(sql语句)

    修改tel列的职位,在内定列其后显得

                三个表中能够有五个unique列。

      例如:

    alter table user modify tel varchar(15) default '02087654321' after age;

            4)检查约束
                check
                维护数据完整性
                在MySQL中数据库引擎会深入分析check语句,不过会忽略check约束。
                所以有关字段范围的操作,能够在前后相继中限定。
            5)暗中认可约束
                default
                维护域完整性
            6)非空约束
                not null
                维护域完整性
                若是不加约束,默承认以为空。
            7)自动增进列
                auto_increment
                能够自行拉长的品类必需是整型
                默认从1开始
                借使想改动开始值,代码如下:
                create table 表名
                (
                    id int primary key auto_increment
                )auto_increment=20160001;
                那样就将自动增加的初叶值改为201四千1了。
                修改约束:
                    alter table 表名
                    auto_increment = 1001;

        create trigger student_backup  //学生备份表随学生表的变动而更动

    瞩目:alter modify不辅助一回修改多个列,可是Oracle补助多列修改

    6、怎么着设计主外键:

        on student        

    不过MySQL能够通过七个modify的方式达成:

        create table product

        for insert,delete,update

    alter table user

        (

        as

    modify tel varchar(15) default '02087654321' first,

            pid int not null default 0,

        begin

    modify name varchar(20) after tel;

            name varchar(10) not null default '',

          if((select count(*) from deleted) > 0)

    11、    删除钦点字段

            price int,

          begin

    alter table user drop photo;

            store int

            delete from student_backup

    12、    重命名表数据

        );

            where stu_name in(select stu_name from deleted)

    表重命名

     

          end

    alter table user rename to users;

        create table sale

          if((select count(*) from inserted) > 0)

    字段重命名

        (

          begin

    alter table users change name u_name varchar(10);

            sid int not null default 0,

            insert into student_backup

    alter table users change sex u_sex varchar(10) after u_name;

            pid int not null default 0,

            select *

    若果供给改换列名提议选用change,如若急需更换数据类型和显示地方能够使用modify

            salecount int default 0,

            from inserted

    13、 删除表

            saledate date default '0000-00-00'

          end

    drop table users;

        );  

        end

    drop删除表会删除表结构,表对象将空中楼阁数量中;数据也不会设有;表内的指标也海市蜃楼,如:索引、视图、约束;

    /*

           

    truncate删除表

    -- 创设外键表

    五、事务

    truncate都被当成DDL出来,truncate的效果与利益就是去除该表里的上上下下数额,保留表结构。也等于DDL中的delete语句,

    商品表中pid是商品编号,应该是并世无双的,在商品表中pid应该安装为主键,

      5.1 事务四大特点

    只是truncate比delete语句的进程要快得多。不过truncate不可能带条件删除钦命数量,只会去除全部的数额。要是去除的表有外键,

    在发售表中,只要迈出一件货色,就须求在出售表中增添一条记下,因为多个货色能够卖多次,

        原子性;

    剔除的快慢类似于delete。但新本子的MySQL中truncate的进程比delete速度快。

    据此该表中pid允许再一次,所以pid无法当做该表的主键,不过她在商品表中作为主键,

        一致性;

    Ø 约束

    就此pid能够看成sale表中的外键。

        隔离性;

    MySQL中约束保存在information_schema数据库的table_constraints中,能够透过该表查询约束音讯;

    */

        持久性。

    自律首要成就对数码的检察,保障数据库数据的完整性;借使有相互重视数据,保障该数据不被删去。

    7、SQL管理约束
        增多约束:
            创制表时加上
                非空约束
                    not null

      5.2 事务隔断等第

    常用五类约束:

                    一般不点名列为null值,因为不轻易相比与查询。

        赃读:二个事务A读取另三个事务B未提交的多少;

    not null:非空约束,钦定某列不为空

                    因为null是一系列型,比较时只能用特意的is null和is not null进行相比,费时费劲,如若利用运算符进行比较,则一律重临null,功用不高且不低价数据库优化(影响索引效果)。
                    由此在建表时,一般钦命not null default ’ ’ 大概default 0。

        不可重复读:贰个事务A读取另二个事务B提交后的数额(update);

    unique: 独一约束,钦点某列和几列组合的数据无法重复

                主键约束
                    primary key,主键暗许非空。
                独一约束
                    直接写
                缺省封锁
                    default '男'
                自动增加列
                    auto_increment
                    创立表后增加
                        格式
                            alter table 表名
                            add
                                constraint 约束名
                                具体约束表达;
                外键约束
                    格式
                        alter table 外键表名
                        add constraint 约束名    (fk_主键表_外键表_外键)
                        foreign key(外键)references 主键表(主键)
                    删除此之外键约束:
                        alter table 表名 drop foeign key 外键小名;

        虚读(幻读):一个事务A读取另二个事务B插入的数目(insert),前后不雷同。

    primary key:主键约束,钦赐某列的多寡不能重复、唯一

    ——数据库操作

        以上情状均为事务A已拉开,但未提交时发出!

    foreign key:外键,钦命该列记录属于主表中的一条记下,参照另一条数据

        增加和删除改中都不会并发table关键字。

        八个等级:

    check:检查,钦定贰个表达式,用于核准钦定数量

        增:
            1、insert [into] <表名> [(列明)] values<(值列表)>
                < >必写、[ ] 可选,最棒都写,方便移植。
                能够不钦点列名,可是值列表中值的逐个必需与表中字段顺序保持一致。
                能够钦赐列名,而且不依照数据库表中字段顺序插入,可是值要求和钦点列名保持一致。
            2、对于电动增加列的处理:
                1)可以钦定自动拉长列的数值。
                    insert into t1 values(10,'qq',21,2);
                2)即使不钦点,则根据近些日子列的最大值自动增添。
                    insert into t1 (name,age,class)values('dd',19,5);
                3)能够以内定自动增进列,赋值时赋null,依旧自动增加。
                    insert into t1 (id,name,age,class) values (null,'qq',21,2);
                4)不钦命列,並且自动拉长赋null。
                    insert into t1 values(null,'aa',21,2);
                只要插入值和插入列不包容,将在内定列。
            3、当存在暗中认可值时,有两种插入方式:
                1)内定全体值
                2)指定列,指定值
                3)使用default关键字来钦赐使用默许值。
            4、一遍性插入多行
                insert into 表名 values (值列表1),(值列表2),(值列表);

        1* read uncommitted :赃读,不可重复读,虚读都有一点都不小希望产生;

    MySQL不补助check约束,但能够使用check约束,而从未别的意义;

        改
            修改数据
                平时依据主键来修改,因为主键是独一的。
                语法
                    修改单列值:
                        update 表名
                        set 字段名 = 修改的值
                        where 字段名 = 值;

        2* read commited :幸免赃读。不可重复读,虚读都有希望产生;

    依靠约束数据列限制,约束可分为:

                    修改多列值:
                        update 表名
                        set 字段名1 = 值1,字段名2 = 值2
                        where 字段名 = 值;

        4* repeatable read :幸免赃读,不可重复读。虚读有极大恐怕发生;

    单列约束:每种约束只约束一列

                    多条件
                        where 字段名1 = 值1 and 字段名2 = 值2; 

        8* serializable :幸免赃读,不可重复读、虚读;

    多列约束:每种约束约束多列数据

        删
            delete from 表名
            where 删除条件
                删除表中数据,保留表结构。
                事务提交后才生效,不然回滚。
                如若有照拂的触发器,会重罚施行。

        品级越高,安全性越高,性能越差!

    MySQL中约束保存在information_schema数据库的table_constraints中,能够因此该表查询约束音信;

            delete from 表名
                删除表中全体数据,保留表结构,记录日志。
            
            truncate 表名
                删除表中数据,保留表结构。
                不记录日志,删除后不足复苏。
                删除后也就是保留表结构,全部意况上涨到最先。(无数据,相当于格式化)
                truncate属于DDL,数据定义语言。
        
            drop table 表名
                直接从数据库中删除表。

       5.3 查看和安装职业等级

    1、    not null约束

    ——单表查询

        查看当前事情隔开分离品级:select @@tx_isolation;  //dos命令

    非空约束用于确定保证当前列的值不为空值,非空约束只好出今后表对象的列上。

        1、查询和记录集的概念
            查询:在存活的数据表中过滤符合条件的音讯。
            记录集:查询的结果平常称为“记录集”,记录集日常是一个设想表。

        设置职业隔绝等第:set transaction isolation level 七个等第之一;  //dos命令

    Null类型特征:

        2、基本select查询语句
            语法格式:
                    select 列名 from 表名
                    where 查询条件表明式
                    group by 属性名1 having 条件表达式    -- 用于分组
                    order by 排序的列名 asc | desc;  -- 用于排序
            查询表中全数列:
                    select * from 表名;
                    查询全体列,顺序依照表的本来顺序展现。
                    select 列名2,列名1 from 表名,调治列名的依次。
            查询表中有的列:
                    select 列名1,列名2 from 表名 where 条件;
                    在询问全数记录的功底上过滤音讯。
                    条件大小顺序无法更换,必需扩大。
                    条件:
                            比较
                            钦点范围:between and  /  not between and
                                能够and四个规格
                            钦点集合:in  /  not in
                            相称字符:like  /  not like
                                %:相称大肆多少个字符
                                _: 相配任意八个字符
                                 [a-f]

        设置隔开分离品级,必需在拉开事务以前!

    富有的类其余值都得以是null,富含int、float等数据类型

                                    能够是字符列[a-f]中的大肆一个字符。

        

    空字符串“”是不等于null,0也不对等null

                                    --查询ename字段中第三个字符是A到F中自便三个单一字符的职工音信。

        

    create table temp(

                                        select * from emp

     

            id int not null,

                                            where ename like '_[A-F]%' 

            name varchar(255) not null default ‘abc’,

                                [a,f]

            sex char null

                                    能够是a或f的单一字符。

    )

                                    --查询ename字段中第贰个字符是A或F的职工消息。

    地点的table加上了非空约束,也得以用alter来修改或追加非空约束

                                        select * from emp

    扩张非空约束

                                            where ename like '_[A,F]%' 

    alter table temp

                                [^a-c]

    modify sex varchar(2) not null;

                                    不在字符列中的任性贰个字符。

    撤废非空约束

                                    --查询ename字段中第一个字符不在A到F的限制内的职员和工人音信。

    alter table temp modify sex varchar(2) null;

                                        select * from emp

    撤废非空约束,增加默许值

                                            where ename like '_[A-F]%'

    alter table temp modify sex varchar(2) default ‘abc’ null;

                            注意:相配的尺码必需用单引号括起来。(单引号代表字符串,双引号表示二个指标的名字)

    2、    unique

                            --倘使要查询% _ 通配符等特殊字符,可以选用:

    独一约束是钦定table的列或列组合不能够重新,保障数据的独一性。即便独一约束不一样意出现重复的值,不过可认为七个null

                                select * from emp

    同贰个表可以有七个唯一约束,三个列组合的羁绊。在创设独一约束的时候,固然不给独一约束名称,就暗许和列名同样。

                                    where ename like '%%%' escape ''

    独一约束不只可以够在三个表内创造,并且能够并且多表创设组合独一约束。

                                --个中escape关键字将''转变来“转义字符”,使 '' 之后的字符不再是当然意义。

    MySQL会给独一约束的列上私下认可制造三个独一索引;

                            是还是不是为空值:is null  /  is not null
                            多个查询条件:and  /  or                 

    create table temp (

            使用distinct关键字屏蔽重复数据:
                    select distinct 列名 from 表名;
                        对点名列屏蔽重复值。

            id int not null,

            使用limit关键字查询表中限定行:
                    select * from 表名 limit m,n
                    m是开局记录,从0起头,n为查询的记录数
                    当m为3时,从第4条记下初叶,展现五行。
                    不钦点起先地方时,暗许从记录第一行初叶。

            name varchar(25),

                公式:(当前页-1) * 每页记录数,得出的便是初始行

            password varchar(16),

        3、对查询结果开展排序
            select 列名 from order by 排序字段 排序格局
            order by 放在查询的结尾面。
            order by默许升序排序。
                    asc:升序    desc:降序
            还足以按多列进行排序,当个中三个行列值一样期按另一列排序(多门科目成绩)
                    order by sclass,sbirthday;    -- 先依据班级排序,当班级相同一时间,再遵照出生之日排。

            --使用表级约束语法,

    ——分组总括与多表关联合检查询
        1、聚合函数
            where中不能够包涵聚合函数。
            凡是聚合函数,重临的都是单值。
                sum
                avg
                max
                min
            以上各样聚合函数通用特点:
                select 聚合函数(列名) from 表名

            constraint uk_name_pwd unique(name, password)

                count
                    总计记录数,不过不记录null。
                    count(*)   count(列名)

    );

        2、分组查询
            --分组查询只可以彰显分组之后的总体音信,不可能显得组内部某一字段的音讯。
            语法:
                    select 字段列表 [聚合函数] from 表
                    [where 条件]
                    group by 字段列表
                    [having 筛选标准]
                    [order by 排序字段]

    代表顾客名和密码组合不可能重新

            单列分组:
                    对个中一列分组,对另一列进行总结。
                    查询项只满含分组列和计算列。
                    例:计算教师表中各岗位的平均年龄。
                            -- 计算教师表中各岗位的平均年龄

    累加独一约束

    新葡亰496net,                        select tjob,avg(tage) from t_teacher

    alter table temp add unique(name, password);

                            group by tjob;
                            计算学生表中各班级人数
                                -- 计算学生表中各班级人数

    alter table temp modify name varchar(25) unique;

                                select sclass,count(*) from t_student

    去除约束

                                group by sclass 

    alter table temp drop index name;

            多列分组:
                    对多列实行分组,对另一列进行总计。
                    对分组列按梯次进行分组总结,先对tjob进行分组,再对tsex进行分组。
                    select tjob,tsex,avg(tage) from t_teacher
                    group by tjob,tsex;
            HAVING:    
                使用having子句对分组音信重新过滤。
                筛选分组后的新闻。
                必得同盟group by使用。
                having语句能够依据select字段名进行过滤,能够用聚合函数进行过滤,不得以选拔小名和歪曲查询实行查询。

    3、    primary key

                having中不得不查询组的一体化新闻,但不可能查询组的详细音讯。
                 where必得写在having后边,顺序不可剖腹藏珠,不然运转出错。

    主键约束相当于独一约束 非空约束的三结合,主键约束列分歧意再度,也不允许出现空值;如若的多列组合的主键约束,

            对分组结果开展排序:
                order by放在查询语句的末段。

    那就是说这一个列都不允许为空值,况且结合的值不容许再度。

            select语句中查询列必得在聚合函数中或group by中。
                
        3、条件计算
            where
                针对于表中兼有音信进行筛选。
            having
                针对于分组后的新闻实行筛选。

    每一种表最三只同意二个主键,建设构造主键约束能够在列品级成立,也足以在表等第上创立。MySQL的主键名总是PPAJEROIMATiguanY,

        4、多表关联合检查询
            1、使用多表关联合检查询的原由:
                    查询的新闻布满在多个表中。
                    多少个表多个三番五次条件,多少个表多个三翻五次条件。
            2、交叉连接
                    获得的结果是二个笛Carl积,是八个表记录的接力乘积,列是多少个列表的联谊。
                    一旦表名内定了外号,则全体询问必得运用外号。
            3、内连接
                    语法
                            join on法
                                select 字段名
                                from 表1 inner join 表2
                                on 表1.字段名 = 表2.字段名
                                where 筛选标准
                                order by 排序列
                                条件运算符 = 或 <>
                            说明
                                列名可以试表1和表第22中学的大肆字段。
                                若查询列出现共有字段则必得钦点该字段取自哪个表,格式是:表名.列名。
                                表1.列名 = 表2.列名:使用四个表共有的字段建设构造联系。
                                能够钦赐表的别称,一旦钦定别称后,全部出现表名的地点都要动用小名。
                            where条件法
                                select 字段名 from 表1,表2
                    步骤总括
                        列出查询字段
                        阅览询问字段在如何表中
                        提取个表的公物字段作为连接条件
                        深入分析条件
            4、外连接
                    左外连接
                        何人做主表,哪个人的消息全体显得,若是音信不兼容,则右表新闻体现null。
                            语法
                                select 字段名 from 左表 left [outer] join 右表
                                    on 左表.列名 条件运算符 右表.列名
                                    where 条件
                                含义
                                    左外连接是以左表为主表,去老是右表(从表),结果聚集包蕴主表全部数据行,假使主表的某行在从表中没
                                    有非凡时,则从表的挑选列为null值。
                                    例如:
                                            以学员表作为主表,连接战表表。
                    右外接连
                        主从表与左外连接相反。
                        
    ——子查询
        1、子查询的概念
            假诺一个select语句能够回到贰个单值或一列值并嵌套在三个select、insert、update或delete语句中,则称之为子查询或许
            内层查询,而带有多个子查询的语句则变为主查询或外层查询。
            试行进度:
                先实行子查询,再推行主查询。
            难点浅析:
                查询出破壳日期小于雷军的学生消息:
                    第一步:
                            分析查询字段-学生表的有所音讯字段。
                            select * from student
                    第二部:
                            分析查询条件,出出生之日期小于小米开创者雷军的出生日期。
                            where birthday < (雷布斯的出出生之日期)
                    第三部:查询雷军的出生日期。
                            select birthday from student
                            where name = '雷军'
        2、子查询的归类
            1)相比较子查询
                带有比较运算符的询问
                    单值相比较查询
                        where id = (子查询)
                    批量相比子查询
                        新葡亰496net 1
                        语法:
                            select 字段名 from 表名
                            where 字段名 比较运算符 any | all ( 子查询 )
                        说明:
                            在包蕴any或all运算符的子查询中,子查询的结果是一个集中,在动用时必需同不经常候选取比较运算符。
                        示例:
                            在学员表中询问比2班中某一学员出破壳日期小的学生音讯。
                                select * from student
                                where birthday < any
                                (
                                    select birthday from student
                                    where class = 2
                                );
            2)带有in或not in的子查询
                语法:
                    select 字段名 from 表名
                    where 字段名 [not] in (子查询)
                    示例:
                        查询选修了学科的上学的小孩子信息
                        select * from student
                        where sid in 
                        (
                            select sid from score
                        )
            3)连接查询和子查询的下结论
                连接查询:
                    查询的字段存在于三个表中
                        首先深入分析查询字段
                        再查看查询字段遍及的表
                        然后寻觅表之间的集体字段(建设构造连接的基准)
                        末了再剖析任何标准化
                子查询:
                    查询的字段在同八个表中
                        首先深入分析查询字段
                        再深入分析查询条件
                        然后找寻查询条件用到的字段
                        再分析该字段关联的表

    当创制主键约束时,系统暗中同意会在所在的列和列组合上创设相应的无与伦比索引。

    ——函数
        具备一定作用的法子    
        常用在成立表和查询表中。
        
        mod(x,y)
        rand()
        round(x,y)

    列模式:

        curdate()
        curtime()
        now()
        datediff(expr1,expr2)

    create table temp(

        concat(str1,str2)
        lower(str)
        upper(str)
        length(str)
        trim(str)
        replace(str,oldstr,newstr)
        substring(str,pos,len)

        /*主键约束*/

        database()
        version()
        user()

        id int primary key,

        常用函数  

        name varchar(25)

            -- database()

    );

            -- 重临当前数据库名

    create table temp2(

            select database();

        id int not null,

     

        name varchar(25),

            -- version()

        pwd varchar(15),

            -- 重返当前数据库版本

        constraint pk_temp_id primary key(id)

            select version();

    );

     

    构成方式:

            -- user()

    create table temp2(

            -- 重临当前报到客商名

        id int not null,

            select user();

        name varchar(25),

     

        pwd varchar(15),

            -- inet_aton(ip)

        constraint pk_temp_id primary key(name, pwd)

            -- 重临IP地址的数字代表格局

    );

            select inet_aton('192.168.1.127');

    alter删除主键约束

     

    alter table temp drop primary key;

            -- inet_ntoa(ip)

    alter增添主键

            -- 再次回到数字代表的IP地址

    alter table temp add primary key(name, pwd);

            select inet_ntoa(3232235903);

    alter修改列为主键

     

    alter table temp modify id int primary key;

            -- password(str)

    设置主键自增

            -- 再次回到字符串str的加密版本,加密是单向的(不可逆),适用于MySQL数据库的顾客密码加密,42位牢固长度。

    create table temp(

            select password('aaa');

            id int auto_increment primary key,

     

            name varchar(20),

            -- md5(str)

            pwd varchar(16)

            -- 再次来到字符串str的MD5值,该值以三拾个人十六进制数字的二进制字符串的样式再次来到。

    );

            select md5('aaa');

    auto_increment自增方式,设置自增后在插入数据的时候就无需给该列插入值了。

        字符串函数

    4、    foreign key 约束

            -- concat(str1,str2)

    外键约束是保障三个或四个表之间的参谋完整性,外键是营造于一个表的三个字段或是七个表的三个字段之间的参照关系。

            -- 连接字符串,再次来到三个子串。

    也便是说从表的外键值必须在主表中能找到只怕为空。

            select concat('aaa','222');

    当主表的记录被从表参照时,主表的笔录将不一样意删除,假若要去除数据,须要先删除从表中正视该记录的数目,

        

    下一场才足以去除主表的多少。还应该有一种正是级联删除子表数据。

            -- insert(str,pos,len,newstr)

    静心:外键约束的参照列,在主表中引用的只可以是主键或独一键约束的列,假定援引的主表列不是独一的记录,

            -- 将字符串str从第pos地点上马的len个字符替换为新串newstr

    那正是说从表援用的多少就不明确记录的职位。同叁个表能够有多少个外键约束。

            select insert('aaaaaa',1,4,'ss')

    创建国门外键约束:

            -- 借使新串长度不足len,则将len长度的字符串全体调换为newstr

    主表

            select insert('aaaaaa',1,4,'ss')

    create table classes(

            str = ssaa

            id int auto_increment primary key,

            -- 即使newstr长度超过len,则将newstr全体布置钦命地点,尽管超出长度。

            name varchar(20)

            select insert('aaaaaa',1,4,'sssss')

    );

            str = sssssaa

    从表

            

    create table student(

            -- lower(str)

            id int auto_increment,

            -- 转变到小写

            name varchar(22),

            select lower('AAA');

            constraint pk_id primary key(id),

            

            classes_id int references classes(id)

            -- upper(str)

    );

            -- 转换来大写

    一般性先建主表,然后再建从表,那样从表的参照援引的表才存在。

            select upper('aaa');

    表品级创立外键约束:

            

    create table student(

            -- length(str)

            id int auto_increment primary key,

            -- 获取字符串长度

            name varchar(25),

            select length('aa');

            classes_id int,

            

            foreign key(classes_id) references classes(id)

            -- char_length(str)

    );

            -- 重临字符串str的长度

    地点的创造外键的艺术未有一点点名约束名称,系统会暗许给外键约束分配外键约束名称,命名称叫student_ibfk_n,

            select char_length('aa');

    里头student是表名,n是当前封锁从1发端的大背头。

            

    钦赐约束名称:

            -- lpad(str,len,padstr)

    create table student(

            -- 重返字符串str,其右边手由字符串padstr填补到len字符长度。

            id int auto_increment primary key,

            select lpad('aaaaa',5,'c');

            name varchar(25),

            -- 当str不餍足len长度时,才会使用padstr填补,假使str逾越len长度限制,则不开展增加补充。

            classes_id int,

            

            /*点名约束名称*/

            -- rpad(str,len,padstr)

            constraint fk_classes_id foreign key(classes_id) references classes(id)

            -- 与lpad相反。

    );

            

    多列外键组合,必需用表等级约束语法:

            -- trim(str)

    create table classes(

            -- 去掉字符串两侧的空格。

            id int,

            select trim('  a');

            name varchar(20),

            

            number int,

            -- repeat(str,count)

            primary key(name, number)

            -- 重回str重复count次的结果。

    );

            select repeat('a',5);

    create table student(

            

            id int auto_increment primary key,

            -- replace(str,from_str,to_str);

            name varchar(20),

            -- 用字符串to_str替换字符串str中有所的字符串from_str

            classes_name varchar(20),

            select replace('aabbccdd','bb','ss');

            classes_number int,

            

            /*表等级联合外键*/

            -- substring(str,pos,len)

            foreign key(classes_name, classes_number) references classes(name, number)

            -- 重临从字符串str的pos地点起len个字符长度的子串。

    );

            select substring('aaabbbccc',3,2);

    除去外键约束:

        时间函数

    alter table student drop foreign key student_ibfk_1;

            -- curdate()

    alter table student drop foreign key fk_student_id;

            -- 重回当后天子 年月日

    充实外键约束

            select curdate();

    alter table student add foreign key(classes_name, classes_number) references classes(name, number);

            

    自引用、自关联(递归表、树状表)

            -- curtime()

    create table tree(

            -- 重回当前光阴 时分秒

            id int auto_increment primary key,

            select curtime();

            name varchar(50),

            

            parent_id int,

            -- now()

            foreign key(parent_id) references tree(id)

            -- 再次回到当前的日期和时间

    );

            select now();

    级联删除:删除主表的数目时,关联的从表数据也删除,则须要在创设外键约束的末端扩大on delete cascade

            

    或on delete set null,前面一个是级联删除,前面一个是将从表的关联列的值设置为null。

            -- week(date)

    create table student(

            -- 重回内定日期为一年中的第几周

            id int auto_increment primary key,

            -- 其中date可以是date time datetime timestamp

            name varchar(20),

            select week(timestamp(now()));

            classes_name varchar(20),

            

            classes_number int,

            select timestamp(curdate())

            /*表品级联合外键*/

            

            foreign key(classes_name, classes_number) references classes(name, number) on delete cascade

            -- year(date)

    );

            -- 再次来到钦命日期的年份

    5、    check约束

            select year(now());

    MySQL能够应用check约束,但check约束对数据印证未有任何功能。

            

    create table temp(

            -- hour(time)

            id int auto_increment,

            -- 重返日期的小时值

            name varchar(20),

            select hour(now());

            age int,

            

            primary key(id),

            -- minute(time)

    /*check约束*/

            -- 再次来到time的分钟值

    check(age > 20)

            select minute(now());

    );

            

    地点check约束供给age必得大于0,但尚无其他效用。但是创制table的时候从不其余不当或警示。

            -- monthname(date)

     

            -- 再次来到date的月份名

    Ø 索引

            select monthname(now());

    目录是贮存在在情势(schema)中的一个数据库对象,索引的成效就是巩固对表的追寻查询速度,

            

    目录是透过连忙访谈的艺术来拓宽高效稳定数据,进而缩小了对磁盘的读写操作。

            -- date_format(date,fmt)

    目录是数据库的三个目的,它不可能独立存在,必需对某些表对象进行依赖。

            -- 重回按字符串fmt格式化日期date的值

    提示:索引保存在information_schema数据Curry的STATISTICS表中。

            -- %a:缩写星期名

    始建索引形式:

            -- %b:缩写月名

    机动:当表上定义主键约束、独一、外键约束时,该表会被系统活动增添上索引。

            -- %d:日(05,06)

    手动:手动在相关表或列上扩张索引,升高查询速度。

            -- %e:日(5,6)

    去除索引格局:

            -- %H:24小时制(05,06)

    自行:当表对象被剔除时,该表上的目录自动被去除

            -- %h:12小时制(05,06)

    手动:手动删除钦命表对象的连带列上的目录

            -- %k:24小时制(5,6)

    目录类似于书本的目录,能够飞速稳定到相关的数据,二个表能够有多少个目录。

            -- %l:12小时制(5,6)

    成立索引:

            -- %s:秒

    create index idx_temp_name on temp(name);

            -- %S:秒

    组合索引:

            -- %Y:年,4位

    create index idx_temp_name$pwd on temp(name, pwd);

            -- %y:年,2位

    除去索引:

            select date_format(now(),'%yy年%M月%d日');

    drop index idx_temp_name on temp;

            

    Ø 视图

            -- date_add(date,interval exp type)

    视图正是二个表或八个表的查询结果,它是一张虚构的表,因为它并不能够积攒数据。

            -- 重临四个日期或时间值加上上叁个年华间隔的年华值。

    视图的魔法、优点:

            -- year:年 -- YY

    界定对数码的拜望

            -- month:月 -- MM

    让复杂查询变得简单

            -- day:日 -- DD

    提供数据的独立性

            -- hour:时 -- hh

    能够成功对同一数量的不等突显

            -- minute:分 -- mm

       

            -- second:秒 -- ss

    始建、修改视图

            select date_add(now(),interval 1 year);

    create or replace view view_temp

            date = 2017-04-05 12:29:19

    as

            

        select name, age from temp;

            -- datediff(expr1,expr2)

    一般说来大家并不对视图的数额做修改操作,因为视图是一张设想的表,它并不存款和储蓄实际多少。借使想让视图不被改造,可以用with check option来变成限制。

            -- 重临开头时间expr1和告竣作时间间expr2之间的天命。

    create or replace view view_temp

            select datediff('2012-08-08',now());

    as

            -- 注意:expr必得是专门的学问时间格式。

        select * from temp

     

    with check option;

        数学函数

    修改视图:

            -- abs(x)

    alter view view_temp

            -- 重返x的相对值

    as

            select abs(-1);

        select id, name from temp;

     

    剔除视图:

            -- ceil(x)

    drop view view_temp;

            -- 重返一点都不小于x的纤维整数值

    展示创设语法:

            select ceil(3.8);

    show create view v_temp;

     

    Ø DML语句

            -- floor(x)

    DML主要针对数据库表对象的数据来讲的,一般DML完毕:

            -- 再次回到非常的小于x的最大整数值

    计划新数据

            select floor(3.9);

    修改已增加的数据

        

    去除没有必要的数目

            -- mod(x,y)

    1、    insert into 插入语句

            -- 返回x/y的模(取余)

    insert into temp values(null, ‘jack’, 25);

            select mod(5,3);

    主键自增能够不插入,所以用null代替

            select round(1.5,0);   该方法能够四舍五入取整数。

    指定列

            

    insert into temp(name, age) values(‘jack’, 22);

            -- rand()

    在外表前面带括号,括号中写列名,values中写钦命列名的值就能够。当省略列名就代表插入全部数量,

            -- 重回三个0-1.0里面的即兴浮点数,(0 <= x <=1.0)

    注意插入值的次第和列的次第须求保持一致。

            select rand();

    Set情势插入,也能够钦定列

            

    insert into temp set id = 7, name = 'jason';

            -- round(x,y)

    MySQL中外键的table的外键援引列能够插入数据足以为null,不参照主表的数据。

            -- 再次来到参数x的四舍五入的y位小数的值

    使用子查询插入数据

            -- 只四舍五入小数位,不取整

    insert into temp(name) select name from classes;

            select round(1.2338,3);

    多行插入

            

    insert into temp values(null, ‘jack’, 22), (null, ‘jackson’ 23);

            -- truncate(x,y)

    2、    update 修改语句

            -- 重临数字x截断为y位小数的结果

    update首要成就对数码的修改操作,能够修改一条或多条数据。修改多条或钦点条件的数据,要求用where条件来成功。

            select truncate(1.222333,5);

    修改全体数量

    ——索引

    update temp set name = ‘jack2’;

        索引管理
            概念:
                    索引是白手起家在表上,是对数据库表上的一列也许多列举办排序的一种结构
                    作用:
                            升高对数码库表查询的进程。
                            相当于依赖拼音或部首查找某字在词典中的地点——词典的目录。
                            对于数据库来说,创制索引,就是将数据库中器重字的岗位树立目录,方便于查找。
                    索引的仓库储存类型:
                            BTREE:
                            HASH:
                            不相同的积存引擎选择索引的储存类型区别。
                            查看数据库引擎:
                                    show engines;
                            每种引擎协助的功效不一,所以索引的存放类型也比不上,innodb存款和储蓄类型是BTREE
            使用索引的带价:
                    1、索引供给占用数据表以外的情理存储空间。
                    2、创制索引和维护索引要费用时间(数据库进行的操作,并不是技师举行的操作)
                              只要插入也许去除数据,索引都要修改。(能够整个刨除,然后重新建表,速度略快)
                    3、当对表举办革新操作时,索引必要被重新建立,裁减数据的保证速度。
            索引类型:
                    1、普通索引
                            能够在数据表的放肆列建立该索引。
                            创设情势:
                                1)创立表时成立索引
                                    create table 表名
                                    (
                                        [字段表达]
                                        index [索引名] ( 列名 [长度] )
                                    );
                                2)修改表时增加索引
                                    alter table 表名
                                    add index[索引] (列名 [长度])
                                3)成立表后创造索引
                                    create index 索引名 on 表名(列名[长度])
                            注意:
                                    假若要创设索引的列是char或varchar类型,长度能够低于实际尺寸。
                    2、独一索引
                            制造索引列的独一值
                            相对于经常索引,独一索引创立索引时在index前增进unique
                    3、主键索引
                            主键索引是一种特别的独一索引,差异意为null。
                            主键索引是在给表设置主键时自动创设。
                            二个表只可以有一个主键,即只可以有二个主键索引。
                    4、全文索引
                    5、单列索引和多列索引
                            单列索引:
                                    索引创建在表中的某一列上。
                            多列索引:
                                    索引创建在表中的五个列上
                                    例如:
                                            create index 索引名 on 表名(列名1[长度],列名2[长度])
                                            create index index_id_name on t1(id,name(2))
                                                将三个列作为贰个索引,可以提升查询功能。
                    6、删除索引
                        无法修改索引,只好删除索引,更创设。
                            alter table 表名
                            drop index 索引名;
                        或者
                            alter table 表名
                            drop index 索引名 on 表名;
                        例如
                            alter table t1
                            drop index index_id;
                    7、构建目录的原则
                        最契合创设目录的列是where子句中的列。
                        索引列的值不雷同的越来越多,索引效果越好
                                举例:不建议在x性别列建索引,因为重新值太多。
                        使用短索引
                                取字符类型的前多少个字符。
                        利用最左前缀
                                多列索引
                                create index index_id_name on t1(id,name(2))
                                    当创造了index_id_name索引时,查询id可以,查询id,name也可以。
                                    只假设左侧包车型大巴索引列就可以。
                        不要过于施用索引
                                因为创建和护卫索引要求耗时。

    怀有的数目标name会被修改,借使改变多列用“,”分开

    ——视图

    update temp set name = ‘jack’, age = 22;

        视图、存款和储蓄进度和自定义函数的区分:
                视图只限于查询,而存款和储蓄进程和自定义函数能够操作表。

    修改钦定条件的笔录要求用where

        能够将富有音信寄存到一张视图中,再由另外条件实行筛选。
        定义:
                视图是一种数据库对象,其剧情由询问(来自于查询)定义
                实例:成立视图,查询学号,姓名,联系电话,班级,选课号,课程名,成绩,教授名称
                        create view view_v

    update temp set name = ‘jack’ where age > 22;

                        as

    3、    delete 删除语句

                        select t_student.sid,sname,stelephone,sclass,t_score.cid,cname,score,tname

    去除table中的数据,能够去除全体,带条件能够去除钦赐的记录。

                        from t_student,t_score,t_course,t_teacher,t_teachcourse

    删除全数数据

                        where t_student.sid = t_score.sid and t_score.cid = t_course.cid

    delete from temp;

                        and t_course.cid = t_teachcourse.cid and t_teachcourse.tid = t_teacher.tid

    去除钦点条件数据

     

    delete from temp where age > 20;

                        select * from view_v
        目的:
                用于聚集、简化和定制展现数据库中的数据音信。
                增扩充少的安全性。
                升高表的逻辑独立性。
                    数据的修改不会潜移暗化视图定义。 
        创制视图
                T-SQL语句
                语法:
                    create [or replace] view 视图名
                    as
                    <select 语句> 

    Ø select 查询、function 函数

                or replace 是替换当前视图。
        对视图的一发证实
            1、视图是贰个虚构表,从贰个或四个表中程导弹出(查询)
            2、视图也足以从视图中导出。
            3、其剧情由询问语句(select)定义生成
            4、在数据库中不设有视图的询问内容,只设有视图的定义,什么日期用实体,什么日期实行视图的概念。
        管理视图
            1、使用视图:对视图能够像对待表同样举办询问和改变
                    查询:select * from view_v
                    修改:
                            update view_v
                            set score = 65
                            where sid = 2016001;
                            因为视图是表的映照,所以修改视图也正是修改表。
                            只可以修改表的原数据,不可能改改总结出来的数量。
            2、查看视图定义(命令)
                    desc 视图名;
                    show create view 视图名;
            3、修改视图定义
                    适用于初次开立和改变:
                        create or replace view 视图名
                        as
                        select 语句;
                        尽管视图不设有,则创建视图,要是存在则修改视图

    select查询语句用得最常见、成效也最丰裕。能够完成单条记录、多条记下、单表、多表、子查询等。

                    必得保障视图已经存在:
                        alter view 视图名
                        as
                        select 语句;
                        只限于修改已存在的视图。

    1、    查询某张表全体数据

            4、删除视图
                    drop view [if exists] 视图名
                    判别如果视图存在,则删除视图视图。

    select * from temp;

    目录操练-student数据库

    *代表享有列,temp代表表名,不带条件就询问全体数据

        1、在t_student 表中的sname列创立独一索引

    2、    查询钦赐列和法规的数量

            create index index_sname on t_student(sname(2));

    select name, age from temp where age = 22;

     

    查询name和age这两列,age 等于22的数据。

            alter table t_student

    3、    对查询的数额进行演算操作

            add index ss (sname(2)); 

    select age 2, age / 2, age – 2, age * 2 from temp where age – 2 > 22;

        2、在t_student表中的sname和stelephone列创造多列索引

    4、    concat函数,字符串连接

        3、在t_teacher表中的tname创造普通索引

    select concat(name, ‘-eco’) from temp;

        4、在t_course表中的cname列创立独一索引

    concat和null进行连接,会导致连日后的数目形成null

        5、删除上述索引

    5、    as 对列重命名

        drop index index_sname on t_student;

    select name as ‘名称’ from temp;

     

    as也足以轻便不写,效果等同

        alter table t_student

    设若重命名的列名出现特殊字符,如“‘”单引号,那就必要用双引号引在外侧

        drop index index_sname;

    select name as “名’称” from temp;

     

    6、    也能够给table去外号

    视图演练-student数据库

    select t.name Name from temp as t;

     

    7、    查询常量

        1、创造视图

    类似于SQL Server

            a)创建视图view_selStu,可以显得选修课程的学员的学号,姓名,选修科目代号,科目名称,科目成绩

    select 5 2;

                create view view_selstu

    select concat('a', 'bbb');

                as

    8、    distinct 去掉重复数据

                select t_student.sid,t_student.sname,t_course.cid,cname,score

    select distinct id from temp;

                from t_student,t_course,t_score

    多列将是整合的双重数据

                where t_student.sid = t_score.sid 

    select distinct id, age from temp;

                and t_score.cid = t_course.cid;

    9、    where 条件查询

            b)创造视图view_selSubject,能够呈现选修科目代号,科目名称和学科成绩

    超过>、大于等于>=、小于<、小于等于<=、等于=、不等于<>

                create view view_selstu

    都得以出未来where语句中

                as

    select * from t where a > 2 or a >= 3 or a < 5 or a <= 6 or a = 7 or a <> 0;

                select t_student.sid,t_student.sname,t_course.cid,cname,score

    10、    and 并且

                from t_student,t_course,t_score

    select * from temp where age > 20 and name = ‘jack’;

                where t_student.sid = t_score.sid 

    查询名称等于jack并且年龄当先20的

                and t_score.cid = t_course.cid;

    11、    or 或者

            c)创立视图view_execllent,能够展现选修课战表>85的上学的小孩子的学号,姓名,选修科目名称,成绩

    满意多少个就能够

                create view view_execllent

    select * from tmep where name = ‘jack’ or name = ‘jackson’;

                as

    12、    between v and v2

                select t_student.sid,sname,cname,score

    当先等于v且小于等于v2

                from t_student,t_course,t_score

    select * form temp where age between 20 and 25;

                where t_student.sid = t_score.sid

    13、    in 查询

                and t_score.cid = t_course.cid

    能够几个规格 类似于or

                and score > 85;

    select * from temp where id in (1, 2, 3);

            d)创立视图view_fail,能够显得选修课成绩不比格的上学的小孩子学号,姓名,班级,课程号,课程名,战表音讯

    查询id在括号中出现的数目

                create view view_fail

    14、    like 模糊查询

                as

    查询name以j开头的

                select t_student.sid,sname,sclass,t_course.cid,cname,score

    select * from temp where name like ‘j%’;

                from t_score,t_student,t_course

    查询name包含k的

                where t_student.sid = t_score.sid

    select * from temp where name like ‘%k%’;

                and t_score.cid = t_course.cid

    escape转义

                and score < 60

    select * from temp where name like ‘_%’ escape ‘’;

        

    指定为转义字符,上边的就足以查询name中蕴藏“_”的数据

        2、通过所创办的视图查询数据新闻

    15、    is null、is not null

            a)在view_execllent 中查询选修课战绩在85-95的信息

    查询为null的数据

                select * from view_execllent

    select * from temp where name is null;

                where score between 85 and 95;

    询问不为null的数量

            b)在view_fail中询问各班比不上格的大成音信

    select * from temp where name is not null;

                select * from view_fail

    16、    not

                where score < 60;
            c)在view_selSubject中执会考察总计局计各科目标最高成绩,最低成绩,平均成绩

    select * from temp where not (age > 20);

                select max(score) '最高战绩',min(score) '最低战绩',avg(score) '平均成绩'

    取小于等于20的数据

                from view_selsubject

    select * from temp where id not in(1, 2);

        3、通过视图修改数据

    17、    order by

            a)修改view_fail,将某一不比格成绩消息修改成60分

    排序,有desc、asc升序、降序

                update view_fail

    select * from temp order by id;

                set score = 60

    默认desc排序

            b)修改view_selStu,修改某一学生的选修科目代号及学科名称

    select * from temp order by id asc;

                update view_selstu

    多列组合

                set cname = '2'

    select * from temp order by id, age;

                where cid = 2

     

        4、修改视图定义

            a)修改视图view_execllent, 能够显示选修课战绩>85的上学的小孩子的学号,姓名,选修科目,成绩,科目先生

                alter view view_execllent

                as

                select t_student.sid,sname,cname,score,tname

                from t_student,t_score,t_course,t_teachcourse,t_teacher

                where t_student.sid = t_score.sid

                and t_score.cid = t_course.cid

                and t_course.cid = t_teachcourse.cid

                and t_teachcourse.tid = t_teacher.tid

                and score > 85;

            b)修改视图view_selStu,能够显得选修课程的学生的学号,姓名,选修科目代号,科目名称,科目成绩,班级,教师姓名

                create or replace view view_selstu

                as

                select t_student.sid,sname,t_course.cid,cname,score,sclass,tname

                from t_student,t_course,t_score,t_teachcourse,t_teacher

                where t_student.sid = t_score.sid

                and t_score.cid = t_course.cid

                and t_course.cid = t_teachcourse.cid

                and t_teachcourse.tid = t_teacher.tid

        

        5)删除视图:将上述某些视图删除

            drop view if exists view_selstu

     

    ——存款和储蓄进度

        存款和储蓄进度概述
                概念:
                        存款和储蓄进程是一种数据库对象,是为了兑现有些特定职务,将一组预编写翻译的SQL语句以三个存款和储蓄单元的款式累积在服务器上
                        ,由顾客通过点名存储进程的名字钦赐它。
                        MySQL5.0事先不帮衬存款和储蓄进程。
                        示例:
                                创制一个存款和储蓄进程,输入学生的学号,查询学生的详细音信。

                                delimiter &&            //分隔符,当下三次遭逢&&时就能够终止     可以利用其余字符 举例://

                                create procedure sp_stu(in inputsid int )    in 输入     int 参数类型

                                reads sql data

                                begin 

                                select * from t_student

                                where sid = inputsid;

                                end && 
                                delimiter;            // 将分隔符再度设为分号  ;  

                                call sp_stu(二〇一六003);        // 使用存款和储蓄进程

                                对于 select * from where sid = 2014001,数据库每一遍试行都亟待深入分析查询语句,转成推行。
                                而对此仓库储存进程,在服务器已经编写翻译好,不必要再去深入分析语句。 

                    意义:
                            1、存储进度只在开创时张开编写翻译,以后实行都无需编写翻译,而相似的SQL语句实践一遍就须求编写翻译一遍,所以使用存款和储蓄
                                 进度会升高施行功用。
                            2、存储进程能够重复使用,可以削减数据库开荒人士的工作量。

     

        创立存款和储蓄进程
                不带参数的蕴藏进程
                        语法:
                                delimiter &&
                                create procedure 存款和储蓄进程名()
                                reads sql data
                                begin
                                        存款和储蓄进程语句
                                end &&
                                delimiter ;
                        示例:
                                创造存储过程sp_fail,查询全部选修课成绩不比格的学习者学号,姓名,课程号,课程名。

                                delimiter &&

                                create procedure sp_fail()

                                reads sql data

                                begin

                                    select t_student.sid,sname,t_course.cid,cname from t_student,t_course,t_score

                                    where t_student.sid = t_score.sid

                                    and t_score.cid = t_course.cid

                                    and score < 60;

                                end &&

                                delimiter ;

                                执行:call sp_fail(); 

                    带有输入与参数的储存进度。
                            语法:
                                    delimiter &&
                                    create procedure 存储进度名(in 参数名 参数数据类型,......)    // 能够输入多个参数。
                                    reads sql data
                                    begin
                                            存款和储蓄进程语句
                                    end &&
                                    delimiter ;

                            说明:
                                    输入参数常常作为查询条件。
                                     
                            示例:
                                    创制存款和储蓄进度sp_stuscore输入学生学号,查询学生学号,姓名,课程名和大成。
                                    delimiter &&

                                    create procedure sp_stuscore(in inputsid int)

                                    reads sql data

                                    begin

                                        select t_student.sid,sname,cname,score

                                        from t_student,t_course,t_score

                                        where t_student.sid = t_score.sid

                                        and t_score.cid = t_course.cid

                                        and t_student.sid = inputsid;

                                    end &&

                                    delimiter ;

                            执行:call sp_stuscore(2016001)

                    带输出参数的积存进程:
                            语法:
                                    delimiter &&

                                    create procedure sp_phone(in inputsname varchar(20),out otelephone varchar(11))

                                    reads sql DATA

                                    begin

                                        select stelephone into otelephone from t_student    -- 将查找到的stelephnoe赋值给otelephone

                                        where sname = inputsname;

                                    end&&

                                    delimiter;

     

                                    -- 调用

                                    call sp_phone('马云',@telephone);

                                    -- 输出

                                    select @telephone;

     

                            示例:
                                    -- 定义存款和储蓄进度sp_score,输入学生学号和课程号,重临学生的大成

                                    delimiter &&

                                    create procedure sp_score(in inputsid int,in inputcid int,out outscore int)

                                    reads sql data

                                    begin

                                        select score into outscore 

                                        from t_student,t_score

                                        where t_score.sid = t_student.sid

                                        and inputsid = t_student.sid

                                        and inputcid = t_score.cid;

                                    end &&

                                    delimiter;

     

                                    drop procedure sp_score;

     

                                    -- 调用

                                    call sp_score(2016001,2,@score);

     

                                    -- 输出

                                    select @score;

                            银行转化示例:

                                    -- 创造银行表

                                    create table bank

                                    (

                                        id int not null primary key,

                                        name varchar(5) not null default'',

                                        balance float not null default 0

                                    );

     

                                    insert into bank values(10001,'张三',100);

                                    insert into bank values(10002,'李四',200);

     

                                    -- 创立存款和储蓄进度

                                    delimiter &&

                                    create procedure bank_test(in inputid int,in outputid int, in money float)

                                    modifies sql data    // 此处使用midifies  因为需求修改三个内容

                                    begin

                                        -- 转入账户

                                        update bank

                                        set balance = balance money

                                        where id = inputid;

     

                                        -- 转出账户

                                        update bank

                                        set balance = balance - money

                                        where id = outputid;

                                    end &&

                                    delimiter;

     

                                    call bank_test(10001,10002,100);

     

                                    select * from bank;

     

                    删除存款和储蓄进度:
                            drop procedure 存款和储蓄进程名;

                            

    ——触发器

        触发器的定义
                触发器是由inert update delete等事件来触发某种特定事件

        触发器的八个脾性
                原子性:Atomiity
                        事务是叁个整机的操作,事务的各步操作都是不可分的(原子的);要么都实践,要么都不进行。
                 一致性:Consistency
                        当职业落成时,数据必得处于同一状态。也等于说,在作业初阶此前,数据存款和储蓄中的数据处于一样状态。在正在进
                        行的事体中,数据可能处于不等同的状态,举个例子,数据也许有局地修改。但是,当职业成功完结时,数据必得重新
                        回到已知的同样状态,通过专业对数码所做的修改不能够破坏数据,或然说事务不能够使数据存款和储蓄处于不地西泮的情形。
                隔离性:Isolation
                        对数码实行改变的兼具并发事务是互相隔开分离的,那标识职业必需是独自的,它不应以另外措施注重于或影响别的作业。
                永久性:Durability
                        事务完结后,它对数据库的修改被永恒保存,事务日志能够维持业务的永恒性。
        成立触发器的语法
                语法格式
                        create trigger 触发器名
                        before | after 触发事件
                        on 表名 for each row
                        触发实践语句
                说明:
                        trigger:触发器关键字
                        before | after:钦定实行语句在接触前依然触发后。
                        触发事件:insert  delete  update
                        触发施行语句:当有接触事件发生所实行的语句。
                        on表名:触发事件时有爆发的表。
        创立触发器示例
                new代表新扩张长的数据行对象。
                old表示刚删除的数据行对象。
                1、扩张一条选课音信后,相应的课程实际选课人数增1。
                        -- 1、增加一条选课音讯后,相应的实际上选课人数愈来愈多1

                        create trigger tr_choose

                        after insert

                        on t_score for each row

                        -- 插入一条选课音信后 供给通晓选课号是有一点点

                        update t_course

                        set realcount = realcount 1

                        where cid = new.cid

     

                        select * from t_course

                        -- 使用触发器

                        insert into t_score (sid,cid)values(2016001,1)

                2、删除一条选课音信后,相应的课程实际选课人数减1

                        create trigger tr_del

                        after delete

                        on t_score

                        for each row

     

                        update t_course

                        set realcount = realcount -1

                        where cid = old.cid;

     

                        select * from t_course;

                        select * from t_score

     

                        delete from t_score

                        where cid = 1 and sid = 2016001;

        删除触发器
                drop trigger 触发器名;

    ——MySQL保存大数据类型

    职业SQL中提供了之类类型来保存大数据类型:
        BLOB:binary 字节流
        CLOB:character 字符流
        类型                        长度
    tinyblob                    2^8-1B(256B)
    blob                          2^16-1B(64KB)
    mediumblob             2^64-1B(16MB)
    longblob                   2^32-1B(4GB)

    tinyclob                    2^8-1B(256B)
    clob                          2^16-1B(64KB)
    mediumclob             2^64-1B(16MB)
    longclob                   2^32-1B(4GB)

    唯独在MySQL中一贯不提供以上字符流的八种数据类型,二十使用如下各个等级次序来拍卖大文本数据:
        tinytext、text、mediumtext、longtext

    先是须要创制一张表,表中有一个mediumblob(16M)类型的字段:
    create table tab_bin(
        id int primary key auto_increment,
        filename varchar(100),
        data mediumblob
    );

    向数据库插入二进制数据要求使用PreparedStatement为原serBinaryStream(int, InputStream)方法来成功。

    还须求在my.ini中增加如下配置:
        max_allowed_packet=102400
    安装最大可传输数据包 大小。

    演示代码:

    import java.io.FileInputStream;

    import java.io.FileOutputStream;

    import java.io.InputStream;

    import java.io.OutputStream;

    import java.sql.Blob;

    import java.sql.Connection;

    import java.sql.PreparedStatement;

    import java.sql.ResultSet;

     

    import javax.sql.rowset.serial.SerialBlob;

     

    import org.apache.commons.io.IOUtils;

    import org.junit.Test;

     

    import sun.nio.ch.IOUtil;

     

    import com.wyc.demo03.JDBCUtils;

     

    /*

     * 2016年12月1日15:45:48

     * 向数据库中插入大文本数据

     */

    public class Demo04 {

        /*

         * 把VCD保存到数据库中

         */

        @Test

        public void fun1() throws Exception {

            /*

             * 1、得到Connection对象 2、给出SQL模板,成立pstmt 3、设置SQL模板中的参数

             * 4、调用pstmt的executeUpdate()方法施行SQL语句

             */

            Connection conn = JDBCUtils.getConnection();

            String sql = "insert into tab_bin values(?,?,?)";

     

            PreparedStatement pstmt = conn.prepareStatement(sql);

            pstmt.setInt(1, 1);

            pstmt.setString(2, "Alan Walker - Fade.mp3");

            /*

             * 得到Blob 1、现把文件变成byte数组 2、再采纳byte数组创设Blob

             */

            // 使用字节数组成立Blob

            byte[] bytes = IOUtils.toByteArray(new FileInputStream("F:/Alan Walker - Fade.mp3"));

            // Blob是贰个接口,可以运用它的兑现类来成立对象

            Blob blob = new SerialBlob(bytes);

            // 设置参数

            pstmt.setBlob(3, blob);

            pstmt.executeUpdate();

        }

     

        /*

         * 从数据库中抽出DVD

         */

        @Test

        public void fun2() throws Exception {

            // 得到Connection对象

            Connection conn = JDBCUtils.getConnection();

            // 给出select模板,创建pstmt

            String sql = "select * from tab_bin";

            PreparedStatement pstmt = conn.prepareStatement(sql);

     

            // pstmt试行executeQuery方法,试行查询,获得ResultSet

            ResultSet rs = pstmt.executeQuery();

     

            // 获取第三列名字为data数据

            if (rs.next()) {

                Blob blob = rs.getBlob("data");

                /*

                 * 将Blob保存到硬盘 1、通过Blob获得输入流对象 2、本身创办输出流对象 3、把输入流的数目写入到输出流中

                 */

                InputStream in = blob.getBinaryStream();

                OutputStream out = new FileOutputStream("D:/Alan Walker - Fade.mp3");

                IOUtils.copy(in, out);

            }

        }

    }

    ——MySQL事务

    为了方便业务的操作,须要创立二个account表:
    create table account(
        id int primary key auto_increment,
        name varchar(20),
        balance number(10,2)
    );
    insert into account(name, balance) values ("张三", 100000);
    insert into account(name, balance) values ("李四", 100000);
    insert into account(name, balance) values ("王五", 100000);

    面试轻巧问到:
    1、事务的四大特色(ACID)
        1)原子性(Atomicity):事务中具有操作是不可再细分的原子单位,事务中持有操作依然全部试行成功,要么全部施行停业。
        2)一致性(Consistency):事务施行后,数据库状态与别的业务准绳保持一致,如转账业务,无论业务施行成功与否,参预转载的三个账号越之和应该是不变的。另外性情都认为了这一表克服务的。
        3)隔开分离性(Isolation):隔绝性是指在出现操作中,区别事物之间应当隔开分离开来,使每一种并发中的实物不会相互困扰。
        4)持久性(Durability):一旦事情提交成功,事务中保有的数码操作必需被悠久化到数据库中,就算付出业务后,数据库发生崩溃,在重启数据库时,也亟须能担保通过某种机制恢复生机数据。

    2、MySQL中的事务
        在默许景况下,MySQL每试行一条SQL语句,都以二个单身的事体,倘诺必要在三个事情中带有四个SQL语句,那么须求开启事务和甘休专门的学业:
            *   开启事务:start transaction;
            *   甘休工作:commit或rollback
        在施行SQL语句之前,先进行start transaction,那就敞开了一个政工(事务的源点),然后能够实行多条SQL语句,最终要终结专门的学业,能够选用commit提交事务,即职业中的多条SQL语句所作出的影响会被长久化到数据库中,或许使用rollback回滚,即回滚到业务的源点,以前所作的装有操作都被吊销了。

    ——事务隔绝等级

    1、事务的产出读取难题
        *   脏读:读取到另一个业务未提交的多寡,即读取到了脏数据。
        *   不可重复读:四遍读取内容差异样,因为另一作业对该记录做了退换。
        *   虚读:对同样张表的两遍找出内容差别等,读到另一职业已交给的数目。

        不可重复读和虚读的分化:
            *   不可重复读是读取到了另一专门的学问的更新。
            *   虚读是读取到了另一东西的插入(MySQL中无法测量试验虚读)。

    2、四大隔开等级
        4个阶段的事情隔开等级,在一样数量蒙受下,使用同样的输入,实行同一的做事,依据区别的隔开分离等级,能够产生区别的结果,不一致职业隔绝等级能够消除的数码出现难题的才能是见仁见智的。
        1)SERIALIZABLE(串行化):
            *   不会出现别的并发难题,因为它是对一样数据的拜候是串行的,非并发访谈。
            *   性能最差。
        2)REPEARABLE READ(可另行读):(MySQL私下认可)
            *   幸免脏读和不可重复读,无法处理虚读难点。
            *   性能比SERIALIZABLE好。
        3)READ COMMITTED(读取已交给数据):(Oracle暗中认可)
            *   幸免脏读,不可能处理不可重复读,也不可能管理虚读。
            *   性能比REPEATABLE READ好。
        4)READ UNCOMMITTED(读取未提交数据):
            *   恐怕出现其余业务并发难题。
            *   质量最高。

        MySQL私下认可的割裂等第为REPEATABLE READ,能够通过上面包车型地铁言语查看:
            select @@tx_isolation
        也得以通过上面语句来安装当前接连的隔开等级:
            set transaction isolationlevel [4 选 1]

    ——MySQL语句

         建表

                通过图片化分界面建表。

                通过命令建表:

                    create table Course

                    (

                            Cou_name nvarchar(50) not null,

                            Cou_id int not null primary key,

                            Cou_tercher nvarchar(20) not null

                    )

     

                    create table Student

                    (

                            Stu_id int not null primary key,

                            Stu_name nvarchar(50) not null,

                            Stu_sex nchar(2) not null,

                            Stu_age int not null,

                            Cou_id int foreign key references Course(Cou_id) not null

                    )

                create table 最终三个字段的背后提出并不是写逗号。

                    references的效果与利益是外键表成立外键时援引主键表的主键。

        修改字段属性:
            update 表名
            set 字段名 = 供给修改的值
            where 字段名 = 值;    //假诺不加限制,则会将该字段全体制改良动。
        
        增多记录:
            insert into 表名 (列名) values(值列表);
            列名能够简轻便单,依据值列表进行决断。

        删除:
            delete from 表名
            where 字段 = 值;

        创建表:
            create table 表名
            (
                字段名 数据类型
            );

        查看表结构:
            desc 表名;
            show create table 表名;

        字段修改属性:
            修改字段数据类型:
                alter table 表名
                modify 字段名 数据类型;
        
        修改字段名:
                alter table 表名
                change 旧属性名 新属性名 新属性类型;
                当不钦点原有字段的自拉长时,自拉长会错过。

        扩充字段:
            alter table 表名
            add 字段名 数据类型(完整性约束标准);
                假若想在率先个职位扩张字段,供给在数据类型前面加上first
                如若想在钦赐地点增加,能够使用 after 字段名;    意思是在该字段后边加多。

        删除字段:
            alter table 表名
            drop 字段名;

        删除表:
            drop table 表名;

        主键约束:
            create table 表名
            (
                主键 数据类型 primary key
            );

        外键约束:
            create table 表名
            (
                外键名 数据类型,
                constraint fk_主键约束名 foreign key (外键名) references 主键表(主键)
            );

        独一约束:
            create table 表名
            (
                字段名 数据类型 unique
            );

        默许约束:
            create table 表名
            (
                字段 数据类型 default 暗许值
            );

        检查约束:
            在MySQL中数据库引擎会分析check语句,不过会忽略check约束,所以关于字段限制范围的操作,能够在程序中限定。

        非空约束:
            create table 表名
            (
                字段名 数据类型 not null
            );

        自动增进列:
            create table 表名
            (
                字段名 数据类型(必需是int型) primary key(必得是主键) auto_increment
            ) auto_increment = 一千1;(能够在那边内定暗中同意值初叶值)

    ——MySQL入门最基本语句
        连接服务器:
            mysql -uusername -ppassword
        当连上服务器后,我们首先面前碰到的是库,库有三个或多少个,要是不通晓有怎么着库,须求查阅全数的库,语句如下
        查询全数库:
            show databases;

        设置字符集:
            set names gbk;
            设置mysql字符集为gbk。 

       大家要想对表/行举办操作的话,首先要选库
        选库语句:
            use 库名;

        选库之后,面前碰着的是多张表:
        查看全体表:
            show tables;

        创制三个数据库:
            create database [IF NOT EXISTS] 数据库名 [charset=字符集];    -- 中括号内容可选
            create database if not exists mydb charset=utf8;

        删除数据库:
            drop database 数据库名;

        修改数据库编码:
            alter database mydb character set utf8;

        数据库怎么着改名?
            MySQL中,表和列能够改名,可是database不能改名。
            修改表名
                rename table oldname to newname;
                或者:alter table 原表名 rename to 新表名;

            PHPMyAdmin:新建库,把装有表复制到新库,再删除旧库达成的。

        创建表:
            create table test
            (
                id int
            ); 

        清空表
            truncate 表名;
            truncate和delete的区别:
                truncate清空表而且保留表结构,不记录日志。
                delete只删除数据,记录日志。

        退出
            exit;
            quit;
            c  跳出施行

    ——错误提示
        1366:顾客端未表明字符集。
        1064:语法错误。

     

    ————————————————————————————————————————————————————————

    查询!!!!!!!!!!!!!!!!!!

    以goods表作为演练表。

    -- 创建goods表

    create table goods

    (

        goods_id mediumint(8) unsigned primary key not null auto_increment,

        cat_id smallint(5) unsigned not null default '0',

        goods_sn varchar(60) not null default '',

        goods_name varchar(120) not null default '',

        click_count int(10) unsigned not null default '0',

        goods_number smallint(5) unsigned not null default '0',

        market_price decimal(10,2) unsigned not null default '0.00',

        shop_price decimal(10,2) unsigned not null default '0.00',

        add_time int(10) unsigned not null default '0',

        is_best tinyint(1) unsigned not null default '0',

        is_new tinyint(1) unsigned not null default '0',

        is_hot tinyint(1) unsigned not null default '0'

    );

     

    -- 将shop.goods表中的数据插入testshop.goods表

    insert into testshop.goods

    select goods_id,cat_id,goods_sn,goods_name,click_count,goods_number,market_price,shop_price,add_time,is_best,

    is_new,is_hot from shop.goods;

    goods_id cat_id goods_sn goods_name click_count goods_number market_price shop_price add_time is_best is_new is_hot

    |  1 |  4| ECS000000 | KD876                        |       7 |                 1 |         1665.60 |    1388.00 | 1240902890 |       1 |      1 |      1 |

    |  3 |  8| ECS000002 | 一加原装5800动铁耳机  |       3 |               24 |             81.60 |        68.00 | 1241422082 |       0 |      0 |      0 |

    |  4 |  8| ECS000004 | 索爱N85原装充电器|       0 |               17 |             69.60 |        58.00 | 1241422402 |       0 |      0 |      0 |

    |  5 |11| ECS000005 | HTC原装M2卡读卡器  |       3 |                8 |              24.00 |        20.00 | 1241422518 |       1 |      1 |      0 |

    |  6 |11| ECS000006 | 胜创KINGMAX内存卡 |       0 |               15 |              50.40 |       42.00 | 1241422573 |       0 |      0 |      0 |

    |  7 | 8| ECS000007  | 一加N85原装立体声动圈耳机HS-82 | 0 |   20 |           120.00        100.00 | 1241422785 |       0 |      0 |      0 |

    |  8 | 3| ECS000008  | 飞利浦9@9v              |       9 |                  1 |           478.79 |      399.00 | 1241425512 |       1 |      1 |      1 |

    |  9 | 3| ECS000009  | 诺基亚E66                 |      20 |                 4 |         2757.60 |    2298.00 | 1241511871 |       1 |      1 |      1 |

    |10 | 3| ECS000010  | 索爱C702c                |      11 |                  7 |         1593.60 |    1328.00 | 1241965622 |       0 |      0 |      1 |

    |11 | 3| ECS000011  | 索爱C702c                 |       0 |                  1 |               0.00 |    1300.00 | 1241966951 |       0 |      0 |      0 |

    |12 | 3| ECS000012  | 小米A810           |      13 |                 8 |          1179.60 |      983.00 | 1245297652 |       0 |      1 |      0 |

    |13 | 3| ECS000013  | 诺基亚5320 XpressMusic |13|                 8 |         1573.20      1311.00 | 1241967762 |       0 |      0 |      1 |

    |14 | 4| ECS000014  | 诺基亚5800XM          |       6 |                  1 |         3150.00      2625.00 | 1241968492 |       0 |      0 |      1 |

    |15 | 3| ECS000015  | NokiaA810           |       8 |                  3 |           945.60 |       788.00 | 1241968703 |       0 |      1 |      1 |

    |16 | 2| ECS000016  | 恒基伟大的事业G101           |       3 |                 0 |           988.00 |       823.33 | 1241970949 |       0 |      0 |      0 |

    |17 | 3| ECS000017  | 夏新N7                      |       2 |                 1 |          2760.00 |    2300.00 | 1241969394 |       1 |      0 |      1 |

    |18 | 4| ECS000018  | 夏新T5                      |       0 |                 1 |          3453.60 |    2878.00 | 1241969533 |       0 |      0 |      0 |

    |19 | 3| ECS000019  | 三星SGH-F258         |       7 |               12 |          1029.60 |      858.00 | 1241970139 |       1 |      1 |      1 |

    |20 | 3| ECS000020  | 三星BC01                 |      14 |              12 |            336.00 |      280.00 | 1241970417 |       1 |      1 |      1 |

    |21 | 3| ECS000021  | 金立 A30                   |       4 |               40 |          2400.00 |   2000.00 | 1241970634 |       0 |      0 |      0 |

    |22 | 3| ECS000022  | 多普达Touch HD       |      15 |                1 |          7198.80 |   5999.00 | 1241971076 |       1 |      1 |      0 |

    |23 | 5| ECS000023  | 诺基亚N96                |      17 |                8 |          4440.00 |   3700.00 | 1241971488 |       1 |      1 |      0 |

    |24 | 3| ECS000024  | P806                         |      35 |            100 |          2400.00 |   2000.00 | 1241971981 |       1 |      1 |      1 |

    |25 |13| ECS000025 | 小灵通/固话50元充钱卡 |    0 |                2 |              57.59 |       48.00 | 124一九七一709 |       1 |      0 |      1 |

    |26 |13| ECS000026 | 小灵通/固话20元充钱卡 |    0 |                2 |              22.80 |       19.00 | 124一九七五789 |       0 |      0 |      1 |

    |27 |15| ECS000027 | 联通100元充钱卡       |        0 |               2 |             100.00 |       95.00 | 124一九七二894 |       1 |      1 |      1 |

    |28 |15| ECS000028 | 联通50元充钱卡         |        0 |               0 |              50.00 |        45.00 | 124一九七二976 |       0 |      0 |      1 |

    |29 |14| ECS000029 | 移动100元充钱卡       |        0 |               0 |                0.00 |        90.00 | 124一九七二022 |       1 |      0 |      1 |

    |30 |14| ECS000030 | 移动20元充钱卡         |        1 |               9 |              21.00 |        18.00 | 1241974114 |       1 |      0 |      1 |

    |31 | 3| ECS000031  | 三星E8                |        5 |               1 |          1604.39 |    1337.00 | 1242110412 |       0 |      0 |      0 |

    |32 | 3| ECS000032  | 诺基亚N85                 |        9 |               4 |          3612.00 |    3010.00 | 1242110760 |       0 |      1 |      1 |

    ——where条件查询

        比较运算符
            <    <=    =    >    >=    <>    in
        逻辑运算符
            not 或 !    or 或 ||    and 或 &&
        -- 1、查询主键为32的货色

        select * from goods

        where goods_id = 32;      

        -- 2、查询不属于第三栏的具备商品

        select * from goods

        where cat_id <> 3;

        

        -- 3、本店价格高于贰仟元的商品

        select * from goods

        where shop_price > 3000;

        

        -- 4、本店价格低于或等于100元的货品

        select * from goods

        where shop_price <= 100;     

        -- 5、收取第4栏和者第11栏的货色(不能够用or)

        select * from goods

        where cat_id in (4,11);     

        -- 6、收取100<=商号价格<=500的物品(不许用and)

        select * from goods

        where shop_price between 100 and 500;     

        -- 7、收取不属于第3栏目且不属于第11栏目标货物(and,或not in分别完成)

        select * from goods

        where cat_id <> 3 and cat_id <> 11;

        

        select * from goods

        where cat_id not in(3,11);

        

        -- 8、收取店肆价格超越100且小于300,也许超越5000且小于陆仟的物品()

        select * from goods

        where (shop_price > 100 and shop_price < 300)

        or (shop_price > 4000 and shop_price < 5000);

            

        -- 9、抽取第一个栏目下边价格<一千或>三千,并且点击量>5的种类商品

        select * from goods

        where cat_id = 3 and (shop_price < 1000 or shop_price > 3000) and click_count > 5;

            注意:必需加括号,不然暗许or两侧各为一个标准。
                       or的优先级最低。     

        -- 10、抽出第3个栏目上边包车型大巴货品(注意:1栏目下边没商品,但其子栏目下有)
            Infiniti极分类,顶尖分类,也便是该大类上面没有一直数据,而是二级分类。     

        -- 11、抽出名字以"OPPO"起首的货色

        select * from goods

        where goods_name like '诺基亚%';
            此处使用模糊查询,并非正则相称,因为正则相配效能低。
            %:相配零到四个字符。
            _:相配三个字符。
        
        -- 12、取盛名字不以"小米"最早的货品

        select * from goods

        where goods_name not like '诺基亚%';

        

        -- 13、抽出第4个栏目上面价格在一千到3000之间,并且点击量>5 "黑莓"早先的二种商品

        select * from goods

        where (cat_id = 3 and shop_price > 1000 and shop_price < 3000 and click_count > 5)and goods_name like '诺基亚%';

        

        面试题

        有如下表和数组,把num值处于[20,29]的数改为20,把num值处于[30,39]时期的数改为30。

         ------

        | num  |

         ------

        |    3 |

        |   12 |

        |   15 |

        |   25 |

        |   23 |

        |   29 |

        |   34 |

        |   37 |

        |   32 |

        |   45 |

        |   48 |

        |   52 |

         ------

        

        update test

        set num = 20

        where num between 20 and 29;

        update test 

        set num = 30

        where num between 30 and 39;
        
        或者:
        
        update test
        set num = floor(num/10)*10
        where num >= 20 and num <= 30; 

        
        where查询模型
            能够把字段看成变量,把where看做Java中if语句中的条件,正是哪条记下能让if为真,就能够抽取哪条记下。
            非零 而且 非null 非字符串 都为真。
            既然字段是变量,那么变量之间就可以运算。
            例如:
                    select market_price - shop_price as discount from goods

                    where goods_id = 1;
                    注意:不能够在where中运用discount,因为where是对原表举办筛选生成三个不常表,discount存在于有时表中,所以where无
                               法使用discount对原表实行筛选。 
                               如若想对结果也便是discount举行筛选,只可以采纳having,因为在where生成结果后,having是对结果再三遍进行筛选。
         
     ——group by分组查询

        
            max()函数取最大值。
            min()函数取最小值。
            avg()总结平均值
            count(*)函数总计个数,假使count(列名),在钦命列名时则不总结null值。
            那么使用count(*)和count(1)什么人越来越好啊?
                对于myisam引擎的数据库未有区分,这种斯特林发动机的数据库内部有一个计数器计算那行数,当供给输骑行数的时候,会直接抽出游数
                对于利用innodb引擎的数据库,使用count(*)直接读行数,会促作用率低下,因为innodb会一行一行的数。
        
            有如下语句:
                select goods_id,sum(goods_number) from goods;
                抽取结果为:
                goods_id    sum(goods_number)
                      1                        314
                对于SQL标准来讲,该语句是错误的,不可能被实行,不过在MySQL中得以被推行,可是为了可移植性和标准性,不推荐使用。     

        -- 1、查询出最贵的货品价位

        select max(shop_price) from goods;

        

        -- 2、查询最新的商品编号

        select max(goods_id) from goods;

        

        -- 3、查询最有益的的货品价位

        select min(shop_price) from goods;

        

        -- 4、查询最旧的商品编号

        select min(goods_id) from goods;

        

        -- 5、查询该店全数商品的仓库储存总的数量

        select sum(goods_id) from goods;

     

        -- 6、查询全体商品的平均价

        select avg(shop_price) from goods;

        

        -- 7、查询该店一共有微微种商品

        select count(goods_id) from goods;

        

        -- 8、查询每种栏目上面

        -- 最贵商品价位

        -- 最低商品价位

        -- 商品平均价格

        -- 仓库储存总数

        -- 商品种类

        -- (提醒:5个聚合函数sum avg max min count 与 group by综合采纳)

        select cat_id,max(shop_price),min(shop_price),avg(shop_price),sum(goods_number) from goods

        group by cat_id;

        
        
    ——having分组筛选

     

        -- 1、查询该店的货色比市集价所节省的价格

        select goods_id,market_price - shop_price from goods;

     

        -- 2、查询每种商品所积压的货款(仓库储存*单价)

        select shop_price,(goods_number * shop_price) from goods;

        

        -- 3、查询该店积压的总货款

        select sum(goods_number * shop_price) from goods;

        

        -- 4、查询该店每一个栏目上面积压的货款

        select cat_id,goods_number * shop_price from goods

        group by cat_id;

        

        -- 5、查询比市集价积攒闲钱200元之上的物品及该商品所省的钱。

        -- 用where和having分别达成

        select goods_id,market_price - shop_price as price

        from goods

        where market_price - shop_price > 200;

        

        select goods_id,market_price - shop_price as price

        from goods

        having price > 200;

        

        -- 6、查询积压货款超越2万元的栏目,以及该栏目积压的货款

        select cat_id,sum(goods_number * shop_price) as price

        from goods

        group by cat_id

        having price > 20000;

        

        -- 7、where group by having综联合排练习题

        -- 有如下表及数据

        -- 查询出2门及2门以上比不上格者的平均战绩

        -- ------ --------- -------

        -- | name | subject | score |

        -- ------ --------- -------

        -- | 张三 | 数学    |    90 |

        -- | 张三 | 语文    |    50 |

        -- | 张三 | 地理    |    40 |

        -- | 李四 | 语文    |    55 |

        -- | 李四 | 政治    |    45 |

        -- | 王五 | 政治    |    30 |

        -- ------ --------- -------

        create table score

        (

            sname char(4) not null,

            ssubject char(5) not null,

            sscore float not null

        );

        insert into score values('张三','数学',90);

        insert into score values('张三','语文',50);

        insert into score values('张三','地理',40);

        insert into score values('李四','语文',55);

        insert into score values('李四','政治',45);

        insert into score values('王五','政治',30);

        insert into score values('赵六','政治',90);

        insert into score values('赵六','政治',80);

        

        select sname,count(sscore < 60) as c,avg(sscore) as a 

        from score

        group by sname

        having c >= 2        -- 错误!因为随意count()中是不是为真,都会将行数全体收取,即便全体通过海关,会整整收取。

        ## 一种错误做法

        mysql> select name,count(score<60) as k,avg(score) from stu group by name having k>=2;

         ------ --- ------------

        | name | k | avg(score) |

         ------ --- ------------

        | 张三     | 3 |    60.0000 |

        | 李四     | 2 |    50.0000 |

         ------ --- ------------

        2 rows in set (0.00 sec)

        

        mysql> select name,count(score<60) as k,avg(score) from stu group by name;

         ------ --- ------------

        | name | k | avg(score) |

         ------ --- ------------

        | 张三     | 3 |    60.0000 |

        | 李四     | 2 |    50.0000 |

        | 王五     | 1 |    30.0000 |

         ------ --- ------------

        3 rows in set (0.00 sec)

        

        mysql> select name,count(score<60) as k,avg(score) from stu group by name having k>=2;

         ------ --- ------------

        | name | k | avg(score) |

         ------ --- ------------

        | 张三     | 3 |    60.0000 |

        | 李四     | 2 |    50.0000 |

         ------ --- ------------

        2 rows in set (0.00 sec)

        

        #增进赵六后错误暴光

        mysql> insert into stu 

            -> values 

            -> ('赵六','A',100),

            -> ('赵六','B',99),

            -> ('赵六','C',98);

        Query OK, 3 rows affected (0.05 sec)

        Records: 3  Duplicates: 0  Warnings: 0

        

        #指鹿为马显现

        mysql> select name,count(score<60) as k,avg(score) from stu group by name having k>=2;

         ------ --- ------------

        | name | k | avg(score) |

         ------ --- ------------

        | 张三 | 3 |    60.0000 |

        | 李四 | 2 |    50.0000 |

        | 赵六 | 3 |    99.0000 |

         ------ --- ------------

        3 rows in set (0.00 sec)

        

        #不错思路,先查看各样人的平分战绩

        mysql> select name,avg(score) from stu group by name;

         ------ ------------

        | name | avg(score) |

         ------ ------------

        | 张三 |    60.0000 |

        | 李四 |    50.0000 |

        | 王五 |    30.0000 |

        | 赵六 |    99.0000 |

         ------ ------------

        4 rows in set (0.00 sec)

        

        mysql> # 看种种人挂科意况

        mysql> select name,score < 60 from stu;

         ------ ------------

        | name | score < 60 |

         ------ ------------

        | 张三 |          0 |

        | 张三 |          1 |

        | 张三 |          1 |

        | 李四 |          1 |

        | 李四 |          1 |

        | 王五 |          1 |

        | 赵六 |          0 |

        | 赵六 |          0 |

        | 赵六 |          0 |

         ------ ------------

        9 rows in set (0.00 sec)

        

        mysql> #计算每一个人的挂科学科

        mysql> select name,sum(score < 60) from stu group by name;

         ------ -----------------

        | name | sum(score < 60) |

         ------ -----------------

        | 张三 |               2 |

        | 李四 |               2 |

        | 王五 |               1 |

        | 赵六 |               0 |

         ------ -----------------

        4 rows in set (0.00 sec)

        

        #再者总计每人的平分分

        mysql> select name,sum(score < 60),avg(score) as pj from stu group by name;

         ------ ----------------- ---------

        | name | sum(score < 60) | pj      |

         ------ ----------------- ---------

        | 张三 |               2 | 60.0000 |

        | 李四 |               2 | 50.0000 |

        | 王五 |               1 | 30.0000 |

        | 赵六 |               0 | 99.0000 |

         ------ ----------------- ---------

        4 rows in set (0.00 sec)

        

        #使用having筛选挂科2门以上的.

        mysql> select name,sum(score < 60) as gk ,avg(score) as pj from stu group by name having gk >=2; 

         ------ ------ ---------

        | name | gk   | pj      |

         ------ ------ ---------

        | 张三 |    2 | 60.0000 |

        | 李四 |    2 | 50.0000 |

         ------ ------ ---------

        2 rows in set (0.00 sec)

        正确答案:
            select sname,sum(sscore < 60) as s,avg(sscore) from score

            group by sname

            having s >= 2; 

    ——order by排序
        order by 列名 desc/asc

        当供给张开反复排序时:

            order by 列名1 desc/asc,列名2 desc/asc,

        当获得最后结果集未来,手艺够开展排序,因为在结果集生成进度个中进行排序无意义。

        反过来讲,排序是对准最后结果,即:order by要放在where/group by having之后,顺序不能够颠倒。

     

        知识点:

            回收站机制,逻辑删除。

     

    ——limit限制结果条数
        limit [offset,] n(不包含offset)

        offset:偏移量(跳过些微行,也正是从什么职位上马抽出记录,不分包offset)

        n:抽出条款。

        offset要是不写,约等于limit 0,n

     

        -- 1、按价格由高到低排序

        select * from goods

        order by shop_price;

        

        -- 2、按揭橥时间由早到晚排序

        select * from goods

        order by add_time 

        

        -- 3、按栏目由低到高排序,栏目之中按价格由高到低排序

        select * from goods

        order by cat_id,shop_price desc;

        

        -- 4、收取价格最高的前五个商品

        select * from goods

        order by shop_price desc

        limit 3;

        

        -- 5、抽取点击量前三名到前五名的货色

        select * from goods

        order by click_count desc

        limit 2,3

        

        三个子句的演算顺序

            where  group by  having  order by  limit

     

    ——where型子查询

        把内层查询结果作为外层查询的可比标准

        例题:

            -- 抽取每一种栏目下的新式的货色

            -- 第一步:先查询各类栏目下新型商品的goods_id

            select max(goods_id),cat_id from goods

            group by cat_id;

            -- 第二步:把goods_id对应的商品新闻输出就能够

            select * from goods

            where goods_id in

            (

                select max(goods_id) from goods

                group by cat_id

            );

        where子查询的SQL语句无法select * from表

            因为:

                倘使where 列名 = (内层SQL) 则内层SQL重临的必须是单列单行值,也正是单个值。

                若是where 列名 in (内层SQL) 则内层SQL只好回到单列值,能够多行,也足以单个值。

     

    ——from型子查询

        将内层查询SQL的询问结果,当成一张偶然表,供外层SQL再度张开查询。

        注意:

            临时表一定要起三个小名。

        例题:

            -- 抽取各种栏目下的最新的货物

                select * from 

                (

                    select * from goods

                    order by cat_id,goods_id desc

                ) as t

                group by cat_id

                order by goods_id;

     

     

    ——exists型子查询

        将外层的查询结果(查询字段)得到内层查询,决断内层的询问是或不是创设,假若内层的查询where创设,则该行收取,
        并在外行输出展现,如若不创设则不出口。

        
        exists功能超过in,因为exists遇到知足条件就赶回,而in则全体相比。

    ——两表之间的全连接查询

    表与集中的关联

    一张表正是叁个凑合。

    每一行就是一个要素。

    疑问:

    集聚无法再一次,但是有相当大概率有两行数据完全同样,如何管理?

    答:

    MySQL内部每一行又七个rowid

    在数据库中,如何操作表来博取笛卡尔积:

    select * from table1,table2;

     

    ——左连接

    A表与B表通过三个涉及来筛选B表的行

    语法:

    A left join B on 筛选标准

    如若条件为真,则B表抽取对应的行。

    该语句获得的结果也是三个一时表,能够看做一张表,设为C。

    既然,就可以对C表做询问,所以where group by having order by limit都得以照常使用。

    多表连接中的where和on

    在多表连接之后,产生的是第三张新表,第三张新表中无另外索引字段,因而子表的目录发挥不了成效。

     

     

    本文由新葡亰496net发布于网络数据库,转载请注明出处:新葡亰496net:MySQL学习笔记一,MySQL学习笔记

    关键词: