数据库级别
一次性操作,创造数据库之类的只需要一次性操作
显示数据库
show databases; // 显示数据库
创建数据库
create database 数据库名称 default charset utf8 collate utf8_general_ci; // 创建数据库
使用数据库
use 数据库名称; // 使用数据库
删除数据库
drop database 数据库名称; // 删除数据库
表级别
一次性操作,创造数据表之类的也只需要一次性操作
查看数据库中所有表
use 数据库名称; show tables; // 查看数据库中的表desc 表名; // 查看具体某一表中的内容
创建表
create table 表名(nid int, name varchar(10)); // 创建表
create table 表名( 列名 类型 是否可以为空, // null表示空 列名 类型 是否可以为空 // not null 表示不可空)engine=InnoDB default charset=utf8;
创建表举例(带默认值)
create table tb1 ( nid int not null default 1, num int null);
自增
一张表只能有一个自增列
create tble tb1 ( nid int not null auto_increment primary key, num int null);
主键
一张表之能有一个主键,唯一不能重复,并且不能为空,一般情况下会将自增列设置成主键
create table tb1( // 创建一张表 nid int not null auto_increment primary key, age int not null default 10, name varchar(16))engine-innodb default charset=utf8;
唯一
可以为null。其余跟主键相似。
外键
外键就是表A中数据关联表B中的数据。
添加外键
// 添加外键语法// 可以解读为:修改表,给表添加约束,约束的名称就是外键名称。外键字段就是表中需要约束的字段,与另一张表相关联alter table 从表 add constraint 外键名称(形如:fk_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
// 添加外键举例create table userinfo( // 创建人 nid int not null auto_increment primary key, name varchar(10), age int, part_nid int)engine=innodb default charset=utf8;create table part( // 创建部门 nid int not null auto_increment primary key, caption varchar(20))engine=innodb default charset=utf8;// 添加部门insert into part(caption) values('AD');insert into part(caption) values('BD');insert into part(caption) values('CD');// 添加人insert into userinfo(name,age,part_nid) values('wang',19,1);insert into userinfo(name,age,part_nid) values('jave',30,1);insert into userinfo(name,age,part_nid) values('ios',21,2);insert into userinfo(name,age,part_nid) values('swift',40,30);// 添加外键alter table userinfo add constraint fk_userinfo_part foreign key userinfo(part_nid) references part(nid);// 添加外键之后继续添加人,此时会报错。因为我们已经添加外键约束,此时外键最大为3,这时候我们添加30是有问题的。insert into userinfo(name,age,part_nid) values('swift',40,30);
也可以在创建的时候添加外键
create table color( nid int not null auto_increment primary key, name varchar(10) not null default 'red' )engine=innodb default charset=utf8;create table fruit( nid int not null auto_increment primary key, color_id int not null, name varchar(10) null, constraint fk_fruit_color foreign key (color_id) reference color(nid))engine=innodb default charset=utf8;
删除表
drop table 表名; // 删除表
清空表内容
delete from 表名; // 清空表内容(但是表还会保留)。下次插入数据自增不会回到原点。
truncate table 表名; // 清空表内容(但是表还会保留)。下次插入数据自增会回到原点。效率较高一些。
修改表
添加列
alter table 表名 add 列名 类型;
删除列
alter table 表名 drop column 列名
修改列
alter table 表名 modify column 列名 类型;
alter table 表名 change 原列名 新列名 类型;
添加主键
alter table 表名 add primary key(列名);
删除主键
alter table 表名 drop primary key;
添加外键
alter table 从表 add constraint 外键名称(形如:fk_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
删除外键
alter table 表名 drop foreign key 外键名称;
添加默认值
alter table 表名 alter 列名 set default 默认值;
删除默认值
alter table 表名 alter 列名 drop default;
数据行级别
需要多次操作
增
直接增加数据
// 增加多条数据insert into 表名(列名1,列名2) values(列名1值,列名2值),(列名1值,列名2值);// 增加单条数据insert into 表名(列名1,列名2) values(列名1值,列名2值);
从一张表导入数据到另一张表
insert into 表1(列表1,列表2) select 列表1,列表2 from 表2;
// 创建表 userinfocreate table userinfo( nid int not null auto_increment primary key, name varchar(20), age int not null default 1 )engine=innodb default charset=utf8;// 创建表 partcreate table part( nid int not null auto_increment primary key, caption varchar(10), gender varchar(10))engine=innodb default charset=utf8;// part表插入数据insert into part(caption,gender) values('Java','1'),('Swift','2'),('MySQL','4');// userinfo表插入数据insert into userinfo(name,age) value('Lee',18);// 从part表中查 caption,gender字段的值插入到表userinfo中name,age中。其中 gender 为varchar类型,age为int,类型。// 如果内部可以转换成功的话,就可以成功插入insert into userinfo(name,age) select caption,gender from part;// 这种转换就会出错insert into userinfo(name,age) select caption,caption from part;
删
delete from 表;
delete from userinfo;
改
// 会将列所有都改成统一值update 表 set 列=值;
// nid为1 name改成Lee update userinfo set name='Lee' where nid=1;
// nid为2 name改成Wo,age改为12 update userinfo set name='Wo',age=12 where nid=2;
查
select * from 表名;
// 查找nid大于等于12的所有值,并且*匹配所有值,也就是将userinfo表中的nid,name,age都拿出来select * from userinfo where nid>=12;
// 查找nid大于等于12,只将name这一列拿出来select name from userinfo where nid>=12;
select name,age from userinfo wherw nid>=12;
其他
条件语句
select * from 表 where 各种条件;
// 满足id>1,name!='wa',num=12的所有值 select * from userinfo where id > 1 and name != 'wa' and num = 12;
// 满足(4~16)范围select * from userinfo where id between 4 and 16;
select * from userinfo where id in (12,22,33);
select * from userinfo where id not in (12,22,33);
select * from userinfo where id in (select nid from part);
通配符(也就是模糊搜索)
// 查找userinfo中name列 W开头的所有字符串(多个字符)// 例如:W122,W010select * from userinfo where name like 'W%';
// 查找userinfo中name列 W开头的所有字符串(一个字符)// 例如:W1// W12 无法匹配select * from userinfo where name like 'W_';
分页
// 表示从表中去限制条件的数据select * from 表 limit 限制条件;
// 只取前5条select * from userinfo limit 5;
// 用来做分页,表示从userinfo 从第5行开始之后取2行。(数据库计算从0开始)select * from userinfo limit 5,2;
// 用来做分页,表示从userinfo 从第2行开始之后取5行select * from userinfo limit 5 offset 2;
排序
select * from 表 order by 条件;
// 根据nid,进行从小到大排列select * from userinfo order by nid asc;
// 根据age,从大到小排列select * from userinfo order by age desc;
// 根据age,从大到小排列;如果age相同,根据nid从小到大排列select * from userinfo order by age desc , nid asc;
分组
select * from 表 group by 条件
select * from 表 group by 条件 having 约束
create table userinfo( // 创建人 nid int not null auto_increment primary key, name varchar(10), age int, part_nid int)engine=innodb default charset=utf8;create table part( // 创建部门 nid int not null auto_increment primary key, caption varchar(20))engine=innodb default charset=utf8;// 添加部门insert into part(caption) values('AD'),('BD'),('CD');// 添加人insert into userinfo(name,age,part_nid) values('python',19,1),('jave',30,1),('ios',21,2),('swift',40,2),('wang',21,3),('lee',201,3);// 添加外键alter table userinfo add constraint fk_userinfo_part foreign key userinfo(part_nid) references part(nid);
// 通过part_nid 对表 userinfo 进行分组select part_nid from userinfo group by part_nid;
// 报错,因为nid有多个值,不知道该如何取某一个值select part_nid,nid from userinfo group by part_nid;
// 分组,取出part_nid,相同的为一组。取nid最大值select part_nid , max(nid) from userinfo group by part_nid;
part_nid | max(nid) |
---|---|
1 | 2 |
2 | 4 |
3 | 6 |
select part_nid ,max(nid),min(nid) from userinfo group by part_nid;
part_nid | max(nid) | min(nid) |
---|---|---|
1 | 2 | 1 |
2 | 4 | 3 |
3 | 6 | 5 |
// 其中 count(nid) 就是计算part_nid 相同的 nid 的个数。select part_nid,max(nid),min(nid),sum(nid),count(nid) from userinfo group by part_nid;
part_nid | max(nid) | min(nid) | sum(nid) | count(nid) |
---|---|---|---|---|
1 | 2 | 1 | 3 | 2 |
2 | 4 | 3 | 7 | 2 |
3 | 6 | 5 | 11 | 2 |
// 别名select part_nid as nid ,max(nid) as max,min(nid) as min,sum(nid) as sum,count(nid) as count from userinfo group by part_nid;
nid | max | min | sum | count |
---|---|---|---|---|
1 | 2 | 1 | 3 | 2 |
2 | 4 | 3 | 7 | 2 |
3 | 6 | 5 | 11 | 2 |
// 根据聚合条件进行筛选,此处不可用 where条件语句 应该用 havingselect part_nid as nid ,max(nid) as max,min(nid) as min,sum(nid) as sum,count(nid) as count from userinfo group by part_nid having count>1;
nid | max | min | sum | count |
---|---|---|---|---|
1 | 2 | 1 | 3 | 2 |
2 | 4 | 3 | 7 | 2 |
3 | 6 | 5 | 11 | 2 |
联合
// 联合自动去重select nicknamefrom A union select namefrom B
// 联合不做任何处理select nicknamefrom A union all select namefrom B
// 创建表 userinfocreate table userinfo( nid int not null auto_increment primary key, name varchar(20), age int not null default 1 )engine=innodb default charset=utf8;// 创建表 partcreate table part( nid int not null auto_increment primary key, caption varchar(10), gender varchar(10))engine=innodb default charset=utf8;// part表插入数据insert into part(caption,gender) values('Java','1'),('Swift','2'),('MySQL','4');// userinfo表插入数据insert into userinfo(name,age) value('Lee',18);
// 无重合数据,全部展示select caption from part union select nid from userinfo
caption |
---|
'Java' |
'Swift' |
'MySQL' |
1 |
// 因为会有重合,所有就默认去重select nid from part union select nid from userinfo
nid |
---|
1 |
2 |
3 |
// 不会去重select nid from part union all select nid from userinfo
nid |
---|
1 |
2 |
3 |
1 |
连表
// 无对应关系,全部显示select A.num , A.name,B.namefrom A,B
// 有对应关系select A.num , A.name,B.namefrom A,B where A.nid = B.nid
select A.num, A.name ,B.namefrom A left join B on A.nid = B.nid
select A.num, A.name ,B.namefrom A inner join B on A.nid = B.nid
create table userinfo( // 创建人 nid int not null auto_increment primary key, name varchar(10), age int, part_nid int)engine=innodb default charset=utf8;create table part( // 创建部门 nid int not null auto_increment primary key, caption varchar(20))engine=innodb default charset=utf8;// 添加部门insert into part(caption) values('AD'),('BD'),('CD'),('DD');// 添加人insert into userinfo(name,age,part_nid) values('python',19,1),('ios',21,2),('wang',41,3);// 添加外键alter table userinfo add constraint fk_userinfo_part foreign key userinfo(part_nid) references part(nid);
// 查询结果相当于 userinfo 表查询每一行,然后part查询所有行进行匹配一次,select * from userinfo,part;
nid | name | age | part_nid | nid | caption |
---|---|---|---|---|---|
1 | python | 19 | 1 | 1 | AD |
1 | python | 19 | 1 | 2 | BD |
1 | python | 19 | 1 | 3 | CD |
2 | ios | 21 | 2 | 1 | AD |
2 | ios | 21 | 2 | 2 | BD |
2 | ios | 21 | 2 | 3 | CD |
3 | wang | 41 | 3 | 1 | AD |
3 | wang | 41 | 3 | 2 | BD |
3 | wang | 41 | 3 | 3 | CD |
// 添加条件进行查询select * from userinfo,part where userinfo.part_nid = part.nid;
nid | name | age | part_nid | nid | caption |
---|---|---|---|---|---|
1 | python | 19 | 1 | 1 | AD |
2 | ios | 21 | 2 | 2 | BD |
3 | wang | 41 | 3 | 3 | CD |
// 添加条件进行查询 on 之后是条件select * from userinfo left join part on userinfo.part_nid = part.nid;
nid | name | age | part_nid | nid | caption |
---|---|---|---|---|---|
1 | python | 19 | 1 | 1 | AD |
2 | ios | 21 | 2 | 2 | BD |
3 | wang | 41 | 3 | 3 | CD |
select * from part left join userinfo on userinfo.nid = part.nid;
nid | caption | nid | name | age | part_nid |
---|---|---|---|---|---|
1 | AD | 1 | python | 19 | 1 |
2 | BD | 2 | ios | 21 | 2 |
3 | CD | 3 | wang | 41 | 3 |
4 | DD | NULL | NULL | NULL | NULL |
// 对 left join 进行过滤,有为NULL的值进行清理select * from part inner join userinfo on userinfo.nid = part.nid;
nid | caption | nid | name | age | part_nid |
---|---|---|---|---|---|
1 | AD | 1 | python | 19 | 1 |
2 | BD | 2 | ios | 21 | 2 |
3 | CD | 3 | wang | 41 | 3 |
查询表内数据
select * from 表名; // 查询表内数据
作者:白日梦大爷
链接:https://www.jianshu.com/p/3d68047d216b
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦