一、SQL语言
分4类:
DDL数据定义语言,不支持事务。使用truncate时,表不能与他表有关联
【create、alter、drop、truncate】
DML数据操纵语言,支持事务。
【insert、update、delete、select】
TCL事务控制语言
【commit、savepoint、rollback】
DCL数据控制语言
【grant、revoke】
二、事务
1、事务具有隔离性
如果在一个命令行窗口中添加一条数据,
不commit的话,重新打开一个命令行窗口将查询不到此条数据
2、事务的隔离策略
三、truncate比delete性能高
===修改数据===
select * from dept for update;
解锁
修改数据
选“对勾”
选齿轮右边的“提交”按钮:必须提交,否则在另一个窗口中将看不到数据。
四、sql的使用
1、between
between 值1 and 值2 :[值1,值2],即值1 ≤ 列 ≤值2
2、重命名表名
MySQL:alter table test rename as test1;
Oracle:alter table test rename to test1;
3、重命名字段
mysql:
alter table test change old_name new_name varchar(20);
oracle:
alter table test rename old_name to new_name;
4、当前时间
MySQL:now()
Oracle:sysdate
例如:
查询当前日期所在月的最后一天
select LAST_DAY(NOW()) from dual;
select LAST_DAY(SYSDATE) from dual;
5、纵表转横表
tip:将语文、数学、英语作为新的字段
sql语句如下:
select username,
sum(case Course when '语文' then Grade else 0 end) as 语文,
sum(case Course when '数学' then Grade else 0 end) as 数学,
sum(case Course when '英语' then Grade else 0 end) as 英语
from Table1 group by username
或者
select username,
max(case Course when '语文' then Grade else 0 end) as 语文,
max(case Course when '数学' then Grade else 0 end) as 数学,
max(case Course when '英语' then Grade else 0 end) as 英语
from Table1 group by username
6、横表转竖表
横表结构:heng_biao
ID 姓名 语文 数学 英语
1 张三 80 90 70
2 李四 90 85 95
转换后的纵表结构:
ID 姓名 科目 成绩
1 张三 语文 80
2 张三 数学 90
3 张三 英语 70
4 李四 语文 90
5 李四 数学 85
6 李四 英语 95
tip:将heng_biao的语文、数学、英语这3个字段名改为“成绩”,再增加“科目”这个字段,值分别为‘语文’、‘数学’、‘英语’。
sql语句如下:
SELECT 姓名,'语文' AS 科目,语文 AS 成绩 FROM TableA
UNION ALL
SELECT 姓名,'数学' AS 科目,数学 AS 成绩 FROM TableA
UNION ALL
SELECT 姓名,'英语' AS 科目,英语 AS 成绩 FROM TableA ORDER BY 姓名,科目 DESC;
7、批量修改指定字段的数据
update 表名 set 字段=replace(字段,’原内容’,’新内容’) where 条件
8、mysql 使用group_concat()把所有行的id用逗号拼接起来
(1)SELECT GROUP_CONCAT(cast(`id` as char(10)) SEPARATOR ',') from table_name;
(2)select id,group_concat(name separator ';') from aa group by id;
因为通常id是int类型,直接执行GROUP_CONCAT(id SEPARATOR ','),返回的将是BLOB类型,所以通过cast函数转换字符类型
这样的所有id用逗号串起来的整个字符串