zoukankan      html  css  js  c++  java
  • MYSQL

    set names gbk;  可以告诉服务器,客户端用的GBK编码,防止乱码.
     
    d:  选择盘符
     
    bir    查看所有文件
     
    cd    文件夹名   打开文件
     
    mysql  默认服务器 localhost -u用户名 -p密码    打开服务器
     
    show databases;    查看所有数据库
     
    use 数据库名  打开数据库
     
    show tables    查看所有表
     
    quit    退出服务器
     
    desc  表名   查看表结构

     

    mysqld.exe为数据库服务端   存取数据都要经过服务端

    想要存取数据需要用客户端mysql.exe连接mysqld.exe才能存取

    服务器客户端有多种,常用的是phpMyAdmin

     

    表与库的概念

    表就是多行多列的数据,多张表组成一个库,多个库又组成服务器

     

    认识SQL

    SQL  结构化查询语言    特点:描述需要的数据

    根据不同特点分为三大类

    DML 数据操作语言/使用者角度/80%

    DDL 数据定义语言/建设者角度/建表/建库/建视图等/15%

    DCL 数据控制语言/管理员角度/用于授权/操作事务时间及效果/5%

     

    insert操作

     insert into `table name` (列名) values (每一列的值)

    3个重点:插入那一张表  插入哪几列   这几列分别插入什么值

    不写列名的情况下,值按列的顺序进行填充(每一列都必须有值)

    字符串的值必须加单引号

    update操作

    updata 表名 set 列1 = 新值 1,列2 = 新值 2   where 条件;

    4要素 改什么表  改哪些列 改成什么值  在哪些行生效?

    记得一定要加条件

    delete操作

     delete from 表名 where 条件      记得一定加条件

    select操作

    查询3问   1:查哪张表的数据?    2:查哪些列的数据?  3:查哪些行的数据

     select 列1,列2`````` from 表名  where 条件;

     

     

    mysql三大列类型

    数值型      整形  Tinyint/ smallint/ mediumint/int/ bigint(M) unsigned zerofill

     

     

     

     查询模型

    列为变是变量就可以计算  where为表达式

     取列值=投影运算    列与列运算=广义投影 

     where条件    <>不等于   in 在某个集合内    between 在某个范围内

     or   ||  逻辑或      not  !  逻辑非    and  &&  逻辑与

     like    后面接%代表任意字符   _代表一个字符        如:where goods_name like "诺基亚%";

     mysql函数: concat(‘xxx’,‘原文’)拼接字符串          substring(‘需要截取的文字’,‘截取长度’)截取字符串

     select concat('htc',substring(goods_name,4)) from goods where goods_name like "诺基亚%";

     

    NULL

    查询null只能用  is null 和  not null     尽量避免使用null

     

     

    group分组与统计函数

     max()求最大   count()求行数   avg()平均值  min()最小值  sum()求总和

    group()分组   一般情况下挺耗费资源的   如果加了别的字段语义有歧义的时候,取按照分组字段排序出现的第一条数据

     例子:select cat_id,count(*) from goods group by cat_id;    以cat_id为分组条件查询每个cat_id的数据条数

    如果要加where  要写在group by前面

     

     having对结果集进行筛选      having永远写在where语句的后面     因为它只作用于where查询出来的内容

       where对数据表进行筛选    结果集存放在内存    where之针对表数据发挥作用

     

    综合案例:求不及格两门同学的平均成绩

    SELECT `name`,sum(score<60) as bjg,avg(score)  FROM `result` where 1 GROUP BY name HAVING bjg>=2;

     

     order by 排序     降序 desc     升序 asc 默认

    select goods_name,cat_id,shop_price from goods order by cat_id,shop_price asc;

    limit

    select goods_name,cat_id,shop_price from goods ORDER BY shop_price desc LIMIT 0,3;

     

     5种查询语句的书写顺序   where---group by---having---oreder by---limit

     

    1+n查询 

    1条语句引发N条数据->N条数据引发N条查询     尽量避免这种操作

     

     where型语句子查询

     查询每个栏目下最新的商品 (goods_id为最大)    查询结果作为where条件参与运算

    select * from goods where goods_id in(select MAX(goods_id) from goods where 1 group by cat_id)    内层查询结果作为外层比较条件

     

    from型语句子查询

      查询每个栏目下最新的商品 (goods_id为最大)    查询结果作为二次查询的表来进行运算

    select goods_id,goods_name,cat_id from (select * from goods where 1 order by cat_id,goods_id desc) as cxjg where 1 group by cat_id

     

    exists型句子查询            

    两表数据进行运算    查询有商品的栏目

    查询有商品的栏目   select * from category where exists(select * from goods where goods.cat_id = category.cat_id);

     

     

     girl表  boy表

    内连接查询

     SELECT * FROM `boy` inner join `girl` on boy.hid=girl.hid;

    左连接查询

    selse * from `boy` left join `girl` on boy.hid=girl.hid;      以左边数据为标准,查不到的补NULL

     

    右连接查询

    selse * from `boy` rightjoin `girl` on boy.hid=girl.hid;      以右边数据为标准,查不到的补NULL

     

     案例

    SELECT
    t1.tname as '主队',mres,t2.tname as '客队',matime
    FROM
    `m`
    LEFT JOIN t as t1 ON m.hid = t1.tid
    left join t as t2 on m.gid = t2.tid
    where matime between '2006-6-1'and'2006-7-1'
    ;

    同一个表可以进行多次连接   只需要给不同的别名即可

    union语句

     union把两条或者多条sql查询语句的结果合并成一个结果集      数据可以是两个表或者多个表的数据

    sql1  n行   sql2 行          sql1   union    sql2  =   n+m行

    必要条件:取出结果集的列数必须相同,列名未可不相同,列名以第一条sql数据的列名为基准

    注意:使用union完全相等的行数据会被合并  (合并是耗资源的操作,尽量避免)

    使用 union all 可以避免数据合并

    union语句中无需写 order by    子查询order by 意义不大,因为合并后进行order by 效率更高

    a表:  b表:

    案例:select id,sum(num) from (SELECT * FROM `a` union all select * from `b`) as jh where 1 group by id;

     

     

     

     

     

     创建表  

      建表语句    create table 表名(

            列1 列类型 [列属性 默认值],

            列2 列类型 [列属性 默认值],

            列3 列类型 [列属性 默认值],

            ……

            列n 列类型 [列属性 默认值]

              );

            engine = 存储引擎

            charset = 字符集

    添加列

      alter table bb add 列名 列类型 [列属性 默认值]

    列类型——整形列

    整形列各个类型所占大小

    整形列属性介绍

    unsigned   无符号   表示列的值从0开始,不为负数

    zerofill  适用于学号/编码/序号等固定宽度的数字,可用0填充至固定宽度     使用zerofill属性的同时列也有unsigned属性   即从0开始不为负数

    M               设定zerofill填充0至多宽

    注意:补零仅影响显示,而显示仅在 windows 下通过cmd命令行使用mysql客户端工具才能够显示 linux下通过mysql 客户端命令行下可以显示

    例子:alter table tablename add liename tinyint<5>  zerofill;

     

     浮点列与定点列

     float(M,D)    M为总位数  D为小数点后面的数字

    double

    decimal

    区别:float/double  精度会有精度损失     decimal 定点型 更精确

     

    字符型列

     char型  M最大字符数为255  如果内容不够宽度,内部会使用空格补齐,取出来时候再把 ‘右侧空格’删掉   varchar不会 

     varchar    M最大字符6W+   

    text  存储文章文本时选用 

     blob  二进制类型  用来存储视频、音频、图像等二进制信息

    ender  枚举类型  可设置insert范 围的值   一次只能选择一个

    set  枚举类型    设置insert范围的值,一次可以多选值

     

    日期时间类型

    year  年  如:1999    2004    

    data    日期   1994-12-5

    time  时间  13:52:13

    datetime  时间日期   1994-12-5 13:52:13

    timestamp    自动更新时间戳

    一般存储时间使用时间戳存储不是用datetime,因为时间戳方便计算

     

     

    列的默认值

     避免NULL   使用 not null default 默认值

     

    主键与自增

    id int primary key auto_increment

    主键 primary key 此 列不重复 能区分每一行

    自增 auto_increment  自动增长    一张表上只能有一列为自增列  并且此列必须加上索引

     

     

    建表技巧

    一张表如果都是定长列,查询速度会很快

    定长与变长分离

    常用字段与不常用字段分离

     

     

    列的增删查改

    增加   alter table 表名 add 列名·······   alter table 表名 add 列名·······(after)插入在指定列后  

    删除  alter table 表名  drop column 列名

    修改  alter table 表名 change 列名 列属性·····    alter table 表名 modify  列名 新属性·····

     查看  desc 表名

     

     视图

     又被称为虚拟表,视图是sql的查询结果

    作用:  权限控制可以用  可通过视图开放其中一列或者几列

        简化复杂的查询

        视图可以更新/删除/修改

        但是必须需物理表一一对应才可进行,如果多对一则无法进行操作

     create view v4(视图名) as select goods_id,goods_name from goods;

     

     视图aigorithm

    对于简单查询形成的view,在对view查询时,可以把建立视图的语句+查询视图的语句===合并=》查询物理表的语句

    这种视图算法叫merge(合并)

     或者视图语句本身比较复杂,如果进行合并难以解读,这时候mysql会先执行视图语句形成临时表,再对临时表进行查询

     这种视图算法叫temptable

     建立视图的时还可以规定视图的算法 如:

    create algorithm=merge view v5 as select goods_is from goods; 

     

    表and视图常用语句

    存储引擎概念

    frm:表结构        MYD:表数据        MYI:表索引

    查询表存储引擎: show table status where name='表名' G

    Menory引擎:存储速度快,一般用于存储临时数据,因为服务器一关机就会没有

    Innob引擎:每次存储有日志,可回复性高

    Misam:可直接复制相应数据库文件无需导入数据库即可生成表

    字符集与乱码

     计算机显示出现乱码是因为:数据本身的字符集与所显示的字符集不一致而导致

     ===

    彻底杜绝乱码现象:

    1 php文件本身为utf-8    2 meta charset="ust-8"   3 表字符集为utf_8    4 数据库查询时声明 set names utf-8

     校对集:字符排序的顺序

     

     

    索引概念

     索引是数据的目录,能快速定位行数据的位置

    索引提高查询速度,降低增删改速度

    一般在查询频繁的/重复数据少的列上添加索引效果更好

    create teble t12(
    id int,  
    name char(10),
    email char(20), 
    primary key(id),      //主键索引
    key name(name),    //普通索引
    unique key emaill(emaill)      //唯一索引  
    primary key(id,name),      //多列索引
    ); 

    索引类型:

    key  普通索引

    unique key  唯一索引

    primary key  主键索引

     

    fulltext  全文索引(中文环境下无效,要分词+索引,一般用第三方解决方案,如sphinx)

     索引长度:key name(name(10));    只引用前10个字符作为索引

     多列索引:key name(name,id);    把两列的值作为一个整体作为索引

     

    索引操作

     查看表索引   show create table  表名    //    show index from 表名

    删除表索引    alter table 表名 drop index 索引名        //       drop index 索引名 on 表名 

    添加表索引    alter table 表名 add[index/unique]索引名(列名)

    添加主键索引  alter table 表名 add primary key(列名称)

    删除主键索引  alert teble 表名 drop primary key

     

     

    关于事务

    启动事务  start transaction;

    结束事务  commit;

    回滚事务  rollback;

    事务隔离性  只能看到事务开始前和结束后的状态

    事务原子性  是指事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生  

    事务一致性  事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性    

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    【MyBatis】Inappropriate OGNL expression
    【java】前补零
    【js】前补零
    【Java】导出excel.xlsx
    【插件】fileinput
    【前端】WebSocket is already in CLOSING or CLOSED state?
    【HTML】input标签添加提示内容
    学习问题记录 -- 对象和引用
    八数码难题
    Java 逻辑运算符 & 与 &&的区别
  • 原文地址:https://www.cnblogs.com/1010wjf/p/7989991.html
Copyright © 2011-2022 走看看