1, 什么是SQL
SQL:结构化查询语句, 大小写不敏感
2, 什么是关系数据库
关系数据库是按照关系模型来存储、组织和管理数据;
关系数据库中的数据表是二维表,任何数据都可以通过“行+列”来确定;
3, 数据表
2-1, 记录
关系数据表中,一行就是一个记录;用于记录一条数据
2-2, 字段
关系数据表中,一列就是一个字段;用于定义数据类型
说明:Null是表示为空,不是表示0或''(空字符串),建议数据不要定义为Null,因为这样可以加快查询速度,提升性能
2-3, 数据表对应关系
2-3-1, 一对一关系
如一个教师表和一个班级班,若一个教师D只能对应到一个班级表ID,这种就是一对一关系
2-3-2, 一对多关系
如有一个班级表,一个学生表,班级表中的班级ID可对应学生表里多个学生,这样班级表和学生表就是一对多的关系
2-3-3, 多对多关系
多对多关系必须通过一个中间表来实现,即一个班级表有多个老师,一个教师表对应多个班级,所以教师和班级存在多对多关系,把这两关系通过一个中间表就实现了多对多关系
2-4, 主键
主键用来区分数据表不同记录唯一标识;
主键可以是单个字段,也可以是多个字段,当是多个字段构成主键时,这时的主键叫着联合主键
联合主键中可以重复部分字段,但是不允许全部字段都重复
主键一旦确定下来,就不允许修改, 所以在选取主键字段不能与业务相关
自增数据类型一般被用于当着主键
在数据表中,通过建立主键约束可以起到数据不重复的作用
2-5, 外键
外键的作用是把不同的数据表联系起来
外键是通过对数据表的某个字段定义外键约束来实现
ALTER TABLE students # students为要操作的表
ADD CONSTRAINT fk_class_id # fk_class_id为外键约束自定义名称
FOREIGN KEY (class_id) # 指定class_id为外键字段
REFERENCES classes (id); # 指定关联到classes表的id字段
通过定义外键约束可以保证无法插入无效数据,如上面的classes表不存在id=99的记录,那么students表中就无法插入class_id=99
的记录
删除外键约束通过如下命令
# 说明:删除外键约束时,只是删除外键约束,不能删除外键列
ALTER TABLE students # students为操作表
DROP FOREIGN KEY fk_class_id; # fk_class_id为外键约束名称
2-6, 索引
索引是对数据表中列进行预排序的一种数据结构,通过索引在查询时不用扫描整个表,从而可以提升查询速度
索引列的值越不相同,效率越高
关系数据库会自动给主键创建索引
2-6-1,创建索引
# 为单列创建索引
ALTER TABLE students # students为操作表明
ADD INDEX score_index (score); # score_index:自定义的索引名; score:创建索引的列
# 为多列创建索引
ALTER TABLE students # students为操作表明
ADD INDEX score_index (score, name); # score_index:自定义的索引名; score, name:创建索引的列
2-7,唯一约束
通过对字段创建唯一约束,可以保证该列的值不重复
ALTER TABLE students # students为操作表
ADD CONSTRAINT uniname UNIQUE (name) # uniname为自定义的约束名称,name为约束列
3, 数据类型
名称 | 类型 | 说明 |
---|---|---|
INT | 整型 | 4字节整数类型,范围约+/-21亿 |
BIGINT | 长整型 | 8字节整数类型,范围约+/-922亿亿 |
REAL | 浮点型 | 4字节浮点数,范围约+/-1038 |
DOUBLE | 浮点型 | 8字节浮点数,范围约+/-10308 |
DECIMAL(M,N) | 高精度小数 | 由用户指定精度的小数,例如,DECIMAL(20,10)表示一共20位,其中小数10位,通常用于财务计算 |
CHAR(N) | 定长字符串 | 存储指定长度的字符串,例如,CHAR(100)总是存储100个字符的字符串 |
VARCHAR(N) | 变长字符串 | 存储可变长度的字符串,例如,VARCHAR(100)可以存储0~100个字符的字符串 |
BOOLEAN | 布尔类型 | 存储True或者False |
DATE | 日期类型 | 存储日期,例如,2018-06-22 |
TIME | 时间类型 | 存储时间,例如,12:20:59 |
DATETIME | 日期和时间类型 | 存储日期+时间,例如,2018-06-22 12:20:59 |