mysql语法规范
- 关键字大写,表名、列名小写
- 命令结束符默认为分号结尾
- 注释
- 单行注释:#注释文字
- 单行注释:-- 注释文字
- 多行注释:/* 注释文字 */
mysql常用语句
- 操作数据库
create database 库名;
show databases;
use db_name;
drop database 库名;
- 查看当前数据库中的所有表
show tables;
- 查看表结构
desc tb_name;
- 创建表
create table tb_name(column1 type1,column2 type2,...);
DROP TABLE [IF EXISTS] studentinfo;
CREATE TABLE IF NOT EXISTS stuinfo(
stuId INT,
stuName VARCHAR(20),
gender CHAR,
bornDate DATETIME
- 查看mysql版本
mysql -V
select version();
- 查看表中数据
select * from tb_name;
select * from tb_name where condition1 and condition2;
select * from tb_name where column1 like 'a%';
- 排序
select 查询项 from 表名 where 条件 order by 排序字段 [desc|asc ]
- 分组
select 查询项 from 表名 group by 分组字段
分组前筛选: 原始表 group by的前面 where
分组后筛选: 分组后的结果集 group by的后面 having
- 分页
select * from 表 limit (page-1)*sizePerPage,sizePerPage
起始索引(从零开始),选择个数
多表查询
- 交叉连接
生成笛卡尔积,即表1(4条数据),表2(8条数据)每个项都匹配,返回(32条数据)
select * from 表1,表2;
- 自连接
对同一张表进行操作
select * from students as s1 inner join students as s2 on 条件(s1.字段=s2.字段)
- 内链接
只连接匹配的行
select * from students inner join scores on 条件(表1.字段=表2.字段)
- 外连接( left join,right join)
优先显示左表全部记录 left join
select * from students left join scores on 条件(表1.字段=表2.字段)
- 联合查询
union and union all
select * from courses union all select * from scores;
select * from courses LEFT JOIN scores on (courses.cno = scores.cno)
UNION
select * from courses RIGHT JOIN scores on (courses.cno = scores.cno);
1、多条查询语句的查询的列数必须是一致的
2、多条查询语句的查询的列的类型几乎相同
3、union代表去重,union all代表不去重
子查询
一条查询语句中又嵌套了另一条完整的select语句
- 子查询根据返回结果分为两类
-
单行子查询
结果集只有一行
一般搭配单行操作符使用:> < = <> >= <=
非法使用子查询的情况:
a、子查询的结果为一组值
b、子查询的结果为空 -
多行子查询
结果集有多行
一般搭配多行操作符使用:any、all、in、not in
in: 属于子查询结果中的任意一个就行
any和all往往可以用其他查询代替
-
插入数据
insert into 表名(字段名,...) values(值1,...);
更新数据
update 表名 set 字段=新值,字段=新值 [where 条件]
update 表1 别名1,表2 别名2 set 字段=新值,字段=新值 where 连接条 and筛选条件
删除数据
- delete
delete from 表名 [where 筛选条件]
- truncate
truncate table 表名
1 truncate不能加where条件,而delete可以加where条件
2 truncate的效率高一丢丢
3 truncate 删除带自增长的列的表后,如果再插入数据,数据从1开始; delete 删除带自增长列的表后,如果再插入数据,数据从上一次的断点处开始
4 truncate删除不能回滚,delete删除可以回滚
总之:当你不再需要该表时, 用 drop;当你仍要保留该表,但要删除所有记录时, 用 truncate;当你要删除部分记录时(always with a WHERE clause), 用 delete
修改表
ALTER TABLE 表名 ADD|MODIFY|DROP|CHANGE COLUMN 字段名 【字段类型】;
ALTER TABLE stuinfo RENAME aaa; #修改表名
ALTER TABLE aaa CHANGE gender sex CHAR; #旧字段名,新字段名,新字段类型
ALTER TABLE aaa MODIFY sex varchar(2);
ALTER TABLE aaa ADD COLUMN std_level varchar(10);
ALTER TABLE aaa DROP std_level;
网友评论