目录
一、MySQL三层结构
1、创建数据库语句
表的名字不要以数字开头
# 演示数据库的操作
#创建一个名称为 hsp_db01 的数据库。[图形化和指令 演示]
#使用指令创建数据库
CREATE DATABASE hsp_db01;
#删除数据库指令
DROP DATABASE hsp_db01
#创建一个使用 utf8 字符集的 hsp_db02 数据库
CREATE DATABASE hsp_db02 CHARACTER SET utf8
#创建一个使用 utf8 字符集,并带校对规则的 hsp_db03 数据库
CREATE DATABASE hsp_db03 CHARACTER SET utf8 COLLATE utf8_bin
#校对规则 utf8_bin 区分大小
默认 utf8_general_ci 不区分大小写
#下面是一条查询的 sql , select
查询 * 表示所有字段 FROM 从哪个表
#WHERE 从哪个字段 NAME = 'tom' 查询名字是 tom
SELECT *
FROM t1
WHERE NAME = 'tom'
2、查看、删除数据库语句
#演示删除和查询数据库
#查看当前数据库服务器中的所有数据库
SHOW DATABASES
#查看前面创建的 hsp_db01 数据库的定义信息
SHOW CREATE DATABASE hsp_db01
#老师说明 在创建数据库,表的时候,为了规避关键字,可以使用反引号解决
#删除前面创建的 hsp_db01 数据库
DROP DATABASE hsp_db01
查看当前数据库服务器中的所有数据库
查看前面创建的 数据库的定义信息
规避关键字->反引号`
3、备份恢复数据库
#练习: database03.sql 备份 hsp_db02 和 hsp_db03 库中的数据,并恢复
#备份,
要在 Dos 下执行 mysqldump 指令其实在 mysql 安装目录\bin
#这个备份的文件,就是对应的 sql 语句
mysqldump -u root -p -B hsp_db02 hsp_db03 > d:\bak.sql
DROP DATABASE ecshop;
#恢复数据库(注意:进入 Mysql 命令行再执行)
source d:\bak.sql
#第二个恢复方法, 直接将 bak.sql 的内容放到查询编辑器中,执行
1)、备份数据库,在DOS执行
出现sql文件
2)、恢复
先进入MySQL命令行
或者全部复制运行即可
若想复制数据库中某一个表:
mysqldump -u root -p lyt_db02 t2 > d:\bak.sql
4、创建表
#使用指令创建表
#要求:hsp_db02 创建表时,要根据需保存的数据创建相应的列,并根据数据的类型定义相应的列类型。
例:user表 (快速入门案例 create_tab01.sql )
#id 整形
#name 字符串
#password 字符串
#birthday 日期
CREATE TABLE `user`(
id INT,
`name` VARCHAR(255),
`passsword` VARCHAR(255),
`birthday` DATE)
CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB#或者MYISAM
二、列表类型(列类
1、int
演示
2、bit
实质上就是存储成二进制指定bit(m) m是8则0~255,查询时仍可按十进制查询
3、小数类型
DECIMAL可以存放很大的数
4、字符串
VARCHAR 变长 0~65535是字节 不同编码方式 每个字符所占字节不同
比如utf8 3个字节记录大小 剩余65532个字节,除以3 可记录21844字符
如果是gbk -> varchar(size) size=(65535-3)/2=32766
varchar 的size也是字符,不是字节,不能超过65535个字节换算好的字符数
字符串使用细节
细节1、
varchar占用了多少字节不一定,要根据编码方法换算
占位不区分字母还是数字
细节2、
char(num) 定长 num是几 就开辟几个字节,不用也占用空间 会造成浪费
varchar(num)变长 实际占用空间不一定是num
用多少会按实际占用空间分配(本身用1-3字节存放内容长度
L(实际数据大小)+(1-3)字节大小
细节3、
定长数据用char 查询速度比varchar快
细节4、
如果varchar不够用-> 用mediumtext 或者longtext
想简单点-> 直接用text
所占字节: 6*3 6*3+3 3*3+7 (和varchar不同点: 数字字母符号占一个字节
5、日期类型
DATA->年-月-日
DATATIME->年-月-日 时:分:秒
TIMESTAMP->时间戳 自动更新(要配置
时间戳TIMESTUMP不用赋值自动填入当前时间
如果完美更新表的内容,timestamp依然自动以当前时间进行更新
代码
CREATE TABLE t7(
birthady DATE,
job_time DATETIME,
#在修改时自动以当前时间更新
login_time TIMESTAMP not null DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
INSERT INTO t7(birthady,job_time) VALUES('2023-02-01','2023-02-01 17:23:23');
SELECT * FROM t7