dos命令窗口:mysql
-- mysql(或者是mysqlsh) -u帐号名 -p密码 mysql -uroot -p123
-- 使用数据库 use db_name;
-- 查看当前使用的数据库 select database(); -- 查看当前数据库版本 select version();
-- 查看数据库目录 show databases; -- 查看数据库中的表目录 show tables; -- 查看其余库中的表 show tables from db_name; -- 查看表的建立语句 show create table tb_name;
-- 查看表结构 desc tb_name;
-- 查看语句的执行状态(执行计划) explain select ename,sal from emp where sal = 5000;
-- 建立一个数据库 create database db_name;
-- 删除一个数据库 drop database db_name;
-- 加载 sql 文件,拖拽文件到dos窗口会自动生成路径 -- \source source D:\AllCode\SQLCode\test.sql
介绍:分页查询
limit <startIndex>, <lenght>
sql startInsdex 表示起始位置,从 0 开始。数据库
lenght 表示取几个。函数
固定公式:每页显示 pageSize 条记录:ui
limit (pageNo - 1) * pageSize, pageSize
spa
# 例子,显示前五页的数据 -- 从 5 开始,取 5 个,将显示第 5~10 条的数据。 select ename,sal from emp order by sal desc limit 5,5;
-- 终止一条语句 \c 或者按ctrl+c键 -- 退出 mysql \q 或者 quit 或者 exit
介绍:建立表code
-- 建表语句的语法格式: create table 表名( 字段名1 数据类型, 字段名1 数据类型, 字段名1 数据类型, ...... ); -- 将查询结果作一张表:create table 表名 as select语句; create table t_test as select * from emp;
constraint | 约束 | 介绍 |
---|---|---|
not null | 非空约束 | 约束的字段不能为null |
unique | 惟一约束 | 约束的字段不能重复,但可为null |
primary key | 主键约束 | 约束的字段既不能为null,也不能重复,一张表只能存其一 |
foreign key | 外键约束 | 外键值能够为null,被引用的字段不必定是主键,但至少具备unique约束 |
-- 列级约束 -- not null 只有列级约束 drop table if exists t_class; create table t_class( cid int primary key, -- 主键约束 cname varchar(255) unique, -- 惟一约束 cpassword varchar(255) not null, -- 非空约束 )
-- 表级约束 drop table if exists t_student; create table t_student( sid int auto_increment, -- 自增 classid int, sname varchar(255), scode varchar(255), spassword varchar(255), -- 联合约束,二者其一俱备惟一性便可 unique(sname,scode), -- 复合主键 primary key(sid,spassword) -- 外键引用 foreign key(classid) references t_class(cid) )
-- 删除一张表 drop table 表名; -- 若是表存在则删除,mysql特有语句 drop table if exists 表名;
介绍:往表里添加数据。对象
-- 添加一行记录 insert into 表名(字段名1, 字段名2, ...) values (数据1, 数据2, ...); -- 添加一行记录,省略字段 insert into 表名 values (数据1, 数据2, ...); -- 添加两行记录 insert into 表名(字段名1, 字段名2, ...) values (数据1, 数据2, ...), (数据1, 数据2, ...); -- 将查询结果插入到一张表中:insert into 表名 select语句; insert into t_test select * from emp;
修改表中的数据排序
-- 语法格式:update 表名 set 字段名1=值1,字段名2=值2...where条件; update emp set ename = 'black', sal = 1234 where deptno = 10;
删除表中的数据索引
-- 语法格式:delete from 表名 where条件 delete from emp where deptno = 10;
介绍:永久截断(删除)表中的数据,不可回滚。
truncate table emp;
介绍:主键和具备unique约束的字段会自动添加索引。
# create index 索引名称 on 表名(字段名); # drop index 索引名称 on 表名; -- 给sal字段添加索引 create index emp_sal_index on emp(sal); -- 删除索引 drop index emp_sal_index;
只能经过DQL语句建立视图对象。
能够对视图进行CRUD操做。
对视图进行增删改查,会影响到原表数据。
-- 建立视图 create view myview as select empno,ename from emp; -- 删除视图 drop view myview;
select -- execute order 5 ... from -- execute order 1 where -- execute order 2 ... group by -- execute order 3 ... having -- execute order 4 ... order by -- execute order 6 ... limit -- execute order 7 ...
运算符 | 说明 |
---|---|
= | 等于 |
<> 或 != | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
between ... and ... | 两个值之间 |
is null | 为空(is not null 不为空) |
and | 与 |
or | 或 |
in( , ) | 包含(not in(,) 不包含) |
not | 取非 |
like | 模糊查询(使用 % 与 _ 匹配) |
-- asc表示升序,desc表示降序,默认是升序 select 字段... from 表名 order by 字段 desc; -- 多字段排序,越靠前的字段越起主导做用,优先知足前排字段的条件 # 例子,emp是员工表,ename是员工名,sal是员工工资 select ename,sal from emp order by sal desc, ename asc;
函数 | 说明 |
---|---|
count() | 取得记录数 |
sum() | 求和 |
avg() | 取平均值 |
max() | 获取最大值 |
min() | 获取最小值 |
注意一:全部的多行处理函数都是对某一组数据进行操做
注意二:多行处理函数自动忽略 null
注意三:多行处理函数不能出如今where子句中
注意四:多行处理函数在group by语句后执行
# emp是员工表,sal 是员工工资 select sum(sal) from emp; -- 找出工资总和 select avg(sal) from emp; -- 算出平均工资 select max(sal) from emp; -- 找出最高工资 select min(sal) from emp; -- 找出最低工资 select count(*) from emp; -- 找出总条数 select count(sal) from emp; -- 找出不为null的条数
# emp是员工表,comm 是员工津贴 -- ifnull(可能为null的数据,被当作什么处理) select ename,ifnull(comm,0) from emp;
-- 去除重复记录 select distinct 字段 from 表名; -- distinct 修饰多个字段时,全部字段联合去重 select distinct 字段1,字段2... from 表名;
注意一:distinct 只能出如今全部字段的最前方
语法格式 | 说明 |
---|---|
inner join...on... |
内链接,只会将参与链接的表A,表B相匹的数据查询出来。inner 关键字可省略。 |
left outer join...on... |
外链接,优先查询主表,副表无匹配项时以 null 填充。left 修饰左边的表为主表,outer 关键字可省略。 |
right outer join...on... |
外链接,优先查询主表,副表无匹配项时以 null 填充。right 修饰右边的表为主表,outer 关键字可省略。 |
介绍:可将两次查询的结果拼接成一张表,一般用于拼接两张绝不相干的表。
注意:参与拼接的表列数必须相同
-- 语法 select ... from ... union select ... from ...
介绍:事务(Transaction)
和事务有关的语句只有 DML语句(
insert, delete, update
)
-- 开启事务 start transaction; -- 回滚 rollback; -- 提交 commit; -- 设置回滚点, 回滚:rollback name; savepoint name;
在 sql 中,null 参与运算的结果一定为 null。
-- 部门表 create table dept( deptno int primary key auto_increment, -- 部门编号 dname varchar(14) , -- 部门名字 loc varchar(13) -- 地址 ) ; -- 员工表 create table emp( empno int primary key auto_increment,-- 员工编号 ename varchar(10), -- 员工姓名 - job varchar(9), -- 岗位 mgr int, -- 直接领导编号 hiredate date, -- 雇佣日期,入职日期 sal int, -- 薪水 comm int, -- 提成 deptno int not null, -- 部门编号 foreign key (deptno) references dept(deptno) ); insert into dept values(10,'财务部','北京'); insert into dept values(20,'研发部','上海'); insert into dept values(30,'销售部','广州'); insert into dept values(40,'行政部','深圳'); insert into emp values(7369,'刘一','职员',7902,'1980-12-17',800,null,20); insert into emp values(7499,'陈二','推销员',7698,'1981-02-20',1600,300,30); insert into emp values(7521,'张三','推销员',7698,'1981-02-22',1250,500,30); insert into emp values(7566,'李四','经理',7839,'1981-04-02',2975,null,20); insert into emp values(7654,'王五','推销员',7698,'1981-09-28',1250,1400,30); insert into emp values(7698,'赵六','经理',7839,'1981-05-01',2850,null,30); insert into emp values(7782,'孙七','经理',7839,'1981-06-09',2450,null,10); insert into emp values(7788,'周八','分析师',7566,'1987-06-13',3000,null,20); insert into emp values(7839,'吴九','总裁',null,'1981-11-17',5000,null,10); insert into emp values(7844,'郑十','推销员',7698,'1981-09-08',1500,0,30); insert into emp values(7876,'郭十一','职员',7788,'1987-06-13',1100,null,20); insert into emp values(7900,'钱多多','职员',7698,'1981-12-03',950,null,30); insert into emp values(7902,'大锦鲤','分析师',7566,'1981-12-03',3000,null,20); insert into emp values(7934,'木有钱','职员',7782,'1983-01-23',1300,null,10);