好久不见,未曾想念。今天来聊聊数据库基础的学习,以MySQL数据库为对象,记录其概念与语法。
数据库,顾名思义,即用于存储数据的仓库。世面上主要的关系型数据库有MySQL、Oracle、sql server、db2、sqlite,其数据以表格形式存放。如今也有不基于SQL(结构化查询语言)的NoSQL数据库,即not only sql,其中包括键值(Key-Value)存储的数据库,列存储数据库,文档型数据库等。这些并不是今天的主角,接下来就让我们把聚光灯打到主角MySQL的方位。
MySQL是一个开源免费的数据库,也因此是互联网领域最常用的数据库。2008年sun公司以10亿美金收购了MySQL,而一年后,sun又被Oracle收购。这样一来,也就存在一个问题,即MySQL被Oracle收购后,存在闭源风险。各大开源社区渐渐不再支持MySQL,而转向支持Mariadb的开发。而Mariadb是何许人也呢?它是MySQL联合创始人Monty Widenius提供的MySQL分支。据知情人士透露,阿里投资Mariadb将近3000万,并将自己开发的数据库新功能,免费贡献给Mariadb。
了解了MySQL的发展历程后,我们记录一下MySQL命令行客户端的使用。
1、连接登录本机MySQL服务器:mysql -uroot -p 。回车后,在命令行输入密码即可进入服务器。
2、退出客户端,断开与服务器的连接使用exit或者\q命令。
3、显示数据库列表可以使用show databases或者show schemas。而要进入数据库则使用use 数据库名,显示数据库中包含的列表使用show tables命令。
4、MySQL用户由“用户名+IP地址”来标识,故用户可用create user '用户名'@'ip地址' identified by '密码' 命令来创建。创好用户后,给用户授予全部权限grant all privileges on *.* to '用户名'@'ip地址'。删除用户则用户则使用drop user '用户名'@'ip地址'。
5、MySQL对数据库进行管理,常用的有以下几类。在创建数据库时指定数据库编码:create database 库名 charset=utf8。相应的对数据库的修改也就只能修改它的默认字符编码,如alter database 库名 charset gbk。删除库则较为简单,只需drop database 库名,就以删除。但是一旦删除,会将改库中的所有数据表删除,且不可恢复。
6、对于数据表来说,创建表时,除了要确定字段以外,还需要确定数据库存储引擎和字符集。若表的字符集不明确标定,将随数据库的字符集。除对数据表的创建删除以外,更应该注意对数据表的修改。
截断表可理解为重建表,会先删除数据表,而后重新创建一个和原来字段相同的表,只是表格中的具体数据会被清空,也是不可恢复的。截断表的命令为:truncate table 表名。若要修改表名,使用rename table 旧表名 to 新表名。而修改表的参数(存储引擎,编码)使用alter table 表名 engine=myisam charset=gbk。
7、关于字段的操作,主要明白几个关键的字就行。添加字段会使用到add,以及在指定位置时会使用到first和after。若要修改字段名和字段类型,则会使用到change和modify,将其与after和first结合则可以用来修改字段在表中的位置。删除字段则需要用drop column 字段名来实现。
8、在一个表中,字段的字节量总合不超过65535个字节。字段的字节量则由修饰字段的类型决定。只要字段中有一个字段允许取null,则总字节量中需分配一个字节来给null值。
在MySQL里,数据类型有:tinyint占1个字节; smallint 占2个字节; int 占4个字节; bigint 占8个字节; float 占4个字节; double 占8个字节; decimal/numeric【定点浮点数,可以做精确运算,如decimal(6,2)则表示整数4位,小数2位,整数超出范围则报错,小数超出范围则四舍五入】; char(n)【定长字符串,超出长度,可能报错也可能会截断,若长度不足,自动补空格。其最长可表示255个字节,因其为定长字符串,在使用时不用另外去确定其长度,故效率更高】; varchar(n)【变长字符串,在修饰的字符串取值最大长度小于等于255字节时,前面需要有一个字节来表示该字符串的长度。若字符串取值最大长度超过255个字节时,前面需要使用两个字节来表示长度。由于单表字段的总字节量在65535个字节,则varchar(n)最大表示范围是65535个字节,而n的取值则由具体字符集编码确定(gbk中中文占两个字节,utf8中中文占3个字节)。一般情况下我们会使用varchar保存255字节以内的字符串】; text【可表示65535个字节,但只占用表总字节量的10个字节,故在保存大篇幅文档时,可选择text数据类型】;blob【超大对象数据类型,使用时需要用流来读写blob字段数据。但是通常不会用来保存文本。】; 还有一类表示时间日期的数据类型【datatime(年月日时分秒),date(年月日),time(时分秒),timestamp(时间戳,也表示年月日时分秒,但最大只能表示2038年。在修改一行数据时,第一个timestamp字段会自动更新为系统的当前时间。且不能取null值,一旦填入null,会自动填入系统当前时间。故无特殊要求,一般不用。)】。
9、在数据库存储引擎方面,常用的有innodb和myisam。innodb是一种默认推荐引擎,支持事务和外键。提供了行级锁,在一个用户对表中某一行进行操作时,不允许其他用户对此行进行操作,但是不影响其他用户对表中其他行进行操作。其生成的表文件中,表名.frm用于保存表的结构,表名.ibd则保存数据和索引。
myisam存储引擎则不支持事务和外键,提供的是表级的锁,但这也成就了其数据访问效率更高。在生成的表文件中,表名.frm保存表结构,表名.MYD保存数据,表名.MYI保存索引数据。除了innodb和myisam,也还存在其他数据库存储引擎,例如memory内存表等。
MySQL君,初次见面,请多多关照!