MySQL笔记(二)

一、SQL语句“数据行”操作补充

 

1   insert into tb1(name,age) values('peng',20);   增加一条数据
2 
3   insert into tb1(name,age) values('peng',20),('sheng',19);  增加多条数据,用逗号隔开
4 
5   insert into tb2(name,age) select  name,age from tb1;  将t2表的name,age列全部插入到t1表中

 

 

 

1      delete from tb1;
2 
3   delete from db1 where id>5;    where后面是条件语句,在很多地方都适用
4 
5   delete from db1 where id!=5 ;       在MySQL中不等号的另外一种写法: id<>5 
6 
7   delete from db1 where id<5 or name='jack'; 

 

 

1   update tb2 set name='jack' where id>5 and name='lucy';
2 
3   update tb12 set name='robert',age=19 where id>12 and name='xx'

 

 

 

1    select * from tb1;
2 
3   select name,age from tb1;
4 
5   select where id>2 name='jack';
6 
7    select id,name as cname from tb12 where id > 10 or name ='xxx';  # 加个as表示给表头取一个别名,但是里面的内容不会变(name as cname)只是name取了别名
8 
9     select name,age,11 from tb12;  # 写一个常量(11)表示加了一列,并且这一列都是11

关于‘查’的其他:

 1 select * from tb1 where id!=1;
 2 
 3 select * from tb1 where id<>1;
 4 
 5 select * from tb1 where id in (1,5,12);
 6 
 7 select * from tb1 where id not in (1,5,12);
 8 
 9 select * from tb1 where id between 2 and 6;  # 闭区间
10 
11 select * from tb12 where id in (select id from tb11)   # in里面还可以去别的表查  会先执行括号里面的语句

通配符:下划线和百分号

以a开头 两种写法:
1、a% 表示%后面可以有任意多的字符 (ab,abc,acbhsjhj)
2、a_ 表示后面只能有一个位置(ab,ac)
拓展:%a%表示中间包含a的(只要有a就行)

select * from tb12 where name like "a%" 表示以a开头的
select * from tb12 where name like "%a" 表示以a结尾的
select * from tb12 where name like "a_"

分页:(翻页查看,比如百度查阅)limit

1 select * from tb3 limit 10;  查看前十条数据
2 
3 select * from tb3 limit 0,10;0表示起始位置,10表示查看多少条数据
4 
5 select * from tb12 limit 10 offset 20;  offset表示从哪开始,limit后面表示取多少条(这条代码和上面那条功能是一样的)

排序:order by  desc  asc

 1 select * from 表 order by 列 asc              - 根据 “列” 从小到大排列
 2 select * from 表 order by 列 desc             - 根据 “列” 从大到小排列
 3 select * from 表 order by 列1 desc,列2 asc    - 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序
 4 
 5 
 6  select * from tb12 order by id desc; 大到小     by后面表示通过id排列
 7  select * from tb12 order by id asc;  小到大 
 8  记忆方法:abcd  a在前面--asc从小到大排, d在后面--desc从大到小排。
 9 
10  select * from tb12 order by age desc,id desc;  ★优先按age排,age如果重复的话再根据id --》desc排
11                      
12  取后10条数据:
13  select * from tb12 order by id desc limit 10;

分组:group by

 1 select count(id),max(id),part_id from userinfo5 group by part_id;   【group by表示根据谁分组 max(id)重合的话取最大的id拿过来】
 2 聚合函数:把相同的放一块
 3 count 计数
 4 max
 5 min
 6 sum
 7 avg
 8                     
 9 ***** 如果对于聚合函数结果进行二次筛选时?必须使用having关键字,不能用where *****
10 elect count(id),part_id from userinfo5 group by part_id having count(id) > 1;  where里面一定不能出现聚合函数
11                     
12  select count(id),part_id from userinfo5 where id > 0 group by part_id having count(id) > 1;

 

连表操作:重要

 两个表或多张表放在一起查看
 1 连表操作(重要):  两个表或多张表放在一起查看
 2                 
 3                     select * from userinfo5,department5;  # 把两张表都拿出来,但没有告诉两张表的关系
 4                     写法1:
 5                     select * from userinfo5,department5 where userinfo5.part_id = department5.id;  # 建立关系userinfo5.part_id = department5.id
 6                     
 7                     写法2:(推荐)
 8                     select * from userinfo5 left join department5 on userinfo5.part_id = department5.id; # left join 左连接  两张表关系用on
 9                     # userinfo5左边全部显示 左边是userinfo5
10                     select * from department5 left join userinfo5 on userinfo5.part_id = department5.id;
11                     #相当与伪造了一个右连接  左边是department5
12                     
13                     
14                     # select * from userinfo5 right join department5 on userinfo5.part_id = department5.id;
15                     # department5右边全部显示 右边是department5
16                 
17                 
18                 inner:
19                     select * from userinfo5 inner join department5 on userinfo5.part_id = department5.id;
20                     将出现null时的一行隐藏

 

对于自增补充:

 1  2         desc t10; 看每个字段什么意思
 3         
 4         show create table t10; 查看这个表是怎么创建的   是横的显示
 5         
 6         show create table t10 \G;  竖的显示 看的更好
 7         
 8         alter table t10 AUTO_INCREMENT=20; 修改自增值
 9             
10 
11             
12         MySQL: 自增步长
13             基于会话级别: (一次登录就是一个会话)
14                 show session variables like 'auto_inc%';  ---->    查看全局变量
15                 set session auto_increment_increment=2;   ---->    设置会话步长
16                 # set session auto_increment_offset=10;
17             基于全局级别:
18                 show global variables like 'auto_inc%';        查看全局变量
19                 set global auto_increment_increment=2;         设置会话步长
20                 # set global auto_increment_offset=10;
21                 
22                 
23         SqlServer:自增步长:
24             基础表级别:
25                 CREATE TABLE `t5` (
26                   `nid` int(11) NOT NULL AUTO_INCREMENT,
27                   `pid` int(11) NOT NULL,
28                   `num` int(11) DEFAULT NULL,
29                   PRIMARY KEY (`nid`,`pid`)
30                 ) ENGINE=InnoDB AUTO_INCREMENT=4, 步长=2 DEFAULT CHARSET=utf8
31                 
32                 CREATE TABLE `t6` (
33                   `nid` int(11) NOT NULL AUTO_INCREMENT,
34                   `pid` int(11) NOT NULL,
35                   `num` int(11) DEFAULT NULL,
36                   PRIMARY KEY (`nid`,`pid`)
37                 ) ENGINE=InnoDB AUTO_INCREMENT=4, 步长=20 DEFAULT CHARSET=utf8

 

 

 1 desc t10; 看每个字段什么意思
 2 
 3 show create table t10; 查看这个表是怎么创建的 是横的显示
 4 
 5 show create table t10 \G; 竖的显示 看的更好
 6 
 7 alter table t10 AUTO_INCREMENT=20; 修改自增值
 8 
 9 MySQL: 自增步长
10 基于会话级别: (一次登录就是一个会话)
11 show session variables like 'auto_inc%'; ---->    查看全局变量
12 set session auto_increment_increment=2; ---->    设置会话步长
13 # set session auto_increment_offset=10;
14 基于全局级别:
15 show global variables like 'auto_inc%';    查看全局变量
16 set global auto_increment_increment=2; 设置会话步长
17 # set global auto_increment_offset=10;
18 
19 
20 SqlServer:自增步长:
21 基础表级别:
22 CREATE TABLE `t5` (
23 `nid` int(11) NOT NULL AUTO_INCREMENT,
24 `pid` int(11) NOT NULL,
25 `num` int(11) DEFAULT NULL,
26 PRIMARY KEY (`nid`,`pid`)
27 ) ENGINE=InnoDB AUTO_INCREMENT=4, 步长=2 DEFAULT CHARSET=utf8
28 
29 CREATE TABLE `t6` (
30 `nid` int(11) NOT NULL AUTO_INCREMENT,
31 `pid` int(11) NOT NULL,
32 `num` int(11) DEFAULT NULL,
33 PRIMARY KEY (`nid`,`pid`)
34 ) ENGINE=InnoDB AUTO_INCREMENT=4, 步长=20 DEFAULT CHARSET=utf8

单列唯一索引和联合唯一索引

 

唯一索引:1、约束 2、加速查找 (索引就是为了加速查找)
唯一索引:单列唯一索引和联合唯一索引

create table t1(
id int ....,
num int,
xx int,
unique 唯一索引名称 (列名,列名), # 限制这个列名是唯一的 (联合唯一:这两个值不能完全一样) 只写一个列名是单列的唯一
constraint ....
)

唯一:
约束不能重复(可以为空)
PS: 主键不能重复(不能为空)
加速查找

 

posted @ 2020-03-31 08:06  Arthur_hsp  阅读(119)  评论(0编辑  收藏  举报