MySQL数据库DML 数据操作语言

三个语句:

     INSERT 语句:功能,将数据插入到表中,结果,表中数据量增加了,以行为单位,行数增加了
            实际功能中: 注册,加入购物车,下订单,上车扫码...
            
     UPDATE 语句:更新修改数据: 功能,将表中数据进行修改,结果,数据量不变,但是内容发生了变化
            实际功能中:修改密码
            
     DELETE 语句:删除数据语句: 功能,将表中不要的数据删除,结果,数据量变少了,以行为单位
            实际功能:清空购物车

--------数据类型:每个列下面的数据是什么样子,都是有类型限制的(常见的数据类型:字符串、日期类型、数值类型)

一、字符类型

CHAR(n) 字符类型,固定长度的字符类型,列存储的字符串的长度是固定的,如果长度不够,
        会自动在后面补足空格,最多存放 255 个字符,优势:存储效率高
        
 例如: CHAR(10)  -- 表示固定存储10个字符长度的字符串
 
        abcde  -- > 存储数据 abcde补足5个空格

VARCHAR(n) 字符类型,可变长度的字符类型,最多可以存放 65535 个字符,优势:节省空间

例如: VARCHAR(10) -- 最多可以存放10个字符长度的字符串

      abcde -- 》abcde
      abcdefg -- > abcdefg      
        
实际中:有一些固定长度的信息存储,建议使用 CHAR 类型,效率高,例如:身份证号,手机号,性别
        那些不固定长度的信息存储,建议使用 VARCHAR 类型: 地址,姓名,签名,留言等等
        
CHAR 类型的字符在检索的的时候要比 VARCHAR 快很多。

二、日期类型:

    DATE:日期 '2022-03-25'
    TIME :时间 '10:00:00'
    DATETIME : 日期时间 '2022-03-25 10:00:00'

时间函数: NOW()  -- 获取现在的时间
           SYSDATE() -- 取系统当前的时间
           
区别: NOW() 在执行的时候获取的是执行开始时取的时间, SYSDATE()在函数执行的时候获取的动态时间值

SELECT NOW(),SYSDATE() FROM DUAL;  -- 执行过快,看不出区别,让语句执行若干秒,延迟取时间  sleep(n);

  SELECT NOW(),SLEEP(3),NOW() FROM DUAL;

  SELECT SYSDATE(),SLEEP(3),SYSDATE() FROM DUAL;

三、数值类型:整型和小数

整型: INT() : 指定的是显示宽度,不是表示存储的大小,默认就是 10

小数:浮点型  FLOAT/DOUBLE  (单精度/双精度,精确的程度不一样)

例如:

CREATE  TABLE t112(
   id1 INT(5),
   id2 FLOAT(5,3));  -- FLOAT(5,3)# 单精度浮点型,总位数 5位,小数位3位,整数位 5-3 =2 位

------------------------------ INSERT 语句 ----------

想清楚:
1、往哪个表中插入数据: -- 》 表名
2、往哪些列插入数据: -- 》 列名
3、插入的数据的具体值是什么? -- 》 插入的具体的信息  值  values

==>语法

INSERT INTO 表名(列名,列名2,...) VALUES(值1,值2,值3,...); -- 值和前面列的数量一样多,列和对应的值的类型要一致

-- 如果往表中所有的列都插入数据,可以简写

INSERT INTO 表名 VALUES(值1,值2,值3,...);  -- 值保证和表中列的数量一样多,并且值的类型要和列的类型匹配

注意:
1、插入的值的类型和列的类型要一致
2、插入的值的数量和列的数据量要一样多
3、凡是含有特殊含有的关键字信息:比如列名,比如 NULL 等等,不要加单引号,加了就变成普通的字符串,失去原含有
   但是如果是查询条件中的搜索值,插入语句中的 VALUES 值,凡是字符串,必须加单引号。

---------------------- DELETE 语句

想清楚:1、删除哪个表的数据 ? -- 表名

        2、删除哪些行的数据? -- 查询条件

==>语法

DELETE FROM 表名 [WHERE 查询条件];

例如:DELETE FROM user_tab WHERE user_name LIKE  '孙孙12%';

      DELETE FROM user_tab;

备注:如果不加查询条件,删除的就是整个表中的数据,工作中,先查询,后删除,并且删除之前要备份。

-------- update 更新修改数据 --------------------------------
想清楚:

1、修改哪个表中的数据? -- 》表名
2、修改哪个列的数据?把数据改为什么? -- 》列名,新的值
3、修改哪些行?-- 》where 查询条件

-- 》 语法

UPDATE  表名 SET 列名1=新的值,列名2=新的值,... WHERE 查询条件;

例如:把周瑜的手机号改为空值

UPDATE user_tab SET phone=NULL WHERE user_name='周瑜';

= 的两种用法:1、在查询条件当中, = 精确查询的运算符 ,= 不可以和 NULL 一起使用;
              2、在 UPDATE 语句中, SET 之后, = 表示赋值,可以和 NULL 一起使用。

------------------------- 事务 -----------------------------------

事务:一组数据操作语句构成事务,一旦开始执行 DML 语句,事务就会自动打开,后面的数据操作语句都进入这个事务,
在Oracle数据库里,事务是不会自动结束,需要手动结束, COMMIT ; 在提交之前,操作可以回滚。

但是 mysql 中默认事务是自动提交,并且mysql 里面中一个操作数据的语句就构成一个独立的事务,不需要手动结束,
即默认是不可能实现回滚,但是可以进行设置。

事务的四大特点:原子性,一个事务中所有操作语句要么都成功,要么都失败,特别是针对事务执行过程中出现异常,已
执行部分就会回滚到事务开始的状态。回滚 ROLLBACK, 必须是在事务结束之前,即提交 COMMIT 之前操作才有效果。

    一致性:同一个事务状态一致,要么都成功,要么都失败
    隔离性:Mysql 每个数据操作语句都当成独立的事务
    持久性:事务结束提交以后,对数据的修改是永久的
    
事务主要是影响 DML 语句的执行

/*查看mysql 数据库事务提交方式:

show variables like 'autocommit' ;   -- on 表示自动提交已打开,值1,off 表示自动提交关闭,值 0

set autocommit=0;
*/

SELECT * FROM user_tab;

SELECT * FROM user_tab WHERE user_name LIKE  '孙孙12%';

INSERT INTO user_tab VALUES(12347,'孙孙1212',NULL,13891765423,NULL,'2022-03-25');

ROLLBACK; (在没有提交之前,可以回滚)

COMMIT; (手动提交)

-- 保存点,可以实现部分回滚,必须手动提交模式下进行;
保存点:   SAVEPOINT   名字

例如:
-- 1、查看表中数据

SELECT * FROM user_tab;  -- 不打开事务,非 DML 语句

-- 2、执行 DML 语句,自动打开一个事务,后面的DML 语句都进入该事务


INSERT INTO user_tab VALUES(12347,'孙孙1212',NULL,13891765423,NULL,'2022-03-25');

-- 3、定义保存点,名字 S1

SAVEPOINT s1;

-- 4、在执行一次数据操作语句,这两个数据也进入到前面的事务
INSERT INTO user_tab VALUES(12348,'孙孙12121314',NULL,13891765423,NULL,'2022-03-25');
DELETE FROM user_tab WHERE user_name='司马懿';

SELECT * FROM user_tab;

-- 5、回滚数据(可以直接回滚到事务开始之前,也可以回滚到保存点)

ROLLBACK TO SAVEPOINT s1;  -- 回滚到了保存点之前

ROLLBACK ;

-- 6、最终,一定要进行事务提交,
COMMIT;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值