数据类型:
数据类型的种类:
数据类型的长度
数据类型的使用场景
主键:
用于唯一标识表中的一条记录,可用单个字段或多个字段设置为主键,主键列上不能有两行相同的值,也不能有空值。
可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度
#联合主键
create TABLE tb_emp3(
`name` VARCHAR(25),
deptId int(11),
salary FLOAT,
PRIMARY key(`name`,deptId)
)
外键:
外键用来在两个表的数据之间建立联系,它可以是一列或者多列。一个表可以有一个或多个外键。外键对应的是参照完整性, 一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值。
首先它是表中的一个字段,它可以不是本表的主键,但对应另外一个表的主键。外键主要作用是保证数据引用的完成性,定义外键后,不允许删除在另一个表中具有关联关系的行
注意:
在从表中插入数据时,外键的值必须在主表的主键中(或者设置为空),类型需要包容或匹配
#主表:对于两个具有关联关系的表而言,相关联字段中主键所在的那个表即为主表
create TABLE tb_dept1(
id int(11) primary key,
`name` VARCHAR(25) not null,
location VARCHAR(50)
)
#从表:对于两个具有关联关系的表而言,相关联字段中外键所在的那个表即为从表
CREATE TABLE tb_emp5(
id int(11) PRIMARY key,
`name` VARCHAR(25),
deptId int(11),
salary float,
constraint fk_emp_dept foreign key(deptId) references tb_dept1(id)
)
INSERT into tb_dept1 (id,`name`,location)VALUES(1,"研发","上海")
INSERT into tb_emp5 (id,`name`,salary)VALUES(2,"Jay2",8000)
使用非空约束:
对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统会报错
字段名 数据类型 not null
使用唯一约束:
唯一约束要求该列唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值
#为多个字段添加唯一约束
create TABLE tb_dept2(
id int(11) primary key,
`name` VARCHAR(25) not null,
location VARCHAR(50),
constraint STH UNIQUE(`name`,location)
)
使用默认约束:
默认约束指定某列的默认值
字段 数据类型 DEFAULT 默认值
设置表的属性自动增加:
一个表只能有一个字段使用AUTO_INCREMENT约束,且该字段必须为主键的一部分。约束的字段可以是任何整数类型
字段 数据类型 AUTO_INCREMENT
修改表名:
alter table 旧表名 rename 新表名
修改字段的数据类型
alter table 表名 modify 字段名 数据类型
数据库存储引擎:
数据库存储引擎是数据库底层软件组织,数据库管理系统使用数据引擎进行创建、查询更新和删除数据操作
使用InnoDB,支持事务和外键
数据类型和运算符:
指定数据类型之后,也就决定了向字段插入的数据内容,例如,当要插入数值的时候,可以将它们存储为整数类型,也可以将它们存储为字符串类型;不同的数据类型也决定了MySQL在存储它们的时候使用的方式,以及在使用它们的时候选择什么运算符号进行运算
MySQL支持多种数据类型,主要有数值类型、日期/时间类型和字符串类型
整数类型:
ps:显示宽度只用于显示,并不能限制取值范围和占用空间
浮点数类型和定点数类型:
MySQL中使用浮点数和定点数来表示小数。浮点类型有两种:单精度浮点类型(FLOAT)和双精度浮点类型(DOUBLE)。定点类型只有一种:DECIMAL。在对精度要求比较高的时候是用DECIMAL的类型比较好,另外两个浮点数进行减法和比较运算时也问题,所以在使用浮点型时需要注意,并尽量避免做浮点数比较
日期与时间类型:
字符串类型:
使用聚合函数查询:
有时候并不需要返回实际表中的数据,而只是对数据进行总结。
子查询:
带ANY、SOME关键字的子查询:
SELECT num1 from tbl1 where num1 > any (SELECT num2 from tal2)
带ALL关键字的子插叙:
ALL关键字与ANY和SOME不同,使用ALL时需要同时满足所有内层查询的条件
SELECT num1 from tbl1 where num1 > ALL (SELECT num2 from tal2)
带EXISTS关键字的子插询:
EXISTS关键字后面的参数是一个任意的子插询,系统对子查询进行运算以判断它是否返回行,如果至少返回一行,那么EXISTS的结果为true,此时外层查询语句将进行查询;如果子查询没有返回任何行,那么EXISTS返回的结果是false,此时外层语句将不进行查询
带IN关键字的子查询:
IN关键字进行子查询,内层查询语句仅仅返回一个数据列,这个数据列里的值将提供给外层查询语句进行比较操作
带比较运算符的子查询
合并查询结果:
利用UNION关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果集。合并时,两个表对应的列数和数据类型必须相同。各个SELECT语句之间使用UNION或UNION ALL关键字分割。UNION不使用ALL,执行的时候删除重复的记录,所有返回的行都是唯一的;使用关键字ALL的作用是不删除重复行也不对结果进行自动排序
使用正则表达式查询:
索引:
索引是对表中一列或多列的值进行排序的一种结构,使用索引可提高数据库中特定数据的查询速度
索引不起作用的情况:
在使用LIKE关键字进行查询语句中,如果匹配字符串的第一个字符为“%”。只有不在第一个位置才起作用
对于多个索引,只有查询条件中使用了这些字段中的第一个字段时,索引才会起作用
查询条件中只有OR关键字,且OR前后的两个条件中的列都是索引时,查询中才使用索引
优化子查询:
在MySQL中。可以使用连接查询来代替子查询。连接查询不需要建立临时表,其速度比子查询要快,如果查询中使用索引的话,性能会更好
优化数据库结构:
数据库结构的设计,需要考虑数据冗余、查询和更新的速度、字段的数据类型是否合理等多方面的内容
将字段很多的表分解成多个表 (将不常用的字段分离出来形成新表,旧表的主键可以是新表的主键)
增加中间表(对于需要经常联合查询的表,可以建立中间表以提高查询效率)通过建立中间表,把需要经常联合查询的数据插入到中间表中,然后将原来的联合查询改为对中间表的查询,以此提高查询效率
增加冗余字段(以空间换时间)
优化插入记录的速度:
插入数据时,影响插入速度的主要是索引、唯一性校验、一次插入记录条数