mysql数据库DML数据操作语言

DML 数据操作语言

语句和数据类型

三个语句:

1、INSERT 语句:功能,将数据插入到表中,结果,表中数据量增加了,以行为单位,行数     增加了

实际功能:注册,加入购物车,下订单,上车扫码...

2、UPDATE 语句:更新修改数据:功能,将表中的数据进行修改,结果:数据量不变,但 是内容发生了变化

实际功能:修改地址,修改密码

3、DELETE 语句:删除数据的语句,功能:将表中不需要的数据删除,数据量变少,以行为 单位

   实际功能:清空购物车

数据类型:

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

字符串类型:

  1. CHAR(n)  字符类型:固定长度的字符类型,列存储的字符串的长度是固定的,  如果长度不够,会自动补齐空格,最多可以存放 255个字符,优势:存储效率高

例如: CHAR(10)  -- 表示固定存储10个字符的字符串

        abcde -- > 存储的数据 abcde补足5个空格

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

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

       abcde -- 》abcde

       abcdefg -- > abcdefg

实际中:有一些固定长度的信息存储,建议使用 CHAR 类型,效率高,例如:身 份证号,手机号,性别

        那些不是固定长度的信息存储,建议使用 VARCHAR 类型:地址,姓名, 签名,留言等等

CHAR 类型的字符在检索的时候要比 VARCHAR 类型快很多

日期类型:

DATE: 日期 '2022-07-09'

    TIME: 时间 '10:00:00'

    DATETIME :日期时间 '2022-07-09 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));

  SELECT * FROM t112;

  INSERT INTO t112 VALUES(24524523452452,3453.2452345); -- bug   列的精度不够,存储的是错误的,应该报错,存储的是自认为范围内最大。

  int 类型超出范围,需要修改代码                                                          

INSERT INTO t112 VALUES(245,53.2452345)

-- float(5,3) # 单精度浮点型,总位数 5位,小数位 3位,整数位 5-3=2位

INSERT 插入语句

要点

1、往哪个表插入数据 :表名

2、往哪些列插入数据:列名

3、插入的数据是什么,具体的值:values

语法:

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

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

INSERT INTO 表名 VALUES(值1,值2,...) ; -- 值的数量和类型要和表中初始列的数量和类型一一对应

例如:

给用户信息表插入一个用户信息:用户编号 10089,用户名 sunsun,手机号 13876542345

INSERT INTO user_tab(user_id,phone,user_name) VALUES(10089,13876542345,'sunsun');

INSERT INTO user_tab VALUES(10092,'sunsun23',NULL,13876542345,'null','2022-07-19');

备注

1、插入的值的类型和列的类型要一致

2、插入的值的数量和列的数量要一样多

3、凡是含有特定含有的关键字信息:比如 列名, NULL 等等,不需要加引号,加了就变成了普通字符串,失去原有的含义,但是查询条件中搜索值,插入语句中 VALUES 值,凡是字符类型,都要加单引号。

DELETE 删除语句

要点

1、删除哪个表中的数据:表名

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

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

例如:

删除表 user_tab中user_name列里姓名中包含sun23的所有内容“删除行”

DELETE FROM user_tab WHERE user_name LIKE '%sun23%';

删除表t112的所有内容“删除所有行”

DELETE FROM t112;

备注:

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

UPDATE更新/修改语句

要点:

1、修改哪个表中的数据:表名

2、修改哪个列的数据,把数据改成什么:列名,新的值

3、修改哪些行:where 查询条件

语法:

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

例如:把用户表中sunsun相关的用户姓名改成 " 孙孙",手机号改为空值

SELECT * FROM user_tab WHERE user_name LIKE '%sun%';

UPDATE user_tab SET user_name='孙孙',phone=NULL WHERE user_name LIKE '%孙孙%';

备注:

= 的两种用法:

   1、在查询条件中, = 表示精确查询的运算符, = 不可以和 NULL 一起使用;

   2、在update 语句中, SET 之后, = 表示赋值,可以和 NULL 一起使用。

事务

概念:

一组数据操作构成事务,一旦开始执行一条DML 语句,就会自动开启事务,后面的数据操作都进入这个事务,

在Oracle 数据库中,事务不会自动结束,需要手动结束 COMMIT ; 在提交之前,操作可以回滚  ROLLBACK 。

但是mysql 中默认事务是自动提交的,并且mysql 中每一个数据操作语句都被当成独立的事务,即每次只需DML语句都会自动提交结束事务,没有回滚的可能。

查看mysql 中事务提交的方式(自动提交和手动提交):

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

set autocommit=0; 更改mysql中事务的提交方式,0是手动提交,需要手动输入运行commit, 1是自动提交。

例如:

往emp 表中插入2个员工信息,职工编号为4位 ,hiredate 使用函数或者确定的日期

INSERT INTO emp VALUES(1001,'HHH',NULL,NULL,NOW(),5000,NULL,20);

COMMIT;

回滚:

手动提交模式下,一个事务开启后,没有COMMIT 之前(提交之前),操作可以回滚,回退到事务开始之前  ROLLBACK 。

例如:

set autocommit=0

UPDATE emp SET ename='娃哈哈' WHERE empno=1001;

DELETE  FROM emp WHERE ename='scott';

ROLLBACK;   -- 全部回滚,回退到事务开始之前

保存点:

可以实现部分回滚,必须是在手动提交模式下进行。

例如:

1、查看表中数据

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

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

INSERT INTO user_tab VALUES(12345,'sunsun123',NULL,NULL,'123@126.com','2000-03-09');

3、定义保存点,名字 s1

SAVEPOINT s1;

4、再执行一条或者多条数据操作语句,这些操作数据也会进入到事务当中

INSERT INTO user_tab VALUES(12346,'sunsun234',NULL,NULL,'123@126.com','2000-03-09');

DELETE FROM user_tab WHERE user_id=10094;

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

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

ROLLBACK ; 直接回滚到事务开始之前。

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

COMMIT;

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值