MySQL数据库(一)

MySQL数据库(一):
https://blog.csdn.net/Veer_c/article/details/103844059
MySQL数据库(二):
https://blog.csdn.net/Veer_c/article/details/103844537
MySQL数据库(三):
https://blog.csdn.net/Veer_c/article/details/103844739

数据库的引入

在我们之前的学习中,我们可以用集合来存储数据,IO流来存储数据
他们都各自有各自的特点 。
集合存储数据的特点:
优点:效率高 。
弊端:不能持久化的存储数据
IO流存储数据的特点:
优点:可以将数据存储到文本中,能得到永久化的存储。
弊端:在使用的时候,要频繁地进行IO操作,效率会比较低。
数据库的优点:可以得到数据的永久化存储,数据管理比较方便,使用时的效率会更高。

数据库的种类

SQL Server: 微软的产品。与net平台兼容比较好
Oracle:甲骨文公司的产品。 与java平台兼容性最好
收购Sun公司: java
收购mysql: mysql 数据库软件
中大型企业(中大型应用)
mysql: 开源产品。与java平台兼容性最好!!!
中小企业(中小应用)
对于我们目前的知识,我们选择mysql数据库

数据库的结构:在这里插入图片描述

我们在数据库的客户端利用sql语句向mysql数据库服务端发送指令,进行数据的增删改查。

管理数据库

1.先创建一个数据库
创建数据库  day16
CREATE DATABASE day16 DEFAULT CHARACTER SET utf8;
-- 使用day16这个数据库
USE day16;
2.删除一个数据库
删除一个数据库
-- 删除一个数据库
DROP DATABASE day16;
3.修改数据库的默认字符集
-- 修改数据库的默认字符集
ALTER  DATABASE day16 DEFAULT CHARACTER SET gbk;

管理表

.创建一个表结构
	--创建学生表,字段(id,NAME,age)
	CREATE TABLE student(
	id INT,
	NAME VARCHAR(20),age INT);
2.查询表机构,表中的数据
	-- 查询表中的数据
	SELECT * FROM student;
	-- 查询一个表结构
	DESC student;
	-- 查询所有列
	SELECT * FROM student;
	-- 查询指定字段,查询id,name
	SELECT id,NAME FROM student;.删除一个表
	-- 删除student表
	DROP TABLE student;
	-- 删除全表数据,本质上是一条一条进行删除的,效率比较慢
	DELETE FROM student;
	-- 删除id为3的数据
	DELETE FROM student WHERE id=3;
	-- 使用truncate table 表名,删除全表数据,并不是一条条删,而是直接将全表数据删除,效率比较快
	TRUNCATE TABLE student;
	-- delete from和truncate table 这两种删除全表的方式有什么区别呢?
	-- 1.delete from一条条删除,truncate table直接将全表数据干掉
	-- 2.delete from可以按条件删除一条数据,truncate table只能删除全表数据,不能按照条件删除
	-- 3.delete from无法重置自增长主键,truncate table可以重置自增长主键
4.修改一个表结构
   4.1修改字段
		-- 添加一个地址字段(gender varchar(2))
		ALTER TABLE student ADD COLUMN gender VARCHAR(2);
		-- 修改gender字段类型为varchar(3)
		ALTER TABLE student MODIFY COLUMN gender VARCHAR(3);
		-- 将gender字段修改为sex字段 varchar(2)
		ALTER TABLE student CHANGE COLUMN gender sex VARCHAR(2);
		-- 添加一个地址字段
		ALTER TABLE student ADD COLUMN address VARCHAR(20);
		-- 删除sex和address字段
		ALTER TABLE student DROP COLUMN sex,DROP COLUMN address;
		-- 将student这个表的表名改为stu
		ALTER TABLE stu RENAME TO student;
		-- 将所有学生的年龄改为50,修改所有学生的年龄,用的非常少
		UPDATE student SET age=50;
		-- 将id为3的学生姓名改为房祖名
		UPDATE student SET NAME='房祖名' WHERE id=3;
		-- 修改多个字段,修改id为2的学生姓名为张学友,年龄改为60
		UPDATE student SET NAME='张学友',age=60 WHERE id=2;
   4.2插入数据
		-- 给表中插入3条数据(插入所有字段)
		INSERT INTO student VALUES(1,'刘德华',50,'中国香港');
		INSERT INTO student VALUES(2,'陈奕迅',40,'中国香港');
		INSERT INTO student VALUES(3,'韩红',50,'河北');
		-- 当需要插入所有字段的时候我们可以直插入部分字段吗?插入不了
		INSERT INTO student VALUES(1,'成龙',60,'中国香港');
		-- 指向给表中只想插入id字段和name字段,请问怎么办?
		INSERT INTO student(id,NAME) VALUES(4,'郭德纲');.3查询数据
		 1.查询所有列
			-- 查询所有列
			SELECT * FROM student;
   	  2.查询指定列(多个列之间用逗号分隔)
			-- 查询指定字段,查询id,name
			SELECT id,NAME FROM student;
		  3.查询时指定别名
			-- 查询时指定别名,name--姓名,address--住址
			SELECT NAME AS '姓名',address AS '住址' FROM student;
			-- 上面指定别名的as是可以省略的
			SELECT NAME '姓名' FROM student;
		  4.合并列查询
			-- 添加servlet,jsp字段
			ALTER TABLE student ADD COLUMN servlet INT,ADD COLUMN jsp INT;
			-- 给每条学生数据添加上servlet和jsp的成绩
			UPDATE student SET servlet=50,jsp=60 WHERE id=1;
			UPDATE student SET servlet=60,jsp=70 WHERE id=2;
			UPDATE student SET servlet=70,jsp=80 WHERE id=3;
			-- 合并servlet和jsp这两个列进行查询,查询每个学生的servlet和jsp的成绩总和
			-- 合并列查询有一个特点:只能合并数值类型的字段
			SELECT NAME '姓名',(servlet+jsp) '总成绩' FROM student;
		  5.查询时添加常量列
			-- 查询时添加常量列,给student表添加一个常量列  班级--java001
			SELECT NAME '姓名',address '地址','java001' AS '班级' FROM student;
			-- 查询你们班的学生都来自于哪里
			SELECT NAME '姓名',address '地址' FROM student;
		  6.查询去除重复数据
			-- 去除重复值来查询每一个学生来自于哪里
			SELECT DISTINCT address FROM student;
			-- 去除重复值的另一种写法
			SELECT DISTINCT(address) FROM student;
		  7.条件查询
			-- 查询id为1并且,并且servlet成绩等于50的学生(交集 and)
			SELECT * FROM student WHERE id=1 AND servlet=50;
			-- 查询id为1或者来自中国香港的学生(并集 or)
			SELECT * FROM student WHERE id=1 OR address='中国香港';
			-- 查询servlet成绩大于60分的学生
			SELECT * FROM student WHERE servlet>60;
			-- 查询jsp成绩小于等于70的学生
			SELECT * FROM student WHERE jsp<=70;
			-- 另一种写法
			SELECT * FROM student WHERE jsp<70 OR jsp=70;
			-- 查询jsp的成绩大于等于70并且小于等于80的学生
			SELECT * FROM student WHERE jsp<=80 AND jsp>=70;
			-- 上面写法的另一种语法,between...and...包前也包后
			SELECT * FROM student WHERE jsp BETWEEN 70 AND 80;
			-- 查询学生年龄不等于30岁的学生
			SELECT * FROM student WHERE age<>30;
			-- 给student表中添加一个数据
			INSERT INTO student VALUES(4,'郭德纲',NULL,'',80,90);
			-- 查询age字段为null的学生(IS NULL)
			SELECT * FROM student WHERE age IS NULL;
			-- 查询address字段为空字符串的学生(='')
			SELECT * FROM student WHERE address='';
			-- 查询age字段不为null的学生(is not null)
			SELECT  * FROM student WHERE age IS NOT NULL;
			-- 查询address字段不为''的学生(<>'')
			SELECT * FROM student WHERE address<>'';
			-- 模糊查询(like),like后面跟的是符号
			-- %任意多个字符
			-- _一个字符
			-- 查询姓刘的学生(like '刘%')
			SELECT * FROM student WHERE NAME LIKE '刘%';
			-- 查询姓名中含有刘这个字的学生
			SELECT * FROM student WHERE NAME LIKE '%刘%';
			-- 查询姓刘,且姓名有3个字的学生
			SELECT * FROM student WHERE NAME LIKE '刘__';
		  8.聚合查询
			-- 聚合函数
			-- 查询servlet的总成绩(sum -- 求和函数)
			SELECT SUM(servlet) FROM student;
			-- 查询每个学生的servlet平均分(avg,平均函数)
			SELECT AVG(servlet) FROM student;
			-- 查询学生的servlet的最高成绩(max ,最大值函数)
			SELECT MAX(servlet) FROM student;
			-- 查询所有学生的servlet的最低成绩(min,求取最小值函数)
			SELECT MIN(servlet) FROM student;
			-- 求取这张学生表中有多少条数据(count(*))
			-- 效率比较低
			SELECT COUNT(*) FROM student;
			-- 根据某一个字段求取学生表中的数据条数,当一个字段数值为null的时候,是不予计算的
			-- 但是这种方式求取得统计值的时候效率会更高,但是有时候数据不够准确
			SELECT COUNT(age) FROM student;
		  9.分组筛选
			-- 求取本班中香港和河北的学生分别有多少人
			-- 1.给学生使用address这个字段进行分组(group by) 2.求取每一组中的学生人数
			-- address  count
			-- 香港       2
			-- 河北       1
			SELECT address,COUNT(*) FROM student GROUP BY address;
			-- 查询人数大于1的地域(group by 分组字段 having 筛选条件) 
			SELECT address,COUNT(*) FROM student GROUP BY address HAVING COUNT(*)>1;
		  10.分页查询
			-- 分页查询 limit 起始行数,查询的条数   注意:起始行数从0开始
			-- 假设我的表中有20条数据,分为4页显示
			-- 第一页:limit 0,5
			-- 第二页:limit 5,5
			-- 第三页:limit 10,5
			-- 第四页:limit 15,5
			-- 结论:查询某一页要现实的数据的时候可以利用如下公式  limit (当前页数-1)*每页显示的条数,每页现实的条数
			-- student表中目前有4条数据,分为2页显示,每页显示2-- 查询第一页的显示数据:
			SELECT * FROM student LIMIT 0,2;
			-- 查询第二页现实的数据
			SELECT * FROM student LIMIT 2,2;
		  11.查询后排序
			-- 按照id字段的升序进行排序
			-- asc,升序,数字从小到大,字母a-z
			-- desc,降序,数字从大到小,字母z-a
			SELECT * FROM student ORDER BY id ASC;
			-- 按照servlet的成绩的降序进行排序
			SELECT * FROM student ORDER BY servlet DESC;
			-- 当有多个排序条件的时候,先按照第一个条件排序,如果第一个条件相同则按照第二个条件进行排序
			-- 先按照学生的年龄升序进行排序,年龄相同按照学生的servelt成绩的升序进行排序
			SELECT * FROM student ORDER BY age ASC,servlet ASC;

MySQL数据库(一):
https://blog.csdn.net/Veer_c/article/details/103844059
MySQL数据库(二):
https://blog.csdn.net/Veer_c/article/details/103844537
MySQL数据库(三):
https://blog.csdn.net/Veer_c/article/details/103844739

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值