creaDDL:操作数据库,表
1.操作数据库:CRUD
创建(Create):
创建数据库:create database 数据库名称;
创建数据库并判断是否存在,并制定字符集:create database if not existed 数据库名称 character set 字符集名称
查询(Retrieve):
查询所有数据库名称:show databases;
查询某个数据库的创建语句:show createdatabase 数据库名称
修改(Update):
修改数据库的字符集:alter database 数据库名称 character set 字符集名称;
删除(Delete):
删除数据库:drop database 数据库名称;
判断数据库是否存在并删除:drop database if exists 数据库名称;
使用数据库:
查询当前正在使用的数据库名称:select database();
使用数据库 :use 数据库名称;
2.操作表
创建(Create):
创建表:create table 表名(列名1 数据类型,列名2 数据类型,...列名n 数据类型);
复制表:create table 表名 like 被复制的表名;
查询(Retrieve):
查询某个数据库中所有的表名称:show tables;
查询表结构:desc 表名;
修改(Update)
修改表名:alter table 表名 rename to 新的表名;
修改表的字符集:alter table 表名character set 字符集名称;
添加一列:alter table 表名 add 列名 数据类型;
修改列名称 类型:alter table 表名change 列名 新列名 新数据类型;
删除列:alter table 表名 drop 列名;
删除(Delete):
drop table 表名;
drop table if exist
DML:增删改表中的数据
1.添加数据:
语法;insert into 表名(列名1,列名2,...,列名n) values(值1,值2,...值n);
注意:*列名和值要一一对应
*如果表名后不定义列名,则默认给所有列添加值,
如:insert into 表名 values(值1,值2,...值n);
*除了数字类型,其他类型需要使用引号引起来,单双引号都可以
2.删除数据:
语法:delete from 表名 where 条件;
注意:*如果不加条件,则删除表中所有记录。
*如果要删除所有记录,
delete from 表名;--不推荐使用,有多少条记录就会执行多少次删除操作。
truncate table 表名;--先删除表,然后早创建一张一摸一样的表。
3.修改数据:
语法:updata 表名 set 列名1=值1,列名2=值,...where 条件;
注意:*如果不加任何条件,则会将表中所有的记录全部修改。
DQL
1.查询语句
语法:order by 子句
*order by 排序字段1,排序方式1,排序字段2 排序方式2,...
排序方式:*asc:升序,默认。
*desc:降序。
注意,如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件
2.聚合函数:将一列数据作为一个整体,进行纵向的计算
*count:计算个数
*max:计算最大值
*min:计算最小值
*sum:计算和
*avg:计算平均值
注意:聚合函数的计算,排除null值
解决方案:*选择不包含非空的列进行计算
*ifnull语句
3.分页查询
语法:limit 开始的索引,每页查询的条数;
公式:开始的索引=(当前的页码-1)*每页的条数
select *from student limit0,3;--第一页
select *from student limit3,3;--第二页
select *from student limit6,3;--第三页
分页操作是一个方言。
4.基础查询
查询表中的记录:select *from 表名;
1.语法: select:字段列表
from :列名列表
where:条件列表
group by:分组列表
having:分组之后的条件
order by:排序
limit:分页限定
多个字段的查询:select 字段名1,字段名2,...from 表名;
注意:如果查询所有字段,则可以使用*来替代字段列表
去除重复:distinct
计算列:*一般可以使用四则运算计算一些列的值(一般只会用于数值型的计算)
*ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
表达式1:哪个字段需要判断是否为null
如果该字段为null后的替换值
起别名:as;as也可以省略
5.条件查询
语句:where子句后跟条件
运算符:*>,<,<=,>=,=<>
*brtween ... and
*in (集合)
*like:模糊查询。
占位符:*_:单个任意字符
*%:多个任意字符
*is null:
*and 或&&
*not 或!
约束:
概念:对表中的数据进行限定,保证数据的正确性,有效性和完整性
分类:1;主键约束:primary key;
2;非空约束:not null;
3;唯一约束: unique;
4;外键约束:foreign key;
1.非空约束:not null
1.创建表时添加,如create table stu(id int,name varchar(20) not null);
2.删除约束: alter table stu modify name varchar(20);
3.创建表完后添加非空约束:alter table stu modify name varchar(20) not null;
2.唯一约束:unique,唯一约束列的值可以有多个null
创建表时添加:create table stu(id int,name varchar(20) unique);
删除约束:alter table 表名 drop 列名;
创建表完后添加非空约束:alter table stu modify name varchar(20) unique;
3.主键约束:含义:非空且唯一,一张表只能有一个字段为主键,主键就是表中记录的唯一标识
创建表时添加,如create table stu(id int primary key,name varchar(20));
删除主键:alter table 表名 drop primary key;
创建完表时添加主键:alter table 表名 modify 列名 int primary key;
创建表时,添加主键约束,并且完成主键自增长,关键词为auto_increment
如create table stu(id int primary key auto_increment,name varchar(20));
删除自动增长:alter table 表名 modify 列名 数据类型;
添加自动增长:alter table 表名 modify 列名 数据类型 auto_increment;
主键约束的自动增增长只和上一个数据有关系,在上一个数据的基础上增长
4.外键约束:foreign key,让表于表产生关系,从而保证数据的正确性
1.在创建表时,可以添加外键
语法:create table 表名(
...
外键列
constraint 外键名称 foreign key (外键列名称) references 主表名称 (主表列名称)
);
2.删除外键:alter table 表名 drop foreign key 外键名;
3.创建完表之后添加外键;
alter table 表名 add constraint 外键名称 foreign key (外键列名称) references 主表名称 (主表列名称);
4.添加外键,设置级联更新
alter table 表名 add constraint 外键名称 foreign key(外键字段名称)referencrs 主表名称(主表列名称) on updata cascade on delete cascade;
级联更新:on update cascade
级联删除:on delete cascade
多表关系
1.一对多:在多的一方建立外键,指向一的一方的主键。
2.多对多:多对多关系实现需要借助第三张表,中间表至少包含两个字段,这两张表作为第三张表的外键,分别指向两张表的主键。
3.一对一:一对一关系,可以在任意一方添加外键指向另一方的主键,
数据库的备份和还原
命令行语法:
*备份:mysldump -u用户名 -p密码 数据库名称 > 保存的路径
*还原:
1.登录数据库
2.创建数据库
3.使用数据库
4.执行文件,source文件路径
多表查询
1.内连接查询
1.隐式内连接;使用where条件消除无用数据
SELECT
要查询的信息
FROM
查询信息的地址
WHERE
条件限制
2.显式内连接
语法:select 字段列表 from 表名1 inner(可省略) join 表名2 on 条件;
2.外连接查询
1.左外查询:
*语法:select 字段列表 from 表1 left outer(可省略) join 表2 on 条件;
*查询的是左表所有的数据以及其交际部分
2.右外连接
*语法:select 字段列表 from 表1 right outer(可省略) join 表2 on 条件;
*查询的是右表所有的数据以及其交际部分
3.子查询
概念:查询嵌套查询,称嵌套查询为子查询。
比如:select *from emp.'salary' =(select max(salary) from emp);
事务
1.事务的基本介绍
1.概念:如果一个包含多个步骤的业务操作被事务管理,那么这些操作要不同时成功,要不同时失败
2. 操作:
开启事务:start transaction
回滚:rollback
提交:commit
2.事务的四大特性
1.原子性:是不可分割的最小操作单位,要不同时成功,要不同时失败
2.持久性:当事务提交或回滚后,数据库会持久化的保存数据
3.隔离性:多个事务之间,相互独立
4.一致性:事务操作前后数据总量不变
3.事务的隔离级别
概念:多个事务之间隔离的,相互独立。但是如果多个事务操作同一批数据,则会引发一些问题,
设置不同的隔离级别就可以解决这些问题
存在问题:
1.脏读:一个事务,读取到另一个事务中没有提交的数据
2.不可重复读:在同一个事务中,两次读取到的数据不一样
3.幻读:一个事务操作(dml)数据表中的所有记录,另一个事务添加一条数据,则第一个事务查询不到自己的修改
隔离级别:
read uncommitted:读未提交
产生的问题:脏读,不可重复读,幻读
read committed:读已提交
产生的问题:不可重复读,幻读
repeatable read :可重复读(mysql默认)
产生我呢提:幻读
serializable:串行行
可以解决所有问题
注意:隔离级别从小到大安全性越来越强,但是效率越来越低
数据库查询隔离级别
select @@tx_isolation;
数据库设置隔离级别
set global transaction isolation level 级别字符串;
DCL
DBA:数据库管理员
DCL:管理用户,授权
1.管理用户
1.添加用户:
语法:create user ‘用户名’@‘主机名’ identifien by ‘密码’;
2.删除用户
语法:drop user ‘用户名’@‘主机名’;
3.修改用户密码、
语法:update user password =password(‘新密码’) where user=‘用户名’;
set password for ‘用户名’@‘主机名’=password(‘新密码’);
2.权限管理
1.查询权限:
show grants for ‘用户名’@‘主机名’;
2.授予权限:
grant 权限列表 on 数据库名.表名 to ‘用户名’@‘主机名’;
3.撤销权限:
revoke 权限列表 on 数据库名.表名 from ‘用户名’@‘主机名’;