MySql数据库学习(一)

MYSQL 专栏收录该内容
3 篇文章 0 订阅

MySql数据库学习(一)

mySQL (关系型数据库管理系统)

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

  • MYSQL的SQL语句
    SQL:Structure Query Language结构化查询语言
    DDL:数据定义定义语言:定义与数据库/表结构:create(创建)drop(删除) alter(修改)
    DML:数据操纵语言:主要是用来操作表数据 insert(插入) update(修改) delete(删除)
    DCL:数据控制语言:定义访问权限,取消访问权限,安全设置 grant
    DQL:数据查询语言:select(查询) from子句 where子句

1. 数据库的CRUD的操作

  • 首先要登录数据库服务器:mysql -uroot -proot

创建数据库

create database 数据库名字
create database day01;

--创建数据库的时候,指定字符集
create database 数据库的名字 character set 字符集;
create database day01_1 character set utf-8;

create database 数据库的名字 character set 字符集 collate 校对规则;
create database day01_2 character set utf-8 collate utf8_bin;

查看数据库

--查看数据库定义的语句
show create database 数据库的名字
show create database day_01;
show create database day_01_1;

--查看所有数据库
show databases;

informartion_schema
performance_schema
mysql

修改数据库的操作

--修改数据的字符集
alter database 数据库的名字 character set 字符集;
alter database day01_1 character set gbk;

删除数据库

drop database 数据库的名字;
drop database day01;

drop database test;

其他数据库操作命令

--切换数据库(选中数据库)
use 数据库的名字
use day01;
--查看一下当前正在使用的数据库
select database();

2. 表的CRUD操作

创建表

create database 数据库的名字;

create table 表名(
	列名 列的类型(长度) 约束,
	列名2 列的类型(长度) 约束,
);



列的类型:
java          sql       
int           int
char/string   char/varchar
			  char : 固定长度
			  varchar : 可变长度
			  char3)    一    一空格空格
			  varchar3) 一    一
			  长度代表的是字符的个数
double        double
float 		  float
boolean       boolean
date  		  date  : YYYY-MM-DD
			  time  : hh:mm:ss
			  datetime : YYYY-MM-DD hh:mm:ss  默认值是null
			  timestamp :YYYY-MM-DD hh:mm:ss  默认使用当前时间
			  
			  text : 主要是用来存放文本
			  blob :存放的是二进制



列的约束:
		主键约束 : primary key
		唯一约束 : unique
		非空约束 : not null

创建表:
	1.分析实体:学生
	2.学生ID
	3.姓名
	4.性别
	5.年龄
create table student(
	sid int primary key,
	sname varchar(31),
	sex int,
	age int
);
 			 		  

查看表

--查看所有的表
  show tables;
  
--查看表的定义
  show create table student;
  
--查看表结构
  desc student;

修改表
添加列(add),修改列(modify),修改列名(change),删除列(drop),修改表名(rename),修改表的字符集

添加列(addalter table 表名 add 列名 列的类型 列的约束
alter table student add chengji int not null;

修改列(modifyalter table student modify sex varchar(2);
修改列名(change)
alter table student change sex gender varchar(2);
删除列(dorp)
alter table student drop chengji;

修改表名(renamerename table student to studenttable;
修改表的字符集
alter table studenttable character set gbk;

删除表

drop table studenttable;

Sql完全对表中的数据的CRUD的操作:
插入数据

insert into 表名(列名1,列名2,列名3values(值1,2,3; 

--简单写法:如果插入式全列名的数据,表名后面的列名可以省略
insert into 表名 values(1,2,3);
insert into student values(2,'zhangsan',1,23);

--注意:如果是插入部分列的话,列名不能省略
insert into student(sid,sname) values(3,'lisi');
insert into student values(3,'lisi');//这种写法是错误的

--插入批量数据:
insert into student(sid,sname,sex,age) values
(1,'zhangsan',1,23),
(2,'zhangsan',1,23),
(3,'zhangsan',1,23),
(4,'zhangsan',1,23),
(5,'zhangsan',1,23),
(6,'zhangsan',1,23);

--单条插入和批量插入的效率
  看插入的数据多少,多的话就是批量插入的效率高

--查看表的数据
select * from student;

命令行下插入中文问题:insert into student values(10,‘李四’,1,23);

  • 临时解决方案:set names gbk;相当于是高速mysql服务器软件,我们当前在命令行下输入的内容是GBK编码,当命令行窗口关闭之后,他在输入中文就会存在问题。
  • 永久解决办法:修改my.ini配置(在mysql软件安装路径里)
    1.暂停mysql的服务
    2.在mysql安装路径中找到my.ini配置文件;C:\Program Files\MySql Server 5.5
    3.将57行的编码改成gbk
    4.保存文件退出
    5.启动mysq服务

删除表记录

delete from 表名 [ where 条件 ]

delete from student where sid = 10;
delete from student; 如果没有指明条件  会将表中的数据一条一条全部删除掉

--面试问题:请说一下 delete 删除数据 和 truncate 删除数据有什么差别
	delete: DML 一条一条删除表中的数据
	truncate :DDL 先删除表在重建表
	关于哪条执行效率高:具体要看表中的数据量
		如果数据比较少,delete比较高效
		如果是数据比较多,truncate比较高效

更新表记录

update 表名 set 列名=列的值,列名=列的值2 [ where 条件]
  --将sid为5的名字改成李四
  --如果参数是字符串,日期要加上单引号
  update student set sname = ‘李四’ where sid = 5;


  update 表名 set 列名=列名值,列名2=列的值2 [ where 条件]
  
  update student set sname ='王五',sex='1';
  update student set sname ='赵六',sex='0' where sid=6;

查询记录

select [distinct][*] [列名,列名2] from 表名 [where 条件]
distinct : 去除重复的数据

--商品分类:手机数码,鞋子提包...
1.分类的ID
2.分类名称
3.分类描述
create table category(
  cid int primary key auto_increment,
  cname varchar(10),
  cdesc varchar(31)
);

insert into category values(null,'手机数码','kk电子产品,kk生产');
insert into category values(null,'鞋子书包','kk皮鞋厂,kk生产');
insert into category values(null,'香烟酒水','kk酒水,kk生产');
insert into category values(null,'零食饼干','kk哇哈哈哈,kk生产');
insert into category values(null,'零食辣条','kk威龙,kk生产');

select * from category;
select cname,cdesc from category;

--所有商品
1.商品ID
2.商品名称
3.商品的价格
4.生产日期
5.商品分类ID

商品和商品分类 :所属关系
create table product(
	pid int primary key auto_increment
	pname varchar(10),
	price double,
	pdate timestamp,
	cno int
);

insert into product values(null,'小米9',998,null,1);
insert into product values(null,'1+',2888,null,1);
insert into product values(null,'阿迪达斯',99,null,2);
insert into product values(null,'老村长',88,null,3);
insert into product values(null,'劲酒',35,null,3);
insert into product values(null,'小熊饼干',1,null,4);
insert into product values(null,'威龙辣条',1,null,5);
insert into product values(null,'小辣条',1,null,5);

--简单查询:
---查询所有的商品:
	select * from product;
---查询商品名称和商品价格:
	select pname,price from product;
	
---别名查询 as 的关键字, as 关键字是可以省略的
	--表别名: select p.pname ,p.price from product p;(主要是用在多表查询);
	select p.pname,p.price from product as p;
	--列别名: select pname as 商品名称 ,price as 商品价格 from product;
	select pname as 商品名称,price as 商品价格 from product;
	省略as关键字
	select pname 商品名称,price 商品价格 from product;

---去掉重复的值
	--查询商品所有的价格
	select price from product;
	select distinct price from product;

--select 运算查询 : 仅仅在查询结果上做了运算 + - * /
 select *,price*1.5 from product;
 select *,price*1.5 as el折后价 from product;

 select *,price*0.9 from product;

--调价查询 [ where 关键字]
	指定条件,确定要操作的记录

--查询商品价格>60元的所有商品信息
select * from product where price > 60 ;

--where 后的条件写法:
	--关系运算符: >  >=  <   <=   =  !=  <>
	<> : 不等于  :标准SQL语法
	!= : 不等于  : 非标准SQL语法
	--查询商品价格不等于88的所有商品:
	select * from product where price <> 88;
	select * from product where price != 88;

	
	--查询商品价格在 10 到 100 之间
	select * from product where price > 10 and price >100;

	between ...and...
	
	select * from product where price between 10 and 100;
	
	--逻辑运算:and , or ,not
	
	--查询出商品价格 小于100 或者商品价格 大于900
    select * from product where price <35 or price >900;

	--like :模糊查询
		_ : 代表的是一个字符
		% : 代表的是多个字符
	-- 查询出名字中带有饼的所欲商品 ‘%饼%’
		select * from product where pname like '%饼%'
	-- 查询第二名字是熊的所有商品  ‘_熊%’
		select * from product where pname like '_熊%'

	-- in 在某个范围中获取值
	    --查询出商品分类ID在 1,4,5里面的所有商品
	    select * from product where cno in (1,4,5);


--排序查询 : order by 关键字
	asc : ascend 升序 (默认的排序方式)
	desc : descend 降序
	
	--0.查询所有的商品,按照价格进行排序
	select * from product order by price
	
	--1.查询所有的商品,按价格进行降序排序(asc -升序  desc-降序);
	select * from product order by price desc;

	--2.查询名称有 小 的商品,按价格降序排序
		1.查询名称有 小 的商品
		select * from product where pname like '%小%';
		2.进行排序得出结果
		select * from product where pname like '%小%'; order by price asc;


--聚合函数:
		sum() :求和
		avg() :求平均值
		count() :统计数量
		max() :最大值
		min() :最小值
	--1.获取所有商品价格的总和:
	select sum(price) from product;
	--2.获取所有商品的平均价格:
	select avg(price) from product;
	--3.获取所有商品的个数:
	select count(*) from product;

	--注意:where 条件后面不能接聚合函数
	select * from product where price > avg(price);//这是错误的
	--查询出商品价格大于平均价格的所有商品
	查询所有商品
	select * from product;
	大于
	平均价格
	select avg(price) from product;
	
	select * from product where price > (select avg(price) from product);


--分组 :group by
	
	--1.根据cno 字段分组,分组后统计商品的个数
	select cno ,count(*) from product group by cno;

	--2.根据cno 分组,分组统计每组商品的平均价格 并且商品平均价格 > 60
	select cno,avg(price)
	from product group by cno
	having avg(price) > 60;
	
	--having 关键字 可以接聚合函数的  出现分组之后
	--where  关键字 他是不可以接聚合函数  出现在分组之前


--编写顺序
--S..F ..W..G...H..O
	select..from..where..group by ..having ..order by

--执行顺序
		F..W..G..H..S..O
		from.. where.. group by ..having ..select .. order by
	

©️2022 CSDN 皮肤主题:技术黑板 设计师:CSDN官方博客 返回首页

打赏作者

Zhou#

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值