MySQL是一个关系型数据库管理系统
数据库: 数据库是一些关联表的集合。
数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
外键:外键用于关联两个表。
复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
实体完整性:表中每一条记录唯一 主键;域完整性:约束列的范围(mysql不支持)
引用完整性:两张表,约束表的关系 外键
Mysql数据类型:
文本数据类型:字符数据包括任意字母、符号或数字符号的组合。
char:固定长度,非Unicode字符数据,最多255个字符
varchar:可变长度,非Unicode字符数据,最多65523个字符
text:可变长度,非Unicode字符数据,最多2^16-1个字符
日期和时间类型:
datatime:时间和日期
data:日期
time:时间
timestamp:时间戳
year:年份
数值类型:
int:整数
smallint:整数
float:单精度浮点数
double:双精度浮点数
decimal[m,n]:带有精度的小数
MySQL服务的启动、停止与卸载
在 Windows 命令提示符下运行:
启动: net start MySQL
停止: net stop MySQL
卸载: sc delete MySQL
主键:特点:唯一,非空,每个表只有一个,可以由多列组成
主键的创建原则:
最少性
稳定性:列值尽量不更改
创建数据库:create database 数据库名 [其他选项];
例如:create database samp_db character set gbk;
删除数据库:drop database数据库名
使用数据库:use数据库名
创建表:create table 表名称(列声明);
删除表:drop table表名称
例如:create table students
( id int unsigned not null auto_increment primary key,
name char(8) not null,
sex char(4) not null,
age tinyint unsigned not null,
tel char(13) null default “-“);
修改表
修改表 增加 约束 约束名字 主键 主键列
alter table 表名称add constraint主键名字primary key(主键列);
添加外键
alter table 表名称add constraint外键名字foreign key(外键列) references 外表名称(对应的表的主键字段名字)
删除主键
alter table 表名称drop primary key
删除外键
alter table 表名称drop foreign key 外键名字;
SQL的组成 结构化查询语言 组成:
DDL:数据定义语言 create(创建表) drop(删除表) alter(修改表)
DCL: 数据控制语言 grant revoke
DML:数据操作语言 insert(插入数据) update(修改数据) delete (删除数据)
DQL:数据查询语言 select(查询)
修改数据:update 表名 set 列名=‘更新值’ where 条件
删除数据:delete from 表名 where 条件
多个条件使用and 或者 or连接
删除的数据必须保证没有其他表中的行引用了它
插入数据
1、单行增加
包括列名
insert into 表名(列名1,列名2) values(‘列1的值’,’列2的值’)
每一条insert语句 为表添加一行
非空列必须给值(除添加默认值列以外)
字符类型加 ”
插入数据时必须保证引用的列值存在
省略列名
插入数据时默认值的处理
2、多行增加
insert select语句 将表1中的A,B列添加到表2中
insert into 表2(列1,列2) select A,B from 表1
–** 表1和表2必须已经存在
create table newTable (select studentno,studentname,phone from student);
insert into student_detail
select ‘s003’,’王五’,’13812345678’ union
select ‘s004’,’赵六’,’13612345678’ union
select ‘s005’,’田七’,’13112345678’;
insert into student_detail VALUES
(‘s006’,’laoba’,’13812345678’),
(‘s007’,’laojiu’,’13612345678’),
(‘s008’,’xiaoshi’,’13112345678’);
检索数据:别名 使用as 或者 可以省略
Select * from 表名
Select 列名 from 表名
Select 列名 from 表名 limit
Select 列名 as 别名 from 表名
Select 列名 from 表名 where列名=
Select 列名 from 表名 where列名 is null
Select * from 表名 order by 列名(默认升序,降序desc)
Select * from 表名 order by 列名1 desc, 列名2(列名1 desc, 列名2asc)
Select distinct 列名1 from 表名 (去除所选列的重复)
Select distinct 列名1列名2 from 表名 (去除所选列的重复)
distinct前不允许存在非去重列 错误代码Select列名1 distinct列名2 from 表名
关键字的顺序问题:Select 列名 From 表名 Where 条件 Order by 排序列 Limit M,N
模糊查询 %, _ , between and ,in ,not in
Select (列名) from 表名 where 列名 like (between and ,in,not in)
多表联合查询:
表连接:在查询中需要查询的列 或者 查询的条件是由多张表组成的时候
内连接:
select 需要的列 from 表1 inner join 表2 on 表1.A列=表2.B列 where 条件
select 需要的列 from 表1 as 表1别名 inner join 表2 as 表2别名 on 表1别名.A列=表2别名.B列 where 条件
select 需要的列 from 表1,表2 where 表1.A列=表2.B列 AND 条件
内连接是获取两个表中共有的部分数据
inner join两侧的表可以调换位置,结果不变
如果需要查询的列在两张表中都存在 那么必须在查询列的前面指定表名.列名,否则会提示列不明确
外连接:
左外连接:以左表的数据为准,显示数据,左表中存在,右表中不存在的数据,右表用null填充;左表中不存在的数据,将不会被显示
右外连接:以右表的数据为准,显示数据,右表中存在,左表中不存在的数据,左表用null填充; 右表中不存在的数据,将不会被显示
完全外连接:左外连接 union右外连接
交叉链接:两张表互为基准,显示数据(用不到,笛卡尔积,没有联结条件)
聚合函数:
sum 求和–求学号为1的学员的总成绩
select sum(score) as 总分 from score where stuno=1
avg() 求平均–求java的平均分
select avg(score) as 平均分 from score where subject=’java’
如果存在null值,不计入平均值运算的
select avg(score) from score where subject=’web’
max()–求java的最高分
select max(score) from score where subject=’java’
min()–求java的最低分
select min(score) from score where subject=’java’
count() 计数–求参加了java考试的学员人数
select count(*) from score where subject=’java’
求提供电话的学员人数
select count(*) from student where stutel is not null
如果count参数是列名时 ,记录的是当前列非null的个数
select count(stutel) from student
分组查询:(可以多列分组,GROUP BY后可以加多个)
SELECT …… FROM <表名> WHERE ……GROUP BY ……ORDER BY …….
分组筛选:
SELECT …… FROM <表名>WHERE ……GROUP BY ……HAVING……
WHERE子句:用来筛选 FROM 子句中指定的操作所产生的行
GROUP BY子句:用来分组 WHERE 子句的输出
HAVING子句:用来从分组的结果中筛选行
子查询:在外部的select,update,delete语句内部使用select语句,这个内部select语句称为子查询。使用子查询,主要是将子查询的结果作为外部父查询的查询条件
在子查询中可以使用两种比较运算符
单行操作符:例如= > >= < <= <> !=
多行操作符:例如all any in exists
子查询注意的问题 :
子查询需要使用()括起来
子查询要放在比较操作符的右边
当子查询的返回值是一个集合而不是一个值时,不能使用单行操作符,而必须根据需要使用多行操作符
ALL操作符:用来将一个值与一个列表的所有值进行比较,这个值需要匹配列表中的所有值,然后满足条件的数据返回。
在使用ALL操作符之前,必须使用一个单行操作符,例如=、>、<、>=等
ANY操作符:用来将一个值与一个列表中的所有值进行比较 ,这个 值只需要匹配列表中的一个值即可,然后将满足条件的数据返回。
在使用ANY操作符之前,必须使用一个单行操作符,例如=、>、<、>=等
Exists操作符:用于检查子查询所返回的行是否存在
查询没有参加考试的学员信息
多列子查询:
多列子查询向父查询返回多个列
多列子查询可以在from,where子句中使用
JDBC : Java Database Connectivity是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。
第一步:加载驱动 JDBC API
第二步:三个接口 一个类
Import java.sql.*
DriverManager类:加载驱动,创建连接
Connection接口:连接对象
PreparedStatement 接口:命令对象 管理和发送命令
ResultSet接口:结果集对象 接收查询结果
高级对象:
索引:提高查询效率
单列索引
普通索引 create index 名称 on 表名(列名(字符长度))
唯一索引 create unique index 名称 on 表名(列名(字符长度))
主键索引 创建主键自动添加
组合索引 create index 名称 on 表名(列名1,列名2…..)
删除索引 alter table 表名 drop index 索引名称
注意问题
1:索引相当于是数据表的目录
2: 索引是创建在表中的列上的
3: 每个表可以建立多个
4: 每条sql语句最多可以使用一个索引
5: 组合索引最佳左前缀特征
缺点:占用空间;操作数据时效率下降(操作数据时需要更新索引)
视图:视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上。视图中并不存放数据,而是存放在视图所引用的原始表(基表)中。同一张原始表,根据不同用户的不同需求,可以创建不同的视图
视图中只能包含select 语句
视图不能索引
视图能执行增删改命令吗? 能,没人这么做
CREATE VIEW view_name AS
MySQL学习笔记
最新推荐文章于 2023-01-06 11:18:08 发布