mysql个人学习笔记

为了加深自己对mysql知识的印象,专门记录下自己的学习过程;(Windows系统下)

0、前言,数据库的安装及启动

0.1、初步了解数据库

建议看查看下菜鸟教程;(感觉直接看菜鸟教程学习也行,笑哭.jpg)

0.2、安装数据库:下载、解压、初始化、运行。

2.1、Windows下:

  • a、下载地址:mysql下载
  • b、解压和初始化:
    在这里插入图片描述
  • c、启动MySQL服务(两种方法);
    • 方法一:在图形界面下启动mysql服务的步骤如下:
      打开控制面板->管理工具->服务(注:执行“install”命令后是把mysql安装到系统服务中),如下图所示。选中MySQL服务,右键启动\停止来操作MySQL。
      在这里插入图片描述
  • 方法二:继续使用cmd(以管理员身份执行),使用"net start mysql"命令行来启动MySQL服务;将路径切换到bin路径下,执行命令:
    C:\mysql-5.7.29-winx64>cd bin
    C:\mysql-5.7.29-winx64\bin>net start mysql
    MySQL 服务正在启动 .
    MySQL 服务已经启动成功。
    C:\mysql-5.7.29-winx64\bin>net stop mysql
    MySQL 服务正在停止.
    MySQL 服务已成功停止。
    

2.2、Ubuntu系统安装:sudo apt-get install mysql-server mysql-client。

0.3、连接数据库
  • a、启动MySQL服务以后就可以到 bin 目录下使用命令进行连接数据库操作了。
  • b、
    在这里插入图片描述
  • c、使用quit或者exit或者“\q”退出mysql服务操作。
0.4、配置数据库环境:
安装好数据库后我们只有在`>>bin`目录下才能使用命令启动mysql数据库,在其它目录下就无法运行mysql命令;所以我们需要配置mysql命令环境(类似配置python命令环境一样)。
解决方法:将bin目录路径添加到“`path`环境变量”(使用英文状态下的“;”和前面的其他路径连接)中即可。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200331112424110.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjMyNzMx,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020033111450686.png)
0.5、 安装错误处理:

在这里插入图片描述

2、数据库操作

1、使用SQL图形化管理工具来操作数据库;
2、以SQL语句来操作数据库。
3、核心内容——数据库操作:数据库操作、数据表操作、数据操作、数据表结构操作。

2.1、图形化管理工具可以选择其中之一:在这里插入图片描述
2.2、数据库操作命令行语句详解:

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
SQL: 结构化查询语言(Structured Query Language)简称SQL,是最重要的关系数据库操作语言。
SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。这个介绍好像在网上找到的结果的一样,随便分享一个查询结果吧:DQL、DML、DDL、DCL的概念与区别

SQL语句中的快捷键(使用以下语句就不要分号结尾了)
  \G 格式化输出(文本式,竖立显示)
  \s 查看服务器端信息
  \c 结束命令输入操作
  \q 退出当前sql命令行模式
  \h 查看帮助

当查询建表语句时,结果会很凌乱,此时就可以使用“\G”来格式化以文本格式输出。

mysql> show create table db\G
*************************** 1. row ***************************
       Table: db
Create Table: CREATE TABLE `db` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '字号',
  `name` varchar(16) DEFAULT NULL COMMENT '姓名',
  `sex` tinyint(4) DEFAULT '1' COMMENT '性别',
  `age` tinyint(4) DEFAULT '20' COMMENT '年龄',
  `classid` varchar(8) DEFAULT NULL COMMENT '年级',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
#就可以把这段语句复制了执行后就能原样创建一样的表。

当输入错误命令行,并且不想运行报错使得报错信息被记录到日志中,可以使用“\c”来结束输出操作。
使用“\h + 关键字”来查询改关键字的帮助信息。

补充知识点——忘记密码无法登陆时

使用命令:sudu cat /etc/mysql/debian.cnf,会看到一个用户名和密码,用这一对用户名和密码进行登录,就可以重置密码了;
在这里插入图片描述

2.3、数据库操作:
mysql> show databases;                          --查看当前用户下的所有数据库
mysql> show create database 数据库名\G           --查看建数据库语句 
mysql> select database();                       --查看当前所在的数据库位置,此处的database后有(),代表此处是函数; 
mysql> create database [if not exists] 数据库名; --创建数据库
mysql> use test;                                --选择进入test数据库
mysql> drop database [if exists] 数据库名;       --删除一个数据库
2.4、数据表操作:
mysql> show tables;               --查看当前库下的所有表格
mysql> desc tb1;                  --查看tb1的表结构。
mysql> show create table 表名\G   --查看表的建表语句。
mysql> create table demo(         --创建demo表格
    -> name varchar(16) not null,
    -> age int,
    -> sex enum('w','m') not null default 'm');
Query OK, 0 rows affected (0.05 sec)

mysql> show columns from demo;     --查看表结构(等价于desc demo)
mysql> desc demo;                  --查看表结构
+-------+---------------+------+-----+---------+-------+
| Field | Type          | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| name  | varchar(16)   | NO   |     | NULL    |       |
| age   | int(11)       | YES  |     | NULL    |       |
| sex   | enum('w','m') | NO   |     | m       |       |
+-------+---------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql>drop table if exists mytab;  -- 尝试删除mytab表格
2.4.1、数据表操作补充:表的增删改查操作

(1)建表语句:

create table 表名(
   字段名 类型[长度] [字段约束],
   字段名 类型[长度] [字段约束],
   字段名 类型[长度] [字段约束],
   ...
  );
注意:
数据库不指定编码格式时,默认编码Latin1,如果建表时,不指定编码格式,该表会默认使用所在数据库的编码;
列:
create table student(
    id int,
    name varchar(5),
    age int
);

(1.1)字段约束

	unsigned 无符号(正数)
    zerofill 前导零填充
    auto_increment 自增
    default    默认值
    not null  非空
    PRIMARY KEY 主键 (非null并不重复)
    unique 唯一性   (可以为null但不重复)
    index 常规索引

(1.2)常用的数据类型

int   整数类型
double  小数类型
decimal(m,d)    指定整数位与小数位长度的小数类型
date    日期类型,格式为yyyy-MM-dd,包含年月日,不包含时分秒
datetime    日期类型,格式为YYYY-MM-DD HH:MM:SS,包含年月日时分秒
timestamp    日期类型,时间戳1970-01-01 00:00:00--2038-12-31 23:59:59
varchar(M)    文本类型,M为0~65535之间的整数(可变长度);
char(M)    文本类型,M为0~65535之间的整数(不可变长度)。

(2)修改表结构:

alter table 表名 action(更改选项);
例:
更改选项:
1. 添加字段:alter table 表名 add 字段名信息
    例如:
      -- 在user表的最后追加一个num字段 设置为int not null
       mysql> alter table user add num int not null;

       -- 在user表的email字段后添加一个age字段,设置int not null default 20#使用“after + 字段名”来控制添加位置
       mysql> alter table user add age int not null default 20 after email;

       -- 在user表的最前面添加一个aa字段设置为int类型
       #使用“first”关键字来控制放在最前方。
       mysql> alter table user add aa int first;

2. 删除字段:alter table 表名 drop 被删除的字段名
    例如:-- 删除user表的aa字段
         mysql> alter table user drop aa;

3. 修改字段:alter table 表名 change[modify] 被修改后的字段信息
    其中:change可以修改字段名, modify 不修改
    例如:
    -- 修改user表中age字段信息(类型),(使用modify关键字的目的不修改字段名)
    mysql> alter table user modify age tinyint unsigned not null default 20;
    -- 修改user表的num字段改为mm字段并添加了默认值(使用change可以改字段名)
    mysql> alter table user change num mm int not null default 10;

4. 添加和删除索引
    -- 为user表中的name字段添加唯一性索引,索引名为uni_name;
    mysql> alter table user add unique uni_name(name);
    
    -- 为user表中的email字段添加普通索引,索引名为index_eamil
    mysql> alter table user add index index_email(email);
    
    -- 将user表中index_email的索引删除
    mysql> alter table user drop index index_email;

5. 更改表名称:
    ALTER TABLE 旧表名 RENAME AS 新表名;
	或者
	rename table 旧表名 to 新表名;

6. 更改AUTO_INCREMENT初始值:
    ALTER TABLE 表名称 AUTO_INCREMENT=1

7. 更改表类型:
    ALTER TABLE 表名称 ENGINE="InnoDB"
    
8。更改表字符编码:
	alter table 表名 character set 字符编码;
2.5、数据操作:
1、增(insert into demo):
	1.1、添加一条数据
    mysql> insert into demo(name,age,sex) values('zhangsan',20,'w');

    1.2、不指定字段名来添加数据(但必须按照原表字段顺序添加内容)
    mysql> insert into demo values('lisi',22,'m'); 

    1.3、指定部分字段名来添加数据
    mysql> insert into demo(name,age) values('wangwu',23); 

    1.4、批量添加数据
    mysql> insert into demo(name,age,sex) values('aaa',21,'w'),("bbb",22,'m');

	1.5、批量添加值
    mysql> insert into stu values
        -> (null,'zhaoliu',25,'w','lamp94'),
        -> (null,'uu01',26,'m','lamp94'),
        -> (null,'uu02',28,'w','lamp92'),
        -> (null,'qq02',24,'m','lamp92'),
        -> (null,'uu03',32,'m','lamp138'),
        -> (null,'qq03',23,'w','lamp94'),
        -> (null,'aa',19,'m','lamp138');
    Query OK, 7 rows affected (0.27 sec)
    Records: 7  Duplicates: 0  Warnings: 0
    
    1.6、补充:对于原字段有默认值的在添加时可以使用“null”来占位表示填充默认值
    mysql> insert into stu(id,name,age) values(null,"lisi",25);(id为主键、自增属性,所以在此使用null表示让其自动按默认值填充)
	Query OK, 1 row affected (0.07 sec)
    
2.删(delete)
    格式:delete from 表名 [where 条件]
    
    -- 删除stu表中id值为100的数据
    mysql> delete from stu where id=100;

    -- 删除stu表中id值为20到30的数据
    mysql> delete from stu where id>=20 and id<=30;

    -- 删除stu表中id值为20到30的数据(等级于上面写法)
    mysql> delete from stu where id between 20 and 30;

    -- 删除stu表中id值大于200的数据
    mysql> delete from stu where id>200;

3.改(update demo set)
	格式:update 表名 set 字段1=值1,字段2=值2,字段n=值n... where 条件 
	
    -- 将id为11的age改为35,sex改为m值
    mysql> update stu set age=35,sex='m' where id=11;

    -- 将id值为12和14的数据值sex改为m,classid改为lamp92
    mysql> update stu set sex='m',classid='lamp92' where id=12 or id=14 --等价于下面(重点)
    mysql> update stu set sex='m',classid='lamp92' where id in(12,14);
    
    mysql> update demo set age=24 where name='aaa';  --修改

4、查(select)
	(注意:展示信息可以随意组装,不会改变原表内容)
	格式:select [字段列表]|*(全部字段) from 表名
	    [where 搜索条件]
	    [group by 分组字段 [having 子条件]]
	    [order by 排序 asc|desc]
	    [limit 分页参数]
	mysql> select * from stu;
    +----+----------+-----+-----+---------+
    | id | name     | age | sex | classid |
    +----+----------+-----+-----+---------+
    |  1 | zhangsan |  20 | m   | lamp138 |
    |  2 | lisi     |  20 | m   | lamp138 |
    |  3 | wangwu   |  21 | w   | lamp138 |
    |  4 | zhaoliu  |  25 | w   | lamp94  |
    |  5 | uu01     |  26 | m   | lamp94  |
    |  6 | uu02     |  28 | w   | lamp92  |
    |  7 | qq02     |  24 | m   | lamp92  |
    |  8 | uu03     |  32 | m   | lamp138 |
    |  9 | qq03     |  23 | w   | lamp94  |
    | 10 | aa       |  19 | m   | lamp138 |
    | 11 | sad      |  35 | m   | lamp94  |
    | 12 | tt       |  25 | m   | lamp92  |
    | 13 | wer      |  25 | w   | lamp94  |
    | 14 | xx       |  25 | m   | lamp92  |
    | 15 | kk       |   0 | w   | lamp94  |
    +----+----------+-----+-----+---------+
    15 rows in set (0.00 sec)

    1. where条件查询
    1.1 查询班级为lamp138期的学生信息
    mysql> select * from stu where classid='lamp138';
    
    1.1.1、 查询班级为lamp138期的学生姓名和年龄信息
    mysql> select name,age from stu where classid='lamp138';
    
    1.1.2、 查询班级为lamp138期的学生姓名和年龄、以及5年后的年龄信息(as 可以改名(不会改变原表信息),其中 as 也可以省略不写)
    mysql> select name as username,age,age+5 age5 from stu where classid='lamp138';
   	>>	+----------+-----+------+
		| username | age | age5 |
		+----------+-----+------+
		| zhangsan |  33 |   38 |
		| lisi     |  25 |   30 |
		| wanger   |  18 |   23 |
	1.1.3、 展示时可以使用“as”关键字来增加字段值。
    mysql> select name,"beijing" as city from stu;
	+----------+---------+
	| name     | city    |
	+----------+---------+
	| bb       | beijing |
	| lisi     | beijing |
	| mazi     | beijing |
	| wanger   | beijing |
	| zhangsan | beijing |
	+----------+---------+
	5 rows in set (0.00 sec)

	1.2. 查询lamp138期的男生信息(sex为m)
    mysql> select * from stu where classid='lamp138' and sex='m';

	1.3. 查询id号值在10以上的学生信息
    mysql> select * from  stu where id>10;

	1.4. 查询年龄在20至25岁的学生信息
    mysql> select * from stu where age>=20 and age<=25;
    mysql> select * from stu where age between 20 and 25;

	1.5. 查询年龄不在20至25岁的学生信息
    mysql> select * from stu where age not between 20 and 25;
    mysql> select * from stu where age<20 or age>25;

	1.6. 查询id值为1,8,4,10,14的学生信息
    select * from stu where id in(1,8,4,10,14);
    mysql> select * from stu where id=1 or id=8 or id=4 or id=10 or id=14;

	1.7. 查询lamp138和lamp94期的女生信息
    mysql> select * from stu where classid in('lamp138','lamp94') and sex='w';
    mysql> select * from stu where (classid='lamp138' or classid='lamp94') and sex='w'

	1.8. 模糊查询,'like' 的使用:
	select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用是在一个字符型字段列中检索包含对应子串的。可以说,like语句是和通配符分不开的。
	SQL中的通配符: 
		"%"表示零个或多个字符的任意字符串;"_"表示任何单个字符;"[ ]"表示指定范围([]只匹配一个字符);"[^]"不属于指定范围。
		常用语法:
		select * from 表名 where 字段名 like '%值%'——查询该字段中包含“值”的字段(字段不限长度)
		select * from 表名 where 字段名 like '_值_'——查询该字段中包含“值”的且长度为3的字段
		select * from 表名 where 字段名 like '2[1-9]'——查询结果为两位数且以2开头的字段
		mysql> select * from stu where name like "%a%";查询stu表中name字段中含有“a”字母的所有字段。
		+----+----------+-----+-----+----------+
		| id | name     | age | sex | classid  |
		+----+----------+-----+-----+----------+
		|  1 | zhangsan |  33 | m   | python01 |
		|  3 | wanger   |  18 | m   | python03 |
		|  4 | mazi     |  21 | w   | java1    |
		+----+----------+-----+-----+----------+
		
	2.聚合函数:count()--统计总数;  max()--求最大值;  min()--求最小值;  sum()--求和;  avg()--求平均值。
	mysql> select count(id),max(age),min(age),sum(age),avg(age) from stu;
		+-----------+----------+----------+----------+----------+
		| count(id) | max(age) | min(age) | sum(age) | avg(age) |
		+-----------+----------+----------+----------+----------+
		|         5 |       33 |       18 |      117 |  23.4000 |
		+-----------+----------+----------+----------+----------+

	3、group分组查询(常用于搭配聚合函数一起使用):
	mysql> select classid,sex,count(*) from stu group by classid,sex;
	#按班级、性别条件进行分组查询其数量
	+----------+-----+----------+
	| classid  | sex | count(*) |
	+----------+-----+----------+
	| python03 | w   |        1 |
	| python03 | m   |        3 |
	| python04 | w   |        2 |
	| python04 | m   |        2 |
	| python05 | w   |        2 |
	| python05 | m   |        2 |
	+----------+-----+----------+
	
	4、order 排序(默认是升序(asc),也可以设置为降序desc排序)
	按照id降序排序显示数据
	mysql> select * from stu order by id desc;
	
	多字段排序:对数据中的“classID”字段升序且对“age”字段降序排序
	mysql> select * from stu order by classid asc,age desc;
	
	5、分页排序
	SELECT * FROM table LIMIT [offset], rows | rows OFFSET offset
	Limit子句可以被用于强制 SELECT 语句返回指定的记录数。
	Limit接受一个或两个数字参数。参数必须是一个整数常量。
	如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,
	第二个参数指定返回记录行的最大数目。
	//初始记录行的偏移量是 0(而不是 1):
	mysql> SELECT * FROM table LIMIT 5,10; //检索记录行6-15
	
	mysql> SELECT * FROM table LIMIT 5;     //检索前 5 个记录行

3、 MySQL数据类型

MYSQL中数据类型介绍
(1)B与bit的关系:数据存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。
(2)Tinyint占用1字节的存储空间,即8位(bit)。那么Tinyint的取值范围怎么来的呢?我们先看无符号的情况。无符号的最小值即全部8位(bit)都为0,换算成十进制就是0,所以无符号的Tinyint的最小值为0.无符号的最大值即全部8bit都为1,11111111,换算成十进制就是255.这很好理解。
(3)MySQL的运算符(可以使用“select”运行,部分条件判断词也可以用在“where+条件”中):

1、算术运算符:+ - * / % 
2、比较运算符:= > < >= <= <> != (注:mysql中没有布尔值,使用“1,0”充当布尔值的角色)
3、数据库特有的比较:in,not in, is null,is not null,like, between A and B(判断是否在A和B之间)
4、逻辑运算符:and or not
例:
mysql> select 10+20;
+-------+
| 10+20 |
+-------+
|    30 |
+-------+
1 row in set (0.05 sec)
mysql> select 100<11;
+--------+
| 100<11 |
+--------+
|      0 |
+--------+
1 row in set (0.00 sec)

(4)MySQL数据库中的表类型一般常用两种:MyISAM和InnoDB
区别:MyISAM类型的数据文件有三个frm(结构)、MYD(数据)、MYI(索引)
MyISAM类型中的表数据增、删、改速度快,不支持事务,没有InnoDB安全。
InnoDB类型(常用)的数据文件只有一个 .frm.
InnoDB类型的表数据增、删、改速度没有MyISAM的快,但支持事务,相对安全。

4、数据库授权、备份和恢复

4.1、授权:

语法:grant 允许操作 on 库名.表名 to 账号@来源 identified by '密码';
注意:mysql默认是不允许其他用户访问的

--实例:创建zhangsan账号,密码123,授权mysql库下所有表的增/删/改/查数据,来源地不限
mysql> grant select,insert,update,delete on mysql.* to zhangsan@"%'"identified by "123";
mysql> grant all on *.* to zhangsan@"%" identified by "123";
Query OK, 0 rows affected (0.00 sec) 

-- 授权一个用户(zhangsan)密码123,可以对所有的库,所有的表做所有操作。
mysql> grant all on *.* to zhangsan@"%" identified by "123";
Query OK, 0 rows affected (0.17 sec)

--刷新生效,否则就要重启MySQL服务才可以。
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

--浏览当前MySQL用户信息(重点)
mysql> select user,host,password from mysql.user;

-- 移除一些权限
  -- revoke:只删除了用户权限,但没有删除这个用户
  mysql> revoke insert,delete on *.* from admin@192.168.112.132 identified by'123';

  -- 查看指定用户的权限信息
  mysql> show grants for xbb@localhost;
  
--drop user:删除了整个用户及其权限(包括数据字典中的数据)
  mysql> drop user 'xbb'@'localhost';
  Query OK, 0 rows affected (0.00 sec)
4.2、备份与恢复(导入和导出)
-- 将mydb库导出
D:\>mysqldump -h IP -u 用户名 -p 数据库名 > 导出的路径+文件名
Enter password:
#注意:(1)-p 后面不能加password;
#(2)mysqldump是在cmd下的命令,不能再mysql下面,即不能进入mysql命令中(得exit退出mysql下才可以的。)

---- 将mydb库中的stu表导出
D:\>mysqldump -u root -p mydb stu >C:\Desktop\mydb_stu.sql
Enter password:

-- 将mydb库导入
D:\>mysql -u root -p mydb<mydb.sql
Enter password:

-- 将mydb库中stu表导入
D:\>mysql -u root -p mydb<mydb_stu.sql
Enter password:

5、Mysql的多表联查

表与表之间的关系有:1对1;1对多;多对多。
多表联查方式:1、嵌套方式;2、where关联查旭;3、连接join查询(左联:left join、右联:right join、内联:inner join)。(查询效率依次递增)

5.1、嵌套查询——一个表的查询结果是另一个表的查询条件(表也可以是同一个表):
查询表里年龄最大的信息:
mysql> select * from stu order by age desc limit 1;(缺点:万一最大值的数量不止一条,此方法查询结果便不准确)
嵌套查询:
mysql> select * from stu where age=(select max(age) from stu);
5.2、where关联查询——针对多个有关联信息的表(查询结果是几个表的交集);
查询 "stu" 表的 id、name字段和"grade"表的subject、score字段信息;
两表的关联信息为:stu的id字段是grade的sid字段
mysql> select s.id,s.name,g.subject,g.score from stu as s,grade g
    -> where s.id=g.sid order by g.score desc; #按照"grade"的score字段进行降序排序 
+----+----------+---------+-------+
| id | name     | subject | score |
+----+----------+---------+-------+
|  7 | qq03     | python  |    98 |
|  4 | zhaoliu  | python  |    90 |
| 11 | bb       | python  |    88 |
|  3 | wangwu   | python  |    87 |
|  9 | uu02     | python  |    86 |
|  5 | qq01     | python  |    78 |
| 10 | aa       | python  |    76 |
|  1 | zhangsan | python  |    69 |
|  2 | lisi     | python  |    58 |
+----+----------+---------+-------+
9 rows in set (0.00 sec)
5.3、 join连接查询——以某个表为准进行查询;

1、inner join(内联结,查询结果虽然和where连接查旭一致,但内联结更优秀):将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结。点击查看:where连接查旭和inner join的区别
语法:select 查询字段集 from A表 inner join B表 on A.id =B.id(联结关系)

2、外联结(外左联结和外右联结)(比where关联查询更全面):
左联结A、B表的意思就是将表A中的全部记录和表B中联结的字段与表A的联结字段符合联结条件的那些记录形成的记录集的联结,这里注意的是最后出来的记录集会包括表A的全部记录。

右联结A、B表的结果和左联结B、A的结果是一样的,也就是说以下两种执行结果一致:
select A.name B.name from A left join B on A.id=B.id
select A.name B.name from B right join A on B.id=A.id

6、数据库视图

6.1、视图定义

视图是一张虚拟表;本质上是一个查询结果集。

  • 表示一张表的部分数据或多张表的综合数据;
  • 其结构和数据是建立在对表的查询基础上的。

视图中不存放数据

  • 数据存放在视图所引用的原始表中。

一个原始表,根据不同用户的不同需求,可以创建不同的视图。

6.2、视图的用途:
  • 筛选表中的行;
  • 防止未经许可的用户访问敏感数据;
  • 降低数据库的复杂程度;
  • 将多个物理数据库抽象为一个逻辑数据库。
6.3、创建视图
  • 语法:使用SQL语句创建视图
    CREATE VIEW view_name
    AS
    <SELECT 语句>
    
    列如:
    查询3个表中的目标字段
    CREATE VIEW v_student_result
    AS
    SELECT studentname AS 姓名,stu.studentno AS 学号,
    		studentresult AS 成绩,subjectname AS 课程名称,
    		examDATE AS 考试日期
    FROM
    	student,result,subject
    where 
    	student."studentNo" = result."studentNo" AND
    	result."subjectNo" = subject."subjectNo" AND
    	subjectname = "JAVA" AND
    	DATA(examdate)=(
    		#子查询:参加Java考试最大时间,找到最近考试时间
    		SELECT DATA(MAX(examdate)) FROM subject
    		WHERE subjectno=(
    			#查询Java课程的科目编号
    			SELECT subjectno FROM subject
    			WHERE subjectname="JAVA"
    		)
    	)
    

总结:针对复杂、复用性高的SQL语句,可以创建视图来保存查询语句。

6.4、使用视图(和使用表完全一样):
SELECT * FROM 视图名;
6.5、删除视图:
DROP VIEW 视图名;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值