MySQL学习笔记(二)

看来我是没有办法七天看完了。不过我一定会在寒假结束前学完的!

#先说一些杂七杂八的补充内容

(1)desc t1 :展示表格每列信息:如数据类型。主键列,自增列等。

(2)show create table  t1 :显示创建时写的语句。show create table  t1\G 可以将显示结果规范化(就是看起来方便点)。

(3)如果主键由多列构成的话,就新增一条语句,primary key(nid, pid)。

一、au_to increment自增列起始值与步长的更改

1. 更改起始值设置

  alter table t1 auto_increment = 10

2. 步长更改

  MySQL的步长更改是基于会话级别

  -session级别

  show session variables like 'auto_inc%';  #查看全局变量

  set session auto_increment_increment=2; #设置会话步长

  -global级别

  SqlServer的自增步长是基于表级别,即在创建表时可设置步长的值。(不过其实在mysql里面创建表的时候,在括号外面写一个auto_increment = 10也可以更改自增列自增初始值为10)

二、唯一索引

  作用:约束,快速查询

  unique  xxx(nid)     (xxx为自己编写的唯一索引的名字,nid为表中的列名,可以是多个,做联合唯一索引)

  与主键的区别:(1)唯一索引里可以有空值,但主键不行。(2)一张表里可以有多个唯一索引(非联合索引),但是只能有一个主键。

三、MySQL外键变种

1.一对一操作

  一对一:如一个用户只有一个博客网址

  操作方法:使用外键+唯一索引

  例子:

  create table userinfo1(
    id int auto_increment primary key,
    name char(10),
    gender char(10),
    email varchar(64)
    )engine=innodb default charset=utf8;

  create table admin(
    id int not null auto_increment primary key,
    username varchar(64) not null,
    password VARCHAR(64) not null,
    user_id int not null,
    unique uq_u1 (user_id),
    CONSTRAINT fk_admin_u1 FOREIGN key (user_id) REFERENCES userinfo1(id)
    )engine=innodb default charset=utf8;

2. 多对多操作

  多对多:一个人可以多多个博客,一个博客可以多人共用

  操作方法:一般会建立第三个表,有两列外键,不设置唯一索引 (剧情情况具体分析)

四、MySQL增删改查的补充知识

1. 增加数据

  (1)一次性插入多个数值

  insert into tb11(name,age) values('alex',12),('root',18);

  (2) 将t1表的内容插入t2当中

  insert into tb12(name,age) select name,age from tb11;

2. 查找数据

  (1)通配符——关键词为like

 select xx from t1 where name like "a_"
 select xx from t1 where name like "a%"

 # 第一个表示查找以a开头的俩字符的字符串,第二个表示查找以a开头的字符串,不限制长度

 

   (2) 筛选条件

    where / in / not in / between and / != / and /or /

  select  from tb12 where id != 1
  select  from tb12 where id in (1,5,12);
  select  from tb12 where id not in (1,5,12);
  select  from tb12 where id in (select id from tb11)
  select  from tb12 where id between 5 and 12; 

五、limit,order by与group by

1. limit 表示取查找内容的前n个

select  from t1 limit 4;

    select  from tb12 limit 0,10;  # 从第一个开始取,共取10个
    select  from tb12 limit 10,10; # 从第十一个开始取,共取10个
    select  from tb12 limit 20,10; # 从第二十一个开始取,共取10个

    select  from tb12 limit 10 offset 20; # 从第二十一个开始取,共取10个

2. order进行排序

      order by (列名) asc/dcs      #(dcs为从大到小进行排序,默认为asc)

  select  from tb12 order by id desc; 大到小
  select  from tb12 order by id asc;  小到大
  select  from tb12 order by age desc,id desc; #多条件排序

  取后10条数据
  select  from tb12 order by id desc limit 10;

3. group by 进行分组操作——结合聚合函数进行操作

  select count(id)/sum(id) from t1 group by (part_id);

   # 需要注意的是group与where不并存,在分组时进行筛选需要用having

  select count(id) from t1 group by (part_id) having count(id) > 10;

 

六、MySQL连表操作——重点

1.   第一种方法

select from userinfo5,department5 where userinfo5.part_id = department5.id

2.   第二种方法

(1)left join

  select from userinfo5 left join department5 on userinfo5.part_id = department5.id
# userinfo5左边全部显示,以左边的userinfo5.part_id为准,进行链接。右边没有的以null填充

(2)right join

  select from userinfo5 right join department5 on userinfo5.part_id = department5.id
# department5右边全部显示,以右边的department5.id为准,进行链接

(3)inner join

 

  select from userinfo5 innder join department5 on userinfo5.part_id = department5.id
#将出现null时一行隐藏,实际上出现的是交集

 

posted @ 2021-02-17 15:15  不知天高地厚的小可爱  阅读(86)  评论(0编辑  收藏  举报
1