数据库初始

xiaoxiao2021-02-28  35

一、基本概念 1、什么是数据库 文件存储的缺点

文件的安全性问题文件不利于查询和对数据的管理文件不利于存放海量数据文件在程序中控制不方便 数据库:高效的存储和处理数据的介质(介质主要是两种:磁盘和内存) 磁盘型数据库:mysql 内存型数据库:Redis 2、理想的数据库的特征充足的容量—-主要用于海量数据的存储足够的安全和审核—-数据的安全存储,防止不安全行为的发生,同时还要防止免受硬件故障与自然灾害或无意的改动多用户环境—-对于同时处于不同安全级别的用户是可访问的,并且要保持数据的一致性效率和查找能力—–以高效的算法来处理数据(包括查询、替换等)可伸缩性—-灵活,不断的适用于商业的变化与要求以及数据库的可移植性用户友好—- 使得用户易于操作,非技术人员通过简单的操作也可以对其使用 3、目前主流的数据库SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目Oracle: 甲骨文产品, Java程序员,大型项目,适合处理复杂的业务逻辑,对并发一般来说不如MySQL。MySQL:sun公司产品,现在也属于甲骨文,中型和大型项目。并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。DB2:IBM公司, 处理海量数据,大型项目,功能很强悍。informix: IBM公司,安全非常强。 4、SQL分类 DDL 数据定义语言,用来维护存储数据的结构—–代表指令 :create,drop,alter DML 数据操纵语言,用来对数据进行操作(表中的内容)—-代表指令:insert,delete,update DML中又单独分了一个DQL—-代表指令:select DCL数据控制语言,主要负责权限管理和事务—-代表指令:grant,revoke,commit 5、一些数据库对象的最大名称长度限制 二、数据库的基本使用 1、数据库的连接(可以在Windows下的cmd) mysql [-h 主机] -u 用户 -p 说明: 如果没有写 -h 127.0.0.1 默认是连接本地 如果需要登录到另外一个mysql,则需要修改配置,一般情况不让远程登录。 2、Linux下的登录与启动 (均为root用户下) 启动:service mysqld start 关闭:service mysqld start 三、有关数据库的操作 1、基本知识 create database 库名;——>建库 use 库名;—–>使用数据库 show databases;—–>展示数据库 数据在数据库中的存储形式是以表的形式存在,且以行为基本单位 2、创建数据库语法: CREATE DATABASE [IF NOT EXISTS] db_name(数据库名) [create_specification [, create_specification] …]有关create_specification create_specification: [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name说明: 大写的表示关键字 [] 是可选项 CHARACTER SET: 指定数据库采用的字符集(UTF-8:所有语言均支持的字符集标准) COLLATE:指定数据库字符集的比较方式(默认utf8_ general_ ci,一般不指定) 查看系统默认字符集以及校验规则的命令为: 系统默认字符集以及校验规则的命令为: show variables like ‘character_set_database’; show variables like ‘collation_database’; show variables like ‘character_set_database’;查看字符集 show variables like ‘collation_database’;查看校验规则创建数据库的完整语句 create database if not exists test(数据库名)charset=utf8(设置字符集) collate utf8_general_ci(设置校验规则); 系统默认的字符集一般是utf-8,校验规则是:utf8_ general_ ci查看数据库支持哪些字符集(字符集主要是控制用什么语言。比如utf8就可以装中文) show charset;检验规则 校验规则: 1)区分大小写 select *from tt1 name=‘a’;//此处在查询时,如果插入“A”,”a”,在查询时查询”A”,会将两个结果都列出来。 使用utf8_ general_ ci:不区分大小写(默认校验规则) 使用utf8_bin:区分大小写 2)影响排序 select* from tt1order by name;//查询 使用utf8_ general_ ci:按照字母顺序 使用utf8_bin:按照ascii码排序 3、显示数据库创建语句 show create database 数据库名; 1) MySQL 建议我们关键字使用大写,但是不是必须的。 2) 数据库名字的反引号“,是为了防止使用的数据库名刚好是关键字 3) /!40100 default…. / 这个不是注释,表示当前mysql 版本大于4.01版本,就执行这句话。 show create database 数据库名 \G:显示数据库创建的规则 4、数据库的删除 DROP DATABASE [IF EXISTS] db_ name;(此处不区分大小写,在执行命令之时,大小写均可) 对应的数据库文件夹被删除,级联删除,里面的数据表全部被删。 5、查看当前数据库的连接情况 show processlist; 6、备份与恢复数据库 备份:os(windows下cmd) > mysqldump -u root -p -B db_name1 db _name2… > address(路径):备份数据库 os(windows下cmd) > mysqldump -u root -p -B db_name1 tab(数据库名)表名1 表名2 >(这个符号后面接路径) address(路径):备份数据库中的表 -B: 免去创建新库 sql> source 路径名 恢复: 进入mysql控制台,我们先删除原来的库。 要恢复数据库,必须先创建一个空的数据库。最好和以前的数据库名字一致。 source /root/Desktop/mytest.sql(刚才备份之后的数据库的路径) #将数据库恢复回来。 7、修改数据库 ALTER DATABASE [IF EXISTS] db_name [alter_spacification [,alter_spacification]…] alter_spacification: [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name 更改字符集 alter database test charset=gdk; 更改校验规则 alter database test collate utf8_bin 对数据库的修改主要指的是修改数据库的字符集,校验规则 四、数据库的数据类型 1、字符串 字符串可以被定义为某个预定义字符集的字符序列,字符串的长度就是该序列中的字符数,每个字符可以用一个或者多个字节表示,具体取决于字符所属的字符集。 长度为0的字符串称为空字符串,也可以用NULL表示 (1)固定长度字符串(char) 系统会在内存或硬盘上分配需要的字节数 char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255 char(4) 表示可以存放两个字符,可以是字母或汉字,但是不能超过4个。最多只能是255 (2)可变长度字符串 varchar(M):不定长字符串,M表示字节,最大为65535字节 varchar(M)中M一行可最大放varchar为21844 varchar的测试同上面char类似,这里大家自己给出测试实例即可。 关于varchar(len),len到底是多大,这个len值,和表的编码密切相关: varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字节数 是65532。 当我们的表的编码是utf8时,varchar(n)n最大值是65532/3=21844[因为utf中,一个汉字占用3个字 节],如果编码是gbk,varchar(n)n最大是65532/2=32766(因为gbk中,一个汉字占用2字节)。 注意:mysql规定,一行记录的长度不能超过65535,而我们的大小4(int的大小)+21844(varchar)*3+3(用于记录数据的大小)>65535 varchar(15000):一般来说不会超过15000,超过会拖慢数据库的效率,超过之后使用text大文本类型。 char与varchar的区别 name char(4) name1 varchar(4)//一般表示名字 name:’ab’:4*3+3=15 name1:’ab’:2*3+3=9定长字符串与变长字符串的优缺点 定长字符创会造成磁盘空间浪费,但查找效率高 变成字符串节省空间,但查找效率低定长与变长的使用场景 如果数据确定长度都一样,就使用定长,比如身份证,手机号,md5加密的密码… … 如果数据长度有变化,就使用变长,比如,名字,地址,但是你要保证最长的能存的进去。 2、数值类型 为了使得无符号数相减可以得到正确的结果,设置set sql_mode=’NO_UNSIGNED_SUBTRACTION’;不同的版本下,结果不同,5.7版本不可以设置 有关bit的使用 基本语法: bit[(M)] 位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。 bit字段在显示时,是按照ASCII码对应的值显示。 如果我们有这样的值,只存放0或1,这时可以定义bit(1)。这样可以节省空间。 有关小数的使用float[(m, d)][unsigned] M指定显示长度,d指定小数位数,占用空间4个字节,最多支持7位小数,超过精度丢失 小数:float(4,2)表示的范围是-99.99 ~ 99.99,MySQL在保存值时会进行四舍五入。如果定义的是float(4,2) unsigned 这时,因为把它指定为无符号的数,范围是 0 ~ 99.99 create table tt3(num float(5,2));表示范围(有符号-999.99~999.99)decimal(m,d)[unsigned]:在mysql中表示小数,定点数m指定长度,d表示小数点的位数 decimal(5,2) 表示的范围是 -999.99 ~ 999.99 decimal(5,2) unsigned 表示的范围 0 ~ 999.99 decimal与float的区别:表示的精度不同,float表示小数后7位之后就看不见了,而decimal表示的精度更加准确,m最大65,d最大支持30位 建议:如果希望小数的精度高,推荐使用decimal。 3、日期类型 datetime 时间日期格式 ‘yyyy-mm-dd HH:ii:ss’ 表示范围从1000到9999,占用八字节 date:日期 ‘yyyy-mm-dd’,占用三字节 timestamp:时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和datetime完全一致,占用四字节,mysql自动添加,每当发生数据插入或者数据更新的时候,系统时间会自动更新 4、枚举和set 单选:枚举,enum(‘选项1’,’选项2’,’选项3’,…);,这些值 实际存储的是“数字”,因为这些选项,每个选项值,一次对应如下数字:1,2,3,….最多65535个;当我们添加枚举值时,也可以添加对应的数字编号 多选:set,set(‘选项值1’,’选项值2’,’选项值3’, …);每个选项值,一次对应如下数字:1,2,4,8,16,32,….最多64个; find_in_set(“要查询的属性”,查询的列); find_in_set(sub,str_list); 如果sub在str_list中,则返回下标,如果不在,返回0 str_list用逗号分隔的字符串。

这世上哪有什么奇迹,奇迹源于不放弃!!!

转载请注明原文地址: https://www.6miu.com/read-2350049.html

最新回复(0)