MySQL
数据的基本认识和操作
启动服务
在命令行 输入 net start mysql
停止服务: net stop mysql
链接数据库
Mysql -u root -p -h -P
-u 你的mysql的用户名
-p 你的mysql密码
-h 你mysql服务的地址 ip
-P mysql数据库的端口号 默认3306
完整写法:
Mysql -uroot -p -hlocalhost -P3306
咱们的数据库服务装在了本地所以-h可以省略
端口号使用是默认端口索引-P也可以省略
Mysql数据库的基本结构
Mysql关系型数据库管理软件
Mysql>database>table>filed
多条数据组成一张表
多张表组成一个库
Mysql管理多个库
Sql语句分类:
SQL结构化查询语言,用于关系型数据库数据的操作
DDL(定义) 一般适用于对库的操作和表的操作
DML(操作) 一般是 数据的添加 数据的修改 数据的删除
DQL(查询) 一般是查询
DCL(控制) 一般使用权限管理 一般是有dba来去操作
Sql的语法规则
1.sql语句必须以分号结尾
2.Sql 不去分大小写 但是一般文档中 sql关键都是大写
1. 数据库的命令
查看所有的库
创建数据库
切换数据库
查看当前所在的库
删除库
2.表操作命令
查看当前库中所有的表
格式: SHOW TABLES;
创建表
Create table 表名(字段名 字段类型 约束,字段名 字段类型 约束)charset=utf8;
create table student(
id int unsigned not null auto_increment primary key,
name char(20),
age int,
gender char(1),
email varchar(32),
class varchar(32)
)charset=utf8;
查看建表语句
格式:SHOW CREATE TABLE 表名
查看表结构
格式: DESC 表名
删除表:
DROP TABLE 表名
3.数据的基本操作
添加数据
格式:INSERT INTO 表名(字段1,字段2,...) values(值1,值2,...)
格式:INSERT INTO 表名(id,name,age,gender,emial,class) VALUES(1,’小王’,18,’1’,’xiaowang@qq.com’,’python’);
指定所有字段添加数据
不指定字段添加数据
向student表中添加一条数据 值的顺序必须按照表结构的顺序来添加
INSERT INTO student values(5,'赵六',30,'1','z@163.com','web');
指定部分字段添加
INSERT INTO student(id,name) values(6,'田七');
一次添加多条数据
INSERT INTO student values
(7,'王八',28,'0','w@.com','ui'),
(8,'九九',19,'1','j@qq.com','python'),
(9,'后羿',80,'1','h@qq.com','python'),
(10,'吴刚',79,'1','w@qq.com','python');
查询数据所有的数据
格式: SELECT * FROM 表名
* 代表所有字段
格式:SELECT 字段 FROM 表名;
查询所有的数据
SELECT * FROM student;
修改数据
格式:UPDATE 表名 SET 字段=值 WHERE 条件
注意:更新数据时尽量配合where去使用,如果不添加where条件所有的数据都会更新;
格式: UPDATE 表名 SET 修改的字段 WHERE 条件
更新name为吴刚的数据 把年龄修给成77 把性别改成0
UPDATE student SET age=77,gender='0' WHERE name='吴刚';
更新 id为1的学生年龄为20
Update student set age=20 where id=1;
删除数据
格式:DELETE FROM 表名 WHERE 条件
注意:
如果不添加where条件会讲库中所有数据删除掉
格式:DELETE FROM 表名 WHERE 条件
删除name是吴刚的数据
DELETE FROM student WHERE name='吴刚';
4.Mysql数据类型
数值类型
Int 4字节
Tinyint 1字节
decimal 一般存浮点型
格式:DECIMAL(M,D) M你要存的数据 D保留几位小数
decimal(5,2)
字符串
char 定长字符串
varchar 变长字符串
char(20) 就算你当前字段中只存储了1个字符 那么它也是占据20个字符的大小
varchar(20) 最多能存20个字符 如果存了小于20个字符 它的实际占据大小是以你存的内容为准
text文本类型
时间日期类型
datetime 混合事件日期类型 年月日时分秒 格式 年-月-日 时:分:秒
Datetime 混合事件日期类型 格式 yyyy-mm-dd hh:mm:ss
5.常见的字段约束
Unsigned 无符号 一般给数值型的字段添加
如果添加代表当前字段只能存正数
Int(5) 5代表显示的宽度 如果是有符号默认是11 如果是无符号默认10
Not null 不能为空 默认字段可以为空 如果添加了 那么此字段不能为空
Default 默认值
Primary key 主键约束(主键索引) 不能为空 且唯一 用于表示数据的唯一标识
Unique 唯一约束(唯一索引) 可以为空 不能重复 具有唯一性
Auto_increment 自动递增 一般配合主键去使用
创建一张表 demo
有字段 id 唯一索引
uname 字符串类型 不能为空
email 字符串类型 可以为空
gender 字符串 不能为空 默认值为 2
create table demo(
id int unsigned not null auto_increment primary key,
uname varchar(32) not null,
email varchar(32),
gender varchar(5) not null default '2'
)charset=utf8;
6.表结构的操作
格式: ALTER TABLE 表名 操作
添加字段 add
给student表添加一个phone
ALTER TABLE student ADD phone varchar(11) not null default '110';
修改字段 modify/change
修改字段约束
将phone字段的类型改成char类型
ALTER TABLE student MODIFY phone char(11);
将phone字段的类型改成int类型
注意:将字符串转成数值型的时候,当前字段的值都必须是数字表示的字符串
ALTER TABLE student MODIFY phone int;
修改字段名
将phone字段的名字改成 aa
ALTER TABLE student CHANGE phone aa varchar(11);
将字段的约束改成 char(11);
ALTER TABLE student CHANGE aa aa char(11);
删除字段 drop
删除aa字段
ALTER TABLE student DROP aa;
修改表名 rename as
修改student表名为 students
ALTER TABLE student RENAME AS students;
修改表的编码格式
ALTER TABLE students CHARSET=GBK;
修自增值
修改自增值为20
ALTER TABLE students AUTO_INCREMENT=20;
7.运算符:
算术运算符: + - * / %
比较运算符:> < >= <= = != <>
特殊比较运算符:in, not in,is null,is not null,like,between and
逻辑运算符:and or not
逻辑运算符优先级 or<and<not
8.where条件查询
运算符 可以用在where条件
查询所有的数据
SELECT * FROM 表名 WHERE 条件
练习:
1.查询年龄不等于18岁的所有用户信息
SELECT * FROM students WHERE age!=18;
2.查询班级为python的所有用户信息
SELECT * FROM students WHERE class='python';
3.查询年龄大于16岁的所有用户信息
SELECT * FROM students WHERE age>16;
4.查询年龄在18到24岁之间的所有用户信息 包含18和24岁;
SELECT * FROM students WHERE age>=18 and age<=24;
SELECT * FROM students WHERE age between 18 and 24;
5.查询年龄不在18到24之间的所有用户信息 not between 不包含开始和结束
SELECT * FROM students WHERE age<18 or age>24;
SELECT * FROM students WHERE age not between 18 and 24;
6.查询id值是1,3,4,6的所有用户信息
SELECT * FROM students WHERE id=1 or id=3 or id=4 or id=6;
SELECT * FROM students WHERE id in (1,3,4,6);
7.查询python班和web班级的所有女生信息
SELECT * FROM students WHERE (class='python' or class='web') and gender='0';
9.模糊查询:
like 有两个
% 任意位的任意字符
_ 一位任意字符
1.查询名字以‘小’开头的用户信息
SELECT * FROM students WHERE name like '小%';
2.查询emial中包含q的所有用户信息
SELECT * FROM students WHERE email like '%q%';
3.查询姓名是两个字的用户信息
SELECT * FROM students WHERE name like '__';
4.查询姓名以小开头并且是两个字的用户信息
SELECT * FROM students WHERE name like '小_';
10.聚合函数:
Max() min() count() avg() sum()
1.统计当前表中一共有多少条数据
SELECT count(*) FROM students;
2.查询python班级最大年龄最小年龄以及平均
SELECT max(age),min(age),avg(age) FROM students WHERE class='python';
3.统计男生的数量
SELECT count(*) FROM students WHERE gender='0';
11.去除重复的数据:distinct
1.查询所有的班级
SELECT distinct class FROM student;
SELECT class FROM students group by class;
2.查询不重复的班级和性别
SELECT distinct class,gender FROM student;
12.分组group by
注意:count(*) 在分组中使用时,统计的分别是分组后每个组的数据条数
1.查询表中有哪些班级
SELECT class FROM students GROUP BY class;
2.统计当前表中男生和女生的人数各多少人
SELECT gender,count(*) FROM students GROUP BY gender;
3.统计每个班级的人数
SELECT class,count(*) FROM student GROUP BY class;
4.统计每个班,男生和女生个多少人
SELECT class,gender,count(*) FROM students GROUP BY class,gender;
13.Having 子句查询
只能在分组后面去使用
类似于where 但是having筛选的是分组后的数据
1.统计每个班级的人数,并查询出班级人数大于2的班级
SELECT class,count(*) FROM students GROUP BY class HAVING count(*)>2;
2.查询每个班级男生人数大于2的班级
SELECT class,gender,count(*) FROM students GROUP BY class,gender HAVING gender='1' and count(*)>2;
先查询出所有的男生 在按照班级分组 然后在用having过滤
SELECT class,count(*) FROM students WHERE gender='1' GROUP BY class HAVING COUNT(*)>2;