MySQL基本语句(基础篇)

何兮笔录

  • 1、基础查询
  • 2、条件查询
  • 3、排序查询
  • 4、分组查询
  • 5、连接查询
  • 6、子查询
  • 7、分页查询
  • 7、联合查询
  • 8、常用函数
    • (1)字符函数
    • (2)数学函数
      • (3)日期函数
      • (4)分组函数
      • (5)流程控制函数
    • 7、表
    • 8、增删查改
    • 12、用户
    • 标识符
    • 数据类型介绍
      • (1)整型
      • (2)小数
      • (3)字符型
      • (4)日期型
    • 常见约束
    • 库和表的管理
  • 视图

1、基础查询

select 查询列表 from 表名;
select 100;  select 'jion';  -- 查询常量值
select 100*100;  -- 查询表达式
select distinct name from table_name;  -- 去重
select version();  -- 查看版本号
select database();  -- 查看当前数据库名
select user();  -- 查看当前用户
select connection_id();  -- 查看当前用户id-306
select found_rows();  -- 返回上次查询的检索行数
show variables LIKE '%char%';  -- 查看字符列表
show databases;  -- 查看所有的数据库
show tables;  -- 查看所有的表
desc 表名;  -- 查看表结构
show table status;  -- 查看所有的表信息(包括视图)
use db_name;  -- 使用这个数据库
create database db_name;  -- 创建一个数据库
drop database db_name;  -- 删除一个数据库

2、条件查询

/* 语法:select 查询列表
		from 表名
		where 筛选条件; */
select * from table_name where _value<>12000;  -- 条件运算符:>  <  !=  <>  >=  <=
select * from table_name where _value>=10000 and _value<20000;  -- 逻辑运算符:&& || ! and or not

# is null/is not null:可以判断NULL值,=或<>不能用于判断NULL值
# 安全等于:<=> 既可以判断NULL值,又可以判断普通值
# like:(1)一般和通配符搭配:_ 任意单个字符、% 任意多个字符,包含0个字符
select * from table_name where name like '%a%';  -- 包含字符a的name字段
select * from employees where name like '__e_a%';  -- 第三个为字符e,第五个为字符a
select * from table_name where name like '_\_%';  -- 转义字符
select * from table_name where name like '_$_%' escape '$';  -- 转义字符
select * from table_name where _value between 10000 and 20000;  -- 包含边界值
select * from table_name where _value in('IT_PROT','AD_VP','AD_PRES');  -- 判断某字段的值是否属于IN列表中的某一项

3、排序查询

/*语法:select 查询列表 from 表名 where【筛选列表】 order by 排序列表;
		dese 降序
    	asc  升序(默认)
    	order by 子句中可以支持单个字段、多个字段、函数、表达式、别名,一般放在查询语句的最后面,但LIMIT子句除外  */
select * from table_name order by _value asc; 
select * from table_name order by _value1 asc, _value2 desc;  -- 按多个字段排序

4、分组查询

/*语法:SELECT 分组函数,列(要求出现在group by的后面)
	  		FROM 表
      		【where 筛选条件】
      		group by 分组的列表
      		【order by 子句】
      		查询列表必须特殊,要求是分组函数group by后出现的字段  */
select count(*), id from table_name group by id;

5、连接查询

/* 语法:select 查询列表
        from 表1 别名【连接类型】
        join 表2 别名
        on 连接条件
        【where 筛选条件】
        【group by 分组】
        【having 分组后的筛选条件】
        【order by 排序列表】
	分类:
		内连接:inner
        外连接: 左外:left 【outer】、右外:right 【outer】、全外:full 【outer】
		交叉连接:cross  */
select * from m inner join n on m.id = n.id;  -- 内联接

select * from m left join n on m.id = n.id;  -- 左外联接
select * from m right join n on m.id = n.id;  -- 右外联接
# MySQL不支持全外连接,但可以通过左外连接+ union+右外连接实现
select * from m full join n on m.id = n.id;  -- 全外联接
# 类似全连接full join的联接用法
select id,name from m
union
select id,name from n;

select * from m cross join n;  -- 交叉联接,笛卡尔乘积SQL99标准
select * from m, n;  -- SQL92标准

6、子查询

/* 子查询
含义:出现在其他语句中的Select语句,称为子查询或内查询
	  外部的查询语句,称为外查询或主查询
分类:按子查询出现的位置:
			Select后面:仅仅支持标量子查询、
            From后面:支持表子查询、
            Where后面或having后面:标量子查询、列子查询、行子查询、
            exists后面(相关子查询):表子查询
	  按结果集的行列数不同:
			标量子查询(结果集只有一行一列)
            列子查询(结果集只有一行多列)
            行子查询(结果集只有一行多列)
            表子查询(结果集一般为多行多列) */
-- 1、标量子查询
select * from employees where salary>(select salary from employees where last_name='Abel');

-- 2、select后面
select n.*,(select count(*) from m where m.id=n.id)from n;

-- 3、from后面
select * from (select * from table_name1 group by _value1) as m inner join n on m.id=n.id;

# 4、exists后面(相关子查询)
/* 语法:exists(完整的查询语句)
		结果:1或0  */
select * from m where exists(select * from n where m.id=n.id);

7、分页查询

/* 分页查询
应用场景:当要显示的数据,一页显示不全,需要分页提交SQL请求
语法:  select 查询列表
		from 表
        【join type join 表2 
        on 连接条件
        where 筛选条件
        group by 分组字段
        having 分组后的筛选
        order by排序的字段】
        limit 【offset,】size;
			offset:要显示条目的起始索引(0开始)
            size:要显示的条目个数
特点:1、limit语句放在查询语句的最后
      2、公式
      要显示的页数page,每页的条目数size
      select 查询列表
      from 表
      limit (page-1)*size,size;  */
Select * From employees limit 0,5;
Select * From employees limit 5;
Select * From employees limit 10,15;
Select * From employees Where commission_pct IS NOT NULL Order By salary desc Limit 10 , 15;

7、联合查询

/* union 联合 合并:将多条查询语句的结果合并成一个结果
语法:查询语句1
	  union
      查询语句2
      ...
应用场景:要查询的结果来自多个表,且多个表没有直接连接关系,但查询的信息一致时
特点:1、要求多条查询语句的列数是一致的
	  2、要求多条查询语句的查询的每一列的类型和顺序最好一致
      3、unino 默认去重,union all可以包含重复项  */
Select * From employees Where email Like '%a%' or department_id>90;

Select * From employees Where email Like '%a%'
Union
Select * From employees Where  department_id>90;

8、常用函数

(1)字符函数

select concat('a', 'p', 'p', 'le');  -- 连接字符串 apple
select concat_ws(',', 'a', 'p', 'p', 'le');  -- 连接用','分割字符串 a,p,p,le
select insert('chinese', 3, 2, 'IN');  -- 从3位置开始的2个字符替换为'IN'-chINese
select instr('杨不悔爱上了殷六侠', '殷六侠');  -- 返回第一次出现的起始索引
select lpad('殷素素', 10, '*');  -- 用指定字符左填充指定长度
select rpad('殷素素', 10, 'ab');  -- 用指定字符右填充指定长度
select left('chinese', 4);  -- 返回字符串'chinese'左边的4个字符-chin
select right('chinese', 3);  -- 返回字符串'chinese'右边的3个字符-ese
SELECT substr('李莫愁爱上了陆展元', 7);  -- 截取从指定索引处后面的所有字符
SELECT substr('李莫愁爱上了陆展元', 1, 3);  -- 截取从指定索引处指定字符长度的所有字符
SELECT substring('chinese', 3);  -- 返回第三个字符之后的子字符串-inese
SELECT substring('chinese', -3);  -- 返回倒数第三个字符之后的子字符串-ese
SELECT substring('chinese', 3, 2);  -- 返回字符串'chinese'第三个字符之后的两个字符-in
SELECT trim(' chinese ');  -- 切割字符串' chinese '两边的空字符-'chinese'
SELECT ltrim(' chinese ');  -- 切割字符串' chinese '两边的空字符-'chinese '
SELECT rtrim(' chinese ');  -- 切割字符串' chinese '两边的空字符-' chinese'
SELECT replace('张无忌爱上了周芷若', '周芷若', '赵敏');  -- 替换
SELECT reverse('chinese');  # 反向排序-'esenihc'
SELECT repeat('boy', 3);  # 重复字符'boy'三次-'boyboyboy'
SELECT length('chinese');  # 返回字符串的长度-7
SELECT upper('chINese'), lower('chINese');  # 大写小写 CHINESE    chinese
SELECT ucase('chINese'), lcase('chINese');  # 大写小写 CHINESE    chinese
SELECT position('i' IN 'chinese');  # 返回'i'在'chinese'的第一个位置-3
SELECT position('e' IN 'chinese');  # 返回'i'在'chinese'的第一个位置-5
SELECT strcmp('abc', 'abd');  # 比较字符串,第一个参数小于第二个返回负数- -1
SELECT strcmp('abc', 'abb');  # 比较字符串,第一个参数大于第二个返回正数- 1

(2)数学函数

SELECT abs(-5);  # 绝对值
SELECT bin(15), oct(15), hex(15);  # 二进制,八进制,十六进制
SELECT pi();  # 圆周率3.141593
SELECT ceil(5.5);  # 向上取整
SELECT floor(5.5);  # 向下取整
SELECT greatest(3,1,4,1,5,9,2,6);  # 返回集合中最大的值9
SELECT least(3,1,4,1,5,9,2,6);  # 返回集合中最小的值1
SELECT mod(5,3);  # 取余  mod(a,b) == a-a/b*b
SELECT rand();    # 返回 0 到 1 内的随机值,每次不一样
SELECT rand(5);   # 提供一个参数(种子)使RAND()随机数生成器生成一个指定的值。
SELECT round(1415.1415);   # 四舍五入1415
SELECT round(1415.1415, 3);   # 四舍五入三位数1415.142
SELECT round(1415.1415, -1);    # 四舍五入整数位数1420
SELECT truncate(1415.1415, 3);    # 截断为3位小数1415.141
SELECT truncate(1415.1415, -1);   # 截断为-1位小数1410
SELECT sign(-5);    # 符号函数 参数>0 返回1;参数<0 返回-1 
SELECT sqrt(9);   # 平方根3

(3)日期函数

SELECT NOW();  -- 返回当前系统日期+时间
SELECT CURDATE();  -- 返回当前系统日期,不包含时间
SELECT CURTIME();  -- 返回当前系统时间,不包含日期

SELECT YEAR(NOW());  -- 可以获取指定的部分,年、月、日、小时、分钟、秒
SELECT YEAR('1998-1-1');
SELECT str_to_date('07-11-1997', '%m-%d-%Y');  -- 将日期格式的字符串转换成指定格式的日期
SELECT date_format('1997/11/07', '%Y年-%m月-%d日');  -- 将日期转换成字符串
SELECT quarter(current_date);
SELECT monthname(current_date), dayname(current_date);   -- January  Saturday
SELECT dayofweek(current_date), dayofmonth(current_date), dayofyear(current_date);

MySQL基本语句(基础篇)_第1张图片

(4)分组函数

select count(id) as total from n;  -- 总数
select sum(age) as all_age from n;  -- 总和
select avg(age) as all_age from n;  -- 平均值
select max(age) as all_age from n;  -- 最大值
select min(age) as all_age from n;  -- 最小值

(5)流程控制函数

SELECT IF(10>5, '大', '小');
SELECT ifnull(NULL, 't'), ifnull(2, 't');    # t 2
SELECT isnull(1), isnull(1/0);    # 0 1 是null返回1,不是null返回0
SELECT nullif('a', 'a'), nullif('a', 'b');    # null a 参数相同或成立返回null,不同或不成立则返回第一个参数
# case函数的使用:
/*
语法1(switch case 的效果):
	case 要判断的字段或表达式
		when 常量1 then 要显示的值1或语句1;
		when 常量2 then 要显示的值2或语句2;
		...
		else 要显示的值n或语句n;
		end
        
语法2(if else嵌套 的效果)的效果:
	case
		when 条件1 then 要显示的值1或语句1;
		when 条件2 then 要显示的值2或语句2;
		...
		else 要显示的值n或语句n;
		end
*/
SELECT salary, department_id,
CASE department_id
	WHEN 30 THEN salary*1.1
	WHEN 40 THEN salary*1.2
	WHEN 50 THEN salary*1.3
	ELSE salary
	end AS 新工资
FROM employees;

SELECT salary,
CASE
	WHEN salary>20000 THEN 'A'
	WHEN salary>15000 THEN 'B'
	WHEN salary>10000 THEN 'C'
	ELSE 'D'
	end AS 工资级别
FROM employees;

7、表

# 创建一个表
CREATE TABLE n(id INT, name VARCHAR(10));
CREATE TABLE m(id INT, name VARCHAR(10), PRIMARY KEY (id), FOREIGN KEY (id) REFERENCES n(id), UNIQUE (name));
CREATE TABLE m(id INT, name VARCHAR(10));
# 直接将查询结果导入或复制到新创建的表
CREATE TABLE n SELECT * FROM m;
# 新创建的表与一个存在的表的数据结构类似
CREATE TABLE m LIKE n;
# 创建一个临时表
# 临时表将在你连接MySQL期间存在。当断开连接时,MySQL将自动删除表并释放所用的空间。也可手动删除。
CREATE TEMPORARY TABLE l(id INT, name VARCHAR(10));
# 直接将查询结果导入或复制到新创建的临时表
CREATE TEMPORARY TABLE tt SELECT * FROM n;
# 删除一个存在表
DROP TABLE IF EXISTS m;
# 更改存在表的名称
ALTER TABLE n RENAME m;
RENAME TABLE n TO m;
# 查看表的结构(以下五条语句效果相同)
DESC n;   # 因为简单,所以建议使用
DESCRIBE n;
SHOW COLUMNS IN n;
SHOW COLUMNS FROM n;
EXPLAIN n;
# 查看表的创建语句
SHOW CREATE TABLE n;

8、增删查改

# 添加字段
ALTER TABLE n ADD age VARCHAR(2) ;
# 删除字段
ALTER TABLE n DROP age;
# 更改字段属性和属性
ALTER TABLE n CHANGE age a INT;
# 只更改字段属性
ALTER TABLE n MODIFY age VARCHAR(7) ;
# 增加数据
INSERT INTO n VALUES (1, 'tom', '23'), (2, 'john', '22');
INSERT INTO n SELECT * FROM n;  # 把数据复制一遍重新插入
# 删除数据
DELETE FROM n WHERE id = 2;
# 更改数据
UPDATE n SET name = 'tom' WHERE id = 2;
# 数据查找
SELECT * FROM n WHERE name LIKE '%h%';
# 数据排序(反序)
SELECT * FROM n ORDER BY name, id DESC ;

12、用户

# 增加用户
CREATE USER 'test'@'localhost' IDENTIFIED BY 'test';
INSERT INTO mysql.user(Host, User, Password) VALUES ('localhost', 'test', Password('test'));    # 在用户表中插入用户信息,直接操作User表不推荐
# 删除用户
DROP USER 'test'@'localhost';
DELETE FROM mysql.user WHERE User='test' AND Host='localhost';
FLUSH PRIVILEGES ;
# 更改用户密码
SET PASSWORD FOR 'test'@'localhost' = PASSWORD('test');
UPDATE mysql.user SET Password=Password('t') WHERE User='test' AND Host='localhost';
FLUSH PRIVILEGES ;
# 用户授权
GRANT ALL PRIVILEGES ON *.* TO test@localhost IDENTIFIED BY 'test';
# 授予用'test'密码登陆成功的test@localhost用户操作所有数据库的所有表的所有的权限
FLUSH PRIVILEGES ;   # 刷新系统权限表,使授予权限生效
# 撤销用户授权
REVOKE DELETE ON *.* FROM 'test'@'localhost';   # 取消该用户的删除权限

标识符

drop table if exists tab_identify;  -- 删除表
create table tab_identify(
		id int primary key auto_increment,
        name varchar(50)
);  -- 创建表

truncate table tab_identify;  -- 清空表信息
insert into tab_identify(name) value('123');  -- 插入数据
show variables like '%auto_increment%';  -- 查看系统字段信息
set auto_increment_increment=3;  -- 修改自增长值
select * from tab_identify;  -- 查询表信息
alter table tab_identify modify column id int primary key auto_increment;  -- 修改表时设置标识符
alter table tab_identify modify column id int;  -- 修改表时删除标识符
desc tab_identify;  -- 查看表结构

数据类型介绍

(1)整型

整数类型 字节
tinyint 1
smallint 2
mediumint 3
int、integer 4
bigint 8
1)如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字
2)如果插入的数值超出了整型的范围,会报out of range异常,并且插入临界值
3)如果不设置长度,会有默认的长度
   长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用!

(2)小数

分类:浮点型 float(M,D)  double(M,D)
     定点型 dec(M,D) decimal(M,D)
1)M:整数部位+小数部位
   D:小数部位
   如果超过范围,则插入临界值
2)M和D都可以省略
   如果是decimal,则M默认为10,D默认为0
   如果是float和double,则会根据插入的数值的精度来决定精度
3)定点型的精确度较高,如果要求插入数值的精度较高如货币运算等则考虑使用

(3)字符型

较短的文本:char、varchar

binary和varbinary用于保存较短的二进制
enum用于保存枚举
set用于保存集合
较长的文本:text、blob(较大的二进制)
写法 M的意思 备注
char char(M) 固定长度 最大的字符数,可以省略,默认为1 比较耗费空间、效率高
varchar varchar(M) 可变长度 最大的字符数,不可以省略 比较节省空间、效率低

(4)日期型

分类:date只保存日期
	 time 只保存时间
	 year只保存年
	 datetime保存日期+时间
	 timestamp保存日期+时间
字节 范围 时区等的影响
datetime 8 1000——9999 不受
timestamp 4 1970-2038

常见约束

含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性

六大约束 备注
NOT NULL 非空,用于保证该字段的值不能为空
DEFAULT 默认,用于保证该字段有默认值
PRIMARY KEY 主键,用于保证该字段的值具有唯一性
UNIQUE 唯一,用于保证该字段的值具有唯一性,可以为空
CHECK 检查约束【mysql中不支持】
FOREIGN KEY 外键,限制两个表的关系,保证该字段的值必须来自于主表的关联列的值

1)约束的添加分类:

1、列级约束:六大约束语法上都支持,但外键约束没有效果	
2、表级约束:除了非空、默认,其他的都支持

2)主键和唯一的大对比:

      保证唯一性  是否允许为空  一个表中可以有多少个  是否允许组合
主键 	 √	       	  ×		    至多有1个          √,但不推荐
唯一 	 √		      √		    可以有多个         √,但不推荐

3)外键:

1、要求在从表设置外键关系
2、从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
3、主表的关联列必须是一个key(一般是主键或唯一)
4、插入数据时,先插入主表,再插入从表
  删除数据时,先删除从表,再删除主表
# 一、创建表时添加约束
/* 1. 添加列级约束
语法:直接在字段名和类型后面追加 约束类型即可。
	 只支持:默认、非空、主键、唯一 */
drop table stuinfo;
create table stuinfo(
	id int primary key,  -- 主键
	stuName varchar(20) not null unique,  -- 非空
	gender char(1) check(gender='男' OR gender ='女'),  -- 检查
	seat int unique,  -- 唯一
	age int default  18,  -- 默认约束
	majorId int references major(id)  -- 外键
);

/* 2.添加表级约束
语法:在各个字段的最下面
			【constraint 约束名】 约束类型(字段名) */
drop table if exists stuinfo;
create table stuinfo(
	id int,
	stuname varchar(20),
	gender char(1),
	seat int,
	age int,
	majorid int,
	
	constraint pk primary key(id),  -- 主键
	constraint uq unique(seat),  -- 唯一键
	constraint ck check(gender='男' OR gender='女'),  -- 检查
	constraint fk_stuinfo_major foreign key(majorid) references major(id)  -- 外键
);

# 二、修改表时添加约束
/* 1、添加列级约束
	   alter table 表名 modify column 字段名 字段类型 新约束; */
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20)  NOT NULL;  -- 添加非空约束
ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;  -- 添加默认约束
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;  -- 添加主键
ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;  -- 添加唯一


/* 2、添加表级约束
	   alter table 表名 add 【constraint 约束名】 约束类型(字段名) 【外键的引用】; */
alter table n add primary key (id);  -- 添加主键
alter table n add constraint pk_n primary key (id);  -- 主键只有一个,所以定义键名似乎也没有什么用
alter table n drop primary key;  -- 删除主键

alter table m add foreign key (id) references n(id);  -- 添加外键,自动生成键名m_ibfk_1
alter table m add CONSTRAINT fk_id FOREIGN KEY (id) REFERENCES n(id);  -- 使用定义的键名fk_id
ALTER TABLE m DROP FOREIGN KEY fk_id;  -- 删除外键
ALTER TABLE m DROP FOREIGN KEY fk_id, ADD CONSTRAINT fk_id2 FOREIGN KEY (id) REFERENCES n(id);  -- 删除之后重新建

alter table n add unique (name);  -- 添加唯一键
alter table n add unique u_name (name);
alter table n add unique index u_name (name);
alter table n add constraint u_name unique (name);
create unique index u_name on n(name);

alter table n add index (age);  -- 添加索引
alter table n add index i_age (age);
create index i_age on n(age);
drop index u_name on n;  -- 删除索引或唯一键
drop index i_age on n;

库和表的管理

-- DDL 数据定义语言
# 一、库的管理
CREATE DATABASE IF NOT EXISTS books;  -- 创建库Books
RENAME DATABASE books TO 新库名;  -- 库的修改
ALTER DATABASE books CHARACTER SET gbk;  -- 更改库的字符集
DROP DATABASE IF EXISTS books;  -- 库的删除

# 二、表的管理
CREATE TABLE book(  -- 创建表Book
	id INT,#编号
	bName VARCHAR(20),#图书名
	price DOUBLE,#价格
	authorId  INT,#作者编号
	publishDate DATETIME#出版日期
);
DESC book;  -- 查看表结构
ALTER TABLE book CHANGE COLUMN publishdate pubDate DATETIME;  -- 修改列名
ALTER TABLE book MODIFY COLUMN pubdate TIMESTAMP;  -- 修改列的类型或约束
ALTER TABLE author ADD COLUMN annual DOUBLE;  -- 添加新列
ALTER TABLE book_author DROP COLUMN  annual;  --删除列
ALTER TABLE author RENAME TO book_author;  -- 修改表名
DESC book;  -- 查看表结构
DROP TABLE IF EXISTS book_author;  -- 表的删除
SHOW TABLES;  -- 查看所有表名
-- 通用的写法:
DROP DATABASE IF EXISTS 旧库名;
CREATE DATABASE 新库名;
DROP TABLE IF EXISTS 旧表名;
CREATE TABLE  表名();

# 三、表的复制
SELECT * FROM Author;
SELECT * FROM copy2;
CREATE TABLE copy LIKE author;  -- 仅仅复制表的结构
CREATE TABLE copy2 SELECT * FROM author;  -- 复制表的结构+数据
CREATE TABLE copy3 SELECT id,au_name FROM author WHERE nation='中国';  -- 只复制部分数据
CREATE TABLE copy4 SELECT id,au_name FROM author WHERE 0;  -- 仅仅复制某些字段

视图

-- 含义:虚拟表,和普通表一样使用
# 一、创建视图
/*语法: create view 视图名
		as
		查询语句;  */
CREATE VIEW v AS SELECT id, name FROM n;
CREATE VIEW v(id, name) AS SELECT id, name FROM n;

# 二、视图的修改
/* 方式一语法:create or replace view  视图名 as 查询语句; */
CREATE OR REPLACE VIEW myv3
AS
SELECT AVG(salary),job_id
FROM employees
GROUP BY job_id;
/* 方式二语法:alter view 视图名 as 查询语句; */
ALTER VIEW myv3
AS
SELECT * FROM employees;

# 三、删除视图
DROP VIEW emp_v1,emp_v2,myv3;
DROP VIEW IF EXISTS v;

# 四、查看视图
DESC myv3;
SELECT * FROM v;
SHOW CREATE VIEW myv3;

# 五、视图的更新
CREATE OR REPLACE VIEW v AS SELECT name, age FROM n;
ALTER VIEW v AS SELECT name FROM n ;

INSERT INTO myv1 VALUES('张飞','[email protected]');  -- 插入
UPDATE myv1 SET last_name = '张无忌' WHERE last_name='张飞';  -- 修改
DELETE FROM myv1 WHERE last_name = '张无忌';  -- 删除

# 具备以下特点的视图不允许更新
-- 包含以下关键字的sql语句:分组函数、distinct、group  by、having、union、union all
-- 常量视图
-- Select中包含子查询
-- join
-- from一个不能更新的视图
-- where子句的子查询引用了from子句中的表

你可能感兴趣的:(MySQL基本语句(基础篇))