数据库基础

1. 数据库mysql

数据库使用和可视化

关系型数据库mysql使用:

开启服务: net start mysql
登录:mysql -u root -p
关闭服务:net stop mysql

图形化MySQL数据库管理工具: SQLyog
安装后的秘钥:
cr173
8d8120df-a5c3-4989-8f47-5afc79c56e7c

更改数据库密码(遗忘的情况下)

  1. 进入cmd ,停止MySQL服务 net stop mysql
  2. 输入: mysqld --console --skip-grant-tables --shared-memory
  3. 另外开一个cmd,使用mysql直接无密登录 mysql -u root –p ,然后直接回车就进入mysql了
  4. 先输入 flush privileges;
  5. 然后输入 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '您的密码';
  6. 在输入一遍 flush privileges;
  7. 此时关闭两个cmd然后重新登录mysql可能发现依然是拒绝访问,但是密码已经修改(可以用SQLyog等数据库图像化软件进行连接测试!)

2. 操作数据库

操作数据库>操作数据库表 >操作数据库表的数据

-- 多行注释 /* */
create database westos; --创建一个数据库
show databases; --查看所有的数据库
use school --切换数据库
show tables; --显示某个数据库里面的表
describe student; --显示数据库中某个表的信息

exit --退出连接

2.1操作数据库

1.创建数据库

CREATE DATABASE [IF NOT EXISTS] xxx;

2.删除数据库

DROP DATABASE xxx;

3.使用数据库

-- 如果你的字段或者表名字和关键字重复,就需要加上 ``  比如 : `database`
USE `database`

4.查看数据库

SHOW DATABASES;

学习思路:需要学习某个命令时,可以自己在SQLyog中操作,然后看里面的历史记录

2.2数据库的列类型

  • 数值

    列名字 描述 字节数
    tinyint 十分小的数据 1
    smallint 较小的数据 2
    mediumint 中等大小的 3
    int 标准的整数 4
    bigint 表达的数据 8
    float 浮点数 4
    double 浮点数 8
    decimal 字符串形式的浮点数 自定义
  • 字符串

    char 字符串固定大小 0-255
    varchar 可变字符串 0-65535
    tinytext 卫星文本 2^8-1
    text 文本串 2^16-1
  • 时间日期

    java.util.Date

分类 格式 说明
date YYYY-MM-DD 日期格式
time HH:mm:ss 时间格式
timestamp 时间戳:1970.1.1到现在的毫秒数!
year 年份表示
datetime YYYY-MM-DD HH:mm:ss 最常用的时间格式
  • null

    没有值,未知

    注意:不要使用NULL进行运算,使用的话结果为NULL

2.3数据库的字段属性(重点)

unsigned :无符号整数

自增:自动在上一条记录上 + 1(默认,亦可通过''高级''来修改),通常来设计唯一的主键

zerofill:不足的位数用0来填充 比如int(3) -> 003

非空:假设设置为NULL not null 如果不赋值,就会报错

默认:设置默认值

/* 一下五个字段做项目都需要用,表示一个记录存在意义
id 主键
`version` 乐观锁
is_delete 伪删除
gmt_create 创建时间
gmt_update 修改时间
*/

2.4创建数据库表

/*
创建'student'表(如果其不存在)(
	格式:`列名` 类型(大小) 其他操作
	非空: NOT NULL
	自增: AUTO_INCREMENT
	注释:COMMENT '注释'
	默认:DEFAULT '默认'
	主键:PRIMARY KEY (`主键`)
	默认
)
注意:int整数显示宽度已弃用,并将在将来的版本中删除。
*/

CREATE TABLE IF NOT EXISTS `student` (
	`id` INT NOT NULL AUTO_INCREMENT COMMENT '学号',
	`name` VARCHAR(10) NOT NULL DEFAULT '匿名' COMMENT '姓名',
	`password` VARCHAR(16) NOT NULL DEFAULT '123456' COMMENT '密码',
	`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
	`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
	PRIMARY KEY (`id`)
	
)ENGINE=INNODB DEFAULT CHARSET=utf16

格式: []中是可选,int类型不用写大小(不唯一)

CREATE TABLE [IF NOT EXISTS] `表名`(
	`字段名` 列类型(大小) [属性] [索引] [注释],
    `字段名` 列类型(大小) [属性] [索引] [注释],
    ...
    `字段名` 列类型(大小) [属性] [索引] [注释]
)ENGINE=[表类型][字符集设置][注释]

常用命令:

SHOW CREATE DATABASE `school` -- 查看创造数据库的语句
SHOW CREATE TABLE `student` -- 查看创造student表的语句
DESC `student` -- 显示表的结构

2.5数据表的类型

INNODB 默认使用

MYISAM 早些年使用的

MYISAM INNODB
事物支持 不支持 支持
数据行锁定 不支持 支持
外键约束 不支持 支持
全文索引 支持 不支持
表空间大小 较小 较大,约2倍

常规使用操作:

  • MYISAM 节约空间,速度较快
  • INNODB 安全性高,事物的处理,多表用户操作

在物理空间存在的位置

所有的数据库文件都存在data目录下

本质还是文件的存储!

MySQL引擎在物理文件上的区别

  • InnoDB 在数据库表中只有一个*.fm文件
  • MYISAM 对应文件
    • *.frm 表结构的定义文件
    • *.MYD 数据文件(data)
    • *.MYI 索引文件(index)

设置数据库表的字符集编码

CHARSET=utf16

不设置的话会是mysql默认的字符集编码~(不支持中文)

2.6字段的修改

修改

-- 修改表名 ALTER TABLE 旧表名 RENAME AS 新表名
ALTER TABLE student RENAME AS teacher
-- 增加表的字段 ALTER TABLE 旧表名 ADD 字段名 列属性
ALTER TABLE student ADD age INT
-- 修改字段 ALTER TABLE XX MODIFY XX XX
ALTER TABLE student MODIFY age VARCHAR(11)
-- 字段重命名
ALTER TABLE student CHANGE age age1 INT
-- 删除字段
ALTER TABLE student DROP age1

删除

-- 删除表(如果表存在在删除)
DROP TABLE IF EXISTS teacher

注意点:

  • `` 字段名使用这个包裹!
  • 注释
  • sql 关键字大小写不敏感,建议用小写

3.MySQL数据管理

3.1外键(了解)

ALTER TABLE 表 ADD CONSTRAINT 约束名 FOREIGN KEY(`作为外键的列`) REFERENCES 哪个表(`哪个字段`)

不建议使用物理外键!!!(数据库多很困扰)

最佳实践

  • 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
  • 我们想使用多张表的数据,想使用外键就用程序去实现(应用层)

3.2DML语言(全部记住)

数据库意义:数据存储,数据管理

  • Insert
  • update
  • delete

3.2.1插入

插入单条语句

INSERT INTO 表名 (字段1,字段2,字段3]) values ('值1','值2','值3')

比如:INSERT INTO teacher (name,password) VALUES ('张三','147')

teacher name password等字段名都用 两个` 围起来 ,后面的值用单引号

插入多条语句

INSERT INTO teacher (name,password) VALUES ('张三','147147'), ('李四','258')

注意事项:

  1. 字段是可以省略的,但是后面的值必须要一一对应,不能少
  2. 可以同时插多条语句,需要用逗号隔开每一个()

3.2.2修改

UPDATE 表名 SET 列=值 WHERE 条件

UPDATE `teacher` SET `name`='王' WHERE `id`=2
UPDATE `teacher` SET `name`='张',`password`='11111' WHERE `id`=3

条件操作符:

= ,!=,>,<,>=,<=基本的操作符,还有特殊操作符:

BETWEEN ... and ... 相当于 [2,5]

...AND... 相当于&&

OR 相当于||

注意事项:

  • 一定要带上筛选的条件,不然全都被更改了(效果是致命的)

  • 数据库的列,使用的时候带上 两个`

  • value是一个具体的值也可以是变量

3.2.3删除

delete from 表名 where 条件

DELETE FROM test where id=1

完全清空一个数据库表: TRUNCATE 表名

TRUNCATE和delete的区别

前者会刷新自增,后者不会刷新自增数据

4.DQL查询数据(最重点)

4.1DQL

Data Query Language:数据库查询语言

  • 所有的查询操作都用它 Select
  • 简单的查询,复杂的查询都可以做
  • 数据库中最核心的语言,最重要的语句
  • 使用频率最高的语句

4.2查询字段

SELECT 字段或者表达式 FROM 表 WHERE 表达式条件

查询版本:

SELECT VERSION()

查询全部表字段信息:

SELECT * FROM test

查询id和name的信息:

SELECT id,name FROM test

重命名他们(以及重命名表) AS :

SELECT id as '编号',name AS '姓名' FROM testAS ‘学生’

函数 CONCAT(a,b):

SELECT CONCAT('编号:',id) AS '编号' FROM test

去重操作DISTINCT :

SELECT DISTINCT id from test

4.3 WHERE条件语句

作用:限制选择条件

逻辑运算符

可以用 英文 或者 字符

与: and 或者 &&

或: or 或者 ||

非: not 或者 !

区间: BETWEEN a AND b

模糊查询:比较运算符

  • 空: IS NULL

  • 非空:IS NOT NULL

  • BETWEEN: a between b and c 若a在b和c之间,则为真

  • Like : a like b SQL匹配,如果a匹配b,则为真

    %代表任意字符

    _代表一个字符

    比如 :Select 'name' from 'student' where name like '李_'

    则会返回所有两个字姓李的同学

    where name like '%子%'

    会返回所有名字中带有子的同学

  • In: a in (a1,a2,...) 若a存在于()里面的值,则为真

    where id in (4,5,6)

    返回id为4,5,6的数据

4.4连表查询

语法:

SELECT 列1,列2...

FROM 表1

INNER JOIN 表2

ON 条件

操作 描述
Inner join 如果表中至少有一个匹配,就返回行
left join 即使右表中没有匹配项,也会返回左表中的值
right join 即使左表中没有匹配项,也会返回右表中的值

两个表:

SELECT information.id,`name`,`core`
FROM information
INNER JOIN gradeone
ON information.`id`=gradeone.`id`

三个表:

SELECT information.id,`name`,`core`
FROM information
RIGHT JOIN gradeone
ON information.`id`=gradeone.`id`
INNER JOIN gradetwo
ON XXX = XXX

自连接(了解)

把一张同样的表看成两张一样的表

自连接可用于一张表中数据有关联的情况

SELECT a.x,b.y
FROM 表X AS a
INNER JOIN 表X AS b
ON a.xx=b.yy

4.5排序和分页

排序

升序:ORDER BY 列 ASC

SELECT * FROM `information` ORDER BY core ASC

降序:ORDER BY 列 DESC

SELECT * FROM `information`ORDER BY core DESC

分页

目的:缓解数据库压力,给人体验更好,一般图片采用瀑布流

LIMIT 偏移量,长度

LIMIT 0,5 --选择前五个数据
LIMIT 5,5 --选择第六个到第十个数据

4.6子查询(由里及外)

本质:在where语句中嵌套一个子查询语句

where(select * from)

posted @ 2023-05-11 22:59  Geek李  阅读(12)  评论(0编辑  收藏  举报