三个语句:
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;