mysql最权威的总结
1、数据库操作
create database person charset utf8; -- 创建数据库
show DATABASES; -- 查看数据库
drop database person; -- 删除数据库
use person; -- 使用数据库
2、数据库类型
date #-- 日期2014-09-18
time -- 时间08:42:30
datetime -- 日期时间2014-09-18 08:42:30
timestamp -- 自动存储修改的时间
year -- 年份
tinyint -- 1byte (-128~127)
smallint -- 2byte (-32768~32767)
mediumint -- 3byte (-8388608~8388607)
int -- 4byte (-2147483648~2147483647)
bigint -- 8byte (+-9.22*10的18次方)
float(m,d) -- 4byte 单精度浮点数,m总个数,d小数位
double(m,d) -- 8byte 双精度浮点数,m总个数,d小数位
decimal(m,d) -- decimal是存储为字符串的浮点数
char(n) -- 固定长度,最多255个字符
varchar(n) -- 可变长度,对多65535个字符
tinytext -- 可变长度,最多255个字符
text -- 可变长度,最多65535个字符
mediumtext -- 可变长度,最多2的24次方-1个字符
longtext -- 可变长度,最多2的32次方-1个字符
3、字段约束
not null -- 非空
unique -- 唯一,也可以写为unique key
primary key -- 主键,默认唯一非空
foreign key references -- 外键
auto_increment -- 自增,只能用于主键自增
DEFAULT null -- 默认值:null
COMMENT '年龄' -- 注释:年龄
补充:添加外键的两种方法:
方法一:创建表语句中:
-- 给当前表的键sid添加外键到stu表中的sid,并且定义这个外键的名称为fk_stu_score1_sid
CONSTRAINT fk_stu_score1_sid FOREIGN KEY(sid) REFERENCES stu(sid)
-- 也可以不用定义外键的名称
FOREIGN KEY(sid) REFERENCES stu(sid)
方法二:在创建表语句外
-- 给表score1表的键sid添加外键到表stu表的sid,并且定义这个外键的名称为fk_sid
ALTER TABLE score1 ADD CONSTRAINT fk_sid FOREIGN KEY(sid) REFERENCES stu(sid)
4、DDL(数据定义语言)---》表格的增删改
(1)创建表格
create table t_stu(
sid int primary key auto_increment,
sname varchar(20) unique not null,
sage int not null
)auto_increment = 001;
create table if not exists t_score(
scid int primary key auto_increment,
sid int not null,
yuwen int,
shuxue int,
yingyu INT
)auto_increment=1;
-- 添加外键
alter table t_score add constraint stuscore_sid foreign key(sid) references t_stu(sid)
-- 查看表结构
desc t_stu;
desc t_score;
(2)删除表
-- 删除表格
create table gaofei(id int primary key auto_increment) -- 测试用
drop table gaofei; -- 删除表格,删除所有信息
(3)修改表结构
-- =========================新建测试表===========================
create table test(
id int primary key auto_increment,
name varchar(20)
)auto_increment=1
-- ==================重命名====================
1、alter table 旧表名 rename 新表名;
//修改 数据表名
alter table test rename test1;
-- ==================修改字段数据类型====================
2、alter table 表名 modify 字段名 新数据类型;
//只修改数据类型
alter table test1 modify name char(20);
-- -------修改字段名和数据类型------------
3、alter table 表名 change 旧字段名 新字段名 新的数据类型;
//只修改字段名
//修改字段名和数据类型
alter table test1 change name names varchar(50);
-- -------修改字段位置-------------------
4、alter table 表名 modify 字段 数据类型 after 已存在的字段/first
//字段修改位置
alter table test1 modify name varchar(50) after id;
-- ==================添加新字段====================
5、alter table 表名 add 新字段名 新数据类型 (约束条件‘如:not null’)(位置‘first’);
//增加字段
alter table test1 add age int(20);
6、alter table 表名 add 新字段名 新数据类型 (约束条件) after 已存在的字段;
//将新加的字段放在某个已存在的字段后
alter table test1 add places VARCHAR(20) after id;
-- ==================删除字段===================
7、alter table 表名 drop 字段名;
//删除已存在的字段名
alter table test1 drop places;
5、DML(数据操作语言)------数据增删改查
(1)添加
-- t_stu
-- 对于空值或者自增的值可以用null或者当前字段名替代
insert into t_stu values(sid,'zss',21);
insert into t_stu values(null,'l5',21);
insert into t_stu(sname,sage) values('w5',21);
insert into t_stu(sname,sage) values('z7',22),('s8',22); -- 添加多行数据,用逗号隔开
select * from t_stu; -- 110测试
-- t_score
insert into t_score values(scid,1,11,12,13);
insert into t_score values(scid,5,11,16,63);
insert into t_score values(scid,3,11,82,73);
insert into t_score values(scid,4,11,92,99);
select * from t_score; -- 110测试
(2)查询
-- select 字段名 from 表格名 where 条件
select * from t_score; -- 110测试
select * from t_stu; -- 110测试
(3)删除
-- 删除表格数据
create table gaofei(id int primary key auto_increment) -- 测试用
truncate table gaofei; -- 删除表格所有数据,保留表结构
delete from gaofei; -- 删除表格所有数据,保留表结构
delete from gaofei where id=1; -- 删除指定条件的表格数据
(4)修改
-- 修改
update t_stu set sage=90; -- 修改所有
update t_stu set sage = 99,sname='donghao' where sid > 5 -- 修改给定条件的记录
6、比较运算符
-- 比较运算符 > < >= <= = (!= <> )两个不等于一样
select * from t_score;
select * from t_score where yingyu > 60;
select * from t_score where shuxue >= 60;
select * from t_score where shuxue < 50;
select * from t_score where shuxue <= 50;
select * from t_score where shuxue = 50;
select * from t_score where shuxue != 50;
select * from t_score where shuxue <> 50;
7、逻辑运算符
-- 逻辑运算符 and:并且 or:或者 not:
select * from t_score where yingyu > 60 and shuxue > 60;
select * from t_score where yingyu > 60 or shuxue >90;
select * from t_score where not yingyu = 73; -- 可以转换为!=的情况
select * from t_score where not (yingyu > 60 and shuxue > 60);
8、模糊匹配 和 正则匹配
-- 模糊查询 like
-- 通配符:
-- _ :一个字符位
-- % :匹配0个或多个字符
-- escape :转义字符,匹配上面两个使用
select * from t_stu where sname like '_aofe_';
select * from t_stu where sname like binary '%a%'; -- 区分大小写的比较字符串用binary
select * from t_stu where sname like '%g%'; -- 匹配包含a
select * from t_stu where sname like 'a%'; -- 匹配以a开头
select * from t_stu where sname like '/_%/%%' escape '/'; -- 将/作为转义字符
-- 正则匹配:rlike 和 regexp
-- . :匹配任意单个字符
-- + :匹配一个或者多个字符
-- * :匹配0个或者多个字符
-- []:匹配任意一个[]内的字符
-- ^ :匹配开头
-- $ :匹配结尾
-- {n}:匹配字符n次
-- []:匹配范围内的一个字符
-- [^]:匹配不在范围内的一个字符
-- a|b :匹配a或者b
select * from t_stu where sname rlike '^[gaofei]';
select * from t_stu where sname rlike 'a+';
-- select * from t_stu where sname REGEXP '\\w+'; -- 貌似没有这种
select * from t_stu where sname binary REGEXP 'a+'; -- 区分大小写的比较字符串用binary
-- 上面两种方式like 和relike、regexp的异同点:
-- 相同点:
-- 三个都不区分大小写,如果需要区分,在where 后添加关键字段binary
-- 异同点:
-- 除了使用运算符不同之外,两个重要的差异:
-- - SQL 的 LIKE 模式只用于匹配整个字符串;正则表达式 REGEXP 可以匹配字符串的任何部分。
-- - LIKE 运算符是多字节安全的。REGEXP 运算符只能正确地处理单字节字符集,并不会考虑排序规则。
9、排序
-- 排序 order BY
-- 升序 asc (默认)
-- 降序 desc
select * from t_stu order by sid;
select * from t_stu order by sid desc;
10、去重
-- distinct :查询不重复的记录
-- 注意:(1)distinct这个关键字来过滤掉多余的重复记录只保留一条,
-- 但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。
-- 其原因是distinct只能返回它的目标字段,而无法返回其它字段,
-- (2)distinct 必须放在字段的最前面,否则报错
select distinct sage from t_stu;
select distinct sage,sid from t_stu; -- 同时按照(sage + sid)去重,只有一个不一样的记录就是不同的记录
11、null 和 空字符串
-- null 和 空字符串的用法
-- null : 表示空值 is null is not NULL
-- 空字符串:有值
-- --注意:当比较的字段的值为null时,用is null查找,如果有值的话,就用比较运算符等去查找
select * from t_score where shuxue is NULL;
select * from t_score where shuxue = '90';
select * from t_score where shuxue != 0 and shuxue is not null;
select * from t_score; -- 110测试
12、between ... and ...
-- 字段 between A and B 查询满足条件范围的记录
select * from t_score where shuxue between 50 and 90;
select * from t_score where shuxue >= 50 and shuxue <= 90;
-- 这两个语句一样的效果
13、in
-- in :包含哪些值,和逻辑or类似
select * from t_score where shuxue in (90,82,30);
select * from t_score where shuxue = 90 or shuxue = 82 or shuxue = 30;
-- 这两个语句一样的效果
14、group by 分组查询 ,with rollup , coalesce -----100 疑问 检测到如果select 后用*或者和分组字段不一致时也可以执行
------100 语句执行顺序总结
-- ===============group by======================
-- group by 分组汇总,根据 by 指定的规则对数据进行分组
-- 注意:group by 子句中,必须要指定需要分组的列,而且必须是出现在
-- select 之后除了聚合函数之外所有的列。
-- 简言之,前面出现的后面必须出现
--
-- having : 把分组之后的数据进行筛选和过滤,类似于where的作用
-- 注意:聚合函数必须要写在having后面,绝对不能写在where后面!!
--
--
-- where: 在分组之前,把不符合条件的数据过滤掉,where条件中绝对不能写聚合函数!!!
-- 条件查询的顺序:
where ------> group by -----> having
select sname,count(1) from t_stu GROUP BY sname;
select count(1) from t_stu;
select *,count(1) from t_score GROUP BY shuxue;
-- 错误语法,where后面不能有聚合函数
-- !!!select *,count(1) from t_score where count(1)=1 GROUP BY shuxue;
-- ===================rollup====================
-- 在group by分组字段的基础上再进行统计数据。
select *,count(1) from t_score GROUP BY shuxue with ROLLUP;
-- ===================coalesce==================
-- 如果需要修改rollup新生成的统计数据的名称用coalesce
-- coalesce(a,b,c);
参数说明:如果a==null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null(没意义)。
-- 参考:https://www.cnblogs.com/phpper/p/9384614.html
select coalesce(shuxue,'总计') as '数学',count(1) from t_score GROUP BY shuxue with rollup;
15、子查询 和 嵌套子查询
-- ==================子查询=================
/*什么是子查询?
1、当一个查询语句嵌套在另外一个查询语句中称之为子查询。
2、子查询的结果作为外查询的条件
在使用子查询时,当子查询的返回值只有
一个时用=,当子查询的返回值有多个时用in
子查询能使用的操作符:
in
not in
= !=
> < <>
返回1条或者多条数据都可以使用in
*/
select * from t_stu where sid = (select sid from t_score where shuxue = 92);
select * from t_stu where sid in (select sid from t_score where shuxue = 12);
select * from t_stu where sid in (select sid from t_score where shuxue in (92,12));
select * from t_stu where sid not in (select sid from t_score where shuxue in (92,12));
-- ==============嵌套子查询================
/*
子查询包含一个子查询,
嵌套子查询包含多个子查询。
*/
select * from t_stu where sid in (select sid from t_score where shuxue in (select shuxue from t_score where yingyu=13))
16、子查询和delete,update,
-- 子查询和delete,update,子查询可以它们的条件表达式提供结果集
delete from t_score where sid in (select sid from t_stu where sname='gaofei');
update t_stu set sname='feifei' where sid in (select sid from t_score where shuxue = 12);
17、exists 关键字 :
用于检查一个子查询是否至少会返回一行数据(即检测行的存在),返回值为true或false。
-- 不存在数学=100数据的时候,显示所有的学生信息
select * from t_stu where not exists (select * from t_score where shuxue = 100);
-- 比较~:
select * from t_stu where sid not in (select sid from t_score where shuxue = 100);
18、链接查询主要有:等值连接、内连接、左外连接、右外连接、完全连接
-- ====================等值连接========================
/*
总结:等值查询技巧
通常把要查询的列放在select 后面,列中间用逗号分开,把涉及到的
表放在from后面用逗号分开并把每个表都取别名,接着把几个表的主外键
关系放在where后面,然后用=号连接,还可以加上其他条件。
最后如果还可以根据需要加上分组语句。
*/
select s.sid ,s.sname from t_stu s,t_score r where s.sid = r.sid and r.shuxue = 12;
select * from t_stu s,t_score r where s.sid = r.sid and r.shuxue = 12;
-- 好代码:
select e1.* from emp e1,(select d.dname '部门名称',avg(e.epay) 'avg' ,e.did from dept d,emp e where d.did=e.did group by d.dname) e2
where e1.did=e2.did and e1.epay>e2.avg; -- 这里建立了一个虚拟表e2,然后将他们等值连接关联起来,e1表的工资大于其所在部门的平均工资,因为部门已经得到了关联。
)
-- ======================内连接=======================
-- 关键字inner join...on,只有左,右2个表相匹配的行才能在结果中显示,作用和等值连接一样。
select * from t_stu s inner join t_score r on s.sid = r.sid;
-- =====================左外连接======================
-- 关键字left join,左边的表的行全部显示,左边连接右边的值,右边的表如果没有匹配的值,显示为null
select * from t_stu s left join t_score r on s.sid = r.sid;
-- =====================右外连接=======================
-- 关键字right join, 右边的表的行全部显示,右边连接左边的,左边的表如果没有匹配的值,显示为null
select * from t_stu s right join t_score r on s.sid = r.sid;
-- =====================完全连接=======================
-- 关键字union, 用于合并两个或多个select语句的结果集。 左,右2个表的行都全部显示,如果没有匹配的值,显示为null
-- 合并的select语句的列数量、类型、顺序必须完全一样
select * from t_stu where sid in (1,2)
union
select * from t_stu where sid in (5,6)
18、日期函数
-- ==============================================================
-- 日期函数
select now(); -- 获取当前的日期时间
select curdate(); -- 获取当前的日期
select curtime(); -- 获取当前的时间
-- ==============================================================
select date_add(指定日期,interval 年月日间隔数 年月日季选择);
返回指定日期加上一个时间间隔后的日期
select date_sub(指定时间,interval 年月日间隔数 年月日季选择);
函数从日期减去指定的时间间隔。
select DATE_ADD(CURDATE(),INTERVAL 1 month); -- 下个月的今天
select DATE_ADD(CURDATE(),INTERVAL 1 quarter); -- 下个季度的今天
select date_add(curdate(),interval 1 year); -- 明年的今天
select date_add(curdate(),interval 1 day); -- 明天
select DATE_sub(CURDATE(),INTERVAL 1 month); -- 上个月的今天
select DATE_sub(CURDATE(),INTERVAL 1 quarter); -- 上个季度的今天
select date_sub(curdate(),interval 1 year); -- 去年的今天
select date_sub(curdate(),interval 1 day); -- 昨天
select date_add(curdate(),interval 10 day); -- 10天后
select date_add('2018-1-1',interval 356 day); -- 2018-1-1 356天后是哪一天
-- ==============================================================
datediff()
/*
语法格式:datediff(结束时间,起始时间)
返回起始时间和结束时间之间的天数。
*/
select DATEDIFF('2019-1-4',curdate())
select datediff(curdate(),'2019-1-5')
-- !!!select datediff(CURTIME(),'00:29:10') -- 101错误,应该不常用,只用日期就行了
-- 这个具体的时间后边查查 110 查查为什么时间不行
-- ==============================================================
date()
/*
语法:date(日期时间表达式)
提取日期或时间日期表达式中的日期部分。
*/
select date(curdate());
select date(now());
select date(curtime()); -- 为Null,因为没有date日期
select date('2018-11-18 00:34:45');
-- ==============================================================
dayofweek(date)
/*返回date是星期几(1=星期天,2=星期一,……7=星期六) */
select dayofweek(curdate());
select concat('今天是星期:',dayofweek(now())-1) 'dayofweek';
-- ==============================================================
dayofmonth(date)
/*返回date是一月中的第几天(在1到31范围内)*/
select DAYOFMONTH(now());
select DAYOFMONTH(CURTIME()); -- 没日期结果为Null
-- ==============================================================
dayofyear(date)
/*返回date是一年中的第几天(在1到366范围内)*/
select dayofyear(now());
-- ==============================================================
month(date)
/*返回date中的月份数值*/
day(date)
/*返回date中的天数数值*/
year(date)
/*返回date的年份(范围在1000到9999)*/
quarter(date)
/*返回date是一年的第几个季度 */
select month(now());
select day(now());
select year(now());
select quarter(now());
-- ==============================================================
week(date,first)
/*返回date是一年的第几周(first默认值0,first取值1表示周一是周的开始,0从周日开始)*/
select week(now(),1);
-- ==============================================================
DATE_FORMAT(date,format)
/*根据format字符串格式化date值*/
select date_format(now(),'%y=%m=%d=%h=%m=%s');
-- ==============================================================
extract()
/*函数用于返回日期/时间的各个部分,比如年、季、月、日、小时、分钟等等。*/
select extract(year from now());
select extract(month from now());
select extract(day from now());
select extract(quarter from now());
select extract(hour from now());
select extract(minute from now());
select extract(second from now());
-- ==============================================================
timestampdiff() : 计算两个日期的时间差函数
/*select timestampdiff(年月日季选择,起始时间,结束时间);*/
select timestampdiff(day,'2017-4-9','2017-8-9');
select datediff('2017-8-9','2017-4-9');
select timestampdiff(year,'2017-4-9','2018-8-9');
-- ==============================================================
last_day() 函数:返回月份中的最后一天
select last_day('2017-7-8');
select last_day(now());
-- ===========================小练习=============================
-- 今天是星期几
select dayofweek(curdate() - 1);
select dayofweek(curdate()) - 1; -- 最好用第一种方法,这种方法周日显示的是0
-- 今天是第几季度
select quarter(curdate());
-- 本月一共有多少天
select day(last_day(curdate()));
-- 本月的第一天是星期几
select dayofweek(date_sub(curdate(),interval day(curdate())-1 day)) - 1;
-- 本周的周一是几号
select date_sub(curdate(),interval dayofweek(curdate()-1)-1 day);
19、字符函数
-- ==============================================================
concat()
/* concat(str1,str2,…) concat函数可以连接一个或者多个字符串
concat_ws(x,s1,s2,...) 同concat(s1,s2,...)函数,但是每个字符串直接要加上x
*/
select concat('a','b','c');
select concat_ws('*','a','b','c'); -- 添加了分隔符
-- ==============================================================
left(str, length)
/*
从左开始截取字符串
说明:left(被截取字段,截取长度)
*/
select left('abc',2);
-- ==============================================================
right (str , length)
/*
从右开始截取字符串
说明:left(被截取字段,截取长度)
*/
select right('abc',2);
-- ==============================================================
substring
截取字符串
/*
substring(str, pos) 从pos位置开始截取到末尾
substring(str, pos, length) 从pos位置开始截取length位字符串
说明:substring(被截取字段,从第几位开始截取)
substring(被截取字段,从第几位开始截取,截取长度)
*/
select substring('abcdefg',2);
select substring('abcdefg',2,2);
-- ==============================================================
char_length(s)
/*
返回字符串s的字符数
*/
select char_length('abcdefg');
-- ==============================================================
insert(s1,x,len,s2)
/*
将字符串s2替换s1的x位置开始长度为len的字符串
*/
select insert('abcdefg',2,2,'123'); -- 将2位置开始两位字符替换为123
-- ==============================================================
upper(s)
/*
upper(s): 将字符串s的所有字母变成大写字母
*/
select upper('abcDEfgH');
-- ==============================================================
lower(s)
/*
lower(s): 将字符串s的所有字母变成小写字母
*/
select lower('abcDEfgH');
-- ==============================================================
trim(s) :
/*
去掉字符串s开始和结尾处的空格
并不会去除末尾的换行符,所以如果想去除换行符那么:
解决方法:
UPDATE tablename SET field = REPLACE(REPLACE(field, CHAR(10), ''), CHAR(13), '');
char(10): 换行符
char(13): 回车符
MySQL的trim函数没办法去掉回车和换行,只能去掉多余的空格,可以用MySQL的replace函数,解决掉这个问题
缺点:会把字符串中间出现的换行也会替换掉
--100 疑问
解决:
UPDATE `tran`
SET `status` = '1'
WHERE trim( trim(
BOTH '\r\n'
FROM content ) ) = '我爱你'
用了两个trim,这样的好处是不会替换内容中间的换行和回车,
只会处理头尾的空格换行回车,相当于php中trim函数的作用了。
*/
select trim(' abc ');
reverse(s) :
/*
将字符串s的顺序反过来
*/
select reverse('abcdefg');
20、数学函数
abs(1) -- 取绝对值
ceil(x) -- 向上取整
floor(x) -- 向下取整
rand() -- 返回0-1的随机数,包含0不包含1
pi() -- 返回圆周率(3.141593)
round(x,y) -- 保留x小数点后y位的值,但截断时要进行四舍五入
truncate(x,y) -- 返回数值x保留到小数点后y位的值(与round最大的区别是不会进行四舍五入)
pow(x,y) 或 power(x,y) -- 返回x的y次方
sqrt(x) -- 返回x的平方根
mod(x,y) -- 返回x除以y以后的余数
select sqrt(4);
select mod(5.5,3);
select mod(5,2);
select pow(2,4);
select power(2,4);
21、索引(东西还挺多,目前不用看,一般用于提高检索性能)
/*
创建索引
语法:create index 索引名称 on 表名(字段名);
alter table 表名 add index 索引名称(字段名);
*/
-- 案例
create index suoyin on t_stu(sid);
/*删除索引
语法: drop index 索引名称 on 表名;
*/
drop index suoyin on t_stu;
/*查看索引*/
show index from tblname;
22、视图
视图
(
/*
什么是视图
视图是从一个或多个表中导出来的表,是一种虚拟存在的表。
视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据。
这样,用户可以不用看到整个数据库中的数据,而之关心对自己有用的数据。
数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中。
使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。
视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变。
视图的作用 :
1.使操作简单化,可以对经常使用的查询定义一个视图,使用户不必为同样的查询操作指定条件
2.增加数据的安全性,通过视图,用户只能查询和修改指定的数据。
3.提高表的逻辑独立性,视图可以屏蔽原有表结构变化带来的影响。
创建视图时不能使用临时表。
即使表被删除,视图定义仍将保留。
定义视图的查询不能包含 以下语句:
order by
compute 子句
compute by 子句
into 关键字
*/
/*
创建视图
语法:create view 视图名称 as 查询语句
*/
create view view_a as select s.sid,sname,shuxue,yingyu from t_stu s,t_score r where s.sid=r.sid;
/*查询视图
语法:select * from 视图名称;
*/
select * from view_a;
/*删除视图
语法:drop view 视图名称;*/
drop view view_a;
/*向视图中添加数据
语法:insert into 视图名称(字段1,字段2,...) values (值1,值2,....);
不能添加数据到多个表,因为添加语句涉及到了多个基表
添加数据的时候,如果涉及的基表除了插入字段外还有非空没有默认值字段,那么也不会成功
*/
insert into view_a(shuxue) values(66);
SELECT * FROM T_SCORE;
/*向视图中修改数据
可以修改单表数据,不能修改多表数据
update 视图名称 set 字段1=新值1 where 字段2=值2;
*/
update view_a set shuxue = 100 where sid = 1;
select * from view_a;
/*
with check option 的使用
语法:create view 视图名称 as 查询语句 with check option;
--在创建视图时,可以使用with check option选项,
--其作用是限定向视图添加或修改数据时,添加或修改的数据必须遵照创建视图时where之后的条件
1.对于update,有with check option,要保证update后,数据要被视图查询出来
2.对于delete,有无with check option都一样
4.对于insert,有with check option,要保证insert后,数据要被视图查询出来
5.对于没有where 子句的视图,使用with check option是多余的
*/
create view view_b as select s.sid,s.sname,r.shuxue,r.yingyu from t_stu s,t_score r with check option;
drop view view_b;
/*修改视图定义
语法: alter view 视图名称 as 查询语句
*/
alter view view_b as select * from t_stu with check option;
select * from view_b;
mysql最权威的总结的更多相关文章
- MySQL 常用命令总结
http://blog.csdn.net/hanxin1987216/article/details/5976860 一.总结 1.Linux系统下启动MySQL的命令: mysqladmin sta ...
- 高效查看MySQL帮助文档的方法
在mysql的使用过程中, 可能经常会遇到以下问题: 某个操作语法忘记了, 如何快速查找? 如何快速知道当前版本上某个字段类型的取值范围? 当前版本都支持哪些函数?希望有例子说明.. 当前版本是否支持 ...
- linux下mysql命令
一.总结一下: 1.linux下启动mysql的命令: mysqladmin start/ect/init.d/mysql start (前面为mysql的安装路径) 2.linux下重启mysq ...
- MYSQL使用指南(下)
在上篇我们讲了登录.增加用户.密码更改等问题.下篇我们来看看MySQL中有关数据库方面的操作.注意:你必须首先登录到MYSQL中,以下操作都是在MYSQL的提示符下进行的,而且每个命令以分号结束. 一 ...
- MySQL查询执行的基础
当希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的.一旦理解这一点,很多查询优化实际上就是遵循一些原则让优化器能够按照预想的合理的方式运行. 换句话说,是 ...
- 高效查看MySQL帮助文档的方法 (转)
在mysql的使用过程中, 可能经常会遇到以下问题: 某个操作语法忘记了, 如何快速查找? 如何快速知道当前版本上某个字段类型的取值范围? 当前版本都支持哪些函数?希望有例子说明.. 当前版本是否支持 ...
- MySQL 服务常用操作命令
1.MySQL 服务设置 在使用 mysql.server 命令之前需要将路径 /usr/local/mysql/support-files 添加到系统环境变量中. export PATH=$PATH ...
- SQL授权语句(MySQL基本语句)
看他们网上的,写得都是千篇一律,同时,好多也写得不是很好,下面是我自己总结的有关mysql的使用细节,也是我在学习过程中的一些记录吧,希望对你有点帮助,后面有关存储过程等相关操作还没有总结好,下次总结 ...
- MySQL之查询性能优化(二)
查询执行的基础 当希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的.MySQL执行一个查询的过程,根据图1-1,我们可以看到当向MySQL发送一个请求时, ...
随机推荐
- Leetcode(13)-罗马数字转整数
罗马数字包含以下七种字符:I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列 ...
- HDU 4049 Tourism Planning(状压DP)题解
题意:m个城市,n个人,让这n个人按固定顺序走遍m个城市.每个城市有一个单人票价pi.每个人在每个城市能获得vij的价值.如果多个人在同一城市,那么会额外获得价值,给出一张n * n价值表,额外价值为 ...
- LWIP再探----内存池管理
这这里是接上一篇内存池管理部分的,这里如果读者一打开memp.c的话会感觉特别那一理解原作者在干嘛,但是看懂了就明白原作者是怎么巧妙的使用了宏.废话不多说先说了下我分析是一下宏的条件是 前提条件MEM ...
- 图解 git stash
图解 git stash # 暂存本地 变化 $ git stash # 复原 $ git stash pop The "git stash" command can help y ...
- Web 全栈开发 Redis 面试题
Web 全栈开发 Redis 面试题 Redis 大 key 问题 https://www.cnblogs.com/xgqfrms/p/13601959.html Redis 数据结构 Redis 初 ...
- free food icons
free food icons food icons Chinese foods https://www.flaticon.com/categories/food-and-restaurant htt ...
- 人物传记-BILL RAY:低谷时的信念,决定你能走多远
自2018年全球经济危机以来,以工作为重的成年人们一直备受打击.尤其是2020年,全球贸易争端使得经济下滑严重,很多公司倒闭破产,有些人甚至从富豪变成了负债者,走向了人生低谷.其实,每个人都会遇到人生 ...
- Linux安装MySQL_全网最详细
Linux安装MySQL 编辑于2021-02-19 本文中MySQL安装目录为/usr/local/mysql 上传MySQL安装包至/usr/local目录,执行命令解压 [root@JetXi ...
- opencv打不开摄像头
问题描述: capFace = cv2.VideoCapture(0) 报错: VIDEOIO ERROR: V4L2: Unable to capture video memory. VIDEOIO ...
- 在 TKE 中使用 Velero 迁移复制集群资源
概述 Velero(以前称为Heptio Ark)是一个开源工具,可以安全地备份和还原,执行灾难恢复以及迁移 Kubernetes 群集资源和持久卷,可以在 TKE 集群或自建 Kubernetes ...