*笔记是在https://www.bilibili.com/video/av49181542学习时记录
DML语言
数据库操作语言(操作数据)
- 插入:insert
- 修改:update
- 删除:delete
一、插入语句
insert into 表名(列名,...) values(值1,...) 【,values()】;
列与值一一对应,可以忽略列,默认填充null
如果全部不写列名,则values值必须写全
支持多行插入,子查询结果插入
insert into student(id,name,phone) values(1001,'zhangsan','138*******');
insert into 表名 set 列名=值,列名=值,...
列名不写默认null
insert into student set id=1003,name='李四';
insert init
修改语句
修改单表记录
update 表名 set 列=新值,列=新值,... where 筛选条件;
update student set phone = '123456789',age = 16 where name = 'zhangsan';
修改多表数据
update 表1 别名,表2 set 列 = 值,..., where 连接条件 and 筛选条件;
update 表1 别名 inner|left|right join 表2 别名 on 连接条件 set 列 = 值,...,where 筛选条件
删除语句
单表删除
delete from 表名 where 筛选条件;
delete from student where phone like '17%';
多表删除
delete 表, ... , from 表1 别名,... , where 连接条件 and 筛选条件;
**delete 表, ... , from 表1 别名, inner |left|right join 表2 别名 on 连接条件 where 筛选条件; **
truncate table 表名:删除整个表的所有信息,效率高
- 假如用要删除的表中有自增长列,如果用 delete 删除,在插入数据,自增长列的值从断点开始,truncate删除,从 1 开始
- delete 删除有返回值,truncate没有
- delete 删除可以回滚,truncate不能
DDL语言
数据库定义语言(库和表的管理)
- 创建:create
- 修改:alter
- 删除:drop
库的创建
create database【if not exists】库名;
create database books; # 如果已存在,报错
create database if not exists books; # 如果已存在,不创建
库修改字符集
alert database books charcter set gbk;
库的删除
drop database【if exists】库名;
表的创建
create table 表名 (
列名 列的类型 【长度,约束】,
**列名 列的类型 【长度,约束】, **
...
**列名 列的类型 【长度,约束】 **
)
create table book(
id int, #编号
bName varchar(20),
price double,
author varchar(20),
publishdate datetime
);
表的修改
alter table 表名 add|drop|modify|change column 列名【列类型 约束】;
# 1.修改列名 alter table book change column publishdate pdate datetime; # 2.修改列的类型或约束 alter table book modify column pdate timestamp; # 修改类型为时间戳 # 3.添加新列 alter table book add column rprice double; # 4.删除列 alter table book drop column rprice; # 5.修改表名 alter table book rename to books;
表的删除
drop table if exists books; show tables;
通用的写法
drop database if exists 旧库名; create database 新库名; drop table if exists 旧表名; create table 新表名(...);
表的复制
# 1.仅仅复制表的结构 create table copy_books like books; # 2.复制结构加数据 create table copy_books2 select * from books; # 3.仅仅复制某些字段 create table copy_books3 select id,bName from books where 0;
数据类型
数值型:整型、小数(定点数、浮点数)
字符型:
较短的文本:char、varchar
较长的文本:text、blob(较长的二进制数据)
日期型:date,datetime,timestamp
整型
tinyint smallint mediumint int/integer bigint 1 2 3 4 8 小数(M:总的数字数,D:小数的位数),D过长,默认四舍五入,可省略(M,D)
float(M,D) double(M,D) dec(M,D)/declmal(M,D) 4 8 M+2 字符型:(M,表示字符数,一个汉字,字母为一个字符)
char(M) varchar(M) M(0-255)默认为1 M(0-65535)必写 固定长度(效率高) 可变长度(效率低)
常见约束
含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性
not null default primary key unique foreign key 不能为空 默认 唯一性、非空 唯一性,可以为空 限制两表的关系 姓名、学号 性别 学员编号 座位号 专业编号
create table 表名(
字段名 字段类型 列级约束,
...,
表级约束
);
create table if not exists stuinfo(
id int primary key,
stuname varchar(20) not null,
gender char(1),
age int default 18,
seat int unique,
majorid int,
constraint fk_stuinfo_major foreign key(majorid) refernces major(id)
);
标识列(自增长列)
create table stu(
id int primary key auto_increment,
name varchar(20)
);
insert into stu values(null,'john');
set auto_increment_increment=3; # 改变增长步长,默认 1
TCL语言
Transaction Control Language 事务控制语言
事务:事务由每个单独单元的一个或多个SQL语句组成,在这个单元中,每个MySQL语句都是相互依赖的
事务的特点:
原子性:事务不可再分,要么都发生,要么都不发生
一致性:事务必须使数据库从一个一致性状态变换到另外一个一致性状态
隔离性:事务内部的操作及使用的数据对并发的其他事务是互不干扰的
持久性:事务一旦提交,数据改变结果是永久性的
事务的创建
隐式事务:事务没有明显的开启和结束的标记(insert、update、delete)
显式事务:事务具有明显的开启和结束标记
前提:必须先设置自动提交功能为禁用
set autocommit = 0;
# 步骤1: 开启事务 set autocommit = 0; start transaction; # 可选 # 步骤2: 编写事务中的sql语句(select insert update delete) ... # 步骤3: 结束事务 commit; #提交事务 rollback; #回滚事务
事务的隔离级别
脏读 不可重复读 幻读 read uncommitted √ √ √ read committed × √ √ repeatable read(默认) × × √ serializable × × ×
视图
代码封装,减少冗余
create view 视图名 as 查询语句;
# 查询姓名中包含a字符的员工名、部门名和工种信息
create view v1 as
select name,department_name,job_title
from employees e join departments d on e.department_id = d.department_id
join jobs j on j.job_id = e.job_id;
select * from v1 where name like '%a%';

网友评论