mysql数据库的操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql数据库的操作相关的知识,希望对你有一定的参考价值。

查看数据库状态Sudo service mysql status

启动Sudo service mysql start

停止Sudo service mysql stop

重启Sudo service mysql restart

进入mysql 的方法:进入本地的mysql:mysql -uroot -p;  进入其他的mysql: mysql -h -P3306 -uroot -pmysql

展示数据库:show databases

创建数据库:create database 数据库名 character set utf8

展示数据库的创建过程:show create database 数据库名

删除数据库: drop database 数据库名

选择数据库:use database

查看当前所在的数据库;select database()

展示数据库的表:show tables

删除表:drop table 表名

创建表: create table 表名()

1、所有列都插入值

语法:insert into table values(v1,v2,v3….)

特点:列值同数,列值同序

2、为指定列插入值

语法:insert into table(col1,col2,col3) values(v1,v2,v3)  给一个列插入值就用value

特点:指定顺序,列值对应

3、一次性插入多条记录

语法:insert into table(co1,col2,col3…)values

(v1,v2,v3),

(v1,v2,v3),

(v1,v3,v3)…..

查看表的信息:desc 表名

查看整个表的信息:select * from 表名

查看指定的列:select 列名1,列名2  from 表名

查看列起别名:elect 列名1 as 名字1,列名2 as 名字2  from 表名

去除列的重复数据:select distinct 列名 from 表名

数据库的导出:

mysqldump -uroot -p 数据库 > /home/python/Desktop/(路径)zuoyadaochu(直接在终端输入)

 

数据库的导入:先创建空的数据库并选中,

source  /home/python/Desktop/(路径)zuoyadaochu(名字);

 

修改数据:

修改制定数据:update TblTeacher set tTname=‘孙悟空‘ where tTld=7;

 

修改全部数据:update TblTeacher set tTname=‘孙悟空‘

 

删除数据:

delete from TblTeacher(表名) where tTld=5(不加where 删除整个表)

Update test set is_del=1 where name=张三

 

约束介绍

主键约束:create table tab_PK( id int unsigned(无符号) primary key auto_increment(自动增长), name varchar(30));

 

唯一约束:create table UQ(

    -> id int unsigned primary key auto_increment,

-> name varchar(10) unique);    unique代表不能重复的

 

非空约束:not null

默认约束:not null default()

检查约束:check(age>0 and age<100)  (检查约束在mysql中不起作用)

外键约束:先创建主键的表,再创建外键的表,额删除的话先删除外键的,再删除主键的

        foreign key(id)(外键) references class(id)(主键)

 

对列进行增删改查:

查询一列:select 列名 from 表名

增加一列:alter table tablename add 列名 数据类型

删除一列:alter table tablename drop column 列名

修改列的数据类型:alter table tablename modify 列名 数据类型

修改列的数据类型并改名:alter table tablename change old_colname new_colname 数据类型

                        (alter table teacher change ttname name varchar(10))

 

填加约束:tablename表名  con_name约束的名字  col_name列名

填加主键约束:alter table table_name add constraint con_name primary key(col_name)

填加外键约束:alter table table_name add constraint con_name foreign key(col_name) references table(col_name)

填加检查约束:alter table table_name add constraint con_name check(expression)

填加默认约束::alter table table_name modify col_name default value

填加自动增长:alter table table_name modify column col_name type auto_increment

填加非空约束:alter table table_name modify 列名 数据类型 not null

填加唯一约束:alter table table_name add constraint con_name unique(列名)

 

 

条件查询:

1、查询学生表中所有年纪大于18岁的同学的个人信息

select * from t_student where c_age > 18

2、查询学生表所有年纪小于80岁的同学的姓名、性别、身份证号

select c_name as ‘姓名‘,c_gender as ‘性别‘,c_cardid as ‘身份证号‘ from t_student

where c_age < 80

3、查询所有男同学的信息

select * from t_student where c_gender = ‘男‘

4、查询所有年龄大于30岁,并且性别为男的同学的个人信息

select * from t_student where c_age >30 and c_gender =‘男‘

5、查询所有年龄大于30岁,或者性别为男的同学的个人信息

select * from t_student where c_age >30 or c_gender =‘男‘

6、查询所有年龄在20岁以下(包含20岁),并且性别为女的同学的个人信息

select * from t_student where c_age <=20 and c_gender = ‘女‘

 

模糊查询:

1、查询年龄在18-80岁之间所有学生的信息。(2种写法 and&between)

select * from t_student where c_age >=18 and c_age <=80

select * from t_student where c_age between 18 and 80

2、查询年龄不在18-80岁之间所有学生的信息。(2种写法,not ,between)

select * from t_student where  not (c_age >=18 and c_age <=80)

select * from t_student where c_age  not between 18 and 80

3、查询年龄为18和28和38学生的信息。(or and in )

select * from t_student where c_age not  in (18,28,38)

4、查询年龄不是18、28、38的学生信息(2种写法 !=,not in )

select * from t_student where not ( c_age = 18 or c_age =28 or c_age =38)

 

使用通配符进行模糊查询

 

1、查询所有姓孙的同学

select * from t_student where c_name like ‘孙%‘

2、查询所有姓名以‘娘‘结尾的同学

select * from t_student where c_name like ‘%娘‘

3、查询所有姓名中包含‘二’和三’的同学信息

select * from t_student where c_name like ‘%二%‘ or c_name like ‘%三%‘

4、查询所有姓孙并且名字一共只有两个字的同学

select * from t_student where c_name like ‘孙_‘

5、查询名字一共是两个字的同学信息

select * from t_student where c_name like ‘__‘

6.null处理

查询数学成绩为null的信息:

select * from t_student where c_math is null (is not null)

 

 

Order by 排序 order by asc/desc

 

1、查询所有学员的信息,并将结果按照年龄降序排列

select * from t_student order by c_age desc

2、查询所有学员的姓名和年纪,并将结果按照年龄降序排列

Select c_name,c_age from t_student order by c_age desc;

3、查询t_score表,将成绩按照英语成绩降序排列

select * from t_score order by c_english desc

4、查询t_score表,将成绩按照英语成绩降序排列,并且按照数学成绩升序排列

select *from t_score order by c_english desc,c_math asc

 

 

例子:

# 数据第三天

 

## **1、数据分组**

 

### 1、将学生表按照性别分组(列名只能写性别)

 

1、如果根据某一列进行分组,那么,select 后面跟的类名必须是分组的列名。

 

如果说,select 后面想查询分组列名之外的其他列,其他列需要放到函数中。

 

2、group_concat(列名)能够查询分组后的信息

 

### 2、查看每组学生姓名

 

select c_gender,group_concat(c_name) from t_student group by c_gender;

 

## **2、聚合函数**

 

### 1、获取班级总人数

 

select count(*) from t_student

 

### 2、获取班级男生总人数和女生总人数

 

select  c_gender,count(*) from t_student group by c_gender

 

### 3、获取t_score表中的数学平均成绩、英语平均成绩

 

select avg(c_math) as ‘数学平均成绩‘,avg(c_english) as ‘英语平均成绩‘ from t_score

 

### 4、注意null值问题

 

聚合函数不计算null值

 

### 5、获取t_score中英语成绩最高分

 

select  max(c_english) from t_score

 

### 6、获取t_score中英语成绩最低分

 

select  min(c_english) from t_score

 

### 7、round保留指定位数小数

round("数字",保留的位数)

 

 

 

## **3、分组聚合函数**

 

### 1、获取学生表中男同学和女同学的个数

 

 

 

### 2、从学生表中查询出每个班级的班级ID,和班级中男同学的个数

 

select c_class_id ,count(*) from t_student where c_gender =‘男‘ group by c_class_id

 

### 3、从学生表中查询出每个班级的班级ID,班级总人数,以及该班级的平均年龄

 

select c_class_id as ‘班级ID’,count(*) as ‘班级总人数‘,round(avg(c_age),2) as ‘平均年龄‘ from t_student group by c_class_id

 

 

 

### 4、查询班级人数超过三个人的班级

 

1、求出每个班级的人数

 

?         根据班级分组

 

?         获取每个班级的人数

 

?         where 班级人数 > 三

 

select c_class_id,count(*) from t_student where count( * ) > 3 group by c_class_id

### 5、在学生表中,按照性别分组,查询平均年龄超过40岁的分组和每组的姓名

create table order_info(   id int unsigned primary key auto_increment not null,   商品名称 varchar(30),   商品编号 varchar(30),   销售数量 int,   销售价格 float,   购买人 varchar(30),   销售日期 date,   销售员 varchar(30));

 

insert into order_info values(0,‘可口可乐‘,‘100101‘,3,36,‘第一百货商店‘,‘2018-01-01‘,‘王大锤‘)

 

,(0,‘康师傅方便面‘,‘110101‘,2,24,‘爱民商场‘,‘2018-01-03‘,‘王大锤‘),

 

(0,‘娃哈哈矿泉水‘,‘100201‘,4,18,‘万发超市‘,‘2018-01-03‘,‘王大锤‘),

 

(0,‘乐百氏果冻‘,‘140101‘,5,12,‘一中超市‘,‘2018-01-04‘,‘王大锤‘),

 

(0,‘青岛啤酒‘,‘100301‘,3,30,‘第一百货‘,‘2018-01-04‘,‘王大锤‘),

 

(0,‘傻子瓜子‘,‘120101‘,4,25,‘光明小区批发部‘,‘2018-01-03‘,‘李狗蛋儿‘),

 

(0,‘康师傅方便面‘‘,‘110101‘,4,25,‘万发超市‘,‘2018-01-03‘,‘李狗蛋儿‘),

 

(0,‘乐百氏果冻‘‘,‘140101‘,2,30,‘一中超市‘,‘2018-01-08‘,‘李狗蛋儿‘),

 

(0,‘傻子瓜子‘‘,‘120101‘,2,30,‘爱民商场‘,‘2018-01-09‘,‘李狗蛋儿‘),

 

(0,‘康师傅方便面‘,‘110101‘,2,24,‘爱民商场‘,‘2018-01-03‘,‘王刚蛋‘),

 

(0,‘娃哈哈矿泉水‘,‘100201‘,4,18,‘万发超市‘,‘2018-01-03‘,‘王刚蛋‘),

 

(0,‘乐百氏果冻‘,‘140101‘,5,12,‘一中超市‘,‘2018-01-04‘,‘王刚蛋‘),

 

(0,‘青岛啤酒‘,‘100301‘,3,30,‘第一百货‘,‘2018-01-04‘,‘王刚蛋‘),

 

(0,‘傻子瓜子‘,‘120101‘,4,25,‘光明小区批发部‘,‘2018-01-03‘,‘王刚蛋‘),

 

(0,‘康师傅方便面‘‘,‘110101‘,4,25,‘万发超市‘,‘2018-01-03‘,‘王刚蛋‘),

 

(0,‘乐百氏果冻‘‘,‘140101‘,2,30,‘一中超市‘,‘2018-01-08‘,‘王刚蛋‘),

 

(0,‘傻子瓜子‘‘,‘120101‘,2,30,‘爱民商场‘,‘2018-01-09‘,‘王刚蛋‘),

 

(0,‘傻子瓜子‘,‘120101‘,4,25,‘光明小区批发部‘,‘2018-01-03‘,‘老铁‘),

 

(0,‘康师傅方便面‘‘,‘110101‘,4,25,‘万发超市‘,‘2018-01-03‘,‘老铁‘),

 

(0,‘乐百氏果冻‘‘,‘140101‘,2,30,‘一中超市‘,‘2018-01-08‘,‘老铁‘),

 

(0,‘傻子瓜子‘‘,‘120101‘,2,30,‘爱民商场‘,‘2018-01-09‘,‘老铁‘),

 

(0,‘康师傅方便面‘,‘110101‘,2,24,‘爱民商场‘,‘2018-01-03‘,‘老铁‘),

 

(0,‘娃哈哈矿泉水‘,‘100201‘,4,18,‘万发超市‘,‘2018-01-03‘,‘老铁‘),

 

(0,‘乐百氏果冻‘,‘140101‘,5,12,‘一中超市‘,‘2018-01-04‘,‘老铁‘)

 

## **4、综合练习**

综合练习:

order_info表

 

### 1、 热销售商品排名表【即按照每种商品的总销售数量排序】

Select 商品名称,sum(销售数量) from order_info group by 商品名称 order by sum(销售数量)  desc

### 2、 请统计销售总结超过400元的商品名称和销售总价,并按照销售总价降序排列

select 商品名称,sum(销售数量*销售价格) as ‘销售总价‘ from order_info group by 商品名称 having   sum(销售数量 * 销售价格)  >400 order by  销售总价 desc

### 3、 统计各个销售对“乐百氏果冻”的销售数量

Select 销售员,sum(销售数量) from order_info where 商品名称=‘乐百氏果冻‘ group by 销售员

order by sum(销售数量) desc

 

## **5、Limit关键字的使用**

 

### 1、在学生表中,查询出前5个数据

 

select * from t_student limit 0,5

 

### 2、在学生表中,查询出第三条到第十条数据

 

select * from t_student limit 2,8

 

### 3、在学生表中,限制查询出来的男性信息个数为2

 

select * from t_student where c_gender = ‘男‘ limit 2

 

### 4、在学生表中,每页显示5条数据,显示第一页

 

select * from t_student limit 0,5

 

### 5、在学生表中,每页显示5条数据,显示第二页

 

select * from t_student limit5,5

 

### 6、在学生表中,每页显示5条数据,显示第三页

 

select * from t_student limit10,5

 

### 7、在学生表中,每页显示5条数据,显示第四页

 

select * from t_student limit15,5

 

### **分页结论:**

m=(当前的页码-1)*n

 

n=显示的条数

 

#### 8、在学生表中,查询女生信息,根据年龄从高到底排序,并且只显示前两条数据

 

select * from t_student where c_gender =‘女‘ order by c_age desc limit 2

 

## **6、内连接、左连接、右连接**

### 1、查询t_student 表和t_class表中的信息(内连接)

select * from t_student as a inner join t_class as b on a.c_class_id = b.c_id

### 2、查询参加考试学员的姓名、性别、英语成绩、数学成绩

select a.c_name,a.c_gender,b.c_english,b.c_math from t_student as a inner join t_score as b on a.c_id = b.c_student_id(多表查询

 

#### 查询 没有参加考试学员的成绩。

 

select a.c_name,a.c_gender from t_student as a left join t_score as b on a.c_id = b.c_student_id where c_english is null and c_math is null;

### 3、查询所有学员的姓名、性别、英语成绩、数学成绩

 

select a.c_name,a._gender,b.c_english,b.c_math from t_student as a left join t_class  as b on a.c_id =b.c_student_id

 

###

 

### 6、查询孙悟空、猪八戒、沙和尚的英语成绩和数学成绩

 

select a.c_name,b.c_math,b.c_english from t_student as a inner join t_score as b on a.c_id = b.c_student_id

where a.c_name in (‘猪八戒‘,‘孙悟空‘,‘沙和尚‘)

 

## 7、自关联

 

### 1、成绩表自关联

 

select * from t_score as a inner join score as b on a.c_student_id = b.c_student_id

 

### 2、查询所有的省份

 

select * from areas where pid is null;

 

### 3、查询出河北省有哪些城市

 

select city.atitle from areas as province inner join areas as city on province.aid = city.pid where province.atitle = ‘河北省‘;

 

### 4、查询沧州市下有哪些区县

 

## 8、子查询

### 1、请查询软件工程18级一班的所有学生信息

select * from t_student where c_class_id = (select c_id from t_class where c_name = ‘软件工程18级一班‘);

### 2、请查询软件工程18级一班的所有学生信息,使用相关子查询实现

select * from t_student as ts where exists(select * from t_class as tc where ts.c_class_id = tc.c_id and tc.c_name =‘软件工程18级一班‘ );

#  不要记 也不要 写

 

### 3、查询软件工程18级一班和软件工程18级二班的学生信息

select * from t_student where c_class_id in (select c_id from t_class where c_name in ( ‘软件工程18级一班‘,‘软件工程18级二班‘);

 

### 4、查询孙悟空、猪八戒、沙和尚的英语和数学成绩

select * from t_score where c_student_id in (select c_id from t_student where c_name in (‘孙悟空‘,‘沙和尚‘,‘猪八戒‘));

 

### 5、请查询出那些没有参加过考试的同学的id,姓名,和年龄(子查询)

?         select c_id,c_name,c_age from t_student where c_id not  in (select c_student_id from t_score)

 

## 9、SQL演练

 

#### 京东

 

SQL习题:

 

1. 查询类型cate_name为 ‘超极本‘ 的商品名称、价格

select brand_name,price from goods where cate_name = ‘超极本‘

1. 显示商品的种类

Select cate_name  from goods group by cate_name

1. 求所有电脑产品的平均价格,并且保留两位小数

 

   select round(avg(price),2) from goods

 

1. 显示每种品牌商品的平均价格

 

   select brand_name, round(avg(price),2) from goods group by brand_name;

1. 查询每种类型的商品中 最贵、最便宜、平均价、数量

 

   select max(price),min(price),avg(price),count(*),cate_name from goods group by cate_name;

 

2. 查询所有价格大于平均价格的商品,并且按价格降序排序

 

   select * from goods where price > (select avg(price) from goods) order by price desc;

 

 

 

1. 查询每种类型中最贵的电脑信息

 

   推荐这种:

 

   select * from goods where price in (select max(price) from goods group by cate_name)

 

   下面这种不推荐:

 

   select * from goods as a inner join (select cate_name ,max(price) as max_price from goods) as b on a.cate_name=b.cate_name and a.price=b.max

 

创建“商品分类表”

 

 

 

 

事务:

 

 

 

索引:unique约束  primary key约束都是索引

 

以上是关于mysql数据库的操作的主要内容,如果未能解决你的问题,请参考以下文章

python操作mysql数据库系列-安装MySql数据库

python操作mysql数据库系列-操作MySql数据库第一部

Python数据库操作 初识mysql和mysql基本操作#学习猿地

1029 MySQL操作表 MySQL操作表数据行

MySQL基本操作命令

ubuntu下怎样操作mysql数据库