注:供个人学习回顾,参考意义并不大
【别人的笔记】
https://github.com/hjzCy/sql_node/blob/master/mysql/MySQL%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0.md
【插入数据】
insert into 表名 values (value1,value2,value3,value4);
【常用数据类型】
【联合主键】
create table user(
id int not null,//非空约束
varchar name,
varchar pwd,
age int default 10,//用户不填写年龄则年龄默认为10. //默认约束
primary key(id,name),
unique(id,name)
);
只要两者加起来不重复就可以
联合主键任何一个字段都不能为空
【自增约束】
和联合主键搭配在一起使用 ,primary key auto_increment
作用是自己添加一个编号
【唯一约束】
约束修饰字段的值不能重复
alter table 表名 add unique (字段名);
主键不可以为空但是唯一约束可以为空值:null
在创建表的时候添加同联合主键一样
【非空约束】
添加not null,相关的字段不能为空。
【默认约束】
【外键约束】
一个表的普通字段是另一个表的主键
主表里面没有的东西附表不能进行删除
create table class (
id int primary key,
pwd varchar(20)
);
create table student (
id int primary key,
phone varchar(11),
calss_id int,
foreign key (class_id) references class(id)
);
【tips】
服务器不支持图形化界面,所以需要学习命令行
【问题】
数据库迁移文件是什么?
忘记创建、删除、修改主键约束解决办法。
解:alter table 表名字 add primary key(主键名);
alter table 表名字 drop primary key(主键名);
alter table 表名字 modify 主键名 int primary key;
如何删除主键约束:
【数据库设计三范式】
1NF:数据库表中的所有字段都是原子结构,不能再继续拆分,范式以实际开发为主,不用强行满足某一范式。
2NF:满足1NF前提下,出主键外的所有列都必须完全依赖于主键,如果出现不完全依赖,只可能是因为联合主键。如果是部分依赖的话需要拆表
3NF:除了主键列的其它列,不能有传递依赖。譬如通过电话找到学生,再通过学生找到老师,这三者在同一张表里面就会出现冗余的现象。
【查询某一列中不重复的元素】
select distinct 列名 from 表名;
【查询一个区间】
select * from 表名 where 列名 between 最小
数字 and 最大数字
select * from 表名 where 列名>数字 and 列名<数字
【升序降序方式查询】
select * from 表名 order by 要排序的字段 asc/desc; //分别是升序和降序,默认升序
select * from 表名 order by 要排序的字段A asc, 要排序的字段B desc;
以A升序排列B降序排列查询。
【统计】
select count(*) from 表名 where 列名=“期望数值”;
【分组】
使用group by,用having进行选择
select xx from xxx group by xx having count(xx)>=2 and xx like ‘3%’;以3开头个数大于2的xx
【多表查询】
字段分布在不同的表的时候选择要查询的所有属性以及涉及到的所有表,用where限制相等的属性。
select A,B,C from C,D where C.A=D.A;
三表查询,需要有一个中间表,中间表包含两外两个的属性。
【模糊查询使用like】
【起别名】
select A from B.xxx as C;,把B中的xxx替换为C。
【查询结果】
可以用union将两个查询结果连接成一个表一起显示
【】
any,大于其中任意一个,至少。
all的用法
【模糊查询取反】
【获取当前时间、年分】
now(),year(列名)
【内连接、外连接(左连接、右连接)】
inner join 内连接:两个表里面有关系的字段查询出来:
左外联查询:有关系的字段显示出来,没有关系的右边就显示空:left join ... on ...
右外连接: 有关系的字段显示出来,没有关系的左边就显示空right join... on ...
全外连接:mysql不支持,相当于左、右外连接的和
好处:可以不用创建外键
【事务回滚和提交】
自动提交为false的时候输入rollback可以进行回滚,此时需要手动提交数据。commit; 提交了便不可以rollback了。给我们提供了一个撤回的机会;set autocommit=1/0,设置是否自动提交。
autocommit为1的时候,语句前面begin或者start transaction可以帮我们手动开启一个事务,此时使用rollback是有效的。一旦commit就不可以回滚了
【事务的四大特性ACID】
A:(原子性):事务是不可再分割的最小单位
C:(一致性):同一事务中的SQL语句必须同时成功或者同时失败
I:(隔离性):事务A和事务B之间是必须隔离的
D:(持久性):事务一旦结束便不可以rollback
【事务的隔离性】
1.read uncommited 读未提交 未提交的数据可以被读取到
2.read commited 读已经提交
3.repeatable read 可以反复读
4.serializable 串行化
【查看、修改数据库隔离级别】
查看:select @@global.transaction_isolation;
修改:set transaction isolation level read committed;
【脏读】
一个事务里面读取到了另一个事务没有提交的数据。