2019.8.21 NIIT第三十六天
数据库概念
数据库本身是多个文件来存储数据(MySQL中的数据存在ibdata1文件中) 管理数据库的软件叫数据库管理系统(比如:Mysql,oracle) 操作数据库的软件,cmd窗口,navicat 数据库中sql分类 DDL 数据定义语言 创建表,库 DML 数据定义语言 增删改 DQL 数据查询语言 查询数据 DCL 数据控制语言 授权
数据操作语言: 添加数据 Insert into table (列1,列2..) values (值1,值2) 修改数据 update table set 列1='value'..where 条件语句 删除数据 delete from table where 条件语句 truncate table 表名
*会被解析成全部字段
每种价格显示一次 sele distin(price) from db
SQL单表查询--排序
通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。
格式:
SELECT * FROM 表名 where 条件 ORDER BY 排序字段 ASC|DESC;
ASC 升序 (默认)
DESC 降序
单表查询--聚合
- count:统计指定列不为NULL的记录行数;
- sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
- max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
- min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
- avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
SQL单表查询--分组
分组查询是指使用group by字句对查询信息进行分组。 格式: SELECT 字段1,字段2… FROM 表名 GROUP BY分组字段 HAVING 分组条件; 分组操作中的having子语句,是用于在分组后对数据进行过滤的,作用类似于where条件。
- having与where的区别:
- having是在分组后对数据进行过滤
- where是在分组前对数据进行过
- having后面可以使用分组函数(统计函数)
- where后面不可以使用分组函数。
SQL约束
SQL约束--主键约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录。 主键必须包含唯一的值。 主键列不能包含 NULL 值。 每个表都应该有一个主键,并且每个表只能有一个主键。
方式二:创建表时,在constraint约束区域,声明指定字段为主键: 格式:[constraint 名称] primary key (字段列表) 关键字constraint可以省略,如果需要为主键命名,constraint不能省略,主键名称一般没用。 字段列表需要使用小括号括住,如果有多字段需要使用逗号分隔。声明两个以上字段为主键,我们称为联合主键。
联合主键只判断唯一性,可以为空
方式三:创建表之后,通过修改表结构,声明指定字段为主键: ALTER TABLE Persons ADD [CONSTRAINT 名称] PRIMARY KEY (字段列表)
CREATE TABLE Persons ( FirstName varchar(255), LastName varchar(255), Address varchar(255), City varchar(255) ) ALTER TABLE Persons ADD PRIMARY KEY (FirstName,LastName)
一般情况下,每个表都有一个主键,一般起名为ID,可以设置为int类型
删除主键约束
如需撤销 PRIMARY KEY 约束,请使用下面的 SQL: ALTER TABLE Persons DROP PRIMARY KEY
SQL约束--自动增长列
自动增长 我们通常希望在每次插入新记录时,数据库自动生成字段的值。 我们可以在表中使用 auto-increment(自动增长列)关键字,自动增长列类型必须是整形,自动增长列必须为键(一般是主键)。 下列 SQL 语句把 "Persons" 表中的 "P_Id" 列定义为 **auto-increment **主键
CREATE TABLE Persons
(
P_Id int PRIMARY KEY AUTO_INCREMENT,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
- 向persons添加数据时,可以不为P_Id字段设置值,也可以设置成null,数据库将自动维护主键值:
- INSERT INTO Persons (FirstName,LastName) VALUES ('Bill','Gates')
- INSERT INTO Persons (P_Id,FirstName,LastName) VALUES (NULL,'Bill','Gates')
- 面试:delete和truncate的区别
- Delete删除表中的数据,但不重置auto-increment记录数。
- Truncate删除表中的数据,auto-increment记录数将重置。Truncate其实先删除表然后再创建表。
- 扩展:默认地,AUTO_INCREMENT 的开始值是 1,如果希望修改起始值,请使用下列 SQL 语法:
ALTER TABLE Persons AUTO_INCREMENT=100
获取表中最后一次插入的id值 select distinct (last_insert_id) from table;
挺重要的!↓
自动增长列非法使用
CREATE TABLE ai02( id VARCHAR(32) PRIMARY KEY AUTO_INCREMENT, #字段描述错误,类型不对 NAME VARCHAR(50) ); CREATE TABLE ai03( id INT AUTO_INCREMENT, #自动增长列必须是键(一般是主键) NAME VARCHAR(50) );