mysql从入门到精通(2)-事务,数据库的数据类型

这篇博客详细介绍了MySQL数据库的操作,包括如何创建、查看和删除数据库与表,以及如何进行数据插入、查询、更新和删除。还涉及到事务的概念,如自动提交、提交、回滚和保存点,并解释了各种SQL语句的分类。此外,博主讲解了数据库的数据类型,如整数、浮点数和字符串等。
摘要由CSDN通过智能技术生成

###总结上次        
####数据库相关SQL
1. 查询所有数据库 show databases;
2. 创建数据库 create database db1 character set utf8/gbk;
3. 查看详情 show create database db1;
4. 删除数据库  drop database db1;
5. 使用数据库 use db1;
####表相关SQL
1. 查询所有表 show tables;
2. 创建表 create table t1(name varchar(10),age int) engine=innodb/myisam charset=utf8/gbk;
3. 查看详情 show create table t1;
4. 表字段  desc t1;
5. 删除表 drop table t1;
6. 改表名 rename table t1 to t2;
7. 改引擎字符集 alter table t1 engine=innodb/myisam charset=utf8/gbk;
8. 添加字段 alter table t1 add age int first/ after xxx;
9. 删除字段 alter table t1 drop age;
10. 修改字段名字和类型 alter table t1 change sal salary int;
11. 修改类型和位置 alter table t1 modify sal int first/after xxx;
####数据相关
1. 插入数据 insert into t1 (name,age) values(值1,值2),(值1,值2);
2. 查询数据 select age,name from t1 where id<10;
3. 修改数据 update t1 set age=18 where id=10;
4. 删除数据 delete from t1 where id=10;

###练习:
1. 创建数据库db2指定字符集为utf8 并使用,在数据库中,创建emp表里面有id,name,age,salary,部门名称(dept)
    create database db2 character set utf8;
    use db2;
    create table emp(id int,name varchar(10),age int,salary int,dept varchar(10));
2. 往上面表格中插入 刘关张三人 和 取经四人,工资在3000-8000随意设置,年龄随意,id为1-7,刘关张属于三国部,剩下4个人属于取经部
    insert into emp values(1,'刘备',25,4000,'三国部'),(2,'关羽',24,8000,'三国部'),(3,'张飞',22,3000,'三国部'),(4,'悟空',250,5000,'取经部'),(5,'八戒',350,6000,'取经部'),(6,'沙僧',450,7000,'取经部'),(7,'唐僧',50,8000,'取经部');
3. 给表格添加一个性别字段在年龄的后面
    alter table emp add gender varchar(5) after age;
4. 修改所有的性别字段值为男
    update emp set gender='男';
5. 添加一个貂蝉,性别女,年龄随意,工资7000,部门为三国部
    insert into emp values(8,'貂蝉',18,'女',7000,'三国部');
6. 修改年龄小于30岁的员工工资为200
    update emp set salary=200 where age<30;
7. 修改取经部的所有人性别为未知
    update emp set gender='未知' where dept='取经部';
8. 查询三国部的员工姓名和工资
    select name,salary from emp where dept='三国部'
9. 删除所有女员工 
    delete from emp where gender='女';
10. 删除部门中工资低于5000的员工
    delete from emp where salary<5000;

###主键约束 primary key
- 主键用于表示数据唯一性的字段称为主键
- 约束是给表字段添加的限制条件 
- 主键约束限制主键字段值不能重复并且非空 (唯一且非空)
    create table t1(id int primary key,name varchar(10));
    insert into t1 values(1,'Tom');
    insert into t1 values(1,'Jerry');//失败 重复
    insert into t1 values(null,'ABC');//失败 不能为null


- 自增: auto_increment
    create table t2(id int primary key auto_increment,name varchar(10));
    insert into t2 values(null,'AAA');
    insert into t2 values(2,'AAA');
    insert into t2 values(10,'mm');
    insert into t2 values(null,'AAA');
    1. 当字段值为null的时候值会自己增长
    2. 自增字段值也可以手动赋值
    3. 增长规则:从曾经出现的最大值基础上+1
    4. 自增数值只增不减 (delete清空表 自增数值并不清零)


###注释 comment
- 创建表声明字段的时候给字段添加的介绍
    create table t3(id int primary key auto_increment comment '这是一个主键',name varchar(10) comment '这是员工的姓名');
###`和'
- `:用于修饰表名和字段名 可以省略(键盘上ESC下面的那个键,不是单引号哦!)
    create table `t4`(`id` int,`name` varchar(10));
- ':用于修饰字符串
###数据冗余 
- 如果表设计不够合理,保存大量数据的同时可能随之会出现大量重复数据,这些重复数据的现象就称为数据冗余,通过拆分表的形式解决冗余问题


###练习:设计表保存以下数据:
1. 集团总部下面的市场部下的市场A部的员工刘备,工资8000,性别男,年龄25
2. 教学部下 Java教学部的员工苍老师,工资100000,性别男,年龄18
- 创建员工表
    create table emp(id int primary key auto_increment,name varchar(10),sal int,gender varchar(5),age int,deptid int);
- 创建部门表
    create table dept(id int primary key auto_increment,name varchar(10),parentid int);
- 插入数据:
    insert into dept values(null,'集团总部',null);
    insert into dept values(null,'市场部',1);
    insert into dept values(null,'市场部A',2);
    insert into emp values(null,'刘备',8000,'男',25,3);
    insert into dept values(null,'教学部',1);
    insert into dept values(null,'Java教学部',4);
    insert into emp values(null,'白老师',100000,'男',18,5);
-设计表保存以下数据:
1. 保存男装分类(category)下西服分类下的商品皮尔卡丹西服,价格9800,库存98件
2. 保存家用电器分类下,电视机分类下的小米电视,价格2500,库存108件
- 创建商品表
    create table item(id int primary key auto_increment, name varchar(10),price int,num int,categoryid int);
- 创建分类表
    create table category(id int primary key auto_increment,name varchar(10),parentid int);
- 插入数据
    insert into category values(null,'男装',null),(null,'西服',1),(null,'家电',null),(null,'电视机',3);
    insert into item values(null,'皮尔卡丹',9800,98,2),(null,'小米电视',2500,108,4);


###事务
- 什么是事务:事务是数据库中执行SQL语句的最小工作单元,可以保证事务内的多条SQL语句要么全部成功,要么全部失败。
- 查看数据库自动提交的状态
    show variables like '%autocommit%';
- 关掉自动提交 0关闭  1开启 (mysql 默认是自动提交的)
    set autocommit=0; (针对的是表中数据,不是数据库定义语言,比如多建表无作用)
- 下面我们来测试转账:  
    -关掉自动提交: set autocommit=0;
    create table person(id int, name varchar(10),money int);
    insert into person values(1,'超人',500),(2,'钢铁侠',10000);
    
    1. 先让超人+2000
        update person set money=2500 where id=1;
    2. 开启另一个终端 验证 此时数据库文件中的数据为空,更不要说被改掉了。
    3. 执行提交
        commit;
        此时数据有了,而且被更改了。
    4. 让钢铁侠-2000
        update person set money=8000 where id=2;
     . 执行提交
        commit;
- 回滚 rollback; (前提是没有提交,比如数据库默认是自动提交的,不可回滚,
                    或者你关闭了自动提交,但是执行完命令,你commit后,也不可回滚)
                    
- 将内存中的修改回滚到上次提交(commit)的点
    update person set money=100 where id=1;
    rollback;
- 保存回滚点 savepoint (以下说的都是未commit状态)
     
    update person set money=100 where id=1;
    savepoint s1;
    update person set money=200 where id=1;
    savepoint s2;
    rollback to s1;
    commit;
    注意:当你commit后,回滚点将失效;


回顾: 
- 查看自动提交状态: show variables like '%autocommit%';
- 修改自动提交状态: set autocommit=0/1;
- 提交: commit;
- 回滚: rollback;
- 保存回滚点: savepoint 标识;
- 回滚到某个点: rollback to 标识;

###SQL的分类
####DDL Data Definition Language
- 数据定义语言,包括 create,alter,drop,truncate ,不支持事务
####DML Data Manipulation Language
- 数据操作语言, 包括 insert,delete,update,select(DQL),支持事务
####DQL Data Query Language
- 数据查询语言,只包括select,和事务没有关系因为并没有修改数据
####TCL Transaction Control Language
- 事务控制语言,包括 commit,rollback, savepoint,rollback to
####DCL Data Control Language
- 数据控制语言,用于处理分配用户权限相关的操作

###truncate 
- truncate table 表名;
- 删除表并且创建一个新表
- truncate、drop和delete的区别:
- delete用于删除数据,使用delete清空表时自增数值不清零 执行效率最低
- drop 用于删除表 执行效率最高
- truncate 用于删除表并创建新的空表,执行效率比delete要高,而且自增数值会清零
            可以理解成将表中所有数据全部格式化,包括自增长的主键,回到最开始创建表的那个时候;


###数据库的数据类型
####整数
- 常用整数有 int(m)和bigint(m),m代表显示长度必须和zerofill结合使用
    create table t_int(num int(10) zerofill);
    insert into t_int values(123);
    select * from t_int;
####浮点数
- 常用浮点数double(m,d) m代表总长度 d代表小数长度   23.346 m=5 d=3 
- decimal超高精度浮点数,应用场景:涉及超高精度运算时使用

    create table t_double(num double(5,3));
    insert into t_double values(23.5678); 值为23.568
    insert into t_double values(23.5); 值为23.500
####字符串
- char(m): 固定长度  m=10 abc 占10,效率高,最大255
- varchar(m):可变长度 m=10 abc 占3,节省空间,最大65535,如果超过255建议使用text
- text(m):可变长度 最大65535
··注意:char 和varchar 都是字符串,这不是java哦,区别在一个是定长,一个是可变

####日期
- date:只能保存年月日
- time:只能保存时分秒
- datetime:保存年月日时分秒,默认值为null,最大值9999-12-31
- timestamp(时间戳距离19700101 08:00:00):保存年月日时分秒,默认值为当前系统时间,最大值2038-01-19 
    create table t_time(t1 date,t2 time,t3 datetime,t4 timestamp);
    insert into t_time values('2018-10-16',null,null,null);
    insert into t_time values
            (null,'20:06:32','2008-11-22 18:22:11',null);

配置URL:
jdbc:mysql://localhost:3306/db2?useUnicode=true&characterEncoding=UTF-8

三方SQL工具:sqlyog


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值