全网最详细的MySQL笔记(二)
程序员文章站
2022-05-16 11:22:49
...
学习了上一节《Mysql笔记一》相信小伙伴们对mysql的一些基本概念,对数据库、表、数据的操作有了一定的了解。现在我们先回顾一下。
练习:
- 创建db2数据库
create database db2; - 在db2中创建员工表(emp) 字段:员工编号(empno),员工姓名(ename)
use db2;
create table emp(empno int, ename varchar(10)); - 修改表名为t_emp
rename table emp to t_emp; - 在表中添加工资字段(sal)
alter table t_emp add sal int; - 在员工姓名的前面添加年龄字段(age)
alter table t_emp add age int after empno; - 在员工姓名后面添加部门字段(dept varchar(10))
alter table t_emp add dept varchar(10) after ename; - 添加刘关张和取经的四个人 共7个人,年龄随意,工资5000以内随意,刘关张为三国部 取经师徒四个人为取经部
insert into t_emp values
(1,20,‘刘备’,‘三国部’,2000),
(2,21,‘关羽’,‘三国部’,3000),
(3,22,‘张飞’,‘三国部’,4000),
(4,23,‘唐僧’,‘取经部’,1000),
(5,24,‘悟空’,‘取经部’,2000),
(6,25,‘八戒’,‘取经部’,5000),
(7,26,‘沙僧’,‘取经部’,4000); - 把取经部的年龄改成统一的1000岁
update t_emp set age=1000 where dept=‘取经部’; - 删除工资低于2000的
delete from t_emp where sal<2000; - 查询三国部的所有人的名字
select ename from t_emp where dept=‘三国部’;
正式进入学习
1. 主键
- 什么是约束:就是创建表的时候给表字段添加的限制条件
- 主键约束的特点: 唯一并且非空,一个表中只有一个主键
- 如何使用:
create table t1(id int primary key,name varchar(10));- 以下两行会报错,因为id重复了
insert into t1 values(1,‘小明’);
insert into t1 values(1,‘小红’); - 以下会报错 因为主键不能为null
insert into t1 (name) values(‘小花’);
- 以下两行会报错,因为id重复了
- 主键+自增
primary key auto_increment- 如何使用:
create table t2(id int primary key auto_increment,age int);
- 当自增字段的值为null时会自动赋值并自增
- 以表中曾出现的最大值+1
- 删除数据自增数值不减
- delete删除所有数据 自增值在原来基础上继续+1
- 如何使用:
2. 注释 comment
- 在创建表的时候可以通过comment对字段进行描述
create table t3(id int primary key auto_increment comment ‘这是主键id’,comm int comment ‘这是奖金’); - 如何查看注释
show create table t3;
3. `和’的区别
-
是在创建表时 修饰表名和字段的名的 可以省略 create table
t4(id int,
age` int); - '是用来表示字符串的
4. 数据冗余
- 如果数据库设计不合理,保存大量数据后会出现大量的重复数据,这种现象称为数据的冗余 ,通过拆分表格的形式,把可能大量重复的数据,用单独一张表保存,在原表中只需要通过id建立关系即可。
5. 事务
-
事务是数据库中执行sql语句的最小工作单元,在同一个事务中的sql语句要么同时成功,要么同时失败.
例子:create table person(id int,name varchar(10),money int); insert into person values(1,'超人',500),(2,'钢铁侠',1000); -超人和钢铁侠借300块钱 1. 超人+300 update person set money=800 where id=1; 2. 钢铁侠-300 update person set money=700 where id=2;
-
mysql数据库默认sql语句是自动提交的
-
关闭数据库的自动提交
- 查看自动提交的状态:
show variables like ‘%autocommit%’; - 关闭自动提交 如果需要打开自动提交把0换成1
set autocommit=0; - 验证转账流程:
update person set money=800 where id=1; - 此时打开一个新的终端,在新终端中查看是否修改(没改)
- 回到原窗口执行下面sql commit之后再去新窗口验证(改了)
update person set money=700 where id=2;
commit; - 回滚 rollback
执行rollback会回滚到上次提交的点或者关闭自动提交时的点 - 保存回滚点 savepoint s1(标识);
update person set money=100 where id=1;
savepoint s1;
update person set money=200 where id=1;
rollback to s1;
- 查看自动提交的状态:
6. SQL 分类
- DDL(Data Definition Language) 数据定义语言: create drop alter truncate 不支持事务
- DML(Data Manipulation Language) 数据操作语言:insert update delete select 支持事务
- DQL(Data Query Language) 数据查询语言:Select
- TCL(Transaction Control Language) 事务控制语言: commit rollback savepoint等
- DCL(Data Control Language) 数据控制语言:分配用户权限
7. 数据库数据类型
7.1整型
- 常用:int(m) bigint(m) m代表显示长度,如果字段数值长度不到m时 会在数值的前面补零,但是一定要和 zerofill结合使用
例如: create table t_int(num int(10) zerofill);
insert into t_int values(15);
select * from t_int;
7.2浮点数
- 常用:double(m,d) m代表总长度,d代表小数长度 如:76.232 m=5 d=3;
- decimal(m,d) 超高精度小数,需要涉及高精度运算时使用decimal
7.3字符串
- char(m): 长度不可变 m=20 abc 20 执行效率高 最大值255
- varchar(m):长度可变 m=20 abc 3 节省资源 最大值:65535但是超过255建议使用text
- text: 可变长度,最大65535
7.4日期类型
- date: 只能保存年月日
- time: 只能保存时分秒
- datatime:年月日时分秒 9999-12-31 默认值为null
- timestamp:年月日时分秒 2038-01-19 默认值为当前时间
练习:创建时间的表
create table t_date(d1 date,d2 time,d3 datetime,d4 timestamp);
insert into t_date values(‘2018-03-22’,null,null,null);
insert into t_date values(‘2018-03-22’,‘12:22:38’,‘2008-08-08 18:08:18’,null);
补充
truncate
- 格式:truncate table 表名;
- 作用:删除表并创建一张空表,auto_increment数值清零
牛刀小试
- 创建商品表(item) 商品id 商品名称 商品价格 分类id 库存
create table item(id int primary key auto_increment,name varchar(10),price int,categoryid int,num int); - 创建分类表(category) 分类id 分类的名称 上级分类
create table category(id int primary key auto_increment,name varchar(10),parentid int); - 表中插入 电器分类下电视机分类下的康佳电视价格3580,库存25.
- 分类表插入以下数据
insert into category values(null,‘电器’,null);
insert into category values(null,‘电视机’,1); - 商品表插入以下数据
insert into item values(null,‘康佳电视’,3580,2,25);
- 分类表插入以下数据
总结
- 主键 自增
primary key auto_increment - 注释
comment - `和’
- 数据冗余
- 事务:执行sql语句的最小单元
show variables like ‘%autocommit%’;
set autocommit=0/1;
rollback
commit
savepoint s1;
rollback to s1; - 数据库sql分类
- DDL 数据定义语言 不支持事务 create drop alter truncate
- DML 数据操作语言 支持事务 insert update delete select
- DQL 数据查询语言 select
- TCL 事务控制语言
- DCL 数据控制语言 分配用户权限
- 数据类型
-整型 int bigint(m) zerofill
-浮点型 double(m,d) decimal(m,d)
-字符串 char(m)不可变 255 varchar可变 65535 text 可变 65535 longtext
-日期
date 年月日
time 时分秒
datetime null 9999-12-31
timestamp 当前值 2038-01-19
上一篇: js实现复制文本内容到剪切板
下一篇: js复制文本内容到剪切板
推荐阅读
-
Mybaits 源码解析 (九)----- 全网最详细,没有之一:一级缓存和二级缓存源码分析
-
Mybaits 源码解析 (六)----- 全网最详细:Select 语句的执行过程分析(上篇)(Mapper方法是如何调用到XML中的SQL的?)
-
全网最详细的Python学习笔记,值得收藏
-
全网最详细的vscode基础教程
-
可能是全网最详细的express--middleware
-
超详细的typeScript笔记(二)类的基本使用
-
全网最细最全OLAP之clickhouse笔记|clickhouse文档|clickhouse揭秘文档(五)--clickhouse的表引擎详解
-
《Mysql是怎样运行的》读书笔记二
-
全网最详细的PyCharm+Anaconda的安装过程图解
-
Mybaits 源码解析 (七)----- Select 语句的执行过程分析(下篇)全网最详细,没有之一