mysql的表操作
对表中数据的操作⼀般分为四类, 常记做 "CURD":
U: 更新(Update)
R: 读取(Retrieve)
D: 删除(Delete)
表的创建
create table [if not exists] `表名称` (字段1 类型 [属性],字段2 类型 [属性],...) engine='myisam' charset='编码格式';
字符集如果不指定, 默认继承库的字符集. engine 默认innodb
查询
-
查看所有的表
show tables;选择数据库后才能查看这个数据库的所有的表
-
显示表的结构
desc `表的名称`; -
查询表里的数据
select * from `表名`;
select * from `表名` where `字段`>80;
select `字段1`,`字段2` from `表名` where `字段`>80;
删除
1.删除表
drop table [if exists] `表名称`;
删除表必须在数据库中删除
2.删除字段
alter table `表名` drop `字段名`;
3.删除表数据
-- 删除表中的所有数据 (逐⾏删除)
delete from `表名`;
-- 清空全表 (⼀次性整表删除)
truncate `表名`;
-- 使⽤ where 修改满⾜条件的⾏
delete from `表名` where `字段`='值';
delete from `表名` where `字段` in (1,2,3,4);
修改
1.修改表
-- 修改表的名称
alter table `表的名称` rename `新的表名称`;
-- 修改表的引擎
alter table `表名称` engine=innodb/myisam;
-- 移动表到指定的数据库
alter table `表名称` rename [to] 数据库名称.新表名称;
2.修改表里的字段
-- 修改字段名称
alter table `表名称` change `旧字段名` `新的字段名` 类型 [属性];
-- 修改字段属性
alter table `表名称` modify `字段名` 数据类型 [属性];
-- 修改字段的位置
alter table `表名` change `旧字段名` `新的字段名` 类型 after `字段名`;
3.修改表数据
-- 修改全表数据
update `表名称` set `字段1`='值',`字段2`='值';
-- 使⽤ where 修改满⾜条件的⾏
-- where 类似于 if 条件, 只执⾏返回结果为 True 的语句
update `表名称` set `字段1`='值',`字段2`='值' where `字段`='值' and `字段`='值';
增加
1.增加表字段
alter table `表名` add `字段名` 类型 [属性][,add `字段名` 类型 [属性]];
alter table `表名` add `字段名` 类型 [属性] first;
alter table `表名` add `字段名` 类型 [属性] after `字段名`;
2.增加表数据
--一次插入一行
insert into `表名` set `字段名`=值,`字段名`=值;
--按照指定字段一次插入多行
insert into `表名` (`字段1`,`字段3`,...) values ('值','值',...),('值','值',...),...;
--一次插入多行
insert into `表名` values (null,'值','值',...),(null,'值','值',...),...;
其中的 into 在 MySQL 数据库中可以省略, 但在某些数据库中必须要有。
3.增加表
create table `表名`(字段1 数据类型 [属性],字段1 数据类型 [属性],...) engine='myisam' charset='编码格式';
复制表
1.复制表结构和数据,但是字段属性会丢失
create table `新表名` select * from `表名1`;
2.复制表的结构
create table `新表名` like `表名1`;
3.复制表的数据
insert into `表名` select * from `原表名`;
UNION联合查询 (并集)
UNION 操作符⽤于合并两个或多个 SELECT 语句的结果集。
union要求:
-
两边 select 语句的字段数必须⼀样
-
两边可以具有不同数据类型的字段
-
字段名默认按照左边的表来设置
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
INNER JOIN : 内连接 (交集)
INNER JOIN 关键字在表中存在⾄少⼀个匹配时返回⾏。
SELECT 字段
FROM 表1 INNER JOIN 表2
ON 表1.字段=表2.字段;
SELECT 字段
FROM 表1 INNER JOIN 表2
ON using(字段);
-- 或:
SELECT column_name(s)
FROM table1 JOIN table2
ON table1.column_name=table2.column_name;
SELECT column_name(s)
FROM table1 JOIN table2
ON using(column_name);
LEFT JOIN : 左连接
LEFT JOIN 关键字从左表(table1)返回所有的⾏,即使右表(table2)中没有匹配。如果右表中 没有匹配,则结果为 NULL。
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
-- 或:
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;
RIGHT JOIN : 右连接
RIGHT JOIN 关键字从右表(table2)返回所有的⾏,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;
-- 或:
SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;
FULL JOIN : 全连接
FULL JOIN 的连接⽅式是只要左表(table1)和右表(table2)其中⼀个表中存在匹配,则返回 ⾏。相当于结合了 LEFT JOIN 和 RIGHT JOIN 的结果。
特别注意: MySQL 并不⽀持 full join
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;
⼦查询
查询的语句中还有⼀个查询
select name from student where id in (select id from score where math > 10);
视图表
-
视图表的特点
视图是数据的特定⼦集,是从其他表⾥提取出数据⽽形成的虚拟表,或者说临时表。
创建视图表依赖⼀个查询。
视图是永远不会⾃⼰消失的除⾮⼿动删除它。
视图有时会对提⾼效率有帮助。临时表不会对性能有帮助,是资源消耗者。
视图⼀般随该数据库存放在⼀起,临时表永远都是在 tempdb ⾥的。
视图适合于多表连接浏览时使⽤;不适合增、删、改,这样可以提⾼执⾏效率。
⼀般视图表的名称以 v_ 为前缀,⽤来与正常表进⾏区分。
对原表的修改会影响到视图中的数据。
-
创建视图
-
语法: create view 视图名 as 查询语句
create view v_user_score as
select a.id, a.name, b.math, b.english
from student a inner join score b on a.id=b order by id;
-- 查询
select * from v_user_score;
-- 删除
drop view v_user_score; -

浙公网安备 33010602011771号