大家好,我是whisperrr. |
文章目录
一.了解数据库
1.1数据库三层结构-破除 MySQL神秘
1.所谓安装Mysql数据库,就是在主机安装一个数据库管理系统(DBMS),这个管理程序可以管理多个数据库。DBMS(database manage system)
我们能不能主观的看到数据库是什么样子呢,笔者在安装Mysql5.7.19的教程中,我们手动创建data文件夹,data文件夹就是数据库
2.一个数据库中可以创建多个表,以保存数据(信息)。而我们创建的表就存放在data文件夹里面,我们可以意识到,表也是已文件的形式保存的
3.数据库管理系统(DBMS)、数据库和表的关系如图所示:示意图
1.2创建数据库
使用指令创建数据库
CREATE DATABASE lrx_db01;
创建一个使用 utf8 字符集的 lrx_db02 数据库,CHARACTER SET:指定数据库采用的字符集,如果不指定字符集,以Sqlyog为例,默认为utf8
CREATE DATABASE lrx_db02 CHARACTER SET utf8
创建一个使用 utf8 字符集,并带校对规则的 lrx_db03 数据库
COLLATE:指定数据库字符集的校对规则(常用的utf8_bin[区分大小写]、utf8_general_ci[不区分大小写] 注意默认是utf8_general_ci)
CREATE DATABASE hsp_db03 CHARACTER SET utf8 COLLATE utf8_bin
1.3查看、删除数据库
显示数据库
SHOW DATABASES
显示数据库创建的语句
SHOW CREATE DATABASE lrx_db02;
删除数据库指令
DROP DATABASE lrx_db01;
1.4备份恢复数据库
数据库里面有很多表,表中包括很多敏感的,重要的数据,所以笔者建议要经常备份数据库,以免数据丢失,或者我们的数据库需要拷贝到另一个数据库管理系统中,这也不可避免的备份数据。
#备份, 要在 Dos 下执行 mysqldump 指令,其实在 mysql 安装目录\bin
#指令后面不要带 ;
#第一个恢复数据库(注意:进入 Mysql 命令行再执行)
#第二个恢复方法, 直接将 bak.sql 的内容放到查询编辑器中,执行
二. Mysql常用数据类型(列类型)
列类型主要有四大类,数值类型,文本类型(类似java中的字符串类型),二进制类型,可以直接存放字段,还有一种关于日期的类型
2.1数值型(整数)的基本使用
作为SQL标准的扩展,MySQL支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围
说明:使用规范,在能够满足需求的情况下,尽量选择占用空间小的类型
2.1.1如何定义一个有符号的整数
#下面演示一个整型的案例,使用tinyint来演示范围
CREATE TABLE t3(
id TINYINT);
#简单的插入语句
INSERT INTO t3 VALUES (-127);
在上面案例,我们创建了表,id 的数据类型为TINYINT,没有指定unsigned,则TINYINT为有符号,范围在-127–128之间,所有我们插入-127是可以成功的。表的创建和语句后面文章会讲解。
2.1.2如何定义一个无符号的整数
#上面笔者创建了一个有符号的整数,现在演示一下无符号的整数怎么创建。依然使用tinyint类型演示,创建数据类型的指定unsigned,那么TINYINT就是无符号。
CREATE TABLE t4(
id TINYINT UNSIGNED);#unsigned
INSERT INTO t4 VALUES (255);
2.2bit(位)类型的基本使用
BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。这些引擎在创建表的时候会讲解
1.基本使用
mysql>createtable t05(num bit(8));
mysql>insert into t05(1,3);
mysql>insert into t05 values(2,65);2.细节说明
bit.sqlbit字段显示时,按照 位的方式显示查询的时候仍然可以用使用添加的数值如果一个值只有0,1可以考虑使>用bit(1),可以节约空间位类型。M指定位数,默认值1,范围1-64使用不多.
2.3小数类型的基本使用
1.FLOAT/DOUBLE [UNSIGNED]
Float单精度精度,Double双精度.
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;
#decimal 可以存放很大的数
CREATE TABLE t07 (
num DECIMAL(65));
INSERT INTO t07 VALUES(8999999933338388388383838838383009338388383838383838383);
2.4文本类型(字符串)的使用
2.4.1字符串类型的基本使用
CHAR(size)
固定长度字符串,最大创建255字符
CREATE TABLE t09 (
`name` CHAR(255));
VARCHAR(SIZE)
存储范围0~65535,指的是字节,在不同的编码下,占得字节空间是不一样的。
比如在utf8的编码下,三个字节表示一个字符,又因为本身会拿出1-3的字节来记录大小,所以实际上只能存21844个字符,(65535-3)/3 = 21844
CREATE TABLE t10 (
`name` VARCHAR(21844)) CHARSET utf8;
DROP TABLE t10;
2.4.2字符串类型的使用细节
细节一:
char(4),4表示的四个字符(最大255),在存放字符的时候,不管中文还有英文,都是存放四个,按字符计算。
varchar(4),4表示四个字符,但这四个字符占用多少的字节,是根据编码来确定的。uft8 :4*3=12
CREATE TABLE t11(
`name` CHAR(4));
INSERT INTO t11 VALUES('祝你好运');
SELECT * FROM t11;
CREATE TABLE t12(
`name` VARCHAR(4));
INSERT INTO t12 VALUES('我爱数据');
INSERT INTO t12 VALUES('ab 北京');
SELECT * FROM t12;
细节二:
char(4)是定长(固定的大小),也就是说,即使插入‘aa’,也会分配四个字符的空间。
varchar(4),是变长(变化的大小),如果你插入‘aa’,实际占用的空间不是四个字符,而是按照实际占用空间来分配,同时,varchar本身也会占用1~3的字节来记录存放内容的长度
细节三:
什么时候使用char,什么时候使用varchar
1.如果数据是定长,推荐使用char,比如md5的密码,邮编,手机号,身份证号码等.char(32)
2.如果一个字段的长度是不确定,我们使用varchar,比如留言,文章
查询速度:char>varchar
细节四:
在存放文本时,可以使用text数据类型,可以将text视为varchar,注意text不能有默认值,大小0~2^16,如果希望存放更多字符,可以选择mediumtext或者longtext
2.5日期类型的使用
DATETIME、DATE和TIMESTAMP类型是相关的。该节描述了它们的特征,它们的相似点和不同点。
当你需要同时包含日期和时间信息的值时则使用DATETIME类型。MySQL以’YYYY-MM-DD HH:MM:SS’格式检索和显示DATETIME值。支持的范围为’1000-01-01 00:00:00’到’9999-12-31 23:59:59’。(“支持”表示尽管先前的值可能工作,但没有保证)。
当你只需要日期值而不需要时间部分时应使用DATE类型。MySQL用’YYYY-MM-DD’格式检索和显示DATE值。支持的范围是’1000-01-01’到 ‘9999-12-31’。
TIMESTAMP列类型的属性不固定,取决于MySQL版本和服务器运行的SQL模式
#演示时间相关的类型
#创建一张表, date , datetime , timestamp
CREATE TABLE t14 (
birthday DATE , -- 生日
job_time DATETIME, -- 记录年月日 时分秒
login_time TIMESTAMP
NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP); -- 登录时间, 如果希望 login_time 列自动更新, 需要配置
SELECT * FROM t14;
INSERT INTO t14(birthday, job_time)
VALUES('2022-11-11','2022-11-11 10:10:10'); -- 如果我们更新 t14 表的某条记录,login_time 列会自动的以当前时间进行更新
以耳倾听世间繁华,以语表达心中所想 感谢友友们的阅读,咱们下期再见 |