Mysql:DMLDDLTCL
Posted guanghen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql:DMLDDLTCL相关的知识,希望对你有一定的参考价值。
mysql
(二):DML、DDL、TCL
创建表:(create)
-
语法格式:create table 表名(
字段名1 数据类型1,
字段名2 数据类型2,
);
create table t_student( no bigint, name varchar(255), sex char(1), classno varchar(255), birth char(10) );
-
关于
MYSQL
字段中常用数据类型:
插入数据:(insert)
- 插入若干数据:insert into 表名(字段1,字段2...)value (值1,值2...),(),()......;
tips:字段1,2,...可以适时省略,但字段的数据类型不能填错。
-
将查询出来的表插入:insert into 表名 select语句;
表的复制:
- 语法格式:
create table 复制后表名 as select语句;
将查询结果当做表创建出来。
修改数据(update):
-
语法格式:
update 表名 set 字段名1 = 值1,字段名2 = 值2... where 条件;
-
修改表中所有记录:将where条件换为select * from 表名即可;
删除数据(delete):
-
语法格式:
delete from 表名 where 条件;
约束:(Constraint)
-
概念:保证表中数据合法性的限制条件,修饰的是字段。
-
常见约束:
-
非空约束(
not nul
l) :约束字段不能为null。 -
唯一约束(
unique
):约束字段不能重复。 在列后添加unique关键字,表示列级约束;
在创建表时,声明字段时添加unique关键字,表示表级约束;
工作中可以直接记表级约束;
-
主键约束(
primary key/PK
):约束的字段不能为null,也不能重复。 主键分类:
单一主键(常用,意思是用一个字段来作为主键字段)
复合主键(多个字段联合起来添加一个主键约束。用一张表的多个字段联合起来,这样的主键叫做复合主键)
自然主键:主键值和业务不挂钩(建议使用)
业务主键:主键值和系统的业务挂钩,例如:游戏名字,身份证的名 字等等,此类随着业务变更会随之改变,不建议使用。
主键自增:
auto_increment
,当在字段后添加primary key 和auto_increment自增关键字,系统会自动主键值++; -
外键约束(
foreign key/FK
): -
检查约束(
check
):Oracle
有,mysql
暂时不支持。
-
事务:
-
相关性:和事务相关的只有DML(insert delete update)语句;因为这三个语句都是和表中数据操作相关。
-
意义:事务的存在是为了保证数据的完整性,安全性。
-
案例:
转账:小王转账1000给小李,需要去银行。小王的余额-1000,小李的余额+1000;两个动作需要一起执行成功才算成功,这里需要用到事务操作。
原理:事务将操作执行成功后,记录在操作历史中,但不会修改硬盘数据而是缓存起来,当接下来若干个语句都执行成功之后,通过提交事务操作才会修改数据。
savepoint:保存点,类似于游戏的存档点,在rollback回滚时变得更简单。
-
事务四大疼特性:(ACID)
-
A 原子性:事务是最小的工作单元,不可再分
-
B 一致性:事务必须保证多条DML语句同时成功或者失败,
-
C 隔离性:事务A与事务B具有隔离性。
-
-
-
隔离级别:
-
Lev1:读未提交(read uncommitted):对方事务还没有提交,我们当前事务可以读取到对方未提交的数据;读 未提交存在脏读(Dirty Read)现象,表示读到了脏数据。
-
Lev2:读已提交(read committed):对方事务提交之后的数据我方可以读取到。问题是:不可重复读。
-
Lev3:可重复读(repeatale read):这种隔离级别可以重复读。(读取到的数据为备份数据,与修改后的数据完全无关)
-
Lev4:序列化读/串行化读。
需要排队。(类似于多线程中的锁机制)
-
-
-
-
D 持久性:最终数据必须持久化到硬盘文件中。
-
索引:
类似于目录。
-
什么时候添加索引?
- 数据量庞大;
- 字段很少的DML操作;(因为经常修改数据,索引会随之变换和维护,甚至降低效率)
- 字段经常出现在where子句中。(若常出现在where后,那经常会用到条件索引,加索引值更方便)
-
tips:主键和具有unique(唯一性约束)的字段自动添加索引。
-
expain +select 语句表示查看表的执行计划(?)
-
怎么给字段添加索引?
create index 索引名称 on 表名(字段名);
-
怎么删除索引?
drop index 索引名称 on 表名;
-
索引底层采用的数据结构?
B+Tree;
-
索引的实现原理?
底层索引进行了排序,分区,索引会携带数据的物理地址,获取到关联地址。效率及高。
-
索引的分类:
-
单一索引:给单个字段添加索引
-
复合索引:几个字段联合起来添加索引
-
主键索引:主键值自动添加索引
-
唯一索引:有唯一性约束的字段自动添加索引
......
-
-
索引什么时候失效?
模糊查询的时候,第一个通配符使用的是%,这时索引是失效的。
select ename from emp where like \'%A%\';
以上是关于Mysql:DMLDDLTCL的主要内容,如果未能解决你的问题,请参考以下文章
连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段
使用 json rereiver php mysql 在片段中填充列表视图
关于mysql驱动版本报错解决,Cause: com.mysql.jdbc.exceptions.jdbc4Unknown system variable ‘query_cache_size(代码片段