-- 创建数据库
create database name;-- 创建数据表
create table name(
id int not null primary key auto_increment,
name varchar(20));-- 查询所有
select *from tablename;-- 不重复查询某一列 distinct
select DISTINCT name from student;-- 插入用户
insert into student values(DEFAULT,'甄姬','女','1995-7-9');-- 查询范围最简单的
select `name`,`score`from course where score >4 and score <6;-- 查询范围用between ... and ...
select `name`,`score`from course where score between 4 and 6;-- 表示或者的关系 in
select *from course where score in(3,4);-- 表示或者的关系用or
select *from student where sex ='男' or name ='甄姬';-- 升序排列 asc(默认就是升序)
select *from course order by score asc;-- 降序排列 desc
select *from course order by score desc;-- 以某一个字段升序,某一个字段降序
select *from course order by score asc, degree desc;--查询某个列总人数count(字段)
select count(*)from student where sex ='女';--查询某个字段的最大的数字max(字段)
select *from course where score=(select max(score)from course);-- 查询某个字段最大数还可以先降序排列,然后limit 0,1 ,就把第一个值取出来了
-- limit 第一个数是起始位置,第二个数字是差几条,分页就是这样实现的
select *from course order by score desc limit 0,1;--计算平均成绩avg(字段)
select avg(score)from course ;-- 模糊匹配:x%,以x开头,%是通配符,匹配任意字符
-- 过滤分组后的数据having, 配合 group by使用
-- 例:查询score表中至少两名学生选修并且以3开头的课程
select cno,avg(degree),count(*)from score group by cno
having count(cno)>=2 and cno like '3%';-- 多表查询
select sname, cno, degree from student,score where student.sno = score.sno;-- 如果有date类型的字段,你想从1998-06-10中找到年份怎么办?year(date类型的字段)
select YEAR(born)from student where sex ='女';-- 联合查询 union
select *from teacher where depart ='计算机系'
union
select *from teacher where depart ='软件工程系';-- 任意一个 any
select *from course where score >any(select score from course2);-- 同上,所有是 all
select *from course where score >all(select score from course2);--as 取别名
select score as grade from course;-- not like 模糊查询取反
select *from course where name not like '英%';--求年龄使用now()算今年是几几年-year(字段)
select name,year(now())-year(born)as age from student;-- 内联查询,其实就是两张表的数据,通过某个字段相等,查出相关记录数据
select *from person inner join card on person.cardId = card.id;-- inner join = join
-- 左外连接会把左边表的所有数据取出来,如果右边的表中有相同数据则显示,没有则显示NULL
select *from person left join card on person.cardId = card.id;-- left join = left outer join
-- 右外连接跟左外连接相反
-- start transaction 或者 begin;开启事务
-- 事务四大特征:
--A:原子性 事务是最小单位,不可再分
--C:一致性 事务要求同一SQL语句要么同时成功要么同时失败
--I:隔离性 事务与事务之间是隔离的
--D:持久性 事务一旦(commit),则不可返回
-- 事务开启的三种方式:
--1、set autocommit =0(默认是1)--2、begin;--3、start transaction;-- 事务提交
--1、commit;-- 事务回滚
--1、rollback;-- 查询事务隔离级别 8.0以上
-- 系统级别
select @@global.transaction_isolation;-- 会话级别
select @@transaction_isolation;-- mysql 5.X
select @@global.tx_isolation;
select @@tx_isolation;-- 修改事务级别
set global transaction isolation level read uncommitted;-- 脏读
-- 如果一个事务没提交,但是被另一个事务读到了,就叫脏读,在实际开发中是不允许的
-- 不可重复读
-- 虽然读到了另一个事务提交的数据,但是读到同一个表的数据,发现前后不一致,就是不可重复读,read committed
-- 幻读
-- 事务a和事务b操作同一张表,事务a提交了但是
-- 事务b没更新,就可能出现幻读
-- 串行化
-- 当一个表被一个事务操作的时候,另外那个事务不可执行操作,这就叫串行化,除非前者提交了,后者才能执行操作,否则一直等待