数据类型
- 最常用的数据类型
- int整型
- varchar字符串
- float浮点数
- decimal精确浮点数
- datetime日期时间
数据库约束:
-
五种完整性约束
- NUT NULL——非空
- UNIQUE——值唯一
- PRIMARY KEY——主键
- FOREIGN KEY——外键
- CHECK——(MySQL不支持)指定一个表达式,值必须满足该表达式
-
定义方法
- 列级约束:字段名 字段类型 约束类型
id int primary key
- 表级约束1:创建或修改表时,对已创建的字段添加约束,约束类型(字段名),
not null(name)
- 表级约束2:contraint 约束名 约束类型(字段名)
contraint nn not null(name)
- 列级约束:字段名 字段类型 约束类型
PRIMARY KEY 主键约束
- 主键约束就是UNIQUE+NOT NULL,并在该列上建立唯一索引
- 一个表只能有一个主键约束
- 可以用列级和表级语句创建
- 主键约束可以定义名称,但名称无效,主键约束总是命名为PRIMARY
- 如果主键列是int类型,则可以设置auto_increment自增长
FOREIGIN KEY 外键约束
-
一对多,在多的字段增加外键,连接到主表字段
-
一对一,外键列增加唯一约束即可
-
多对多,增加一个连接表
-
定义方法:
- 列级语法,用references 外表(字段名),但是MySQL不支持
- 两种表级语法:
-- foreign key(字段名) references 外表(字段名)
-- contraint 约束名 foreign key(字段名) references 外表(字段名)
-
推荐第二种,使用drop删除约束时需要用到约束名
-
删除主表记录时的处理,在定义外键时在后面增加:
- on delete cascade,级联删除
- on delete set null,从表记录的外键设为null
索引
- 类似于书后的索引,列举重要知识点并对应页码
- 以下情况会创建索引
- 自动创建索引:建立主键约束、唯一约束、外键约束时
- 手动创建索引
create index 索引名 on 表名(列名1、列名2……)
- 索引可以加快某一列的查询速度
- 但是在增加、删除、修改时增加系统开销,且占据一定磁盘空间
视图
- 视图就是一个被命名的查询语句
create view 视图名 as 查询语句
- 使用视图和使用数据表是一样的
- 视图中的数据属于表,不属于视图,当表中数据修改后,应该删除视图后重建
插入语句
-
单条插入
insert into 表名 (字段1,字段2……) values(value1, value2……)
-
如果省略字段名,则认为是插入所有数据,后面的value要与所有字段对应
insert into 表名 values(value1, value2……)
- 如果不愿意写字段名,不插入数据的字段可以设为null
- 自增长列(例如主键列)要设为null
-
多条插入
insert into 表名 (字段1,字段2……) values(value1, value2……),(value1, value2……), ……
-
带子查询的插入
- 查询出的数据直接插入
insert into 表名 (字段1,字段2……) select value1, value2... from 表名 where……
- 查询出的数据直接插入
更新和删除语句
- 更新语句
update 表名 set 字段名1=value1, 字段名2=value2…… where 条件
- 如果没有where,就是set表中所有记录
- 删除语句
delete from 表名 where 条件
- 无需指定列名,因为删除总是删除整行
- 如果没有where,就是删除所有记录
单表查询语句
-
常用语句
select 字段1,字段2…… from 表名/视图名 where 条件
select * from 表名/视图名 where 条件
-
select后可以使用表达式
- 可以由几个字段数据组成
- 例如查询结果的加减乘除
- 字符串连接使用
concat(String1,String2)
- 如果其中有null,则返回结果都为null
-
字段名和表名都可以起别名
select 字段1 别名1,字段2 别名2…… from 表名/视图名 where 条件
-
distinct表示不显示重复的查询结果
select distinct 字段1,字段2…… from 表名/视图名 where 条件
-
关于where
- 可以使用=、>、>=、<、<=
- 使用between,
where expr between expr1 and expr2
,expr可以是常量、字段 - 使用in,
where expr in(expr1、expr2、……)
,等于其中任意一个 - 为空,
where is null
- 使用like精确查询,
select * from users expr like 'key';
- 使用like模糊查询,
select * from users expr like '%key%';
,常用于搜索引擎。
-
关于排序
-
查询语句后面加上
order by 字段名1 [desc], 字段名2 [desc]
- 默认是降序,加上desc就是升序
函数
-
每种数据库都提供了一些函数,用于常用计算
-
单行函数例如sin、char_length
-
多行函数(也就是组函数),例如count(),sum()、min()、max()、avg()
-
使用count时,null不会计算在内
-
组函数默认只返回一行
-
后面加上
group by 字段名
,可以返回多行,按字段内容分组
多表查询
- SQL92
select 字段1,字段2 from 表1,表2 where 条件
,字段如果有同名,需要使用表名.字段名
-
SQL99
-
使用xxx join连接,from后都只有一个表名,join后才是从表
-
cross join 广义笛卡尔连接
select * from 表1 cross join 表2;
,返回字段数量为字段1*字段2,广义笛卡尔连接不需要任何条件 -
natural join 自然连接
select * from 表1 natural join 表2;
,默认以同名列作为连接条件,如果没有同名列,则等同于cross连接 -
join+using
select * from 表名 join 表名 using(字段名);
,使用指定字段连接, 适合在有多个同名列时使用。如果只有一个同名列,则等同于自然连接。 -
join+on,最常用
select * from 表名 join 表名 on 条件;
-
left/right join:将左/右表中不符合条件的字段也放入查询条件,没有查询结果的字段设为null
网友评论