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数据库第一部