学习java—第三十六天学习笔记

154 阅读4分钟

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) );