DDL(Data Definition Language):数据定义语言:定义数据库,数据表它们的结构:create(创建)、drop(删除)、alter(修改)
DML(Data Manipulation Language):数据操纵语言:主要用来操作数据:insert(插入)、update(修改)、delete(删除)
DCL(Data Control Language):数据控制语言:定义访问权限,取消访问权限,安全设置:grant
DQL(Data Query Language):数据库查询语言:select(查询)、from(子句)、where(子句)
1.1、cmd下登陆数据库服务器:mysql -u用户名 -p密码
例如:用户名是root,密码是root的登陆:mysql -uroot -proot
1.2、创建数据库:create database 数据库名字
创建数据库并指定字符集:create database 数据库名字 character set 字符集
创建数据库指定字符集和校对规则:create database 数据库名字 character set 字符集 collate 校对规则
1.3、查看所有数据库: show databases;
1.4、修改数据库的字符集:alter database 数据库的名字 character set 字符集;
1.5、删除数据库:drop database 数据库名字;
1.6、查看当前正在使用的数据库: select database();
1.7、使用某个数据库:use 数据库名 //想要对某个数据库进行增删改查操作即先使用此命令
2.1、创建表:
create table 表名(
列名 列的类型(长度) 约束,
列名2 列的类型(长度) 约束
);
列的类型:int、char、varchar、double、float、boolean、date、time、datetime、timestamp、text、blob等
列的约束:
主键约束:primary key
唯一约束:unique
非空约束:not null
注意:主键约束和唯一约束的区别:
主键约束:①数据唯一,默认不能为空;②外键都是指向另外一张表的主键;③一张表只能有一个主键;
唯一约束:①数据唯一,可以为空;②唯一约束不可以作为其他表的外键;③一张表可以有多个唯一约束;
2.2、查看所有表:show tables;
2.3、查看表的创建过程:show create table 表名;
2.4、查看表结构:desc 表名;
2.5、修改表:
添加列(add):alter table 表名 add 列名 列的类型 列的约束;
修改列(modify):alter table 表名 modify 列名 列的类型;
修改列名(change):alter table 表名 change 列名 新的列名 新列类型;
删除列(drop):alter table 表名 drop 列名;
修改表名(rename):rename table 表名 to 新表名;
修改表的字符集:alter table 表名 character set 字符集;
2.6、删除表:drop stable 表名;
3.1、插入数据
单条格式:insert into 表名 (列名1,列名2,....) values (值1,值2,....); //插入部分列,列名不能省略
例:insert into student (sid,sname) values (1,'张三');
单条格式:insert into 表名 values (值1,值2,....); //插入全部列属性,则列名可省略
例:insert into student values (1,'zhangsan',1,25);
批量插入格式:insert into 表名 values (值1,值2,....),(值1,值2,....),(值1,值2,....),.....;
注意:批量插入相对单条插入效率高,但是批量插入是一个整体语句,若其中一条出错则会导致整体插入失败。
3.2、删除数据
格式:delete from 表名 where 条件; //如果不写条件直接 delete from 表名; 则会删除表所有数据
例:delete from stu where id = 6 //删除stu表id=6的数据
面试问题:请说一下 delete 删除数据 和 truncate 删除数据有什么差别?
解析:delete:DML:一条一条删除表中的数据
truncate:DDL:先删除表再重建表
关于执行效率高低:具体看表中的数据量。如果数据量小delete效率高,如果数据量大truncate效率高。
3.3、更新数据
格式:update 表名 set 列名=列的值,列名2=列的值2 where 条件;
如果不加条件直接写:update 表名 set 列名=列的值,列名2=列的值2;//表示将表中每条数据的相应列都改成相应值
3.4、查询数据
格式:seletct [distinct] [ * ] [列名1,列名2] from 表名 [where 条件]; //distinct,去重
3.4.1、简单查询
①查询表中所有的数据:select * from 表名;
例:seletct * from stu;
②查询表中的姓名和性别:select 姓名,性别 from 表名;
例:select sname,sex from stu;
③别名查询,as作为关键字,as关键字可以省略 //别名查询取别名的表或列在查询结果里显示的是别名
表别名:select p.sname,p.sex from stu as p; //省略as写法:select p.name,p.sex from stu p;
列别名:select sname as 姓名,sex as 性别 from stu;//省略as写法:select sname 姓名,sex 性别 from stu;
例:使用别名查询前:
例:使用别名查询后:
④去重查询:select distinct sname from stu; //输出stu表的所有姓名并且过滤重复的姓名
3.4.2、运算查询:仅仅在查询结果上做运算 + - * / ,原表不做变化。
例如:select *,sex+1 as 性别预处理 from student; //将性别列每项数据都+1,查询结果为原列+生成一列新列名为性别预处 理列,但原表不变。
3.4.3、条件查询[where关键字]:指定条件,确定要操作的记录
例如:select * from student where sex=1; //查询student表中符合sex=1的所有数据。
where 后的条件写法:
①关系运算符:> >= < <= = != <>
<>:不等于,标准SQL语法
!=:不等于,非标准SQL语法
例如:select * from student where sex <> 1; //查询student表中sex不等于1的所有数据
②逻辑运算符:and,or,not
例如:select * from student where sex=0 or age=25; //查询student表中符合sex等于0或者age=25的所有数据
③like:模糊查询
_:代表是一个字符
%:代表是多个字符
例如:select * from student where sname like '%五%'; //查询student表中姓名包含'五'的所有数据项
④in:在某个范围中获得值
例如:select * from student where age in (22,25); //查询student表中年龄是22、25的数据
3.4.4、排序查询:order by 属性列 关键字
asc:ascend 升序(默认)
desc:descend 降序
例如:select * from student order by age desc; //查询student表中按年龄降序输出
例如:select * from student where sname like '赵%' order by age; //查询student表中sname中第一个字为赵并且age按默 认升序输出
3.4.5、聚合函数
①sum():求和;②avg():求平均值;③count():统计数量;④max():最大值;⑤min():最小值
举例sum:select sum(age) from student; //查询student表中年龄的总和
举例avg:select avg(age) from student; //查询student表中年龄的平均值
举例count:select count(*) from student; //查询student表中数据的条数
举例max:select max(age) from student; //查询student表中年龄的最大值
注意:where条件后面不能接聚合函数,太复杂的语句可以拆成子查询格式
举例:select * from student where age > (select avg(age) from student); //查询student表中年龄大于平均年龄的数据
3.4.6、分组(group by)
举例:select sex from student group by sex; //从student表中查询sex列,sex进行分组
注意:having关键字可以接聚合函数,出现在分组之后
where关键字不可以接聚合函数,出现在分组之前
having举例:根据sex分组,分组统计每组(即男女两组)的平均年龄,并且平均年龄大于25;
select sex,avg(age) from student group by sex having avg(age)>25;
,此时只有sex=1的组,因为sex=0的组平均年龄不大于25所以不满足。
4.1、编写顺序
select ... from ... where ... group by ... having ... order by
4.2、执行顺序
from ... where ... group by ... having ... select ... order by
觉得有用的小伙伴请点赞、评论或收藏一下多支持支持博主小弟,跪安~~