• 强哥MySQL学习笔记


    数据库服务器:
    1.数据库
    2.数据表

    数据表:
    1.表结构(字段)
    2.表数据(记录)
    3.表索引(加快检索)

    表引擎:
    1.myisam
    2.innodb

    查看表字段
    desc table;
    删除数据库:
    drop database jiuxian;
    删除表:
    drop table user;

    表字段类型:
    1.数值
    int(11) 有符号
    int(10) 无符号
    float
    2.字符串
    char 255
    varchar 65535, 建议255
    text 65535
    3.日期和时间
    数值时间戳

    数据字段属性:
    1.unsigned
    2.zerofill
    3.auto_increment
    4.null
    5.

    *建议:
    所有字段都是not null,而默认值是null,为了节省空间。

    char和varchar区别:
    1.char最长255,varchar最长65535
    2.char固定长度空间,varchar可变长空间

    修改数据库字符集:
    修改my.ini
    [client]
    default-character-set = utf8
    [mysqld]
    character-set-server = uft8
    collation-server = utf8_general_ci

    批量删除表:
    drop table `t1`,`t2`,`t3`,'t4';

    表索引:
    1.主键索引 (主键索引已经包含唯一索引)
    2.唯一索引
    3.普通索引

    desc select * from t1 where id=4; --查看语句执行情况
    desc select * from t1 where id=4G --以行打印结果(不能加;)

    普通索引:
    1.增
    alter table t1 add index idx_name(name); --给name添加一个名字叫idx_name的索引
    2.删
    alter table t1 drop index idx_name;--删除索引

    唯一索引:
    1.增
    alter table t1 add unique uni_name(name);--
    2.删
    alter table t1 drop index uni_name;


    主键索引:
    删:
    alter table t1 modify id int unsigned not null;--先删除自增
    alter table t1 drop primary key;--再删除索引

    反引号的作用:
    --一个表名如果是关键字
    insert into where(id) values(1); --会报错
    insert into `where`(id) values(1);--不会报错

    修改数据表字段:

    alter table t1 add sex tinyint not null;
    alter table t1 add sex tinyint not null after name;--加一列sex放到name后面
    alter table t1 add sex tinyint not null first;--加一列sex放到第一列
    删:
    alter table t1 drop sex;
    改:
    alter table t1 change name username varchar(30) not null;

    mysql结构化查询语言
    结构化查询语言sql包含4个部分:
    1.DDL --数据定义语言,create,drop,alter
    2.DML --数据操作语言,insert,update、delete
    3.DQL --数据查询语言,select
    4.DCL --数据控制语言,grant,commit,rollback

    数据表操作:
    1.sql条件
    数学运算符 +,-,*,/
    逻辑运算符 && || and or
    比较运算符 = != >= <= > < <>
    1.增 insert
    2.删 delete
    truncate user; --擦除user表内容
    3.改 update
    4.查 select
    select * from user where id in(1,3,4);
    select * from user where id between 3 and 5;

    别名:
    select id as i,username as u,password as p form user;
    select id i,username u,password p form user;

    distinct关键字使用:
    去掉重复值:
    select distinct age form user;
    查询空值:
    select * from where age is null;

    like:
    select * from user where username like "%linux%"; --查询含有linux的
    正则查询:
    select * from user where username regexp '$456'; --正则查询

    排序:
    升序,数字从小到大
    select * from user order by id asc;
    降序,数字从大到小
    select * from user order by id desc;

    mysql常用函数:
    连接函数concat()
    select concat('hello','world','!!!') hw; --输出helloworld!!!并建立别名hw
    select concat(username,password) from user; --
    随机数rand()
    select * from user order by rand() limit 3;
    统计个数count()
    select count(*) from user; --*特指主键,但是和id不同。
    求和sum()
    select sum(id) from user;
    平均值avg()
    select avg(id) from user;
    最大值max()
    select max(id) from user;
    最小值min()
    select min(id) from user;
    limit限定输出个数:
    select * from user limit 3;
    select * from user limit 7,3; --从7开始,截3个

    group by 分组聚合:
    select class_id,count(*) from user group by class_id;
    select concat(class_id,'-','class') class,count(*) tot from user group by class_id;

    多表查询:
    表与表关系:
    1.有关系
    2.没关系

    有关系:
    1.合并
    2.分离
    #一个表一个主体
    #两个表是一对一关系,则可以合并

    1.普通多表查询
    class 表:
    create table class(
    id int unsigned not null auto_increment,
    name varchar not null,
    primary key(id)
    );
    user 表:
    create table user(
    id int unsigned not null auto_increment,
    username varchar not null,
    password varchar not null,
    primary key(id)
    );
    需求:请打印出每个学员的姓名和班级。
    select * from user,class where user.class_id=class.id;
    select user.username,class.name from user,class where user.class_id=class.id;
    2.嵌套查询
    select * from user where id in (select max(id) from user);
    3.链接查询
    左连接
    把左边的表全部输出
    需求:把所有班的总人数统计出来,前提是有些班没人。
    select class.name,count(user.id) from class left join user on class.id=user.class_id group by class.id;

    需求:把所有班的总人数统计出来,前提是有些班没人。注:人数为零则打印出"无";
    select class.name,if(count(user.id),count(user.id),'wu') from class left join user on class.id=user.class_id group by class.id;

    右连接:
    把右边的表全部输出
    select class.name,if(count(user.id),count(user.id),'wu') from user right join class on class.id=user.class_id group by class.id;

    内连接:
    完全等于普通多表查询,必须是符合条件的多个表的数据才会显示
    select class.name,count(user.id) from class inner join user on class.id=user.class_id group by class.id;

    需求:用户表,有一列是成绩,请统计这张表中及格人数和不及格人数.使用一条语句
    答案1:
    select (select count(*) from user where score>=60) yes,(select count(*) from user where score<60) no ;
    答案2:
    select sum(if(score>=60,1,0)) ok,sum(if(score<60,1,0)) nook from user;

    having:
    分组聚合之后筛选
    select class_id from user group by class_id having class_id<=2;

  • 相关阅读:
    【从0开始Tornado网站】主页登录和显示的最新文章
    2014阿里巴巴网上笔试题-文章3大标题-公共最长的字符串长度
    取消改变基本数据——应用备忘录模式
    Hibernate进化史-------Hibernate概要
    xcode 快捷键
    Android多画面幻灯片:ViewPager基础上,利用与PagerTabStrip出生缺陷(源代码)
    uva 11991
    创建与删除索引
    HDU1203_I NEED A OFFER!【01背包】
    Java面试宝典2013版(超长版)
  • 原文地址:https://www.cnblogs.com/redheat/p/7069817.html
Copyright © 2020-2023  润新知