目录
DCL语句:数据库控制语言(定义数据库访问权限和安全级别,创建用户)
数据库语句
DDL语句:数据库定义语言(创建数据库,表,列)
数据库:
1.数据库的创建
Create Databace if not exists 数据库名;
2.数据库的删除
Drop Database if exists 数据库名;
3.显示所有数据库
Show Databases;
4.使用特定的数据库
Use 数据库名;
5.查看当前数据库的名称
Select Database();
表:
1.创建表
Create Table 表名 (
列名1 类型,
列名2 类型,
列名3 类型
);
注:最后一列不需要加,
2.查询本数据库内所有表
Show Tables;
3.查询特定的表(表的结构)
Desc 表名;
4.修改表
Alter Table 表名 Rename to 新的表名; ----------修改表名
Alter Table 表名 Add 新列名 新数据类型; ----------添加新的列
Alter Table 表名 Modify 列名 新数据类型; ----------修改列的数据类型
Alter Table 表名 Change 列名 新列名 新数据类型;-----------修改列名和数据类型
Alter Table 表名 Drop 列名; -------------删除列
DML语句:数据库操作语言(表的增删改)
1.添加数据
1.给指定列添加数据
Insert into 表名(列名1,列名2……) Values (值1,值2……);
2.给全部列添加数据
Insert into 表名 Values (值1,值2……);
3.批量添加数据
Insert into 表名 Values (值1,值2……),(值1,值2……),(值1,值2……);
2.删除数据
Delete From 表名 Where 条件;
3.更新数据
Update 表名 set 列名=值1,列名=值2 Where 条件;
DQL语句:数据库查询语言(表的查询)
1.单表查询
Select 列名 From 表名 Where 条件列表 Group By 分组字段 Having 分组后条件 Order By
排序字段 Limit 分页限定 ;
实例:
1>去除重复性字段
Select Distinct address From stu ;
2> 给列名取别名
Select name,math As 数学成绩,english As 英语成绩 From stu;
注意:As 可以不写,但是列名和别名之间需要存在至少一个空格。
3>条件查询表
Q1.查询年龄大于20岁的学员信息
select * from stu where age > 20;
Q2.查询年龄大于等于20岁 并且 年龄 小于等于 30岁 的学员信息
select * from stu where age >= 20 && age <= 30;
select * from stu where age >= 20 and age <= 30;
select * from stu where age BETWEEN 20 and 30;
Q3.查询入学日期在'1998-09-01' 到 '1999-09-01' 之间的学员信息
select * from stu where hire_date BETWEEN '1998-09-01' and '1999-09-01';
Q4. 查询年龄不等于18岁的学员信息
select * from stu where age != 18;
select * from stu where age <> 18;
Q5. 查询年龄等于18岁 或者 年龄等于20岁 或者 年龄等于22岁的学员信息
select * from stu where age = 18 or age = 20 or age = 22;
select * from stu where age in (18,20 ,22);
Q6. 查询英语成绩为 null的学员信息
注意: null值的比较不能使用 = != 。需要使用 is is not
select * from stu where english = null; 错误的
select * from stu where english is null;
select * from stu where english is not null;
4>模糊查询 like
通配符:
(1)_:代表单个任意字符
(2)%:代表任意个数字符
Q1. 查询姓'马'的学员信息
select * from stu where name like '马%';
Q2. 查询第二个字是'花'的学员信息
select * from stu where name like '_花%';
Q3. 查询名字中包含 '德' 的学员信息
select * from stu where name like '%德%';
5>排序查询
SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2] …;
排序方式:
1.ASC:升序排列(默认值)
2.DESC:降序排列
Q1.查询学生信息,按照年龄升序排列
select * from stu order by age asc ;
select * from stu order by age ;(默认)
Q2.查询学生信息,按照数学成绩降序排列
select * from stu order by math desc ;
Q3.查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列
select * from stu order by math desc , english asc ;
注意:如果存在多个排序条件,只有前边排序的值一样,才会按照第二个排序方式排序
6>聚合函数
注意:NULL值不参与聚合函数运算
7>分组查询
SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];
Q1. 查询男同学和女同学各自的数学平均分
select sex, avg(math) from stu group by sex;
注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
select name, sex, avg(math) from stu group by sex;
Q2. 查询男同学和女同学各自的数学平均分,以及各自人数
select sex, avg(math),count(*) from stu group by sex;
Q3. 查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组
select sex, avg(math),count(*) from stu where math > 70 group by sex;
Q4. 查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的。
select sex, avg(math),count(*) from stu where math > 70 group by sex having count(*) > 2;
8>分页查询
SELECT 字段列表 FROM 表名 LIMIT 起始索引 , 查询条目数
* 起始索引:从0开始
*起始索引 = (当前页码 - 1) * 每页显示的条数
Q1. 每页显示3条数据,查询第1页数据
select * from stu limit 0 , 3; 起始索引 = (1 - 1) * 3=0
Q2. 每页显示3条数据,查询第2页数据
select * from stu limit 3 , 3; 起始索引 = (2 - 1) * 3=3
Q3. 每页显示3条数据,查询第3页数据
select * from stu limit 6 , 3; 起始索引 = (3 - 1) * 3=6
2.约束条件
-- 创建一个员工表
Create table emp (
id int PRIMARY KEY auto_increment, -- 主键且自增长
name VARCHAR(10) NOT NULL UNIQUE,-- 非空且唯一
joinDate date not null, -- 入职日期,非空
salary DOUBLE(7,2) not null,-- 工资,非空
bonus DOUBLE(7,2) DEFAULT 0 -- 奖金,没有默认为0
);
1>自增长,要求列为数字且唯一,当不给id赋值或者赋值为空的时候,都会自增。
2>外键约束 CONSTRAINT 【外键名--[fk_主表_从表(一般)]】 foreign key (从表列名)
references 主表(列名);
注意:
1.加在创建表(从表)最后一行
2.可以使用Alter Table 表名 ADD CONSTRAINT 【外键名--[fk_主表_从表(一般)]】 foreign key (从表列名) references 主表(列名);
3.删除外键 Alter Table 表名 Drop foreign key 外键名;
3.多表查询
1>给表起别名:
SELECT 别名1.name ,别名2.name From 表名1 别名1,表名2 别名2 Where 条件;
2>显式内连接 select * from 表1 jion 表2 on 条件;
3>隐式内连接 select * from 表1 , 表2 Where 条件;
4>左外连接 select 字段 from 表 1 left join 表2 on 条件;
5>右外连接 select 字段 from 表 1 right join 表2 on 条件;
6>子查询
DCL语句:数据库控制语言(定义数据库访问权限和安全级别,创建用户)
事务:事务会把所有命令作为一个整体提交或撤销
开启事务 Start transaction | begin
提交事务 commit
回滚事务 Rollback
演示:张三给李四转账500元
正常情况:
错误情况:
此时表中的数据显示错误,并且已经永久修改
演示开启事务:
可以看到运行后查询,张三结果改变,但是在新窗口查询结果没有改变
回滚事务:此时运行选中部分,可以将临时修改的数据恢复原样。
事务正常情况:事务开启后运行正确需要提交才可以永久改变数据库中数据
注:以上命令用于mysql中,开启事务后,要进行事务提交,不然数据只会暂时性更改。
事务的四个特性:
原子性:事物是不可分割的,最小操作单位,要么同时成功,要么同时失败。
一致性:事务完成时必须使所有的数据都保持一致状态。
隔离性:并发环境中,并发的事务是互相隔离的,一个事务的执行不能被其它事务干扰。也就是说,不同的事务并发操作相同的数据时,每个事务都有各自完整的数据空间。
持久性:事物一旦提交或回滚,它对数据库中的数据的改变是永久的。