首页 > 数据库 >数据库基础

数据库基础

时间:2023-05-11 23:14:28浏览次数:44  
标签:name -- 数据库 基础 TABLE id SELECT

1. 数据库mysql

数据库使用和可视化

关系型数据库mysql使用:

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

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

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)

标签:name,--,数据库,基础,TABLE,id,SELECT
From: https://www.cnblogs.com/geeklee/p/17392518.html

相关文章

  • Python学习之二:不同数据库相同表是否相同的比较方法
    摘要昨天学习了使用python进行数据库主键异常的查看.当时想我们有跨数据库的数据同步场景.对应的我可以对不同数据库的相同表的核心字段进行对比.这样的话能够极大的提高工作效率.我之前写过很长时间的shell.昨天跟着同事开始学python.感觉的确用python能够节约大量的时间.......
  • 零基础学会计二:资产<应收、预付、应付、预收>
    一、应收、预付、应付、预收>>应收、预付是资产,应付、预收是负债。>>预付账款和预收账款账户,一用用到底。(借方代表资产,贷方代表负债)>>预付或预收业务不多的企业可以采用“收收核算”或“付付核算”,应保留原来的借贷方向。1.1、坏账准备的账务处理1>计提/补提坏账准备借:信用......
  • 04-CSS基础
    CSS基础什么是CSSCSS指层叠样式表(CascadingStyleSheets)WEB标准中的表现标准语言简单说就是如何修饰网页信息的显示样式目前推荐遵循的是W3C发布的CSS3.01998年5月21日由w3C正式推出的css2.1CSS的语法 由两个主要的部分构成:选择器,以及一条或多条声明 选择......
  • Linux下安装MySQL数据库
    系统:Centos7安装MySQL版本:8.0.32安装方式:压缩包MySQL官网下载https://downloads.mysql.com/archives/community/ 一、检查是否安装过msyql和mariadb数据库rpm-qa|grepmysqlrpm-qa|grepmariadb如果存在的话使用命令卸载:rpm-e--nodeps  二、安装mys......
  • Java 远程连接 SQLite 数据库
    Java远程连接SQLite数据库 Java可以使用JDBCAPI来连接SQLite数据库。但是,SQLite不支持远程连接,因为它是一种文件数据库,需要直接访问数据库文件。如果您需要从远程位置访问SQLite数据库,可以将SQLite数据库文件放在共享文件夹中,并将该文件夹映射到本地计算机上。......
  • Python的基础核心知识
    编程语言和编程编程语言语言:人与人之间沟通的媒介编程语言:人与计算机沟通的语言编程程序员通过计算机能够读懂的语言把自己的思想和逻辑写下来的过程编程的初衷是更好的奴隶计算机计算机五大组成部分部1.控制器2.运算器3.存储器4.输出设备5.输入设备计算机三大核心硬......
  • 零基础学会计一:会计概述
    一、会计要素及其确认与计量1.1、会计要素资金运动(会计对象)->资产、负债、所有者权益、利润、收入、费用(会计要素)->会计科目1.2、会计恒等式1>资产=负债+所有者权益注:左边代表资金占有,右边代表资金来源。2>利润=收入-负债注:利润归属于所有者权益,所以有3)的代入式公式。3>......
  • (一) C语言基础
    目录数据类型基本数据类型派生数据类型结构型指针型数据类型基本数据类型整型:int占用4个字节,long占用8个字节字符型:char占用1个字节(即8位),一个汉字占用两个char浮点型:float占用4个字节,double占用8个字节派生数据类型结构型结构型就是用户自己制作的数据类型......
  • 数据库DDL和DML
    DDL代表数据定义语言,是一种有助于创建数据库模式的SQL命令。而,DML代表数据操作语言,是一种有助于检索和管理关系数据库中数据的SQL命令。  命令上的区别:DDL中常用的命令有:create,drop,alter,truncate和rename等等。而,DML中常用的命令有:insert,update,delete和select等等。 1.......
  • python基础——变量&字符串
    int()整数float()浮点数#变量名只包含字母,数字,下划线1、变量名能以字母或下划线开始,但是不能一数字开始2、变量名不能包含空格,但是能是用下划线来分割3、每个变量都执指向一个值4、python中关键字和函数名不可以用作变量名,关键字和函数名是python中用于特殊用途的单子#字符......