网状数据库:二十世纪六十年代初
层次型数据库:二十世纪六十年代末
关系型数据库(RDBMS):二十世纪七十年代至今
非关系型数据库(NOSQL):二十一世纪初至今
当前主流数据库——关系数据库(RDBMS):
RDBMS服务器软件:负责储存和管理数据(对于人来看都是乱码)
RDBMS客户端软件:负责向服务器发起增删改查命令(显示出人能读懂的操作结果)
servrt => database => table => row => column
MySQL -> sun / Oracle
->MariaDb
linux + Apache + Mysql + php
"LAMP"组合,目前最流行的开源服务器端技术之一!
尤其适合日中小型站点,需要快速部署的web应用。
SQL:Structured Query Language,结构化查询语言,专用于操作(增删改查)关系型数据库服务器中的数据,是ISO指定的一门行业标准语言。
常用的SQL语句——重点
(0)设置客户端所提及的SQL命令所用的字符集
set names ntf8;
(2)新建一个数据库
(3)进入指定的库
use 库名;
(4)创建一个新的数据表
create table 表明( 列名 类型,列名 类型,列名 类型 );
向表中插入一行数据/记录
insert into 表名 values(值1,值2,值)
提示:一行中数据值的数量必须与表明中列的数量相同;字符串和日期数据必须用英文单引号或双引号括起来,数字可括也不括
(6)从表中删除一行记录
delete from 表名; #删除所有的记录行,仍保留表本身
delete from 表名 where 条件子句; #只删除满足条件
(7)修改表中的一行记录——用的比较少,最不好记忆!!
update 表名 set 列名=值,列名=值,列名=值; #修改所有的行
update 表名 set 列名=值,列名=值,列名=值 where 条件子句; #只修改满足条件的记录行
(8)查询表中已有的所有数据
select * from 表明;
SQL语句分为四大类:
- create table 表明(列名 列类型)
tinyint 微整数 1个字节,-128~127
smallint 小正数 2个字节,-32768~32767
int 整数 4个字节,-2147483648~2147483647
bigint 大整数 8个字节, 很大的数
float(m,d) 单精度浮点数 4个字节,1234.5678 1.23456x10^38
double(m,d) 双精度浮点数 8个字节,1.2343x10^308
decimal(m,d) 定点小数 可以保证精确计算
bool 布尔 真假类型,只能取值为true/1或false/0
date 日期,数据形如 ‘2020-11-20‘
time 时间,数据形如 ‘10:20:3’
datetime 日期时间类型,数据形如 ’2010-5-15 12:10:5‘
char(m) 定长字符串 可能产生空间浪费问题,但存取速度快 不能超过255ar(m) character
varchar(m) 变长字符串 不会产生空间浪费,但存取速度慢 不能超过65535
text(m) 变长字符串
constraint:约束,表中某个列上的数据往往都是有限制的,
char(1)只能存 “男” 或 “女”,score decimal(4,1)不能存-500.9,phone char(11)必须符合电话的格式要求,uname不能有重复之,upwd不能为空…
MySQL中有如下约束类型:
语法:列名 类型 primary key,
声明为主键的列上的值(不能出现重复值),且不能为空(NULL),表中的记录会自动按照主键列上的值有大小排序——一个表中只能有一个列声明为主键列。
语法:列名 类型 unique,
声明为unique的列上不允许出现重复值,但可以出现null,且可以有多个null
语法:列名 类型 notnull
声明为not null的列上不允许出现空值
语法:列名 类型 check(条件),
列如:score decimal(4,1) check(score<=100 and score>=0)
提示:mysql默认不支持检查约束
语法:deptid int,
foreign key(deptid) references dept(did) 参考另外一个表的did
声明为外键的列上出现的值必须在另一个表的主键列上存在
语法:列名 类型 default 值,
若某个列上未指定明确的值,将自动使用默认值
create table user (uid int,sex char(1), default ‘男’);
insert into user values(1,‘男’);
insert into user values(2,‘女’);
insert into user values(3, default); #3号用户性别为男
insert into user(uid)values(4); #4号用户性别为男