为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL语句

标签:
MySQL

数据库级别

一次性操作,创造数据库之类的只需要一次性操作

显示数据库
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中的数据。

  1. 添加外键

// 添加外键语法// 可以解读为:修改表,给表添加约束,约束的名称就是外键名称。外键字段就是表中需要约束的字段,与另一张表相关联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);
  1. 也可以在创建的时候添加外键

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;

数据行级别

需要多次操作

  1. 直接增加数据

// 增加多条数据insert into 表名(列名1,列名2) values(列名1值,列名2值),(列名1值,列名2值);// 增加单条数据insert into 表名(列名1,列名2) values(列名1值,列名2值);
  1. 从一张表导入数据到另一张表

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;
  • 其他

  1. 条件语句

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);
  1. 通配符(也就是模糊搜索)

// 查找userinfo中name列 W开头的所有字符串(多个字符)// 例如:W122,W010select * from userinfo where name like 'W%';
// 查找userinfo中name列 W开头的所有字符串(一个字符)// 例如:W1// W12 无法匹配select * from userinfo where name like 'W_';
  1. 分页

// 表示从表中去限制条件的数据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;
  1. 排序

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;
  1. 分组

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_nidmax(nid)
12
24
36
select part_nid ,max(nid),min(nid) from userinfo group by part_nid;
part_nidmax(nid)min(nid)
121
243
365
// 其中 count(nid) 就是计算part_nid 相同的 nid 的个数。select part_nid,max(nid),min(nid),sum(nid),count(nid) from userinfo group by part_nid;
part_nidmax(nid)min(nid)sum(nid)count(nid)
12132
24372
365112
// 别名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;
nidmaxminsumcount
12132
24372
365112
// 根据聚合条件进行筛选,此处不可用 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;
nidmaxminsumcount
12132
24372
365112
  1. 联合

// 联合自动去重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
  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;
nidnameagepart_nidnidcaption
1python1911AD
1python1912BD
1python1913CD
2ios2121AD
2ios2122BD
2ios2123CD
3wang4131AD
3wang4132BD
3wang4133CD
// 添加条件进行查询select * from userinfo,part where userinfo.part_nid = part.nid;
nidnameagepart_nidnidcaption
1python1911AD
2ios2122BD
3wang4133CD
// 添加条件进行查询 on 之后是条件select * from userinfo left join part on userinfo.part_nid = part.nid;
nidnameagepart_nidnidcaption
1python1911AD
2ios2122BD
3wang4133CD
select * from part left join userinfo on userinfo.nid = part.nid;
nidcaptionnidnameagepart_nid
1AD1python191
2BD2ios212
3CD3wang413
4DDNULLNULLNULLNULL
// 对 left join  进行过滤,有为NULL的值进行清理select * from part inner join userinfo on userinfo.nid = part.nid;
nidcaptionnidnameagepart_nid
1AD1python191
2BD2ios212
3CD3wang413

查询表内数据

select * from 表名; // 查询表内数据



作者:白日梦大爷
链接:https://www.jianshu.com/p/3d68047d216b



点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消