持续更新…
文章目录
- 1. MySQL简介和安装
- 2. <数据库>操作
- 3. <表>操作
- 3.1 单行注释 `--` 和多行注释 `/* */`
- 3.2 表中字段数据类型(数值型,日期时间型,字符串型)
- 3.3 创建表 `create table 表名(..);`
- 3.4 删除表 `drop table 表名;`
- 3.5 修改表 `alter table 表名...`
- 3.6 创建完整性约束(实体完整性约束、参照完整性约束、域完整性约束)
- 3.6.1 实体完整性(主键约束、唯一约束)
- 3.6.1.1 添加主键约束(创建表的同时添加主键约束)`属性名1 数据类型 primary key`/`constraint 主键约束名 primary key(属性名1,..,属性名n)`/`primary key(属性名1,..,属性名n)`
- 3.6.1.2 添加主键约束(已存在的表添加主键约束)`alter table 表名 modify 属性名 数据类型 primary key;`/`alter table 表名 add primary key(属性名1,...,属性名n);`/`alter table 表名 add constraint 主键约束的名 primary key(属性名1,...,属性名n);`
- 3.6.1.3 删除主键约束 `alter table 表名 drop primary key;`
- 3.6.1.4 添加唯一约束(创建表的同时添加唯一约束)`属性1 数据类型 unique,...,属性n 数据类型 unique`/` constraint 唯一约束名 unique(属性名1),...,constraint 唯一约束名 unique(属性名n)`
- 3.6.1.5 添加唯一约束(已存在的表添加唯一约束)`alter table 表名 add unique(属性1,...,属性n);`
- 3.6.1.6 删除唯一约束 `alter table 表名 drop index 唯一约束名;`
- 3.6.2 参照完整性
- 3.6.3 域完整性(默认约束、非空约束)
- 3.6.3.1 添加默认约束(创建表的同时添加默认约束`属性名1 数据类型 default 数值、字符串或者日期类型的默认值`)
- 3.6.3.2 添加默认约束(已存在的表添加默认约束`alter table 表名 modify 属性名 数据类型 default '值';`)
- 3.6.3.3 删除默认约束 `alter table 表名 modify 属性名 数据类型;`
- 3.6.3.4 添加非空约束(创建表的同时添加非空约束`属性名1 数据类型 not null,...,属性名n 数据类型 not null`)
- 3.6.3.5 添加非空约束(已存在的表添加非空约束`alter table 表名 modify 属性名 数据类型 not null;`)
- 3.6.3.6 删除非空约束 `alter table 表名 modify 属性名 数据类型;`
- 4. <增删改>操作-DML
- 4.1 DML-INSERT `insert into 表名(属性名1,属性名2,...,属性名n) values(值1,值2,...,值n);`/`insert into 表名 values(值1,值2,...,值n);`/`insert into 表名 values(值1,值2,...,值n),...,(值1,值2,...,值n);`
- 4.2 DML-DELETE `delete from 表名;`/`delete from 表名 where 条件;`
- 4.3 DML-UPDATE `update 表名 set 属性名1=值1,属性名2=值2,...,属性n=值n;`/`update 表名 set 属性名1=值,属性名2=值2,...,属性n=值n where 条件;`
- 5. 标准SQL数据<查询>基础(常用)
- 5.1 基本查询语句 `select 属性名1,属性2,...,属性n from 表名;`/`select * from 表名;`
- 5.2 DISTINCT去重查询 `select distinct 属性名 from 表名;`
- 5.3 别名查询 `select 属性名1 别名1,属性名2 别名2,...,属性名n 别名n from 表名;`/`select 属性名1 as 别名1,属性名2 as 别名2,...,属性名n as 别名n from 表名;`
- 5.4 比较运算符(=、>、<、>=、<=、<>、!=)和逻辑运算符 (and、or)
- 5.5 范围搜索条件 `between 值1 and 值2`、`not between 值1 and 值2`
- 5.6 列表搜索条件 `in(值1,值2,...,值n);`、`not in(值1,值2,...,值n);`
- 5.7 LIKE模糊查询 `like '字符模式';`、`not like '字符模式';`
- 5.8 涉及空值的查询 `属性名 is null;`、`属性名 is not null;`
- 5.9 聚合函数 `sum()`、`avg()`、`max()`、`min()`、`count()`
- 5.10 MySQL中关于行数的限定 `select 属性名1,...,属性名n from 表名 limit [开始行,] 查询总行数;`
- 5.11 GROUP BY分组查询 `select 属性名,聚合函数 from 表名 group by 属性名; `
- 5.12 HAVING分组条件 `select 属性名,聚合函数 from 表名 group by 属性名 having 条件;`
- 5.13 ORDER BY排序 `select 属性1,...,属性n from 表名 order by 属性1 [desc],...,属性n [desc];`
- 5.14 MySQL函数(字符串函数、数学函数、日期时间函数、控制流函数)
- 5.15 表连接(内部连接、外部连接)
- 5.15.1 内连接 `select 表名.属性名 from 表名1,表名2,...,表n where 表间关联1 and 表间关联2 and...and 表间关联n;`/`select 表名.属性名 from 表名1 [inner] join 表名2 on 表1表2间关联 join 表3 on 表2表3间关联...join 表名n-1 on 表n-1表n间关联;`
- 5.15.2 外连接(左外连接、右外连接) `select 表名.属性名 from 表名1 left outer join 表名2 on 表1表2间关联 left outer join 表3 on 表2表3间关联...left outer join 表名n-1 on 表n-1表n间关联;`/`select 表名.属性名 from 表名1 right outer join 表名2 on 表1表2间关联 right outer join 表3 on 表2表3间关联...right outer join 表名n-1 on 表n-1表n间关联;`
- 5.16 子查询 `select 属性名 from 表名 where 属性名 in(查询语句);`/`insert [into] 表名 select查询语句;`/`update 表名 set 属性名 where 属性名 in(查询语句);`/`delete from 表名 where 属性名 in(查询语句);`
- 6. 视图
- 7. 索引(待写..)
1. MySQL简介和安装
MySQL数据库是一种关系型数据库管理系统,是轻量级数据库,是一种开源软件由瑞典MySQL AB公司开发,08年1月16日被SUN公司收购,09年SUN公司又被Oracle公司收购。
由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
优点:
1)成本:MySQL是免费的,并且它的技术支持也很便宜;
2)速度:MySQL胜过它的大多数竞争对手功能;
3)MySQL提供了开发人员所需要的大多数功能,可与开发语言结合;
4)可移植性(跨平台性):MySQL可以在绝大多数的操作系统中运行,易于使用和管理。
WIndows系统下安装MySQL数据库和第三方工具Navicat
登录MySQL数据库
mysql -u root -p
<密码>
Navicat连接本地MySQL数据库
2. <数据库>操作
2.1 查看现有数据库 show database;
功能:查看现有的数据库
格式:
show databases;
eg:
cmd中查看
或Navicat中查看现有的数据库
注意:在Navicat里要想运行指定的语句,首先选中要运行的语句-点击<运行>-选择<运行已选择>
2.2 切换现有数据库 use 库名;
功能:切换数据库
格式:
use 库名;
eg:
2.3 显示选定数据库所有表show tables;
功能:显示选定数据库所有表
格式:
show tables;
2.4 创建数据库 create database 库名;
功能:创建数据库
格式:
create database 库名;
eg:
2.5 删除数据库 drop database 库名;
功能:删除数据库
格式:
`drop database 库名;`
eg:
3. <表>操作
3.1 单行注释 --
和多行注释 /* */
单行注释:
-- 单行注释内容
多行注释:
/*
多行注释内容
多行注释内容
多行注释内容
*/
3.2 表中字段数据类型(数值型,日期时间型,字符串型)
MySQL支持多种数据类型,大致分为三类:
1)数值类型
2)日期/时间类型
3)字符串(字符)类型
数值类型
MySQL支持的所有标准sql数值数据类型:
重要:
1)整数类型:常用int
2)小数类型:decimal
小数格式:decimal(总长度,小数位)
eg:decimal(5,2) 要求传递过来的数据总长度是5位,小数位2位 如:123.45
日期和时间类型
日期和时间类型为datetime、date、timestamp、time和year。
每个时间类型有一个有效值范围和一个“零”值,当指定不合法的MySQL不能表示的值时使用“零”值。
重要:
1)datetime 格式:YYYY-MM-DD HH:MM:SS
2)date 格式:YYYY-MM-DD
字符串类型
1)字符串类型指char、varchar、binary、varbinary、blob、text、enum和set。
2)char和varchar类型类似,但它们保存和检索的方式不同。
3)binary和varbinary类似于char和varchar,不同的是它们包含二进制字符串而不是非二进制字符串。
4)blob是一个二进制大对象,可以容纳可变数量的数据,有4种blob类型:tinyblob、blob、mediumblob和longblob。
5)有4种text类型:tinytext、text、mediumtext和longtext。
重要:
1)char
2)varchar(常用)
char和varchar的区别:
char是定长,而varchar是变长,如果用char定义字符串的长度,那么剩余的空间不会释放,系统会用空格填充剩余空间。
3.3 创建表 create table 表名(..);
功能:创建表
格式:
create table 表名(
属性名1 数据类型 [约束条件],
属性名2 数据类型 [约束条件],
...
属性名n 数据类型 [约束条件]
);
[]中括号中的内容是可选内容,最后一个属性后没有逗号。
eg:
创建一张表:student(学号,姓名,年龄,性别)
create table student(
学号 varchar(10),
姓名 varchar(15),
年龄 int,
性别 char(2)
);
eg2:
创建员工信息表 employee(员工编号,姓名,工资,入职日期)
create table employee(
员工编号 varchar(7),
姓名 varchar(10),
工资 decimal(7,2),
入职日期 datetime
);
3.4 删除表 drop table 表名;
功能:删除表
格式:
drop table 表名1,表名2,..,表名n
eg:
删除student表和employee表
drop table student,employee;
3.5 修改表 alter table 表名...
3.5.1 修改表名 alter table 表名 rename to 新表名;
功能:重命名表
格式:
alter table 表名 rename to 新表名;
eg:
alter table employee rename to employee2;
3.5.2 添加列 alter table 表名 add 属性名 数据类型;
功能:添加列(属性)
格式:
alter table 表名 add 属性名 数据类型;
eg:
alter table employee2 add 性别 char(2);
3.5.3 删除列 alter table 表名 drop 属性名;
功能:删除列(属性)
alter table 表名 drop 属性名;
eg:
alter table employee2 drop 性别;
3.5.4 修改属性数据类型 alter table 表名 modify 属性名 数据类型;
功能:修改属性的数据类型
格式:
alter table 表名 modify 属性名 数据类型;
eg:
alter table employee2 modify 员工编号 int;
3.4.5 修改属性名 alter table 表名 change 属性名 新属性名 数据类型;
功能:修改属性名,修改属性名的同时也可以修改属性的数据类型。
格式:
alter table 表名 change 属性名 新属性名 数据类型;
eg:
alter table employee2 change 员工编号 编号 varchar(10);
3.5.6 显示表 desc 表名;
功能:显示表的结构
格式:
desc 表名;
eg:
desc employee2;
3.6 创建完整性约束(实体完整性约束、参照完整性约束、域完整性约束)
数据的完整性:指存储在数据库中的数据应该保持准确性和可靠性。比如学号相同的数据就是不准确的。
3.6.1 实体完整性(主键约束、唯一约束)
实体完整性约束
1)实体完整性是指关系中的记录唯一性;
2)定义表中的所有行唯一的标识;
3)表中主属性(字段)不能为null且不能有相同值;
4)一般主键、唯一索引用unique关键字来实现。
主键约束
唯一,不能为空。
主关键字(primary key)是表中一个或多个字段,它的值用于唯一地标识表中的某一条记录;主键在创建表的时候就应该指定;一个表中有且只有一个主键约束。
唯一约束
不允许有重复的值,保证数据的唯一性,空值可以重复,同一个表可以存在多个唯一约束。
1)唯一约束是指定的表的属性或属性组合不能重复,保证数据的唯一性;
2)唯一约束不允许出现重复的值,但是可以为多个null;
3)同一表可以有多个唯一约束,多个属性组合约束;
4)如果不给唯一约束名称,就默认和属性名相同;
5)MySQL会给唯一约束的属性默认创建一个唯一索引(能够快速查找)。
3.6.1.1 添加主键约束(创建表的同时添加主键约束)属性名1 数据类型 primary key
/constraint 主键约束名 primary key(属性名1,..,属性名n)
/primary key(属性名1,..,属性名n)
功能:创建表的同时添加主键约束
格式一:
-- 该格式只能用于单一属性的主键声明
create table 表名{
属性名1 数据类型 primary key,
属性名2 数据类型
};
格式二:
-- 该格式可声明联合主键
create table 表名{
属性名1 数据类型,
属性名2 数据类型,
...
属性名n 数据类型,
constraint 主键约束名 primary key(属性名1,..,属性名n)
};
主键约束名的写法:
PK_属性名;
格式三:
-- 该格式可声明联合主键
create table 表名{
属性名1 数据类型,
属性名2 数据类型,
...
属性名n 数据类型,
primary key(属性名1,..,属性名n)
};
eg:
创建一个学生表student(学号,姓名,年龄,性别),学号作为主键约束
--使用格式一,这种格式在关系型数据库(MySQL,Oracle,SQL Server)中通用
create table student(
学号 varchar(10) primary key,
姓名 varchar(15),
年龄 int,
性别 char(2)
);
--使用格式二
create table student(
学号 varchar(10),
姓名 varchar(15),
年龄 int,
性别 char(2),
constraint pk_学号 primary key(学号)
);
--使用格式三
create table student(
学号 varchar(10),
姓名 varchar(15),
年龄 int,
性别 char(2),
primary key(学号)
);
创建一个学生表student(学号,姓名,年龄,性别),(学号、姓名)作为联合主键约束
使用格式二,创建联合主键:
create table student(
学号 varchar(12),
姓名 varchar(8),
年龄 int,
性别 char(2),
constraint PK_学号姓名 primary key(学号,姓名)
);
3.6.1.2 添加主键约束(已存在的表添加主键约束)alter table 表名 modify 属性名 数据类型 primary key;
/alter table 表名 add primary key(属性名1,...,属性名n);
/alter table 表名 add constraint 主键约束的名 primary key(属性名1,...,属性名n);
功能:对于已经存在的表添加主键约束。
格式一:
-- 该格式只能用于单一属性的主键声明
alter table 表名 modify 属性名 数据类型 primary key;
格式二:
-- 该格式可声明联合主键
alter table 表名 add primary key(属性名1,...,属性名n);
格式三:
-- 该格式可声明联合主键
-- 这种格式在关系型数据库(MySQL,Oracle,SQL Server)中通用
alter table 表名 add constraint 主键约束的名 primary key(属性名1,...,属性名n);
eg:
对已经存在的员工信息表添加主键约束
格式一:
alter table employee2 modify 编号 int primary key;
格式二:
alter table employee2 add primary key(编号);
格式三:
alter table employee2 add constraint PK_编号 primary key(编号);
使用格式三,来为(编号,姓名)添加联合主键
alter table employee2 add constraint PK_编号姓名 primary key(编号,姓名);
3.6.1.3 删除主键约束 alter table 表名 drop primary key;
功能:删除主键的约束;
格式:
-- 可删除单一属性的主键和联合主键
alter table 表名 drop primary key;
eg:
删除表employee2的主键约束
alter table employee2 drop primary key;
3.6.1.4 添加唯一约束(创建表的同时添加唯一约束)属性1 数据类型 unique,...,属性n 数据类型 unique
/constraint 唯一约束名 unique(属性名1),...,constraint 唯一约束名 unique(属性名n)
功能:创建表的同时添加唯一约束
格式一:
-- 这种格式在关系型数据库(MySQL,Oracle,SQL Server)中通用
create table 表名(
属性1 数据类型 unique,
属性2 数据类型 unique,
属性3 数据类型,
...
属性n 数据类型 unique
);
唯一约束名格式:
UN_属性名;
格式二:
create table 表名(
属性名1 数据类型,
属性名2 数据类型,
...
属性名n 数据类型,
constraint 唯一约束名 unique(属性名1),
...
constraint 唯一约束名 unique(属性名n)
);
eg:
创建一个会员信息表(编号,姓名,电话号码,邮箱),定义电话号码,邮箱为唯一约束
格式一:
create table vip(
编号 varchar(11),
姓名 varchar(12),
电话号码 varchar(15) unique,
邮箱 varchar(20) unique
);
格式二:
create table vip(
编号 varchar(11) primary key,
姓名 varchar(12),
电话号码 varchar(15),
邮箱 varchar(20),
constraint UN_TEL unique(电话号码),
constraint UN_MAIL unique(邮箱)
);
3.6.1.5 添加唯一约束(已存在的表添加唯一约束)alter table 表名 add unique(属性1,...,属性n);
功能:对于已存在的表添加唯一约束。
格式:
alter table 表名 add unique(属性1,...,属性n);
eg:
为下列的会员信息表vip的微信号添加唯一约束
alter table vip add 微信号 unique;
3.6.1.6 删除唯一约束 alter table 表名 drop index 唯一约束名;
功能:删除唯一约束。
格式:
alter table 表名 drop index 唯一约束名;
eg:
删除vip表中电话号码的唯一约束
alter table vip drop index UN_TEL;
3.6.2 参照完整性
指表与表之间的数据参照引用,使用外键约束实现。
外键约束
外键是构建于一个表的两个属性或是两个表的两个属性之间的参照关系。
1)表的外键值必须在主表中能找到;
2)从表中想要进行数据的操作,必须先问主表的意见,主表有的数据,从表可以做操作,主表中没有的数据,从表不能做操作。
3)当主表的记录被从表参照时,主表的记录被不允许删除,如果要删除数据,需要先把从表中依赖该记录的数据删除。
4)从表参照主表的某个列,要求主表的列必须有主键约束或者唯一约束,不然是没法建立起参照关系。
3.6.2.1 添加外键约束(创建表的同时添加外键约束constraint 外键名 foreign key(从表的属性名) references 主表名(属性名)
)
功能:创建表的同时添加外键约束
格式:
-- 主表
create table 表名(
属性名1 数据类型 primary key,
属性名2 数据类型,
...,
属性名n 数据类型
);
-- 从表(外键约束所在的表)
create table 表名2(
属性名1 数据类型,
属性名2 数据类型,
...,
属性名n 数据类型
constraint 外键名 foreign key(从表的属性名) references 主表名(属性名)
);
注意:关于引用的属性的要求:从表中的属性名和主表中的属性名可以不一样,但是这两个属性名的数据类型和内容必须保持一致。
eg:
主表为student:
-- 从表的学号属性参照引用student表中的学号属性
create table stu(
学号 varchar(10),
姓名 varchar(8),
年龄 int,
constraint FK_学号 foreign key(学号) references student(学号)
);
3.6.2.2 添加外键约束(已存在的表添加外键约束alter table 从表名 add constraint 外键名 foreign key(从表属性名) references 主表名(主表属性名);
)
功能:已存在的表添加外键约束。
格式:
alter table 从表名 add constraint 外键名 foreign key(从表属性名) references 主表名(主表属性名);
eg:
键下列scores表作为主表,student表作为从表,学生表中的学号引用成绩表中的学号作为外键约束。
alter table student add constraint FK_学号 foreign key(学号) references scores(学号);
3.6.2.3 删除外键约束 alter table 表名 drop foreign key 外键名;
功能:删除外键约束。
格式:
alter table 表名 drop foreign key 外键名;
eg:
删除学生表的外键FK_no
alter table student drop foreign key FK_no;
3.6.3 域完整性(默认约束、非空约束)
保证在表中不会输入无效的数据。
1)域完整性是对数据表中字段属性的约束;
2)它是由确定表结构时所定义的字段的属性决定的;
3)限制数据类型,缺省值,规则,约束,是否可以为空;
4)域完整性可以确保不会输入无效的值。
3.6.3.1 添加默认约束(创建表的同时添加默认约束属性名1 数据类型 default 数值、字符串或者日期类型的默认值
)
功能:创建表的同时定义默认约束,当默认约束来修饰某个列的时候,修饰的属性即使不写数据也会默认一个值的。
格式:
-- 这种格式在关系型数据库(MySQL,Oracle,SQL Server)中通用
create table 表名(
属性名1 数据类型 default 数值、字符串或者日期类型的默认值,
属性名2 数据类型,
...
属性名n 数据类型 default 数值、字符串或者日期类型的默认值
);
eg:
create table scores(
学号 varchar(12) primary key,
姓名 char(4),
性别 char(4) default '男',
成绩 int
);
3.6.3.2 添加默认约束(已存在的表添加默认约束alter table 表名 modify 属性名 数据类型 default '值';
)
功能:已存在的表添加默认约束。
格式:
alter table 表名 modify 属性名 数据类型 default '值';
eg:
给以下成绩信息表scores的成绩属性添加默认约束
alter table scores modify 成绩 int default '60';
3.6.3.3 删除默认约束 alter table 表名 modify 属性名 数据类型;
功能:删除默认约束。
格式:
alter table 表名 modify 属性名 数据类型;
eg:
删除以下成绩信息表scores的性别属性的默认约束
alter table scores modify 性别 char(4);
3.6.3.4 添加非空约束(创建表的同时添加非空约束属性名1 数据类型 not null,...,属性名n 数据类型 not null
)
功能:创建表的同时添加非空约束
格式:
create table 表名(
属性名1 数据类型 not null,
属性名2 数据类型,
...
属性名n 数据类型 not null
);
eg:
create table scores(
学号 varchar(12) primary key,
姓名 char(4) not null,
性别 char(4) default '男',
成绩 int
);
3.6.3.5 添加非空约束(已存在的表添加非空约束alter table 表名 modify 属性名 数据类型 not null;
)
功能:已存在的表添加非空约束
格式:
alter table 表名 modify 属性名 数据类型 not null;
eg:
为以下成绩信息表scores的性别属性添加非空约束
alter table scores modify 性别 char(4) not null;
3.6.3.6 删除非空约束 alter table 表名 modify 属性名 数据类型;
功能:删除非空约束
格式:
alter table 表名 modify 属性名 数据类型;
eg:
删除成绩信息表scores的性别属性的非空约束
alter table scores modify 性别 char(4);
4. <增删改>操作-DML
DDL:数据库定义语言
create 创建数据库 alter 修改数据库 drop 删除数据库
DML:数据操纵语言
insert 插入/增 delete 删除 update 更新/改
加上 SQL的SELECT语句
select 查
DML的核心指令加上SQL的SELECT语句统称为“CRUD”-增删改查
4.1 DML-INSERT insert into 表名(属性名1,属性名2,...,属性名n) values(值1,值2,...,值n);
/insert into 表名 values(值1,值2,...,值n);
/insert into 表名 values(值1,值2,...,值n),...,(值1,值2,...,值n);
功能:表中插入数据
格式一:
-- 注意:插入的值要与前面属性的一一对应
-- 这种格式在关系型数据库(MySQL,Oracle,SQL Server)中通用,并且是常用
insert [into] 表名(属性名1,属性名2,...,属性名n) values(值1,值2,...,值n);
格式二:
-- 注意:插入的值的顺序要与表中属性的顺序一致
-- 这种格式在关系型数据库(MySQL,Oracle,SQL Server)中通用,并且是常用
insert [into] 表名 values(值1,值2,...,值n);
格式三:
-- 一次可插入多条数据
-- 注意:插入的值的顺序要与表中属性的顺序一致
insert [into] 表名 values(值1,值2,...,值n),...,(值1,值2,...,值n);
eg:
给以下student表中插入一条数据
格式一:
insert into student(学号,姓名,年龄,性别) values('202100000000','Daisy',20,'女');
格式二:
insert into student values('202100000001','Steward',23,'男');
格式三:
向student表中一次插入多条数据
insert into student values('202100000002','Steward',23,'男'),('202100000003','Vincent',20,'男'),('202100000004','Helen',19,'女');
4.2 DML-DELETE delete from 表名;
/delete from 表名 where 条件;
功能:删除表中数据
格式一:
-- 删除表中的所有记录
-- 这种格式在关系型数据库(MySQL,Oracle,SQL Server)中通用
delete from 表名;
格式二:
/** 根据条件删除记录
多个条件同时满足用and,多个条件只需要满足一个用or
删除记录的时候要注意外键的影响,如果要删除的记录有外键引用,要先把从表中引用的记录删除,再删主表 **/
-- 这种格式在关系型数据库(MySQL,Oracle,SQL Server)中通用
delete from 表名 where 条件;
eg:
删除下列姓名为Steward的学生记录
delete from student where 姓名='Steward';
4.3 DML-UPDATE update 表名 set 属性名1=值1,属性名2=值2,...,属性n=值n;
/update 表名 set 属性名1=值,属性名2=值2,...,属性n=值n where 条件;
功能:对表中的数据进行修改。
格式一:
-- 注意:不附加条件的这种格式会把一列的值都更改
-- 这种格式在关系型数据库(MySQL,Oracle,SQL Server)中通用
update 表名 set 属性名1=值1,属性名2=值2,...,属性n=值n;
格式二:
-- 有条件的更新
-- 这种格式在关系型数据库(MySQL,Oracle,SQL Server)中通用,并且是常用
update 表名 set 属性名1=值,属性名2=值2,...,属性n=值n where 条件;
eg:
格式一:
把student表中年龄全部改成 21,性别全部改成 男
update student set 年龄=21,性别='男';
格式二:
将student表中性别为女的学生的年龄都改成23,姓名都改成Vincent
update student set 年龄=23,姓名='Vincent' where 性别='女';
将student表中性别为女的年龄在原有基础上都增加3岁
update student set 年龄=年龄+3 where 性别='女';
5. 标准SQL数据<查询>基础(常用)
查询:就是对已经存在于数据库中的数据按特定的组合、条件或次序进行检索,查询功能就是数据库最基本也是最重要的功能。
完整的查询语句语法格式:
select [distinct] select_list from table_list
[where search_conditions]
[group by group_by_list]
[having search_conditions]
[order by order_list [asc|desc]]
5.1 基本查询语句 select 属性名1,属性2,...,属性n from 表名;
/select * from 表名;
功能:查询数据
格式一:
-- 查询表中指定属性的所有内容
select 属性名1,属性2,...,属性n from 表名;
格式二:
-- 查询表中所有内容
select * from 表名;
eg:
格式一:
查询student表中的学号,年龄
select 学号,性别 from student;
格式二:
查询student表中所有数据
select * from student;
5.2 DISTINCT去重查询 select distinct 属性名 from 表名;
功能:用户希望查询返回的结果中去重
格式:
select distinct 属性名 from 表名;
eg:
查询学生来自哪些地区
select distinct 地区 from student;
5.3 别名查询 select 属性名1 别名1,属性名2 别名2,...,属性名n 别名n from 表名;
/select 属性名1 as 别名1,属性名2 as 别名2,...,属性名n as 别名n from 表名;
功能:使用别名的方法根据需要对数据显示的标题进行修改;一般别名的使用在函数中使用最多。
格式一:
/**
别名可不用引号,也可以使用单引号
**/
select 属性名1 别名1,属性名2 别名2,...,属性名n 别名n from 表名;
格式二:
/**
使用as关键字来连接列表达式和指定的别名
别名可不用引号,也可以使用单引号
**/
select 属性名1 as 别名1,属性名2 as 别名2,...,属性名n as 别名n from 表名;
eg:
格式一:
对下面的student表中的学号,姓名进行别名查询
select 学号 no,姓名 name from student;
格式二:
对下面的student表中的学号,姓名进行别名查询
select 学号 as no,姓名 as name from student;
对下面的student表中的学号,地区,成绩进行别名查询,新增一列成绩查询出来的结果进行再计算作为新成绩,每个成绩加10分,注意这里不会更改实际表中的成绩
select 学号 as no,地区 as area,成绩 as score,成绩+10 as new_score from student;
5.4 比较运算符(=、>、<、>=、<=、<>、!=)和逻辑运算符 (and、or)
注意:在比较运算的时候,字符串和日期值必须使用单引号标识。
比较运算符 | 含义 |
---|---|
= | 等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
<> | 不等于 |
!= | 不等于 |
逻辑运算符:and、or
eg:
查询下面student表中成绩低于90分的学生记录
select * from student where 成绩<90 or 学号='202100000004';
5.5 范围搜索条件 between 值1 and 值2
、not between 值1 and 值2
功能:范围搜索返回介于两个指定值之间的所有值,可分为包括范围和排除范围两种类型。
在范围之内:between...and...
[x,y]
在范围之外:not between...and...
( -∞,x)、(y,+∞)
eg:
查询student表中成绩在[70,90]之间的学生
select * from student where 成绩 between 70 and 90;
5.6 列表搜索条件 in(值1,值2,...,值n);
、not in(值1,值2,...,值n);
功能:in关键字使用户可以选择与列表中任意值匹配或不匹配的行。
格式:
在列表内:in(值1,值2,...,值n);
不再列表内:not in(值1,值2,...,值n);
-- 下面语句也可以用or来改写
select 属性名1,属性名2,...,属性名n from 表名 where 属性名 in(值1,值2,...,值n);
-- 下面语句也可以用and来改写
select 属性名1,属性名2,...,属性名n from 表名 where 属性名 not in(值1,值2,...,值n);
eg:
查询student表中地区是河南或者是西藏的学生
select 学号 as no,年龄 age,性别,地区 as area from student where 地区 in('河南','西藏');
-- 或者用or改写
select 学号 as no,年龄 age,性别,地区 as area from student where 地区='河南' or 地区='西藏';
查询student表中地区不是河南或者是西藏的学生
select 学号 as no,年龄 age,性别,地区 as area from student where 地区 not in('河南','西藏');
-- 或者用and改写
select 学号 as no,年龄 age,性别,地区 as area from student where 地区!='河南' and 地区<>'西藏';
5.7 LIKE模糊查询 like '字符模式';
、not like '字符模式';
like关键字搜索与指定模式匹配的字符串、日期或时间值。模式包括要搜索的字符串,字符串中科包含2中通配符的任意组合。
通配符 | 含义 |
---|---|
% | 表示0个或多个字符 |
_ | 表示一个字符 |
与字符模式匹配:like ‘字符模式’;
与字符模式不匹配:not like ‘字符模式’;
格式:
select 属性名1,...,属性名n from 表名 where 列名 like '字符模式';
select 属性名1,...,属性名n from 表名 where 列名 not like '字符模式';
eg:
对下面的student表做字符匹配搜索
-- 查询姓名以V开头的学生记录
select * from student where 姓名 like 'V%';
-- 查询姓名以V开头,以a结尾的学生记录
select * from student where 姓名 like 'V%a';
-- 查询姓名的倒数第二个字符为i的学生的记录
select * from student where 姓名 like '%i_';
-- 查询不以V开头做姓名的学生的记录
select * from student where 姓名 not like 'V%';
5.8 涉及空值的查询 属性名 is null;
、属性名 is not null;
注意:判断某个值是否为null值,不能使用普通的比较运算符
判断取值为空:属性名 is null;
判断取值不为空:属性名 is not null;
格式:
-- 判断取值为空
select 属性名1,...,属性名n from 表名 where 属性名 is null;
-- 判断取值不为空
select 属性名1,...,属性名n from 表名 where 属性名 is not null;
eg:
对下面student表做操作
-- 查询学生成绩为空的记录
select * from student where 成绩 is null;
-- 查询学生成绩不为空的记录
select * from student where 成绩 is not null;
5.9 聚合函数 sum()
、avg()
、max()
、min()
、count()
格式:
/**
注意:除了count(*)外,其他函数在计算的过程中均忽略null值
**/
-- 计算列值总和
select sum([distinct] <属性名>) from 表名;
-- 计算列值的平均值
select avg([distinct] <属性名>) from 表名;
-- 求列值最大值
select max([distinct] <属性名>) from 表名;
-- 求列值最小值
select min([distinct] <属性名>) from 表名;
-- 统计表中元组个数
select count(*) from 表名;
-- 统计本列列值个数
select count([distinct] <属性名>) from 表名;
eg:
对student表做聚合查询
-- 计算该表学生的总成绩
select sum(成绩) as 总成绩 from student;
-- 计算该表学生平均成绩
select avg(成绩) 平均成绩 from student;
-- 找出该表学生成绩的最高分和最低分
select max(成绩) as '最高分',min(成绩) '最低分' from student;
-- 统计该表有多少条记录
select count(*) 总记录数 from student;
-- 计算有分数的人数有多少
select count(成绩) 有成绩的人数 from student;
再强调一遍,除了count(*)外,其他函数在计算的过程中均忽略null值。
5.10 MySQL中关于行数的限定 select 属性名1,...,属性名n from 表名 limit [开始行,] 查询总行数;
功能:限定要查询的第几行到第几行的记录。
格式:
/**
开始行:表示从第几行开始查询,是可选的,如果不写,就默认从第0行开始,查询不包括这个开始行。
查询总行数:总共要查询几行
**/
select 属性名1,...,属性名n from 表名 limit [开始行,] 查询总行数;
eg:
对student表做行数限定
-- 查询前5行数据
select * from student limit 5;
-- 从第3行开始(不包括第三行),查询3条数据
select * from student limit 3,3;
5.11 GROUP BY分组查询 select 属性名,聚合函数 from 表名 group by 属性名;
功能:GROUP BY语句用于合计函数,根据一个或多个列对结果集进行分组。
思路:先统计出来相关的总数,再按某个属性进行分组。
格式:
select 属性名,聚合函数 from 表名 group by 属性名;
eg:
对stu_class表进行分组查询
/**
统计每个年级的学生总人数,以及每个年级的班级总数
即把 总人数和班级数 按年级分组
**/
select 年级,sum(人数) 年级总人数,count(编号) as 年级班级数
from stu_class
group by 年级;
对student表进行分组查询
/**
按地区分组
统计每个地区的学生的人数
**/
select 地区,count(学号) as 地区学生人数
from student
group by 地区;
5.12 HAVING分组条件 select 属性名,聚合函数 from 表名 group by 属性名 having 条件;
功能:HAVING一定要与GROUP BY字句一起使用,相当于一个用于组的WHERE字句,HAVING用于指定组的搜索条件。
注意:HAVING字句可以包含聚合函数,但WHERE不可以。
格式:
select 属性名,聚合函数 from 表名 group by 属性名 having 条件;
eg:
对student表进行指定条件的分组查询
/**
按地区分组
统计每个地区成绩不低于70分的人数
**/
select 地区,count(成绩) as 不低于70分的人数
from student
group by 地区
having min(成绩)>=70;
5.13 ORDER BY排序 select 属性1,...,属性n from 表名 order by 属性1 [desc],...,属性n [desc];
功能:ORDER BY语句用于对指定的结果集进行排序,默认升序。
升序:asc
降序:desc
格式:
-- 按属性1排序后,再按属性2排序,一直到属性n排完为止
select 属性1,...,属性n from 表名 order by 属性1 [desc],...,属性n [desc];
eg:
对student表中的学生成绩进行排序
-- 学生成绩按升序排序
select * from student order by 成绩;
-- 学生成绩按降序排序
select * from student order by 成绩 desc;
-- 按成绩进行升序排列,成绩相同时,按学号降序排列
select * from student order by 成绩,学号 desc;
5.14 MySQL函数(字符串函数、数学函数、日期时间函数、控制流函数)
MySQL中函数主要分为四大类:
1)字符串函数
2)数学函数
3)日期时间函数
4)控制流函数
5.14.1 字符串函数 length()
、char_length()
、mid()
返回字符串的字节长度:length()
返回字符串的字符长度:char_length()
从某个位置获取一定长度的字符(截取):mid()
格式:
-- 返回字符串的字节长度
select 属性名1,...,属性名n,length(属性名) from 表名;
-- 返回字符串的字符长度
-- MySQL数据库中一个汉字占3个字节,一个字母占1个字节
select 属性名1,...,属性名n,char_length(属性名) from 表名;
-- 从某个位置获取一定长度的字符
-- start_pos为开始位置(包含这个开始位置),最小值为1
-- len为要截取的长度
select 属性名1,...,属性名n,mid(属性名,start_pos,len) from 表名;
eg:
对student表使用字符串函数
-- 返回姓名的字节长度
select 姓名 as name,length(姓名) as 字节长度 from student;
-- 返回姓名的字符长度
select 姓名 as name,char_length(姓名) as 字节长度 from student;
-- 从姓名的第二位开始往后截取2位字符
select 姓名 as name,mid(姓名,2,2) 截取部分 from student;
5.14.2 数学函数 round()
、least()
、greatest()
实现四舍五入:round()
求最小数字(少用,只能传递具体数值,不能将列传进去):least()
求最大数字(少用,只能传递具体数值,不能将列传进去):greatest()
-- 保留小数
round(原始数据,保留小数位的位数);
-- 只保留整数部分
round(原始数据)
-- 返回最小数字
least(值1,...,值n);
-- 返回最大数字
greatest(值1,...,值n);
eg:
-- 保留2位小数
select round(23987.98774,2) as 保留两位小数;
-- 只保留整数部分
select round(23987.98774) as 只保留整数部分;
求student表中学生的平均成绩
-- 注意:MySQL计算的结果默认保留4位小数
-- 学生的平均成绩
select avg(成绩) 平均成绩 from student;
-- 注意:MySQL计算的结果默认保留4位小数
-- 学生的平均成绩保留3位小数
select avg(成绩) 平均成绩,round(avg(成绩),3) 平均成绩保留3位小数 from student;
-- 返回最小数字
-- 只能传递具体数值
select least(3,1,4,0) as 最小数字;
-- 返回最大数字
-- 只能传递具体数值
select greatest(3,1,4,0) as 最大数字;
5.14.3 日期时间函数 now()
、current_date()
、current_time()
、to_days()
、dayofyear()
、week()
返回数据库服务器当前日期时间:now()
返回数据库服务器当前日期:current_date()
返回数据库服务器当前时间:current_time()
将日期转化成总天数:to_days()
返回该年已过的天数:dayofyear()
返回当前是第几周:week()
格式:
-- 返回数据库服务器当前日期时间
select now();
-- 返回数据库服务器当前日期
select current_date();
-- 返回数据库服务器当前时间
select current_time();
-- 将日期转化成总天数
select to_days(日期值);
-- 返回该年已过的天数
select dayofyear(日期值);
-- 返回当前是第几周
select week(日期值);
eg:
返回数据库服务器当前日期时间
-- 返回数据库服务器当前日期时间
select now() as 当前日期时间;
返回数据库服务器当前日期
-- 返回数据库服务器当前日期
select current_date() as 当前日期;
返回数据库服务器当前时间
-- 返回数据库服务器当前时间
select current_time() as 当前时间;
将日期转化成总天数
-- 将日期转化成总天数
-- 日期值:yyyy-mm-dd
select to_days(now()) as 迄今已过天数;
返回该年已过的天数
-- 返回该年已过的天数
select dayofyear(now()) as 2021已过天数;
返回当前是第几周
-- 返回当前是第几周
select week(now()) 2021年已过周数;
5.14.4 控制流函数 if()
、ifnull()
-- if有三个参数
-- 布尔表达式为真,输出第二个参数,否则输出第三个参数
select if(布尔表达式,参2,参3);
-- 第一参数为空输出第三个参数,否则输出第二个参数
select if(参1是否为空,参2,参3);
**/
-- ifnull有两个参数
-- 第一个参数为空,输出第二个参数,否则输出第一个参数
select ifnull(参1是否为空,参2);
eg:
select if(4>6,'参2','参3') as 结果;
select if(12,'参2','参3') 结果;
select ifnull(12,'参3') as 结果;
select ifnull(null,'参3') as 结果;
5.15 表连接(内部连接、外部连接)
在实际查询应用中,用户所需要的数据并不全在一个表中,可能存在多个表中,这时就需要使用多表连接。
表与表之间建立起的关联,表名可以不同,但要求这两个属性的数据类型和内容要一致。
5.15.1 内连接 select 表名.属性名 from 表名1,表名2,...,表n where 表间关联1 and 表间关联2 and...and 表间关联n;
/select 表名.属性名 from 表名1 [inner] join 表名2 on 表1表2间关联 join 表3 on 表2表3间关联...join 表名n-1 on 表n-1表n间关联;
内部连接:是比较常用的一种数据连接查询方式;内连接只关联表与表中能够匹配到的数据信息。
格式一:
/**
表与表之间建立起的关联,表名可以不同,但要求这两个属性的数据类型和内容要一致
表连接的实现可通过where关键字来进行的关联(即通过where关键字来实现连接条件)
表间关联eg:表名1.属性名1=表名2.属性名1...
表名.属性名eg:表名1.属性名1 表名1.属性名2 表名2.属性名1 表名2.属性名2...
**/
select 表名.属性名 from 表名1,表名2,...,表n where 表间关联1 and 表间关联2 and...and 表间关联n;
格式二:
/**
表与表之间建立起的关联,表名可以不同,但要求这两个属性的数据类型和内容要一致
表间关联eg:表名1.属性名1=表名2.属性名1...
表名.属性名eg:表名1.属性名1 表名1.属性名2 表名2.属性名1 表名2.属性名2...
**/
select 表名.属性名 from 表名1 [inner] join 表名2 on 表1表2间关联 join 表3 on 表2表3间关联...join 表名n-1 on 表n-1表n间关联;
inner join/join可划分为等值连接和非等值连接
等值连接:指的是条件中只包含等号 “=”
非等值连接:指的是条件中,除了等号之外,还有其他的比较运算符比如“>、<、>=”等
eg:
对student表和stu_class表进行表连接查询
格式一:
-- 查询学生的学号,所在班级编号,班级名称,年级
select s.学号,s.班级编号,c.班级名称,c.年级 from student as s, stu_class as c
where s.班级编号=c.编号;
-- 查询学生的所有信息和对应的班级信息
select s.*,c.* from student as s, stu_class as c
where s.班级编号=c.编号;
格式二:
-- 查询学生的学号,所在班级编号,班级名称,年级
select s.学号,s.班级编号,c.班级名称,c.年级 from student as s join stu_class as c
on s.班级编号=c.编号;
-- 查询学生的所有信息和对应的班级信息
select s.*,c.* from student as s join stu_class as c
on s.班级编号=c.编号;
-- 查询成绩大于80的学生信息,班级信息,并按成绩降序排序
-- 这里属于非等值连接
select s.*,c.* from student s join stu_class c
on s.班级编号=c.编号 and s.成绩>80 order by s.成绩 desc;
多表连接(表>2)
对student表,stu_class表,course表做多表查询
格式一:
-- 查询学生的学号,姓名,班级名称,课程名
select s.学号,s.姓名,c.班级名称,c2.课程名
from student s,stu_class c,course c2
where s.班级编号=c.编号 and s.课程编号=c2.编号;
格式二:
-- 查询学生的学号,姓名,班级名称,课程名
select s.学号,s.姓名,c.班级名称,c2.课程名
from student s join stu_class c
on s.班级编号=c.编号 join course c2
on s.课程编号=c2.编号;
5.15.2 外连接(左外连接、右外连接) select 表名.属性名 from 表名1 left outer join 表名2 on 表1表2间关联 left outer join 表3 on 表2表3间关联...left outer join 表名n-1 on 表n-1表n间关联;
/select 表名.属性名 from 表名1 right outer join 表名2 on 表1表2间关联 right outer join 表3 on 表2表3间关联...right outer join 表名n-1 on 表n-1表n间关联;
1)外部连接会返回FROM字句中提到的至少一个表的所有内容或视图中的所有行(这点是与内连接的区别)。
2)外部连接分为左外部连接,右外部连接
3)FROM字句之后,先写的表示左表,后写的表是右表。
LEFT OUTER JOIN...ON
左外部连接:左外连接的查询结果包含指定左表的所有行,而不仅仅是连接列所匹配的行,如果做表的某行在右表中没有找到匹配的行,则结果集中右表的相应的位置为空。
-- 左外部连接对连接条件中的左边的表不加限制,返回左表所有行
select 表名.属性名 from 表名1 left outer join 表名2 on 表1表2间关联 left outer join 表3 on 表2表3间关联...left outer join 表名n-1 on 表n-1表n间关联;
RIGHT OUTER JOIN...ON
右外部连接:右外连接的查询结果包含指定右表的所有行,而不仅仅是连接列所匹配的行,如果做表的某行在左表中没有找到匹配的行,则结果集中左表的相应的位置为空。
-- 左外部连接对连接条件中的右边的表不加限制,返回右表所有行
select 表名.属性名 from 表名1 right outer join 表名2 on 表1表2间关联 right outer join 表3 on 表2表3间关联...right outer join 表名n-1 on 表n-1表n间关联;
eg:
对student表、stu_class表和course表做外连接查询
左外连接
-- 查询学生的学号,姓名,班级名称,课程名
select s.学号,s.姓名,c.班级名称,c2.课程名
from student s left outer join stu_class c
on s.班级编号=c.编号 left outer join course c2
on s.课程编号=c2.编号;
右外连接
-- 查询学生的学号,姓名,班级名称,课程名
select s.学号,s.姓名,c.班级名称,c2.课程名
from student s right outer join stu_class c
on s.班级编号=c.编号 right outer join course c2
on s.课程编号=c2.编号;
5.16 子查询 select 属性名 from 表名 where 属性名 in(查询语句);
/insert [into] 表名 select查询语句;
/update 表名 set 属性名 where 属性名 in(查询语句);
/delete from 表名 where 属性名 in(查询语句);
1)子查询在其他查询结果的基础上提供了一种有效的方式来表示where字句的条件(即放在where字句后);
2)子查询可以嵌套在SELECT、INSERT、UPDATE、DELETE语句中;
3)子查询的select查询总是使用圆括号括起来。
是一种变相的表连接的思想。
比如where后是不能直接使用聚合函数当条件的,这时就可以使用查询语句将聚合函数的结果查询出来,从而间接的作为条件。
子查询分为两种:嵌套子查询、相关子查询。
嵌套子查询:子查询中包含其他子查询。
相关子查询:指子查询的结果有且只有一个值。
格式一:
select 属性名 from 表名 where 属性名 in(查询语句);
格式二:
/**
insert和select结合
在insert语句中使用select字句可以将一个或多个表或视图中的值添加到另一表中;
使用select字句还可以同时插入多行。
**/
insert [into] 表名 select查询语句;
格式三:
-- update和select结合
update 表名 set 属性名 where 属性名 in(查询语句);
格式四:
-- delete和select结合
delete from 表名 where 属性名 in(查询语句);
eg:
用student表,course表,stu_class表做子查询
-- 查询性别为女的学生选修了哪些课程
select 课程名 from course
where 编号 in(
select 课程编号 from student
where 性别='女'
);
-- 查询学号是'202100000008'的学生在一个班的学生的学号,姓名,班级名称,年级
select 学号,姓名,班级名称,年级 from student s,stu_class c
where s.班级编号=c.编号 and
s.班级编号=(select 班级编号 from student where 学号='202100000008');
格式二:
-- 新建一个学生表
create table new_student(
学号 varchar(15),
姓名 varchar(10),
年龄 int
);
-- 向new_student中插入student表中成绩不低于70分的学生记录
insert new_student select 学号,姓名,年龄 from student
where 成绩>=70;
格式3:
-- 将选修《linux操作系统》的学生的分数加5分
update student set 成绩=成绩+5 as 新成绩
where 课程编号 in(
select 编号 from course
where 课程名='linux操作系统'
);
格式四:
-- 删除选修数据结构('c02')的学生的记录
delete from student where 课程编号 in(
select 编号 from course where 课程名='数据结构'
);
6. 视图
6.1 视图的定义
定义:视图是基于一个或多个实表的某个查询结果创建出来的虚表。
作用:方便用户对数据进行操作。
1)当用户对实表没有权限的时候,可以生成视图,用户只需要操作视图,就能间接的操作实表;
2)当然如果视图是由多个实表中的属性生成,那么我们操作视图的时候,就能一次操作多个表,就不用一个一个表去操作了;
3)视图作为一张虚表存在,实表的增删改查的操作对虚表同样适用;
4)既然对视图的操作可影响实表,那么对虚表的增删改操作会影响实表。
6.2 创建视图 create view 视图名 as 查询语句;
功能:创建视图
create view 视图名 as 查询语句;
eg:
创建student表中所有记录的视图
create view view_student as select * from student;
6.3 插入视图 insert [into] 视图名[(属性名1,属性名2,...,属性名n)] values(值1,值2,...,值n);
功能:插入视图;注意向视图中插入数据时,要注意实表中约束的影响。
格式:
insert [into] 视图名[(属性名1,属性名2,...,属性名n)] values(值1,值2,...,值n);
eg:
对view_student视图进行插入操作
-- 插入一条学生数据
insert view_student values('202100000012','tom',23,'男','浙江',89,'0003','c01');
6.4 修改视图 update 视图名 set 属性操作;
/alter view 视图名 as 查询语句;
功能:修改视图
格式一:
-- 对视图中记录进行修改
update 视图名 set 属性操作;
格式二:
-- 对视图的结构进行修改
alter view 视图名 as 查询语句;
eg:
更改视图
格式一:
-- 把view_student视图中学号为'202100000001'的学生的年龄改为26
update view_student set 年龄=26 where 学号='202100000001';
格式二:
-- 修改view_student视图的结构为view_student(学号,姓名)
alter view view_student as select 学号,姓名 from student;
6.5 删除视图 delete from 视图名 where 条件;
/drop view 视图名1,视图名2,...,视图名n;
功能:删除视图
格式一:
-- 有条件的删除视图中的记录
delete from 视图名 where 条件;
格式二:
-- 删除整个视图
-- 一次可删除多个视图
drop view 视图名1,视图名2,...,视图名n;
eg:
对view_student视图做删除操作
-- 删除学号为'202100000012'的学生记录
delete from view_student where 学号='202100000012';
6.6 查询视图 select 属性名1,...,属性n from 视图名;
功能:查询视图
格式
select 属性名1,...,属性n from 视图名;
eg:
查询view_student视图中的所有记录
select * from view_student;
7. 索引(待写…)
7.1 索引的定义
MySQL的索引是对数据库表中一个或多个列的值进行排序的结构。索引有助于更快的获取信息,即用来快速定位。
对表中的列是否创建索引,以及创建何种索引,对查询的相应时间会有很大的差别;创建了索引的列几乎是立即响应,而不创建索引的列则需要较长时间的等待。
在数据库系统中创建索引的作用:
1)加快数据检索(定位);
2)保证数据唯一性(唯一约束);
3)实现表与表之间的参照完整性(进行外键约束参照的列);
4)在使用GROUP BY、ORDER BY子句进行查询时,利用索引给可以减少排序和分组的时间。
缺点:对于小数据量的表,索引的作用不明显。