Mysql的内容

1.定义
问题1:什么是数据库?
是长期储存在计算机内的、有组织的、可共享的数据集合。
数据库中的数据按一定的数据模型组织、描述和储存。
而且存储的数据具有较小的冗余度、较高的数据独立性和易扩展性,
并可为各个用户共享。

简单来说数据库就是存储数据的仓库或者数据集合
但Mysql不是数据库,数据库也不是Mysql。)

问题2:什么是数据库管理系统?
数据库管理系统(DBMS),
是位于应用程序与存储数据的之间的一层数据管理软件。
是基础软件,是一个大型复杂的软件系统

管理数据的软件

问题3:常见的数据库管理系统有哪些?(管理数据)

数据库管理系统是软件 让我们去操作数据库

Mysql、Oracle、Sql server等…

问题4:什么是SQL?
SQL 是用于访问和处理数据库的标准的计算机语言

人通过sql语句来管理数据库,查询数据

问题5:什么是Mysql?
MySQL 是最流行的关系型数据库管理系统

关系型有表的结构

2.登录Mysql数据库
2.1 启动Mysql
(1)DOS->net start mysql
(2)开始->服务
(3)mysql的控制台(MySQL Command Line Client)

2.2 Dos窗口登录
mysql –u root –p密码

2.3 第三软件软件登录(Navicat)
在这里插入图片描述
相关概念:
localhost 指代本机电脑
127.0.0.1等价于localhost

3306固定的
mysql连接的端口号3306
外界访问要经过这个端口号

root 超级用户管理员(最高权限)

初始化界面
在这里插入图片描述
再创建相同的连接,那么里面的数据库是一模一样,
同一个,只不过是改了名字,和新的连接,没有意义。
除非连接非本地的服务器 或创建了新的服务器 那就不一样

3.结构化查询语句SQL

问题6:结构化查询语句的种类有哪些?
| DDL(数据定义语言) | (很少)
Data Definition Language
定义和管理数据对象,如数据库,数据表等
CREATE、DROP、ALTER (关键字)

| DML(数据操作语言) | (第二用的多)
Data Manipulation Language
用于操作数据库对象中所包含的数据
INSERT、UPDATE、DELETE (关键字)

| DQL(数据查询语言) | (重点)
Data Query Language
用于查询数据库数据
SELECT(关键字)

| DCL(数据控制语言) | (几乎不用)
Data Control Language
用来管理数据库的语言,包括管理权限及数据更改
GRANT、COMMIT、ROLLBACK(关键字)

4.DDL实战(命名最好不要中文)
4.1数据库CRUD实战
4.1.1 Navicat之DDL实战

1.创建连接
2.创建数据库
3.查看数据库
4.使用数据库
5.删除数据库
在这里插入图片描述
注意点
utf8_general_ci是一个遗留的校对规则,不支持扩展。
它仅能够在字符之间进行逐个比较。
这意味着utf8_general_ci校对规则进行的比较速度很快,
但是与使用utf8_unicode_ci的校对规则相比,比较正确性较差。

4.1.2 Dos窗口之DDL实战
1.创建数据库(先进入数据库 msql -uroot -pxx)
CREATE DATABASE 数据库名; (大小写通用)

【db datebase 最好要加 以便查看 db_123;(英文最好)】
右击连接–刷新
在这里插入图片描述
2.查看数据库
SHOW databases;
在这里插入图片描述
3.使用数据库
USE 数据库名;
【复制可以直接右击所要的,然后右击就能复制出来了。】
在这里插入图片描述
4.删除数据库
DROP DATABASE 数据库名;
在这里插入图片描述
4.2数据表CRUD实战
4.2.1 Navicat之DDL实战

1.创建表(命名 t_123)
tab 到下一行

2.查看表(打开表)
在这里插入图片描述
(关系型数据库类似表)
默认第一行是在id的下面。

3.删除表
4.修改表(设计表)
5.复制表

4.2.2 Dos窗口之DDL实战
4.2.2.1创建表

(1)先查询 show databases;
(2)然后使用 USE 数据库名;
(3)如下:

(可以看对象信息里的DDL)
CREATE TABLE [IF NOT EXISTS] 表名 (
字段1 数据类型 [字段属性|约束][索引][注释],
……
字段n 数据类型 [字段属性|约束][索引][注释]
)[表类型][表字符集][注释];

表名 可以加`` (1 旁边的)为了防止名称不规范或者类似表名

举例:

create table t_user(
 id int(32) not null auto_increment,
 name varchar(32)
 primary key(id)
 );ENGINE =InnoDB DEFAULT CHARSET = utf8;

IF NOT EXISTS如果不存在,就可以存在,如果存在,就不能创建。
IF NOT EXISTS 如果不写这个 在创建同一个 会报错 写了就不会写报错
也不会执行 创建这张相同的表 不会覆盖。 
在这里插入图片描述
4.2.2.2查看表
查看表是否存在
USE 数据库名;
SHOW tables;

查看表定义
USE 数据库名;
DESC ;

顺序:
show databases; 展示连接中有哪些数据库
use xxx; 使用数据库
create table xxxx();创建表
show tables; 展示数据库中有那些表(可以不写)
desc xxxx; 展示表中的属性

4.2.2.3删除表

DROP TABLE [IF EXISTS] 表名;

USE 数据库;//desc 表名;
DROP TABLE IF EXISTS student;

注意点:
当你看数据库中的某个表时,你必须先进去这个表。

注意点:
默认值 为varchar 255 int 11 习惯用偶数 中文要 偶数

4.2.2.4修改表
#修改表名
ALTER TABLE 旧表名 RENAME [TO] 新表名;

#添加字段
ALTER TABLE 表名 ADD 字段名 数据类型 [属性];

举例:
alter table t_user add pwd varchar(32) not null;

#修改字段
ALTER TABLE 表名 CHANGE 原字段名 新字段名 数据类型 [属性];

举例:
alter table t_user change pwd pwd2 varchar(32);
alter table t_user change pwd pwd2 varchar(62);

#删除字段
ALTER TABLE 表名 DROP 字段名;

4.2.2.5复制表(先 desc 表名;)
查询表中的详细数据:select * from t_user0907_new;

复制表(结构加数据)(常见)
create table t_user3 (as) select * from t_user;

复制表的结构,不复制数据(常见)
create table t_user6 as select * from t_user where 1!=1;

复制表中某些属性作为新表的属性
create table t_user4 as select id,name from t_user;

4.3数据CRUD实战
4.3.1 Navicat之DML实战

1.添加数据
2.删除数据
3.修改数据
4.查询数据

4.3.2 Dos窗口之DML实战
4.3.2.1 增加数据

insert into db_jc3(name,pwd) values(‘ccc’,'122343 ');
(id 不用关心 自动添加)

增加多种数据:
INSERT INTO表名( 字段1,字段2,…) VALUES (值1, ‘值2’, …);

4.3.2.2 删除数据

delete from db_jc3 where id = 6;

4.3.2.3 修改数据
update db_jc3 set name=‘marong,zaima’,pwd=‘123’ where id = 5;

4.3.2.4 查询数据
查询所有
select * from 表名
题外话 desc 是查表结构

通过id查询一条记录
select * from db_jc3 where id = 4;

模糊查询name得到记录集
select * from db_jc3 where name like CONCAT(’%’,‘m’,’%’);

name 可以加个撇 ``区分 系统自带的属性关键字是为了防止跟关键字冲突

5.添加主外键
5.1 Navicat之主外键实战

主键:
让某一个列当中的值成为唯一的值。 唯一性

注意点:
每次要新建一个表
因为会根据之前最大的序号走下去。
比如是删除一个数据id4,那么再加会变成下一个id5。
就是为了知道你已经删除id=4了,【id4这个4会永远保存下来】。

id加主键一般加上自动递增 互存的
1 2 3 4 不写也会自动加
自动递增是int独有的。

外键:
在这里插入图片描述
在这里插入图片描述
外键 产生之间的相互联系
当你联系了,超出这个范围,就会报错。
注意点:roleID 要与t_role的id类型要一样

主从表
主表

在数据库中建立的表格即Table,
其中存在主键(primary key)用于与其它表相关联,
并且作为在主表中的唯一性标识。

从表
以主表的主键(primary key)值为外键 (Foreign Key)的表,
可以通过外键与主表进行关联查询。
从表与主表通过外键进行关联查询。

主表,从表 –》设计数据库
主从表设计好了
那先添加数据顺序:

1.添加数据顺序:先添加主表数据,再添加从表数据
2.删除数据顺序:先删除从表数据,再删除主表数据

6.1语法
6.1.1 语法顺序

SELECT *
FROM table_name
[ WHERE … ] #指定结果需满足的条件(用得最多)
[ GROUP BY …] #指定结果按照哪几个字段来分组
[HAVING …] #过滤分组的记录必须满足的次要条件
[ ORDER BY… ] #指定查询记录按一个或者多个条件排序
[ LIMIT ] #指定查询的记录从哪条至哪条(用得最多)
Limit 放在最后!
顺序不能改

6.1.2 实战案例
6.1.2.1 别名as
(控制台变,实际还是不变)
select sex as ‘性别’ from student;
只是看着变了,实际得内容没变,所以叫别名。

6.1.2.2 查询空行is null

null 和 空字符串的关系

is null 不等于 空字符串

举例:
phone 为 null;
select * from student where phone is null; null 只能用 is
如果不是null 会报 Empty set。
phone 为 空;
select * from student where phone = “”;

6.1.2.3 order by排序
asc 或者不写 升序 desc 降序

举例:
select studentNo as ‘学生学号’,studentResult as ‘分数’
2from result order by studentResult desc;

6.1.2.4 limit分页 面试题
语法:
[LIMIT [位置偏移量,]行数];
m 制定第一个返回记录行的偏移量
n 制定返回记录行的最大数目
(m不指定则偏移量为0,从第一条开始返回前n条记录)

举例: RESULT表
SELECT * FROM result LIMIT 5 #返回前5条记录
SELECT * FROM result LIMIT 5,10 #返回6-15条记录

m,n
m代表从第几位开始 m 不包括
n代表读多少条数据

6.1.2.5 in关键字
注意点:
in里面只能是逗号,in里面可以加无数个数据
in里面相当于一个数组(在这个集合),in一般配合子查询使用

SELECT * FROM student where studentNo = 10000;

SELECT * FROM student WHERE studentNo IN (10000,10001,10002);

SELECT * FROM student WHERE studentNo = 10000 OR 
studentNo = 10001 OR studentNo = 10002;

第三条 与 第二条 等价 意思是获取其中的某行值。

SELECT * FROM student;

SELECT 所有的字段逗号隔开FROM student;
(与*等价)

SELECT studentNo,loginPwd FROM student; 
//获取部分字段(几条记录)

6.2常用函数
6.2.1 聚合函数

(聚合函数的返回值是单个值!!)

AVG() 返回某字段的平均值

SELECT AVG(studentResult) AS '学生平均值' from result;
SELECT sum(studentResult)/count(studentResult)
AS '学生平均值' from result;

两者等价

COUNT() 返回某字段的行数

SELECT count(1) FROM student;
SELECT count(studentNo) FROM student;

SELECT count(*) FROM student;//所有的都会来一遍

上面三者等价,效率由高到低。(查询表中的行数)

MAX() 返回某字段的最大值

SELECT MAX(studentResult) FROM result;

MIN() 返回某字段的最小值

SELECT MIN(studentResult) FROM result;

SUM() 返回某字段的和

6.2.2 字符串函数
CONCAT(str1,str1…strn) 字符串连接
from dual 系统表 不写也没事

SELECT CONCAT('hello','worl','d') FROM DUAL;
===》helloworld

INSERT(str,pos,len,newstr) 字符串替换 (数 1开始)
从3开始(包括3) 一共有10长度 (从3开始 啊)

SELECT INSERT('这是SQL Server数据库',3,10,'MySQL');
===》这是MySQL数据库

中文两个字节一个字符 但这边是整体 只算一个

LOWER(str) 将字符串转为小写

SELECT LOWER('MySQL');==》 mysql

UPPER(str) 将字符串转为大写

SELECT UPPER('MySQL');==》MYSQL

SUBSTRING(str,num,len) 字符串截取

SELECT SUBSTR('JavaMySQLOracle',5,5);;==》MySQL

6.2.3 时间日期函数
WEEK(date)
返回日期date为一年中的第几周 SELECT WEEK(NOW());

年月日 时分秒
NOW()
获取当前日期和时间 SELECT NOW();
CURDATE()
获取当前日期 SELECT CURDATE();
CURTIME()
获取当前时间 SELECT CURTIME();

SELECT CURDATE();
年月日
YEAR(date)
返回日期date的年份 SELECT YEAR(NOW());
MONTH(date)
返回当前日期date的月 SELECT MONTH(NOW());
DAY(date)
返回当前日期date的日 SELECT DAY(NOW());

SELECT CURTIME();
时分秒
HOUR(time)

返回时间time的小时值 SELECT HOUR(NOW());
MINUTE(time)
返回时间time的分钟值 SELECT MINUTE(NOW());
SECOND(time)
返回时间time的秒值 SELECT SECOND(NOW());

6.2.4 数学函数
CEIL(x) 返回大于或等于数值x的最小整数 cell 意思 天花板
SELECT CEIL(2.3)
返回:3
:> 2.0 的结果都是3

FLOOR(x) 返回小于或等于数值x的最大整数 float 意思 地板
SELECT FLOOR(2.3)
返回:2
:< 3.0 的结果都是2

ROUND(x) 这才是四舍五入
SELECT ROUND(2.5);
返回:3
:> 2.4 的结果都是3

小科技
两个有关联的 用外键连接
连点两个然后右击 逆向表到模型
在这里插入图片描述
6.3 多表关联查询
在这里插入图片描述
t_role表
在这里插入图片描述
t_user表

6.3.1内连接inner join
在这里插入图片描述

SELECT *
FROM t_user as s
INNER JOIN t_role AS r 
ON s.roleID = r.id; 

*也可以改成s.id,s.name,r.roleName
在这里插入图片描述
6.3.2左(外)连接left join(常见)
左外连接:
在这里插入图片描述
左为主表,右为码表
交集 和 主表独有的部分
只是这样理解,他们不是主副表关系。

SELECT * 
FROM t_user as s         //主表
left JOIN t_role as      //r码表
ON s.roleID = r.id;

在这里插入图片描述

6.3.3右(外)连接right join(不常用)
左外连接:
在这里插入图片描述
左边是码表,右边是主表

SELECT * 
FROM t_role as r
RIGHT JOIN t_user as s
ON s.roleID = r.id;

在这里插入图片描述

as 的话 别名 只是表别名 得不出值
得出具体的值别名 就能显示出来

6.3.4自连接(很重要)
自连接 应用场景
网站京东开头 一个一个里面父子孙连接
在这里插入图片描述
category_1
在这里插入图片描述
category_2
在这里插入图片描述
category表
这个就是自连接的表,已经把两张表连在一起了。

需求:
把category表看做两张一模一样的表,
然后将这两张表连接查询(自连接)

如何拆分上述category表

SELECT a.categoryName AS '父类名称',
b.categoryName AS '子类名称'
FROM category as a,category as b
WHERE a.categoryid = b.pid;

在这里插入图片描述
7. DQL高级
7.1 子查询

子查询就是整成一句话

遇到问题要学会从外往里 先搞最外层 可以拆分

7.2 分组group by

分组一般要配合聚合函数一起用

多次group by 用逗号隔开 不用再写 group by
同理 order by也是一样

7.3 HAVING……

作用: 是筛选满足条件的组

注意点:

  1. having 一般和 group by一起使用,having在后面。
  2. where子句中不能使用聚合函数,而having子句中可以。

题外话:

查询名字的类型:
查询姓名姓某的人where name like ‘某%’
查询名字中带有“某”的人where name like ‘%某%’
查询名字中第二个字是"某"的人where name like ‘_某%’

UNION 指令
它的目的是将两个 SQL 语句的结果合并起来。

as 别名 可以省略

数值类型 不要单引号 字符串用单引号

distinct 不重复
SELECT DISTINCT Depart FROM teacher;

范围 可以写 between and

中文乱码解决
SET NAMES gbk; 中文乱码 临时解决
my.ini => default-character-set = utf8
=>character-set-server = utf8中文乱码长期解决

;代表结束
多条语句同时执行 可以加分号
一条一条执行 那就只需要在几条语句里最后加分号

(clear清空)

刷新
空白处的刷新 数据的刷新
表格刷新 是结构

注释:# 注释 crtl + /注释

如果navicat里的类型是double类型,
那么设置长度,就必须要设置小数点。

----2021.09.(04&07&08&09&11)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,我是AI语言模型,无法提供完整的Android显示MySQL内容代码,但是我可以给您一些指导: 1. 首先,您需要建立一个连接MySQL数据库的类。这个类需要实现Java中的JDBC接口。 2. 接下来,您需要编写一个查询语句,从MySQL数据库中获取数据。您可以使用Java中的PreparedStatement或Statement对象来执行SQL语句。 3. 在获取数据后,您需要将数据显示在Android应用程序中。您可以使用ListView或RecyclerView来显示数据。 4. 最后,您需要在Android应用程序中调用连接MySQL数据库的类和获取数据的方法,以显示MySQL内容。 这里是一个示例代码片段,显示如何从MySQL数据库中获取数据: // 创建一个连接MySQL数据库的类 public class MySQLConnection { private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; private static final String DB_URL = "jdbc:mysql://localhost:3306/mydatabase"; private static final String USER = "root"; private static final String PASS = "password"; private Connection conn = null; private Statement stmt = null; public MySQLConnection() { try { Class.forName(JDBC_DRIVER); conn = DriverManager.getConnection(DB_URL, USER, PASS); stmt = conn.createStatement(); } catch (SQLException se) { se.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } // 获取MySQL内容的方法 public ResultSet getMySQLData() { String sql = "SELECT * FROM mytable"; ResultSet rs = null; try { rs = stmt.executeQuery(sql); } catch (SQLException se) { se.printStackTrace(); } return rs; } } 在Android应用程序中调用MySQLConnection类和getMySQLData方法,以显示MySQL内容: // 在Activity中调用MySQLConnection类和getMySQLData方法 public class MainActivity extends AppCompatActivity { private ListView listView; private MySQLConnection mySQLConnection; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = findViewById(R.id.list_view); mySQLConnection = new MySQLConnection(); // 获取MySQL内容并显示在ListView上 ResultSet rs = mySQLConnection.getMySQLData(); List<String> data = new ArrayList<>(); try { while (rs.next()) { data.add(rs.getString("column_name")); } } catch (SQLException se) { se.printStackTrace(); } ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data); listView.setAdapter(adapter); } } 请注意,这只是一个示例代码片段,您需要根据自己的需求进行修改和优化。同时,为了安全起见,您应该使用prepared statements来执行SQL语句,以避免SQL注入攻击。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值