目录
Q:如果我想创建一个名字为create 或 database的数据库,可不可以?
A:不可以,因为它们是MySQL的关键字。
A:MYSQL中允许开发者使用关键字命名,但是在使用的时候要用反引号把关键字引起来。反引号在键盘上的位置,ESC下边,TAB上边,1的左边,要用英文字符 。
使用其他的关键字的时候也是一样的,from\to\password\user
数据库操作
1.选择要操作的数据库
use 数据库名[;]
切换数据库成功;
2.查看当前选择(操作)的是哪个数据库
select database();
3.删除数据库
drop database [if exists] db _name;
表示删除 如果指定的数据库存在 要删除的数据库名
只要出现Query OK,就表示执行成功
在服务器(一般都是用Linux系统)上删除并没有回收站这么一说,删了就没有了但在是磁盘上删除文件,并不是真正意义上的什么都没有了
还有一种恢复方式,就是通过日志来处理
MYSQL在执行的过程中只要对数据库进行修改操作,都会把这些操作内容记录是日志中,如果误删了数据库,就可以通过日志快速把日志中记录的所有操作再执行一遍,完成恢复
数据库也要定期备份,每天备份一次(增量备份,记录是今天比昨天新增的数据)/每周备份一次,全量备份
4.查看MySQL的帮助
创建表
创建完数据库之后,就要在数据库中创建表,表中存储的数据记录,一条记录由不同的列组成
Q:每个列需要什么要的数据类型?
1 数值类型
分为整型和浮点型:
- float和double类型,在表示小数的时候都不是特别精准,所以用decimal类型去表示小数
- 在有些系统中表示金额,一般把元为单位换成以分为单位,然后用int类型去表示金额
- M中不计算小数符号和负数的位数的,如果D为0,则具体的值不保存小数点和小数部分(也就是说保存的是一个整数)
- DECIMAL的最大位数(M)为65,支持最大的小数(D)为30
- 如果省略D,则默认为0;如果省略M,则默认为10
- 同学们只要知道DECIMAL可以保存很大的数就行了,根据自己项目中的要求设置小数精度
2.字符串类型
varchar(10) 指定的是字符串的长度,不是字节的大小
也就说这样定义一个字段,字段可以存放10个和10以内的字符,超过10个字符就报错之前
我们设置了数据库的编码集utf8mb4编码集,一个符最多占4个字节,根据字符的具体情况用1-4个字节表示一个字符
Q:一个varchar范围为0-65.535字,在utf8mb4编码集的情况下,一个varchar字段最多可以存放多少个字符?
A:考虑极端情况,65535/4=16383
一般在数据库中,不建议存文件,而是把文件存在磁盘上,在数据库相应的字段中保存文件路径
在查询文件的时候,先从数据库中找到文件路径,再去根据文件路径在磁盘上加载或是返回具体的真实文件
文本文件:人类可以直接看懂的文件,比如有记事本里面写的日记,配置文件,JAVA源代码(window系统中默认后缀为txt)
二进制文件:我们用文本编辑器打开的文件,里面是一堆乱码,这些文件只有机器可以读的懂,一般称之为二进制文件
3.日期类型
TIMESTAMP: 时间戳,以毫秒为单位计时
在之前计算机资源非常紧缺的时候,内存中用00 01 21这种类型去表示年份
到了上世纪90年代,大家就发现这个问题非常严重
99+1-->00(千年虫)
表的操作
需要创建表时,先要选择要操作的数据库
use 数据库名 ;
查看表结构
desc 表名;
- key:键值的类型,外键(foreign key),主键 (primary key)
- defult:当前列的默认值,什么都不指定的时候就是null
- extra:其他的一些拓展内容
创建表
语法:
CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype);
- 以后要计算机上对任何目标起名字,都不要用中文
- 这个是一个类 instance = new 这是一个类();
- 可以使用comment增加字段说明,每个字段后都可以加注解.
- 字段定义小括号进行包裹,最后一个语句之后不要加逗号(,)
示例: 创建一个名字为student的学生表,表中只包含两个字段,id 表示编号, name 表示姓名,长度为50
create table student(
id bigint,
name varchar(50)
);
- 强烈建议每张表中都要设计一个编号字段,数据型为bigint
- varchar的长度记得要指定,当前这个长度是我们拍脑门拍出来的,实际工作中要根据详细设计文档中的描述转换为代码就可以了
- show tables;查看当前数据库中有哪些表,注意tables是一个复数形式
命令行客户端工具,只执行一些简单的查询或是指令,如果一两句SQL可以搞定就在这里面去执行如果说要编复杂的SQL,比如表设计,复杂查询,建议大家还是去可视化工具中编写
如果在可视化编辑工具中把创建表的SQL编写好了,如何在命令行工具中执行?
在编辑器中把SQL编辑好之后,保存为一个本地的.sql文件
D:\databaselstu_test.sql
创建表中加校验
create table if not exists表名(
字段数据类型
);
和之前创建数据库是一样的写法
删除表
语法格式:
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...
库名.表名来指定一张表在MYSQL服务中的完全路径
关于drop一定要谨慎操作
删除表之后,很难第一时间被发现,删除表的危害并不亚于删除库
删除库之后,我们的程序在运行的过程中就连不上数据库了,只要发现问题就会及时报警,以便修复问题
关于表的操作
1.show tables;查看当前数据库中所有的表
2.create table (
字段名1 数据类型,
字段名2 数据类型
);
3.desc表名; 查看表结构
4.drop table [if exists] 表名;
拓展作业
有一个商店的数据,记录客户及购物情况,有以下三个表组成:
商品goods(商品编号goods_id,商品名goods_name, 单价unitprice, 商品类别category, 供应商provider)
客户customer(客户号customer_id,姓名name,住址address,邮箱email,性别gender,身份证 card_id)
--创建数据库
drop database if exists mall;
create database mall character set utf8mb4 collate utf8mb4_0900_ai_ci;
--选择数据库
use mall;
--创建商品表
drop table if exists goods;
create table goods(
goods_id bigint,
goods_name varchar(50),
unitprice decimal(10,2),
category varchar(20),
provider varchar(50)
);
--创建客户表
drop table if exists purchase;
create table purchase(
customer_id bigint,
name varchar(20),
address varchar(50),
email varchar(255),
gender bool,
card_id varchar(18)
);
--创建购买记录表
drop table if exists customer;
create table customer(
order_id bigint,
customer_id bigint,
goods_id bigint,
nums int
);
TIP:
(1)bool=tinyint;
(2)取别名用comment;