目录
客户端 ------> MySQL服务(3306)
数据库三层结构-破除MySQL神秘
创建数据库
查看删除数据库
备份恢复数据库
创建表
MySQL常用的数据类型(列类型)
编辑
编辑整型
bit类型
小数类型
字符串类型
日期类型的使用
客户端 ------> MySQL服务(3306)
连接到MySQL服务(MySQL数据库)的指令
mysql -h 主机IP -P 端口 -u 用户名 -p密码
提醒: (1)-p密码不要有空格
(2)-p后面没有写密码 ,回车后要求输入密码
(3)如果没有写-h主机 ,默认是本机
(4)如果没有写-P,默认是3306的端口
(5)在实际工作中,一般会修改的
登陆前 , 保证MySQL是运行的
数据库三层结构-破除MySQL神秘
DDL:数据定义语言[creat 表 ,库..]
DML: 数据操作语句[增加 insert , 修改 update ,删除 delete]
DQL: 数据查询语句[select]
DCL: 数据控制语句
创建数据库
#创建数据库
#创建一个名称为hsp_db01的数据库[图形化和指令演示]
#使用指令创建数据库
CREATE DATABASE lhq_db01
#删除数据库
DROP DATABASE lhq_db01
#创建一个使用utf8字符集的hsp_db02数据库
CREATE DATABASE lhq_db02 CHARACTER SET utf8
#创建一个使用utf8字符集,并带有校对规则的hsp_db03数据库
CREATE DATABASE lhq_db03 CHARACTER SET utf8 COLLATE utf8_bin#区分大小写
#校对规则 utf8_bin 区分大小 默认utf8_general_ci 不区分大小写
#下面是一条查询的sql,select查询*表示所有字段 FROM从哪个表
#WHRER 从哪个字段 NAME='tom'查询名字是tom
SELECT * FROM t1 WHERE NAME ='tom'
CREATE DATABASE lhq_db01 一个这句是可以创建数据库的
CREATE DATABASE lhq_db03 CHARACTER SET utf8 COLLATE utf8_bin 加上后面加粗的是为了带有校对规则,以后在该数据库中创建的表,如果没有指定下图中的字符集和校对,默认为数据库设置的
上面代码中执行的SELECT * FROM t1 WHERE NAME ='tom' t1是在对应的数据库中
查看删除数据库
#演示删除和查询数据库
#查看当前数据库服务器中的所有数据库
SHOW DATABASES
#查看前面创建的lhq_db01数据库的定义信息
SHOW CREATE DATABASE lhq_db01
#小老弟说明 在创建数据库或表的时候,为了规避关键字,可以使用反引号解决
CREATE DATABASE `int #int是一个关键字,前面加`可以规避
#删除前面创建的lhq_db01数据库
DROP DATABASE lhq_db01
备份恢复数据库
备份数据库 要在命令行下执行
mysqldump -u 用户名 -p -B 数据库1 数据库2 数据库n > 文件名.sql
#备份和回复数据库
#备份,要在DOS下执行,命令行中执行
mysqldump -u root -p -B lhq_db01 > e:\\bak.sql
DROP DATABASE lhq_db01
#恢复数据库(注意: 进入mysql 命令行再执行)
source e:\\bak.sql
#备份库中的表 再DOS下进行,在命令行中执行
mysqldump -u 用户名 -p 数据库 表1 表2 表n > e:\\文件名.sql #不用带上面的-B选项了
创建表
character set 字符集 如不指定则为所在数据库字符集
collate 校对规则 如不指定则为所在数据库校对规则
engine : 引擎
#指令创建表
CREATE TABLE `user`(
id INT ,
`name` VARCHAR(255),
`password` VARCHAR(255),
`birthday` DATE
)
CHARACTER SET utf8 COLLATE utf8_bin #字符集和校对规则ENGINE INNODB #引擎;
MySQL常用的数据类型(列类型)
修改上面的日期类型
整型
分为带符号位和不带符号位(其实也可以认为正负的关系)
说明,使用规范: 在能够满足需求的情况下,尽量选择占用空间小的类型
我们来一个演示代码
#演示一个整型的使用
#使用tinyint来演示它的范围,有符号的 -128~127 , 如果没有符号 0~255
#说明: 表的字符集,校验规则,存储引擎,使用默认的(数据库里的)
#如果没有指定 unsigned ,则TINTINT就是有符号的类型
CREATE TABLE t3(
id TINYINT
);
CREATE TABLE t4(
id TINYINT UNSIGNED
);
INSERT INTO t4 VALUES(127); #这是非常简单的添加语句
SELECT * FROM t4
bit类型
来一个演示
#演示bit类型使用
#1.bit(m)在1-64 8表示一个字节,因为一个字节有8个比特位
#添加数据 范围,按照你给的范围来确定的,比如 m =8表示一个字节0-255
#显示按照bit,显示二进制
#查询时,仍然可以按照数来查询
CREATE TABLE t05 (num BIT(8));
INSERT INTO t05 VALUES(1);
INSERT INTO t05 VALUES(5);
SELECT * FROM t05 WHERE num=1;
小数类型
1.FLOAT/DOUBLE [UNSIGNED]
2.DECIMAL M,D] [UNSIGNED]
可以支持更加精确的小数位,M是小数位数(精度)的总数,D表示小数点(标度)后面的位数
如果D是0,则值没有小数点或分数部分,M最大65,D最大30,如果D被省略,默认为0,如果M被省略,默认为10,建议:如果希望小数的精度高,推荐使用decimal
#演示decimal类型,float,double使用
#创建表
CREATE TABLE t06(
num1 FLOAT,
num2 DOUBLE,
num3 DECIMAL(30,20)
);
#添加数据
INSERT INTO t06 VALUES(88.12345678912345,88.12345678912345,88.12345678912345);
SELECT * FROM t06;
我们从图中可以看见:num1是float类型的,精度没那么高,num2是double类型,数据是比较高的, num3是decimal更高了
字符串类型
CHAR(size):固定长度字符串,最大255字符
VARCHAR(size) 0~65535字节 但是可以写入的字符串最大只能是65532 差了3个字节 这是为什么呢?因为utf8编码最大21844字符(因为utf8编码中1个字符可以是2个字节表示),1-3个字节用于记录大小(65535-3)/3=21844 在gbk编码(一个字符可以由两个字节表示)中,也是先预留3个字节,能表示的最大字符是:(65535-3)/2
#演示字符串类型使用
#注释的快捷键shift+ctrl+c 注销注释: shift+ctrl+r
CREATE TABLE t09(
`name` CHAR(255)#里面的值不能超过255字符
);
CREATE TABLE t10(
`name` VARCHAR(21844));#在utf8编码中里面的值不能21844字符
字符是不区分中文和字母的,一个中文表示一个字符,一个字母也表示一个字符
#字符串类型的使用细节
#CHAR(4) 和 VARCHAR(4) 这个4表示的是字符,而不是字节,不区分是字母还是汉字
CREATE TABLE t11(
`name` CHAR(4)
);
INSERT INTO t11 VALUES('李浩谦nb');
SELECT * FROM t11;
CREATE TABLE t12(
`name` VARCHAR(4));
INSERT INTO t12 VALUES('李浩谦n');
INSERT INTO t12 VALUES('浩谦nb');
SELECT * FROM t12;
#char(4)是定长(固定的大小),就是说,即使你插入'aa',也会占用 分配的4个字符的空间
#char(4)上述这样就会造成空间的浪费
#varchar(4)是变长(变化的大小),就是说,如果你插入一个'aa',实际占用空间大小并不是4个字符
#而是按照实际占用空间来分配(varchar本身还需要1-3个字节来记录存放内容的长度)
#实际数据大小+(1-3)字节
日期类型的使用
#演示时间相关的类型
#创建一张表 ,date,datetime,timestamp
CREATE TABLE t14(
birthday DATE, #-- 日期
jobtime DATETIME,#--记录年月日 时分秒
login_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
#--登录时间,如果希望login_time列紫红更新,需要配置
INSERT INTO t14(birthday,jobtime) VALUES('2022-11-11','2022-11-11 10:10:10');
SELECT * FROM t14;