数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。它并不是随意存储的,存储数据是有规则的,要不查询效率会很低,除了文本类型、整数类型还有像能存储图像、声音这样二进制数据的blob类型。
数据库类型
- 常见的有关系型数据库如Mysql,sqlServer,Access、Oracle等,它的主要特点是其内部采用库表结构,每一条记录可以记录多个数据类型的数据,可以通过任意字段来查询数据。
- 常见的非关系型数据库有redis,nosql等,它的特点是数据全部由键值对(key/value)组成,获取数据一般只通过键(key)来获取。
- 这里我们只讨论Mysql,基本数据库都大同小异,Mysql支持所有标准的SQL数据类型。
数据表字段类型
常见字段种类 | 字段类型 |
字符串类型 | char,varchar,text,blob |
数字类型 | int,float,double,decimal |
日期和时间类型 | date,time,year,datetime,timestamp |
- 字符串类型:
类型 | 大小 | 用途 |
CHAR | 0-255 bytes | 定长字符串,定义CHAR(n),0 |
VARCHAR | 0-65535 bytes | 变长字符串,定义VARCHAR(n),0 |
BLOB | 0-65 535 bytes | 二进制字符串 |
TEXT | 0-65 535 bytes | 短文本字符串 |
- 数字类型
类型 | 大小 | 范围(有符号) | 用途 |
INT | 4 byte | (-2 147 483 648,2 147 483 647) | 整数 |
FLOAT | 4 bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 单精度浮点数 |
DOUBLE | 8 bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度浮点数 |
- 日期和时间类型
类型 | 大小 | 范围 | 格式 | 用途 |
DATE | 3bytes | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期 |
TIME | 3bytes | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1bytes | 1901/2155 | YYYY | 年份 |
DATETIME | 8bytes | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 日期和时间 |
TIMESTAMP | 4bytes | 从1970-01-01 00:00:00开始计算的秒数,比如到2020-11-24 13:00:00点是1606194000 | YYYYMMDD HHMMSS | 时间戳 |
理解了数据库里面的数据表字段类型,创建表时才能水到渠成。
数据库SQL语句操作
说明: table_name 为数据表名
field1,field2...fieldname为数据表的字段旧名
newname 字段新名字
- 创建数据库
# 最简单的方式是:CREATE DATABASE test; # 也可以指定默认字符集CREATE DATABASE [IF NOT EXISTS] [[DEFAULT] CHARACTER SET ] ;
- 创建数据表
# 关键字CREAT TABLECREATE TABLE table_name(# 创建一个自动增加auto_increment数值的id,作为基础的索引键id INT auto_increment PRIMARY KEY,# 创建一个变长为20的字符串类型varchar,不为空not null,唯一uniqueusername VARCHAR(20) NOT NULL UNIQUE,password VARCHAR(32) NOT NULL,email VARCHAR(32),privileges VARchar(10) NOT NULL,mobile VARCHAR(11),employtype VARCHAR(10)# 数据库引擎设置为innodb,默认字符集为utf-8)ENGINE=innodb DEFAULT CHARSET=utf8;
- 更改数据表字段或者删除数据表字段
# 新增数据表字段ALTER TABLE ADD [约束条件] [FIRST|AFTER 已存在的字段名];ALT TABLE table_name ADD newname varchar(20) not null after fieldname2;# 修改字段类型ALTER TABLE MODIFY ALT TABLE table_name MODIFY filedname NEW;# 修改字段名字ALTER TABLE CHANGE ;ALTER TABLE table_name CHANGE fieldname newname varchar(20);# 删除字段ALTER TABLE DROP ;ALTER TABLE table_name DROP fieldname;
- 增删改查
# 增INSERT INTO table_name (field1, field2,...fieldN) VALUES( value1, value2,...valueN );# 删DELETE FROM table_name WHERE id = 1;# 改UPDATE table_name SET field1='value' WHERE id = 1;# 查SELECT field2,field3...fieldn FROM table_name where id = 1;
Mysql数据库支持的常用函数
- 聚集函数
- avg 取平均值
- count 计数
- max 最大值
- min 最小值
- sum 求和
- 字符串函数
- 合并字符串函数:concat(string1,string2,string3…)
- 比较字符串大小函数:strcmp(string1,string2)
- 获取字符串字节数函数:length(string)
- 获取字符串字符数函数:char_length(string)
- 字母大小写转换函数:
- 大写:upper(x),ucase(x);
- 小写lower(x),lcase(x)
- 数学函数
- 绝对值函数:abs(x)
- 向上取整函数:ceil(x)
- 向下取整函数:floor(x)
- 取模函数:mod(x,y)
- 随机数函数:rand()
- 四舍五入函数:round(x,y)
- 数值截取函数:truncate(x,y)
- 时间日期函数
- 获取当前日期:curdate(),current_date()
- 获取当前时间:curtime(),current_time()
- 获取当前日期时间:now()
- 从日期中选择出月份数:month(date)
- 从日期中选择出周数:week(date)
- 从日期中选择出周数:year(date)
- 从时间中选择出小时数:hour(time)
- 从时间中选择出分钟数:minute(time)
- 从时间中选择出今天是周几:weekday(date),dayname(date)