mysql的总结

#数据库的创建时,指定字符集
create databases 数据库的名称 character set 字符集
create databases 数据库的名称 character set 字符集 collate 校对规则
#查看当前数据库的详细信息
show create database 数据库的名字
#修改数据库的字符集
alter database 数据库的名字 character set 字符集
#删除数据库
drop database 数据库的名称
#数据库的使用
use 数据库的名字
#表的创建
create table 表名(
字段1 字段类型(长度) 约束,

字段类型 boolean,char,varchar(长度可变),
int ,float,double,data,time,timedata
长度:字符的个数
约束:主键(primary key),唯一约束(unique),不为空(not null)
#去除重复
Select dicstinct 字段名 from 表名
#起别名 判断是否为null
–计算总分 如果有一门为null 不计算 起别名as
SELECT name,math,english,math+IFNULL(english,0) AS 总分 FROM student3
#模糊查询 like ,%代表所有字符,‘_’只占一位
SELECT * FROM 表名WHERE 字段民 LIKE ‘%马%’
#不等于 !=
为空(null):is null null(不能用= 连接)
不为空:is not null
Between A and B:再A和B之间的
in():表示一个
#排序
select * from 表名 order by 字段名 排序(des,asc)
#字段1相等时按照字段2进行排序
select * from 表名 order by 字段名1 排序(des,asc),字段名2 排序(des,asc)
#聚合函数:将某一列数据作为一个整体,进行纵向的计算
count,min,max,sum,avg()
聚合函数排除了字段为null的值
eg:如果english有一行为null ,那么count(english)的值,不会计算为null 的哪行的值
#解决方式:
1.选择不为null的列进行计算
2.IFNULL函数 SELECT count(IFNULL(english,0)) from student3;
#分组
语法:group by 分组字段;

2.注意:
	1.分组之后查询的字段:分组字段,聚合函数
	2.where 在分组之前限定,不满足则不参加分组,having 再分组之后限				定,不满足结果不会被查询出来。
	3.聚合函数的查询条件 用having

#分页
语法:limit 开始的索引,每页查询的条数
公式:开始的索引=(当前查询的页面数(第几页)-1)*每页查询的条数
–每页查询3条记录,从第三页开始查询
select * from student3 LIMIT 6,3;
#约束:可以使数据保证 准确性,完整性,有效性
约束分类:
主键约束:primary key
非空约束:not null
唯一约束:unique
外键约束:foreign key
.创建表时设置非空约束:
alter table 表名 modify 字段名(类型) not null;
ALTER TABLE stu modify name VARCHAR(20) NOT NULL;
.删除表的非空约束:
ALTER TABLE stu modify name VARCHAR(20);
.唯一约束:unique,值不能重复
1.创建表时,添加唯一约束
2.修改表时指定唯一约束
alter table 表名 modify 字段名(类型,大小) unique
alter table stu add phone_num varchar(32) UNIQUE;
3.修改表的唯一约束
alter table 表名 drop index 字段
–删除唯一约束
alter table stu DROP INDEX phone_num
注意:–当唯一约束 的值为null 时允许 有多个null ,null值代表不确定
insert into stu VALUES(2,‘Alice’,NULL)
insert into stu VALUES(3,‘Alice’,NULL)
.主键约束:唯一且不为空 primary key
1.创建表后添加主键
alter table 表名 modify 字段名(类型,长度) primary key;
alter table stu modify id int primary key;
2.删除表的主键约束(不用加字段名,因为主键只有一个)
alter table 表名 drop primary key
alter table stu drop primary key;
#主键的自动增长:字段的类型为数字类型
1.在建表时在字段后面加 auto_increment
2.修改表的字段 为自增
alter table 表名 modify 字段名(类型,长度) auto_increment;
alter table stu modify id int auto_increment;
3.删除表中的字段为自增
alter table 表名 modify 字段名(类型,长度);
alter table stu modify id INT;
#添加外键约束
1.在建表时创建 (外键的约束名称是为了 在修改时方便。外键字段名:对应表中的字段名. )
[CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主 键字段名)
2.修改
alter table 从表名 add [CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段 名) REFERENCES 主表名(主键字段名)
3.删除掉外键的约束
ALTER TABLE 从表 drop foreign key 外键约束名称;
4.级联删除,和更新(一起更新或删除)
语法:alter table 从表名 constraint 外键约束名称 foreign key(外键字段 名)reference 主表名(主键的字段名) on update cascade ON DELETE CASCADE
更新:on update cascade
删除:on delete cascade
#数据库的设计
关系:
.一对多(多对一)
eg:部门和员工(一个部门对应多个员工,一个员工对应一个部门)
.在多的一方(员工)建立外键,指向另一方的zhujian
.多对多:
* 如:学生和课程
* 实现方式:多对多关系实现需要借助第三张中间表。中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键

	.一对一:(学生和身份证信息)
			*在任意一方添加唯一外键(unique)对应于另一方的主键

#多表查询
#内连接
* 隐式内连接(看不见join关键字,使用where查询)

* select  
				e.id,e.gender,d.`name`
		  from 
				emp e,dept d
		  where
			 e.dept_id=d.id;
	
* 显示内连接(使用join)inner可以省略

	* 语法:select 字段民 from 表民 inner join表名 on 条件
	
		 *select 	
 				e.id,e.gender,d.`name`
			FROM 
				dept d
			INNER JOIN emp e
			ON
				e.dept_id=d.id;

#外连接
* 左外连接(查询的是左表(表1)的所有,表2的交集)
* select 字段民 from 表1 left join 表2 on 条件
* SELECT * from emp e left JOIN dept d on e.dept_id=d.id;

* 右外连接 
	 * select 字段民 from 表1 right join 表2 on 条件
	 
* 子查询
* 
* 多表的练习
	* -- 5.查询出部门编号、部门名称、部门位置、部门人数
	* (1)查询出部门人数
		* SELECT COUNT(id),dept_id
		  from emp
		  group BY emp.dept_id
	* 查询出部门编号、部门名称、部门位置、部门人数
	* SELECT dept.id,dept.dname,dept.loc, t.total
		FROM dept ,(SELECT COUNT(id) total ,dept_id from emp group BY emp.dept_id ) t
		WHERE dept.id=t.dept_id ;

	* -- 6.查询所有员工的姓名及其直接上级的姓名
		* 在同一个表中(可以给表取别名)
			* 查询所有员工的姓名及其直接上级的姓名
	
			* SELECT e2.ename, e2.id,e2.mgr ,e1.ename,e1.id
				from emp e1,emp e2
				WHERE e1.id=e2.mgr
		* -- 6.查询所有员工的姓名及其直接上级的姓名,没有领导的员工也需要查询
			* 没有领导的员工也需要查询(使用外连接)
				* SELECT e2.ename, e2.id,e2.mgr ,e1.ename,e1.id
					from emp e2 left JOIN  emp e1
					ON e1.id=e2.mgr

#事务什么是事务: 在实际的开发过程中,一个业务操作如:转账,往往是要多次访问数据库才能完成的。转
账是一个用户扣钱,另一个用户加钱。如果其中有一条 SQL 语句出现异常,这条 SQL 就可能执行失败。
*事务的几个操作
* 开启事务 (start transaction)
* 由异常发生 进行事务回滚(Rollback)
* 提交事务 (commit)
*事务的提交放式
* 查看事务的提交方式 select @@autocommit
* 默认自动提交 值 为1,手动提交值为 0
* 修改提交方式 set @@autocommit=0或者1
* 如果改为手动提交 每次开启事务,在提交
* 自动提交 每执行一次DML语句都会自动的提交

*  事务提交的两种方式:
			* 自动提交:
				* mysql就是自动提交的
				* 一条DML(增删改)语句会自动提交一次事务。
			* 手动提交:
				* Oracle 数据库默认是手动提交事务
				* 需要先开启事务,再提交
		* 修改事务的默认提交方式:
			* 查看事务的默认提交方式:SELECT @@autocommit; -- 1 代表自动提交  0 代表手动提交
			* 修改默认提交方式: set @@autocommit = 0;

#事务的特点(acid)
* 原子性:不可分割的最小操作单位,要么一起失败,要么一起成功
* 一致性:事务操作前后,数据总量保持不变(例如:转账和取账,钱的数目式保持不变的)
* 隔离性:多个事务之间,相互独立。
* 持久性:当事务提交或回滚后,数据库会持久化的保存数据。
#事务的隔离级别
* 存在的问题
* 脏读
* 一个事务读取到了另一个事务没有提交的数据
* 不可重复读(虚读)
* 在同一个事务中,两次读取的数据不一样。
* 幻读
* 一个事务操作(DML)数据库中的所有数据,另一个事务添加了一条数据,则前面的那个事务查询不到自己的修改

* 事务的隔离级别(隔离级别越高越安全,效率越低)
 * 读不提交(read uncommited)
	 * 产生的问题:脏读,不可重复读,幻读
 * 读并提交(read committed)(oracle默认)
	 *产生的问题:不可重复读,幻读
 * repeatable read:可重复读 (MySQL默认)
 	 *产生的问题:幻读

  * serializable:串行化
			* 可以解决所有的问题

DCL:

* SQL分类:
	1. DDL:操作数据库和表
	2. DML:增删改表中数据
	3. DQL:查询表中数据
	4. DCL:管理用户,授权

	* DBA:数据库管理员
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值