美文网首页
MySQL学习(二)

MySQL学习(二)

作者: kevin5979 | 来源:发表于2020-11-02 19:33 被阅读0次

*笔记是在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%';


END

相关文章

  • MySQL 学习实践笔记(四)

    MySQL 学习实践系列 MySQL 学习实践笔记(一) MySQL 学习实践笔记(二) MySQL 学习实践笔记...

  • MySQL 学习实践笔记(三)

    MySQL 学习实践系列 MySQL 学习实践笔记(一) MySQL 学习实践笔记(二) MySQL 学习实践笔记...

  • MySQL 学习实践笔记(二)

    MySQL 学习实践系列 MySQL 学习实践笔记(一) MySQL 学习实践笔记(二) MySQL 学习实践笔记...

  • MySQL 学习实践笔记(一)

    MySQL 学习实践系列 MySQL 学习实践笔记(一) MySQL 学习实践笔记(二) MySQL 学习实践笔记...

  • MySQL学习(二)

    2018/5/2 20:44 一、MySQL规则: 1、关键字与函数名称全部大写; 2、数据库名称、表名称、字段名...

  • MySQL学习(二)

    *笔记是在https://www.bilibili.com/video/av49181542[https://ww...

  • MySQL学习笔记二之单表查询与多表查询

    title: MySQL学习笔记二之单表查询与多表查询tags: MySQL 数据库categories: MyS...

  • MySQL5.7 安装部署

    01,需要学习的内容 (1).MySQL 5.7 安装部署(二进制) *****编译自己扩展(2).MySQL升级...

  • My SQL 3

    2.1 MySQL 基础 (二)- 表操作 #学习内容# 1. MySQL表数据类型 2. 用SQL语句创建表 ...

  • MySQL学习系列(二)

    1.前文回顾 2.having过滤 用来对多行函数结果进行过滤(1).having 和 where 作用相同,都是...

网友评论

      本文标题:MySQL学习(二)

      本文链接:https://www.haomeiwen.com/subject/qjlqektx.html