数据库的操作

操作数据库

连接数据库

mysql -uroot -p

退出数据库

exit
quit

查看已创建的数据库

show databases;

查看数据库版本

select version;

创建数据库

create database 库名;
create database test;

查看创建数据库的命令

show create database 数据库名;
show create database test;

查看当前使用的数据库

select database();

使用数据库

use 数据库名;
use test;

删除数据库

drop database 数据库名;
drop database test;

操作数据表

查看当前数据库中的所有表

show tables;

创建表

create table 表名(字段 类型及约束条件);
create table students (
sid int primary key auto_increment,
sname varchar(20) not null,
gender enum("male","female"),
brith varchar(10)
)engine=INNODB default charset=utf8;

查看表的创建语句

show create table 表名;
show create table students;

查看表描述信息

desc 表名;
desc students;

添加表字段

alter table 表名 add 字段 类型及约束条件;
alter table students add high float default 155;

修改表字段

alter table 表名 modify 字段 类型及约束条件;(用于修改字段的类型和约束条件,不可修改字段)
alter table students modify high int;

alter table 表名 change 旧字段 新字段 类型及约束条件;(可修改字段及约束条件)
alter table students change high h int;

删除表字段

alter table 表名 drop 字段;
alter table students drop h;

操作数据

新增数据

1.整行插入
insert into 表名 values (数据);
insert into students values (1,"lh","male","1996-11-02")

2.指定列中插入数据
insert into 表名 (字段1,字段2) values ('数据1','数据2')

3.指定列中插入多条数据
insert into 表名  (字段1,字段2) values (数据1,数据2),(数据3,数据4)
insert into students vaules (3,"feng","male","1990-05-20"),(4,"yun","female","1990-08-16"),(5,"lei","male","1990-12-21");

修改数据

update 表名 set 字段1=数据1,字段2=数据2;
update students set sname="ida";

删除数据

删除表中全部数据
delete from 表名 ;
delete from students; 

删除表中指定数据
delete from 表名 where 条件;
delete from students where sid=5;

逻辑删除:在表中增加字段,若表示删除改数据则修改

alter table students add is_del enum("0","1") default "0";
update  students ser is_del="1";  

查询数据

查询整个表数据

select * from 表名;
select * from students;

查询指定字段数据

select 字段 from 表名
select sname from students;

查询指定字段数据,并给字段起别名

select 字段 别名 from 表名;
select sname n from students ;

查询指定字段并去重

select distinct 字段1 from 表名;
select distinct sname from students;

where子句

where子句通常结合增删改查使用,用于做筛选的条件。

select * from students where sid=1;

比较运算符

运算符
=等于
>大于
>=大于等于
<小于
<=小于等于
!=或<>不等于
select * from students where gender="male";

逻辑运算符

运算符
and
or
not

模糊查询

like关键字用来进行模糊查询,并且结合%以及_使用。
• % 表示任意多个任意字符
• _ 表示一个任意字符

查询姓名中l字母开头的学生信息
select * from students where sname like "l%";

查询姓名中带有a的学生信息
select * from students where sname like "%a%";

查询姓名中只有三位的学生信息
select * from students where sname like "___";

范围查询

关键字
in
between … and
查询id为1,3,5的学生信息
select * from students where sid in (1,3,5);
查询id在3-5的学生信息
select * from students where sid between 3 and 5 ;

空判断

关键字
is null
is not null非空
查询没有生日的学生信息
select * from students where brith is null;

常用聚合函数

count总数

求表中的总人数
select count(*) from students ;
求男性人数
select count(*) from students where gender="male";

max()最大值

查询女性最大的id
select max(sid) from students where gender="female";

min()最小值

查询女性最小的id
select min(sid) from students where gender="female";

sum求和

求男性id和
select sum(sid) from students where gender="male";

avg平均值

求未删除男性的id的平均值,保留一位小数
select round(avg(sid),1) from students where is_del="0";

分组与分组后的筛选

分组

在数据库中,通过 group by 将查询结果按照1个或多个字段进行分组,字段值相同的为一组.

select 字段 from 表名 goup by 字段
计算男女的总数
select gender,count(*) from students group by gender;

通过group_concat(…)查看每组的详细信息

select group_concat(sname,":",brith) from students ground by gender; 

分组后筛选使用having 条件

查询男生女生总数大于2的姓名
select group_concat(sname) from students group by gender having count(*)>2;

排序

order by 字段 默认升序
order by asc 字段 指定升序
order by desc 字段 指定降序

查询身高在170-180之间的男性,并高到低降序,当身高相同时,按照id从低到高升序。
select * from students where gender="male" and high between 170 and 180 order by high desc,sid asc;

限制 limit 只能写在句尾。

limit begin,length
begin为偏移量,起始位置。
length为条数。

查询4-6个学生信息
select * from students limit 3,4;

表连接

再创建一个sc表。
create table sc (
sid tinyint not null,
cid tinyint not null,
score int
) engine=innodb default charset=utf8;
向表sc中插入数据
insert into sc values (1,1,80),(1,2,90),(1,3,99),(2,1,70),(2,2,60),(2,3,80),(3,1,80),(3,2,80),(3,3,80);

内连接

select * from 表名1 别名1 inner join 表名2 别名2 on 别名1.字段=别名2.字段;
select * from students s inner join sc c on s.sid=c.sid;

当且仅当两个表中的数据都符合on后面的条件的时候,才会被select出来.

左连接

select * from 表名1 别名1 left join 表名2 别名2 on 别名1.字段=别名2.字段;
select * from students s left join sc c on s.sid=c.sid;

在查询的时候,以left join 这个关键字左边的表为主表,会将这个表中的数据全部查询出来,如果右表中没有这条数据,则用NULL字段表示.

右连接

select * from 表名1 别名1 right join 表名2 别名2 on 别名1.字段=别名2.字段;
select * from students s right join sc c on s.sid=c.sid;

在查询的时候,会以right join 这个关键字右边的表为主,然后将符合条件的查询出来,左表中没有的字段,使用NULL进行补充。

子查询

一条select语句结果作为另一条select语法一部分(查询条件,查询结果,表等)select …查询字段 … from … 表… where … 查询条件

查询身高最高的男性的姓名和生日
select sname,brith from students where high=(select max(high) from students) and gender="male";

可以将一条查询语句作为另外一个查询语句的条件和表,再次进行查询.

自关联

可以简单的理解为自己与自己进行连接查询。

外键

MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。
主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。一个表可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。

定义外键时,需要遵守下列规则:

  • 1.主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。
  • 2.必须为主表定义主键。
  • 3.主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
  • 4.在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。
  • 5.外键中列的数目必须和主表的主键中列的数目相同。
  • 6.外键中列的数据类型必须和主表主键中对应列的数据类型相同。

创建表时设置约束条件

语法:
constraint 外键约束名 foreign key (字段1,字段2) references 主表名(字段1,字段2)
举例:
create table course(
id int primary key auto_increment,
name varchar(20),
sid int,
constraint fk foreign key (sid) references students(sid)
)engine=innodb default charset=utf8;

删除约束条件

语法:
alter table 从表名 drop foreign key 外键约束名;
例子:
alter table course drop foreign key fk;

修改表时添加外键约束

语法:
alter table 从表名 add constraint 外键约束名 foreign key (字段1,字段2) references 主表名(字段1,字段2);
举例:
alter table course add constraint fk foreign key (sid) references students(sid);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值