数据库及mysql知识

数据库,mysql基础知识总结(单表操作)

任何一门新的技术的出现和更新无外乎两方面: 1. 效率更高  2. 安全性更强.

记忆:

1.数据库才是实际开发中,我们真正存储数据的地方

2.对数据库的增删改查操作合称为:CURD(Create,Update,Read,Delete)
数据库及mysql知识
数据库及mysql知识

使用mysql中会遇到的问题:

数据库及mysql知识
数据库及mysql知识

在Windows窗口下,可以通过以下指令控制mysql服务的开启和关闭:
开启mysql服务:net start mysql(后面跟着自己安装后的mysql名称)
关闭mysql服务:net stop mysql(后面跟着自己安装后的mysql名称)
如果在输入指令报拒绝访问时,是由于自己权限不够,通过管理员身份登录cmd窗口即可使用

分类:

#DDL: (Data Definition Language,数据定义语言)
	#主要是用来操作数据库,数据表
	#关键字:create drop alter use
#DML: (Data Manipulation Language,数据操纵语言)  对表数据的增删改合称为: 更新语句
	#主要是对 表数据 进行增删改的操作的
	#关键字: insert delete update
	#跟事务相结合
#DCL: (Data Control Language,数据控制语言)
	#主要是创建账号,设置权限和访问级别
	#关键字: COMMIT:确认对数据库中的数据进行的变更
	#关键字: ROLLBACK:取消对数据库中的数据进行的变更
	#关键字: GRANT:赋予用户操作权限
	#关键字: REVOKE:取消用户的操作权限
#DQL: (DataQuery Language, 数据查询语言)
	#主要是对 表数据  进行查询的操作的
	#关键字: select from where

数据库操作:

# 增: 创建数据库  create database 数据集库名
create database web01;-- 举例web01

# 查: 查询数据库  
#1.查询所有数据库  
show databases;
#2.查询指定数据库(字符集)	show create database 数据库名
show create database web01;
show create database web02;

# 改: 修改数据库的码表
# alter database 数据库名 charset 指定的字符集
# alter database 数据库名 character set 指定的字符集
#更该编码集 为gbk 
alter database web01 charset 'gbk';
#更改编码集为utf8
alter create web02 charset 'utf8';

#创建表并指定编码集
create database web02 character set 'gbk';
create database web02 charset 'gbk';

# 删: 删除数据库
# drop database 数据库名;
#删除数据库/数据表
drop database web02;

#使用指定数据库(切换库)
# use 数据库名
use web01;
use web02;

数据库表操作

# 增: 创建数据库表
#格式: create table 数据表名( 
#		字段名 字段类型 [约束],
#		字段名 字段类型 [约束],
#		字段名 字段类型 [约束],
#		.....
#		  );
#不含约束条件
	create table users(
       	 uid int,
       	 username varchar(20),
       	 password varchar(20)
       );
#含约束条件
	create table users(
        uid int primary key auto_increment,
        uname varchar(20),
        pw varchar(20)
        );

# 查: 
#1.查询指定的数据表(编码表)  show create table 数据表名;
show create table users;
#2.查询指定数据表(结构)  desc 数据表名;
desc users;
#3.查询所有的数据表
show tables;

# 改:  修改数据库
# 1. 添加列
alter table users add email varchar(21) not null;
#2. 修改列
#修改列(类型,约束)
alter table users modify email varchar(15);
#修改列(列名,类型,约束)
alter table users change email youxiang varchar(14);
#删除指定的列
alter table users drop youxiang;

#修改数据表的码表
show create table users;-- 查看数据表的编码集
alter table users charset 'gbk';

# 修改数据表表名
rename table users to users_temp;
show tables;

# 删除表: 
drop table users;

对应数据类型表:

数据库及mysql知识

约束条件概念:

数据库及mysql知识

数据库表操作

数据库及mysql知识

操作表数据

#增
#格式一:	insert into 数据表名(列名1,列名2,列名3...) values(值1,值2,值3...);
insert into users(uid,username,password) values(1,'zhangsan','zs123');
#格式二:	insert into 数据表名 values(值1,值2,值3);  
-- 前面不写列名,默认是全列名(即 所有的列都包含)
insert into users values(2,'lisi','ls123')
#格式三:	insert into 数据表名 values(null,值2,值3);
insert into users values(null,'wangwu','ww123');
#格式四:	同时插入多条数据 
#insert into users2 values(null,值2,值3),(null,值2,值3)...(null,值2,值3);
insert into user2 values(null,'admin01','abc'),(null,'admin02','cba'),(null,'admin03','bcd');
#解决mysql中中文乱码问题
#原因: window的码表是:GBK, MYSQL的码表是:UTF-8,编码表不一致导致出现的问题.
#方式一:临时性解决
set name 'gbk';
#方式二: 永久性解决
-- 修改my.ini配置文件 将client的码表改为:GBK

#改
#格式: update 数据表名 set 字段名='值',字段名='值' where 条件;
update users set username='李四',password='ls123' where uid=2;
#注意点: 如果不写条件,是按照该修改情况,修改表中所有的数据.

#删
#格式: delete from 数据表名 where 条件;
#该方式只会删除数据,不会重置id
delete from user where id=2;
#查
#格式一:	select * from 数据表名;
select * from users;
#格式二:	select 列名1,列名2,列名3... from 数据表名;
#带别名的查询:  关键字: as
select username as '账号',uid as '编号' from users;
select username '账号',uid '编号' from users;

小案例:

#需求: 成绩表 exam(eid,ename,chinese,math,english)
#创建exam表
 create table exam (
      eid int primary key auto_increment,
      ename varchar(20),
      chinese int,
      math int,
      english int
 	);
 #插入表数据
 insert into exam values(null,'张三',98,98,100),
      (null,'李四',59,68,80),
      (null,'王五',100,40,60),
      (null,'赵六',79,100,40),
      (null,'阿三',50,50,50),
      (null,'三少',90,80,95);
#1.	条件运算符	 >, <, >=, <=, =, !=(<>)
#查询eid大于3的信息
select * from exam where eid>3;
#查询eid不为3 的成绩信息
select * fromexam where eid != 3;
select * from exam where eid <> 3;

#2.	区间(范围)运算符  between 值1 and 值2;
#查询id为2到4的学生成绩信息
select * from exam where eid between 2 and 4;

#3.	逻辑运算符	and or not
#查询id为2或者为3或者为4的学生成绩信息
select * from exam eid=2 or eid=3 or eid=4;
#not一般是查询某一项是否为null的值
select * from exam where chinese is not null;
select * from exam where chinese is null;

#4.	固定值的查询	in(值1,值2,值3)  功能类似于or
#查询eid为1和4的学生信息
select * from exam where eid in(1,4);

#5.	模糊查询	like  条件
#一般会结合占位符使用		_占一个位置  %占多个位置
#查询ename中第二个字为三的学生信息
select * from exam where ename like '_三';
#查询ename中包含有三的学生信息
select * from exam where ename like '%三%';

数据表操作增格式:

数据库及mysql知识

解决中文乱码问题:

数据库及mysql知识

排序查询:

#关键字: order by 要排序的列 [asc/desc];
-- asc表示升序,但程序默认是升序,故asc可以省略不写,desc表示降序
-- 无论一个SQL语句简单还是复杂,排序语句必须放在整个sql语句的最后边
#需求: 查找所有语文成绩及格的学生信息,并且按照语文成绩进行降序排列,若语文成绩一样,按照数学成绩升序排列
select * from exam where chinese >= 60 order by chinese desc,math asc;

聚合函数: 纵向计算规则

#求取某个学生的总成绩(包括Chinese,math,english)
select eid,ename,chinese '语文',math '数学',english '英语',(chinese+math+english) '总成绩' from exam;

#	count() 一般用于计算数据一共有多少条.

#	max() 求取最大值

#	min() 求取最小值

#	avg() 求取平均值 平均值有可能是小数 其值为double类型

#	sum() 进行求和运算

#	注意点: where 条件后面不能跟聚合函数

分组查询:

#关键字:	group by 要分组的列;
create table product(
	pid int primary key auto_increment,
    pname varchar(20),
    price double
);
#插入数据
insert into product values(null,'冰箱',2000),
(null,'冰箱',1000),
(null,'冰箱',1500),
(null,'洗衣机',2000),
(null,'电视机',3000),
(null,'洗衣机',1000),
(null,'电视机',10000);

#需求: 
#1. 统计每类商品的个数
select pname,count(*) from product group by pname;

#2. 统计每类商品的总金额
select pname,sum(price) from product group by pname;

#3. 统计每类商品的总金额,并且总金额大于4000
select pname,sum(price) from product group by pname having sum(price)>4000;
select pname,sum(price) sp from product group by pname having sp>4000;

#4. 统计每类商品的总金额,并且总金额大于4000,然后按照总金额进行降序排列
select pname,sum(price) from product group by pname having sum(price)>4000 order by sum(price) desc;
select pname,sum(price) sp from product group by pname having sp>4000 order by sp desc;

#5.统计每类商品的总金额,并且总金额大于2000,然后按照总金额进行降序排列,只统计单价在1500(包括)以上的商品.
select pname,sum(price) from product where price>=1500 group by pname having sum(price)>2000 order by sum(price) desc; 
select pname,sum(price) sp from product where price>=1500 group by pname having sum(price)>2000 order by sp desc;

一个完整的SQL查询语句的格式:

select 列名1,列名2,列名3,.. from 数据表名 where 分组前的条件筛选 group by 要分组的列 having 分组后的条件筛选 order by 要排序的字段[asc/desc];

数据库及mysql知识
数据库及mysql知识