数据库的备份
在我们删除一个数据库的时候,往往要像做航天的工程一样,小心谨慎!!! 在我们不是完全确定,或者这个数据库暂时不用时。一定要备份数据库!
数据库备份指令:mysqldump -u root -p -B 数据库1 数据库2 …… 数据库n > 保存路径.sql
例如:mysql -u root -p -B db02 db03 > d:\\aak.sql
这里我就是把db02、db03 两个数据库备份到aak.sql 文件中。
注意事项
1、一定要在dos系统下面以管理员身份执行该命令 2、不要登录mysql , 要在dos系统下面执行。 3、SQLyog 是不行的 ,一定要管理员身份
虽然三条建议看起来是一条,但是实测避坑!!!晕头转向,十几分钟。
如果你数据库很大 , 只想备份一个数据库中的几张表的话,你可以使用
mysql -u root -p -B 数据库 表名1 表名2 > 文件路径.sql;
例如:mysql -u root -p -B db01 users > akk.sql;
数据库的恢复
又是一个晕头转向的晚上终于搞出来了!
我也不知道为啥一次性保存一个数据库,或者保存一个数据库里面的一张表才能恢复成功,
有大佬看到了,麻烦指点一下哈。
插个眼
恢复数据库指令:source 文件路径.sql;
例如:source d:\\akk.sql;
请注意:要在mysql命令行下面才能使用哦。即使用DOS系统登录MySQL , 然后使用该命令。
但是好像只能恢复备份一个数据库的sql文件,或者保存一个数据库里面的一张表才能恢复成功。
其实备份的sql文件中存的就是数据和sql语句,所以你可以直接把文件中的语句放在mysql命令行中执行 然后就能恢复数据了,但是我个人觉得一句话可以解决的事情,还是不要复制这么多东西
创建表
基本语法
create table table_name(
field1 datatype
field2 datatype
field3 datatype
)character set 字符集 collate 校对规则 engine 存储引擎
field:指定列名
datatype:指定列类型(字段类型)
character:如不指定则为所在数据库字符集
collate:如不指定则为所在数据库校对规则
engine:引擎
例如:
CREATE TABLE t1(
id INT ,
name VARCHAR(250),
password VARCHAR(250),
birthday DATE )
CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB;
要是关键字与数据库表名,字段名冲突了可以使用 ,这个小点点给它,包起来。这种符号就是在Esc 下面 , tab上面的那个符号 。这个可要一定记住了,不然你会怀疑人生为什么一直都是错的!!!
数据库常用的数据类型(列类型)
因为涉及到的数据类型非常多,所以我不会一一介绍,但是重点使用的会好好的说一下。这个图,因为确实小,标红的是用的比较多的。
整形
首先我们创建表
CREATE TABLE t2( # 创建 一张表
id TINYINT UNSIGNED # 去掉unsigned 就是有符号的数
)CHARACTER SET utf8 COLLATE utf8_bin;
INSERT INTO t3 VALUES(200); # 添加语句插入一组数据
# 去掉unsigned 就是那么对于TINYINT 来说就是 -128 --- 127
当然,这跟我们C语言里面学的很像。其他数据类型的范围,也是通过所占字节算出来的。
二进制 bit
我们其实很少用bit , 虽然但是还是不知道二级制数据要用在哪里。但是确实用的少,了解即可。
#创建一个表
# bit 范围 1-64 bit , 就是说最大有8个字节, 也就是64bit 。
CREATE TABLE t3( num BIT(64)); // 这里面的64是多少比特位的意思
INSERT INTO t2 VALUES(10);5改变v天机87他人4
# 数据显示的二进制
SELECT * FROM t2 # 查询此表t2
小数(浮点数)
主要的三个类型就是 FLOAT / DOUBLE [UNSIGNED] / DECIMAL[M,D][UNSIGNED]
可以支持更加精确的小数位。M是该数总的位数,D是小数点(标度)后面的尾数。
如果D是0,则值没有小数点或分数部分。 M 最大65 , D 最大是30 。如果D被省略 ,默认是0 。如果M被省略 ,默认是10。
#创建表
CREATE TABLE t06(
num1 FLOAT, # 只能存放小数点后4位
num2 DOUBLE, # 存放小数点后14位
num3 DECIMAL(30,20) # (M , D) M 是指总共的位数,
小数点前+小数点后的位数。 D精确到小数点后多少位
);
# 添加数据
INSERT INTO t06 VALUES(88.123456789123456 , 88.12345678912345 , 88.12345678912345);
SELECT* FROM t06
如果是需要处理高精度的整数或者是处理高精度的浮点数(浮点数),建议使用DECIMAL。
字符串
CHAR(size) 固定长度 , 最大就是255字符 。
varchar(size) 0 -- 65535 字节 ,但是varchar 需要1-3个字节记录字符串所占[字节]的大小。
varchar 是可变长度字符串,最大的是65535字节 ,如果是utf8编码 , 实际可以存储21844个字符。是可以可用字节不是65535!!! 实际存放字符需要看,字符编码!
# char( 4 ) 和 varchar( 4 ) 这个4 表示的是字符 , 而不是字节
CREATE TABLE t5(
`name` CHAR(4) );
INSERT INTO t5 VALUES('xyws');
# INSERT INTO t5 VALUES('xywss'); 这样是不行的 ,因为已经规定是存放4 个字符。
# 创建一个表
CREATE TABLE t6(
`name` VARCHAR(4)
);
INSERT INTO t6 VALUES('xyws');
# INSERT INTO t6 VALUES('xywss'); 这不行的 , 因为 varchar ,已经规定是存4个字符了。
SELECT * FROM t6
这个char 是很容易造成空间浪费的,就比如你规定4个字符,但实际上你只放3个字符,但是还是会用4个字符的空间,因为它是固定。但是我们varchar 就是比较灵活,假设你规定开辟4个字符,它会根据实际情况选择开辟,假如你放了3个字符,那么它就只开辟3个字符的空间。但是varchar本身是需要1-3个字节来记录存放内容长度。
如果是确定的大小,我们可以选择char 。比如我们的身份证号码,手机号等等……,这样查询速度会更快。 但如果是长度不确定那么,建议你使用varchar 。如果varchar还不够的话建议使用TEXT ,MEDIUM TEXT ,LONGTEXT 。他们都是按字节算的范围!
日期
日期数据类型:DATE 年月日
TIME 时分秒
DATETIME 年月日 时分秒
TIMESTAMP 时间戳
CREATE TABLE t7(
birthday DATE ,
job_time DATETIME ,
login_time TIMESTAMP
NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP);
# NOT NULL DEFAULT CURRENT_TIMESTAMP
# ON UPDATE CURRENT_TIMESTAMP
# 这段指令就说 , 不能为空 , 默认的话就是目前时间 .
小练习
创建一个表
CREATE TABLE emp(
id INT ,
`name` VARCHAR(64) ,
sex CHAR(1) ,
brithday DATE ,
entry_date DATETIME ,
job VARCHAR(20) ,
salary FLOAT ,
`resume` TEXT(500)) CHARSET utf8 COLLATE utf8_bin ;
SELECT * FROM emp;
INSERT INTO emp
VALUES(100 , '小妖怪' , '男' , '2022-10-22' , '2022-10-22 11:11:11' , '
巡山的' , 3000 , '大王叫我来巡山');
这就是创建一个表 , 字段还蛮多的。 INSERT INTO table_name VAULES("filed_1 , filed_2 , …… filedn"); 是插入VALUES , 也就是添加一个信息。