3、数据库的基础学习 下
DML 语言
数据操作语言:
插入:insert
修改:update
删除:delete
一、插入语句
方式一的语法:
insert into 表明(列名,…) value(值 1,…)
-- 案例
INSERT into beauty (id,NAME,sex,borndate,phone,photo,boyfriend_id)
value(13,'Jacsk','男','1990-4-23','111','null',2);
SELECT * from beauty;
方式二 语法:
insert into 表明
set 列名= 值,列名=值,…
insert into beauty
set id=19,name='kcw',phone='000'
两种插入方式比较:
方式一支持插入多行,方式二不支持
方式一支持子查询,方式二不支持
方式二看着更直白,不容易出错
二、修改语句
1、修改单表的记录(重点)
语法:
update 表明
set 列=新值,列=新值…
where 筛选条件:
# 修改单表记录
-- 案例:修改 beauty 中的姓柳的电话为 1123213
UPDATE beauty set phone=1123213
where name like '%柳%';
2、修改多表的记录(补充)
语法(sql92):
update 表 1 别名,表 2 别名
set 列=新值,列=新值…
where 连接条件
and 筛选条件;
语法(sql99):
update 表 1 别名
inner|left|right join 表 2 别名
on 连接条件
set 列=新值,列=新值…
where 筛选条件
-- 修改张无忌的女朋友的手机号为 114
update boys bo
inner join beauty b on bo.id=b.boyfriend_id
set b.phone=114
where bo.boyName='张无忌';
三、删除语句
方式一: delete
语法
1、单表删除
delete from 表名 where 筛选条件
2、多表的删除
sql92语法
delete 别名
from 表 1 别名,表 2 别名
where 连接条件
and 筛选条件
sql99 的语法:
delete 表 1 的别名,表 2 的别名
from 表 1 别名
inner|left|right join 表 2 别名 on 连接条件
where 筛选条件
方式二:truncate
语法: truncate table 表名;
这个是清空
delete 与 truncate 的比较
1、delete 可以加 where 条件,truncate 不能加
2、truncate 删除,效率会高一些
3、假如要删除的表中有自增长列
用 delete 删除后,再插入数据,自增长列的值从断点开始
而用 truncate 删除后,再插入数据,自增长列的值从 1开始
4、truncate 删除没有返回值,delete 删除会后返回值
5、truncate 删除不能回滚,delete 删除可以回滚
DDL语言
数据定义语言
库和表的管理
内容速览:
一、库的管理
创建、修改、删除
二、表的管理
创建、修改、删除
创建:create
修改:alter
删除:drop
一、库的管理
1、库的创建
语法:
create database [if not exists] 库名;
-- 案例创建 Books 库
create database Books;
2、库的修改(已经弃用了)
alter database books CHARACTER set gbk;
3、库的删除
DROP DATABASE if exists books
二、表的管理
1、表的创建
create table 表名(
列名 列的类型【(长度)约束】,
列名 列的类型【(长度)约束】,
列名 列的类型【(长度)约束】,
列名 列的类型【(长度)约束】,
....
列名 列的类型【(长度)约束】
);
2、表的修改
/*
可以修改:列名、列的类型或约束;
添加新列
删除列
修改表名
*/
alter table book change column publishdate pubDate DATETIME;#修改列名
alter table book mo=ify column pubdate TIMESTAMP; #修改列的类型或约束
alter table author add column annual DOUBLE;#添加新列
alter table author drop column annual; #删除列
alter table author rename as book_author #修改表名
总结:格式
alter table 表明 add|drop|modify|change column 列名 [列类型 约束];
3、表的删除
DROP TABLE book_author;
show tables;#查看当前数据库的所有表
4、表的复制
#1、仅仅复制表的结构
CREATE TABLE copy like author;
#2、复制表的结构+数据
create table copy2
select * from author;
#3、只复制部分数据
create table copy3
select id, au_name
from author
where nation='中国';
#仅仅复制某些字段
CREATE TABLE copy4
SELECT id,au_name
from author
where 0;
常见约束
含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性
分类:
六大约束: NOT NULL:非空,用于保证该字段的值不能为空。比如姓名、学号等
DEFAULT:默认,用于保证该字段有默认值,比如性别
PRIMARY KEY: 主键,用于保证该字段的数据 具有唯一性,并且非空。比如:学号、员工编号
UNIQUE:唯一,用于保证该字段的道具有唯一性,可以为空
CHECK:检查约束【mysql中不支持】
FOREIGN KEY 键:用于限制两个表的关系,用于保证该字段的值必须来自主表的关联列的值
添加约束的时机:
1、创建表时
2、修改表时
约束的添加分类:
列级约束: 六大约束语法上都支持,但外键约束没有效果
表级约束:除了非空、默认,其他的都支持。 放在最后 用关键字 【constraint 约束名】 约束类型(字段名)
主键和UNION的对比
两者都可以保证唯一性。主键、union 都可以允许组合键 但是不推荐
主键部位空,唯一 可以为空(只允许一个 null);
一个表中至多一个主键,但可以有多个 union
外键::1、要求在从表设置外键关系
2、从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
3、主表的关联列必须是一个 key(一般是主键或者唯一)
4、插入数据时,先插入主表、再插入从表
删除数据时,先删除从表,再删除主表
标识列(又称为自增长列)
概念:可以不同手动的插入值,系统提供默认的序列值
在要添加的列后面加 auto_increment 即可
TCL (Transaction Control Language):事务控制语言
事务:一个或一组 sql 语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行,如果单元中某条 sql 语句一旦执行失败或产生错误,整个单元就会回滚
事务的 ACID 属性:1、原子性(Atomicity):一个事务不可再分割,要么都执行,要么都不执行
2、一致性(Consistency):一个事务执行会使数据从一个一致状态切换到另一个一致状态
3、隔离性(Isolation):一个事务的执行不收其他的事务影响
4、持久性:一个事务一旦提交,则会永久的改变数据库的数据
事务的创建
隐式事务:事务没有明显的开启或结束的标记。比如:insert\update\delete 语句
显式事务:事务具有明显的开启或结束的标记。前提必须先设置自动提交功能禁用
#步骤:1 开启事务
set autocommit =0;
start transaction; -- 可选
#步骤 2 编写事务中的 sql 语句(select insert update delete)
语句 1;
语句 2;
...
#步骤 3:结束事务;
commit;提交事务
rollback;回滚事务
事务的隔离级别:
脏读 | 不可重复性 | 幻读 | |
---|---|---|---|
read uncommitted | 会 | 会 | 会 |
read committed | No | yeah | Yeah |
repeatable read | no | no | yeah |
serializable | no | no | no |
MySQL默认是 repeatable read
ORACLE中 默认是 read commited
查看隔离级别: select @@tx_isolation;
设置隔离级别: set session |gloval transaction isolation level 隔离级别
视图
一、视图的概念与优势:多个场景用到了相同的语句,可以把它封装成视图,从而简化复杂的sql操作,不必知道查询的细节,同时保护了数据,提高了安全性
创建视图的语法
create view 视图名
as
查询语句;
二、视图的修改
视图的修改方式
create or replace view 视图名
方式二:
alter view 视图名
as
查询语句;
三、删除视图
语法
drop view 视图名,视图名,视图名....
四、查看视图
DESC 视图名;
或者
SHOW CREATE VIEW myv3;