一、数据库
1.数据的存储方式
2.什么是数据库
3.Mysql
4. 列类型
5. 列约束
(1)数据库的发展历史
网状数据库->层次型数据库->关系型数据库->非关系型数据库
(2)关系型数据库逻辑结构
server > database > table > row > column
(3)常见的关系型数据库:
SQLite:微型数据库,常用于移动设备
MySQL:开源中小型数据库,可用于各种操作系统
PostgreSQL:开源中小型数据库
SQL Server:Microsoft开发的中型数据库,只用于Windows系统
Oracle(甲骨文):Oracle公司开发的中大型数据库,可用于各种操作系统
DB2:IBM公司开发的中大型数据库,常用于IBM服务器搭配
LAMP:Linux+Apache+MySQL+PHP
Xampp:一个服务器套装,包含多个服务器软件(MySQL,Apache)
(1) 部署结构
服务器端:负责存储、维护数据 (mysqld.exe)
客户端:负责连接数据库,并进行CRUD (mysql.exe)
(2) 客户端连接服务器
mysql.exe -h127.0.0.1 -P3306 -uroot -p
#简写
mysql -uroot
-h host: IP地址/域名 127.0.0.1/localhost
-P port: 端口
-u user: 用户名
-p password: 密码,Xampp下密码为空
(3) 常用的管理命令
quit
show databases;
use 数据库名;
show tables;
desc 表名;
(4) SQL命令
交互模式(一步一步执行)
脚本模式(多个命令执行)
mysql -uroot<拖拽脚本
一行命令可以跨多行,英文封号结束
命令不区分大小写。(习惯上关键字大写,非关键字小写)
某条SQL语句语法错误,则后面的所有命令不再执行
单行注释(#...)多行注释(/*...*/)
(5) 常用的SQL命令
set names utf8;
drop database if exists stuDB;
create database stuDB charset=utf8;
use stuDB;
create table student(
sid int primary key auto_increment,
name varchar(12) not null,
ctime datetime not null,
alimoney decimal(6,2) not null default 0,
#冗余
i1 int not null default 0,
v1 varchar(255) not null default ''
);
#插入数据
insert into student values(null,'TG','1996-03-01',1000,0,'');
select * from student;
update student set alimoney=2222 where name='TG';
delete from student where sid='1';
alter table 表明 add 列名 类型;
(6) 计算机如何存储字符
ASCLL: 总共128个,对所有的英文字符及其符号进行了编号
Latin-1: 总共256个,对欧洲国家字符进行了编码,兼容ASCLL
GB2312: 对常用的6千多汉字进行了编码,兼容ASCLL
GBK: 对两万多汉字进行了编码,兼容GB2312
BIG5: 台湾繁体字编码
Unicode: 对世界上主流国家常用的语言进行了编码,兼容ASCLL
具体包含三种存储方案:utf-8,utf-16,utf-32
mysql默认使用Latin-1编码
统一使用utf8:脚本文件编码:file>save as>Encoding:utf8;
客户端连接服务器端:SET NAMES UTF8;
服务器创建数据的编码:CREATE DATABASE DB CHARSET=UTF8;
(1) 数值型
(2) 日期时间型
(3) 字符串型
mysql可以对要插入的数据进行特定的验证吧,足以满足条件才允许插入,否则认为是非法的插入。
(1) 主键约束(primary key)
该列不允许插入null;不允许插入重复的值(null是关键字,不允许加引号)
一表最多一个,通常设置在编号,加快数据的查找速度
(2) 非空约束(not null)
该列上数据不为空
(3) 唯一约束(unique)
该列上不允许出现重复的值
允许插入多个null(影响排序的结果)
一个表可以多个唯一约束
(4) 默认约束(default)
使用default关键字设置默认值
family 表有 fid,fname
fname varchar(16) default null;
insert into family values(80,default);
insert into family(fid) values(90); //未出现的列自动使用默认值
(5) 检查约束(check)
亦称自定义约束;(mysql不支持检查约束)
后期由js完成
create table t1(
score tinyint check(score>=0 and score<=100)
);
(6) 外键约束
使表之间关联起来。声明了外键约束的列上,插入的值必须在另一个表的主键列中出现过,外键列和对应的另一个表主键列两者的列类型要保持一致
FOREIGN KEY (courseID) REFERENCES (stuID);
(7) 自增列
auto_increment 自动增长