初始Mysql

mysql笔记:

-- create table if not exists 新建的表名(条件:id int unsigned primary key auto_increment,等);
    -- if not exists 表示如果这个表存在那就不建  如果不存在就建立这个表
insert into classes values
    (0,'程佳鹏'),
    (0,'杨荣降'),
    (0,'吴彦杰'),
    (0,'刘铮'),
    (0,'郭康乐'),
    (0,'乔旭');

-- 分组: 
-- 按照性别分组,查询所有的性别:
select gender from students group by gender;
--计算每种性别的人数:
select gender,count(*) from students group by gender;
-- 计算男生的人数:
select gender,count(*) from students where gender='男' group by gender;
-- Empty set, 19 warnings (0.00 sec)
-- 将男生姓名和年龄都表示出来:
select gender, group_concat(name,age) from students where gender='男' group by gender;
--group by 和 group_concat 的运用:查询平均年龄超过30岁的性别,以及姓名
select gender,group_concat(name) from students group by gender having avg(age)>30;
-- 分页:
-- limit start,count   start=0 时 id=1
-- limit:限制查询的个数:(查询前两个人的数据)
select * from students where gender='男' limit 2;
-- 查询前5个人的信息:
select * from students  limit 0,5;
-- 页数的公式:   select * from students  limit (第n页-1) * 每页的个数,每页的个数;

select * from students where gender="女" order by age asc limit 0,2;

select * from students where gender="女" order by age asc;    --从小到大

select * from students where gender="女" order by age desc;   --从大到小

-- 连接查询:  --inner join ....on
-- 查询  有能够对应班级的学生  以及班级信息
-- 内连接:
select * from students inner join classes on students.cls_id=classes.id; 
select students.*,classes.name from students inner join classes on students.cls_id=classes.id;
select * from students as s inner join classes as c on s.cls_id=c.id;

-- 按照要求显示姓名和班级:
select students.name , classes.name from students inner join classes on students.cls_id=classes.id;

-- 给数据表起名字:
select s.name , c.name from students  as s inner join classes as c on s.cls_id=c.id;   --as 给表起名字

-- 查询  有能够对应班级的学生以及班级信息,显示学生的所有信息,只显示班级名称:
select s.* , c.name from students  as s inner join classes as c on s.cls_id=c.id;

-- 以上的查询中 ,将班级姓名显示第一列:
select c.name ,s.*   from students  as s inner join classes as c on s.cls_id=c.id;

-- 查询 有能够对应班级的学生以及班级信息,按照班级进行排序:
select c.name ,s.*   from students  as s inner join classes as c on s.cls_id=c.id order by c.name desc;

-- 当在同一班级的时候,按照学生的id进行从小到大的顺序排序:
select c.name ,s.*   from students  as s inner join classes as c on s.cls_id=c.id order by c.name, s.id;

-- 外连接:
    右链接:right join      左连接:left join
    select * from students as s right join classes as c on s.cls_id=c.id;    --右连接
    select * from students as s left join classes as c on s.cls_id=c.id;     --左连接

--查询没有对应班级信息的学生
select * from students as s left join classes as c on s.cls_id=c.id having c.id=null;
select * from students as s left join classes as c on s.cls_id=c.id where c.id=null;  --可行但是不推荐使用

-- 自关联:  运用在省市县 或者 公司的上下级
    -- 1.设计省信息的表结构用 orovinces:
        id
        ptitle
    -- 设计市信息的表结构用 citys:
        id
        ctitle
        proid
    citys表的proid表示城市所属的省,对应着provinces表的id值

-- 子查询:  查询年龄最大的男生信息:
select * from students;
select * from  students where age =( select max(age) from students);

-- 拆表:
-- 例子:原有一个表 goods 里面有列名叫name, cate_name ,之后再创建一个新的表 goods_cates 然后将原表的部分数据赋值到新表:原列表数据不变
select cate_name from goods group by cate_name;   --拿到goods里的数据  group by 分组
insert into goods_cates (name) select cate_name from goods group by cate_name;  --将分组结果导入到 goods_cates 数据表中
    -- 接着同步表的数据:
    update goods as g inner join goods_cates as c on g.cate_name=c.name set g.cate_name=c.id;     关联数据
-- 设置一个外键  用新表限制原表 新增数据的筛选  有的数据就不合格:
alter table goods add foreign key (cate_name) references goods(id);     -- foreign key 表示的是外键  references  表示引用 
实际开发中,很少使用外键约束,会极大的降低表更新的效率 所以:
show create table goods;  --通过查看表创建语句来获取名称  就是获取外键约束名称 : CONSTRAINT 后面的就是约束
alter table goods drop foreign key 外键名称;   -- 通过获取的名称来删除外键的约束

-- 事务: 广泛应用于银行系统和订单系统等     表的引擎类型必须是  innodb类型才可以使用事务,这也是MySQL默认引擎
      所谓事务,它是一个操作系统,要么都执行,要么都不执行,是不可分割的单位。
事务四大特征:(ACID)
    1.原子性(A)  :整个事务中的所有操作要么成功要么不成功
    2.一致性(C)  :最终执行的结果是一样的   中间出了问题也不会出现数据丢了的情况
    3.隔离性(I)  :当事务开启之后:一个事务所做的修改在最终提交前,对其它事务是不可见的(一个sql的执行不会影响到另外一个sql)
    4.持久性(D)  :一旦事务提交 commit,则其所做的修改会永久保存到数据库 (此时即使数据库系统崩溃,修改的数据也不会丢失)
-- 事务开启 :begin; / start transaction;  中间:sql语句    事务提交 ,结束: commit;   回滚事务:放弃缓存中变更的数据: rollback;

-- 索引:索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针.
-- 更通俗的说:数据库索引(index)好比是一本书前面的目录,能加快数据库的查询速度
-- 一般应用系统对比数据库的读写比例在10:1 左右(即 有10次查询操作时 有一次写的操作)。
开启时间检测功能: set profiling=1;
查询第一万条数据ha-9999: select * from test_index where title='ha-9999';
查看执行的时间: show profiles;
为表 test_index 的 title列表创建索引: create index titlt_index on test_index(title(10));
执行查询语句: select * from test_index where title='ha-9999';
再次查看执行的时间: show profiles;  (时间变短了,当数据过多时 提高工作效率)

查看索引: show index from 表名;  --->key_name 索引名称
        -- create index titlt_index on test_index(title(10));
创建索引: create index 索引名称 on 表名(字段名称(长度));    长度=varchar的值  如果是int就不用写长度了
删除索引: drop index 索引名称 on 表名

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

itLaity

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值