DML语言
- 数据操作语言:
- 插入:insert
- 修改:update
- 删除:delete
插入语句
方式一:经典插入语句
- 语法
insert into 表名(列名1, 列名2, ...) values (值1, 值2, ...);
- 注意事项:
- 插入的值的类型与列的类型一致或兼容
- 可以为NULL的列可以插入NULL值,不为NULL的列必须插入值
- 列的顺序可以调换,但是插入的值必须和列相匹配
- 列数和值得个数必须相一致
- 可以省略列名,默认所有列,而且列的顺序和表中的顺序一致
insert into beauty values(列1, 列2, ...); //省略列名,默认所有列
方式二:
- 语法:
insert into 表名 set 列名1=值1,列名2=值2,...
- 案例:
insert into beauty set id=19, name='章子怡',phone='110';
注意事项
- 方式一支持插入多行,方式二不行
- 方式一支持子查询,方式二不行
修改语句
修改单表的记录(*重点)
- 语法:
update 表名 set 列=新值,列=新值,... where 筛选条件;
- 案例:修改boys表中id号位2的名称为张飞,魅力值10
update boys set boyname='张飞', usercp=10 where id=2;
修改多表得记录(了解即可)
- 语法:
sql92语法: update 表1 别名, 表2 别名 set 列=值,... where 连接条件 and 筛选条件 sql99语法: update 表1 别名 inner 连接类型 join 表2 别名 on 链接条件 set 列=值,...
删除语句
- 方式一:delete
- 删除整行
- 单表的删除
语法: delete from 表名 where 筛选条件
- 案例:删除手机号以3结尾的女孩信息
delete from girls where phon like '%3';
- 方式二:truncate
语法:truncate table 表名
- 案例:将魅力值>100的男神信息删除
truncate table boys;
DDL语言
- DDL数据定义语言
- 表和库的管理
库的操作
- 库的创建
- 语法:
create database (if not exists)库名;
- 库的删除
- 语法:
drop database if exists 库名;
表的管理
- 表的创建
- 语法:
create table 表名( 列名 列的类型【(长度) (约束)】, //长度和约束可选 列名 列的类型【(长度) (约束)】, ...);
- 案例:创建表Book
creat table book( id int, #编号 bname varchar (20), #图书名 authorid int, #作者编号 publishdate datetime; #出版日期);
- 表的修改
- 语法:
alter table 表名 关键字 column 列名 列类型 约束
- 修改列名
//参考上个案例,创建表bookalter table book change aolumn publish pubdate datetime;
- 修改列的类型或约束
alter table book modify column pubtade timestamp;
- 添加新列
alter table author add column annual double;
- 删除列
alter table author drop column annual;
- 修改表名
alter table author rename to book_author;
- 表的删除
- 语法:
drop table if exists book_author;
- 通用的写法:
drop database if exists 旧库名;create database 新库名;drop table if exists 旧表名;create table 表名();
- 表的复制
- 复制表的结构
create table copy like author;
- 复制表的结构+数据
create table copy2select * from author;
- 只复制部分数据
create table copy3select id, au_namefrom autorwhere nation='中国';
- 复制部分结构
create table copy4select id, au_namefrom authorwhere 0;
常见的数据类型
数值型: 整型 小数: 定点型 浮点型字符型: 较短的文本:char、varchar 较长的文本:text,blob(较长的二进制数据)日期型
整型
- 分类:tinyint, smallint, mediumint, int\integer, bigint
- 特点:
- 如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,还需要添加unsigned关键字
- 如果插入的数值超出了整型的范围,则插入的值为整型类型的最大值
小数
- 分类:
- 浮点型: float(M, D) , double(M, D)
- 定点型:dec(M, D) , decimal(M, D)
- 特点:
- M:整数部位+加小数部位的总长度
- D:小数部位长度
- 如果超过范围,则插入临界值
- M,D可以省略,如果是decimal,则默认M是10,D是0, 若是float和double,则会根据插入数值的精度来决定
- 定点型精确度较高,如果要求插入数值的精确度较高如货币运算则考虑使用定点型
字符型
较短的文本:char、varchar
较长的文本:text,blob(较长的二进制数据)
- 特点:
写法 M的意思 特点 空间的耗费 效率 char char(M) 最大的字符数,可以省略,默认为1 固定长度字符 比较耗费 较高varchar varchar(M) 最大的字符数,不可以省略 可变长度字符 比较节省 较低
日期型
-
分类:date 只保存日期
time 只保存时间
year 只保存年
datetime 保存日期+时间
timestamp 保存日期+时间
-
特点:
字节 范围 时区等的影响datetime 8 1000-9999 不受timestamp 4 1970-2038 受
常见约束
-
含义:一种限制,用于限制表中的数据,为了保证表中数据的准确性和可靠性
-
分类:
1. not null: 非空用于保证该字段值不能为空2. default: 默认,用于赋予该字段默认值3. primary key: 主键,用于保证该字段的值具有唯一性,并且非空4. unique:用于保证该字段的值的唯一性5. check:检查约束【MySQL中不支持】 6. foreing key:外键约束,用于限制俩个表的关系,用于保证该字段的值必须来自于主表的关联列的值,在从表添加外键约束,用于引用主表中某列的值
- 添加约束的时机:
1. 创建表时2. 修改表时
- 约束的添加分类:
1. 列级约束: 直接在字段名和类型后面追加约束类型即可 六大约束语法上都支持,但外键约束没有效果2. 表级约束: 在所有字段的最下面:constraint 约束名 约束类型(字段名) 除了非空、默认约束,其他都支持
- 主键与唯一:
保证唯一性 是否允许为空 一个表中可以有多少个 是否允许组合主键 Y N 一个 允许,不推荐唯一 Y Y 多个 允许,不推荐
- 外键约束
1. 要求在从表中设置外键关系2. 从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求3. 主表的关联列必须是一个key(一般是主键或唯一)4. 插入数据时,先插入主表,再插入从表,删除时相反# 添加外键约束:alter table stuinfo add constraint 表名字 foreing key(majorid) references major(id);
- 修改表时添加约束:
1. 添加列级约束:alter table 表名 modify column 字段名 字段类型 新约束2. 添加表级约束:alter table 表名 add [constraint 约束名] 约束类型(字段名) 【外键的引用】
- 修改表时删除约束:
标识列
- 又称为自增长列,可以不用手动的插入值,系统提供默认的序列值
- 特点:
1. 标识列不一定要和主键搭配,但必须要和一个key搭配2. 一个表至多只有一个标识列3. 标识列的类型只能是数值型4.标识列可以通过 set auto_increment_incremennt= ;设置步长 可以通过手动插入值,设置起始值
- 修改表时设置标识列
alter table 表名 modify column 字段值 类型 key名 auto_incerment;
- 修改表时删除标识列
alter table 表名 modify column 字段值 类型;
TCL语言
-
事务控制语言,一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行,比如转账的过程
-
事务的特性
- 事务的创建
- 实例
- 事务隔离级别
- MySQL中默认隔离级别 repeatable read
- oracle中默认级别 read committed
- 查看隔离级别 :select @@tx_isolation;
- 设置隔离级别 :
set session 或 global transaction isolation level 隔离级别;
- savepoint 节点名,设置保存点
# 演示savepoint的使用set autocommit = 0;start transaction;delete from account where id=25;savepoint a; #设置保存点delete from account where id=28;rollback to a; #回滚到保存点select * from account;结果:id=28还在,id=25没有