数据库基础笔记

版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_44692896/article/details/102727261

数据库

创建数据库
格式:
* create database 数据库名;
* create database 数据库名 character set 字符集;	
查看数据库:
* show databases;
切换数据库:
* use 数据库名;
删除数据库:
* drop database 数据库名称;

创建表:
create table 表名(
	字段名 类型(长度) [约束],
	字段名 类型(长度) [约束],
  	 ...
);
类型:
	varchar(n)	字符串
	int			整形
	double		浮点
	date		时间
	timestamp	时间戳

查看数据库中的所有表:
	show tables;

查看表结构:
	格式:desc 表名;
	例如:desc sort;

修改表结构:
	alter table 表名 add 列名 类型(长度) [约束]; 
	作用:添加列. 
	
	alter table 表名 modify 列名 类型(长度) [约束]; 
	作用:修改表修改列的类型长度及约束.
	
	alter table 表名 change 旧列名 新列名 类型(长度) [约束]; 
	作用:修改列名.
	
	alter table 表名 drop 列名;	
	作用:删除列.
	
	alter table 表名 rename to 新表名;
	作用:修改表名
	
	alter table 表名 character set 字符集;
	作用:修改表的字符集
	
	删除表:
	格式:drop table 表名;
	
插入表记录:
	-- 向表中插入某些字段
	insert into 表 (字段1,字段2,字段3..) values  (值1,值2,值3..); 
	--向表中插入所有字段,字段的顺序为创建表时的顺序
	insert into 表 values (值1,值2,值3..);

更新表记录:
	--更新所有记录的指定字段
	update 表名 set 字段名=值,字段名=值,...;
	--更新符号条件记录的指定字段
	update 表名 set 字段名=值,字段名=值,... where 条件;

删除记录:
	delete from 表名 [where 条件];
	或者
	truncate table 表名;
	
	删除表中所有记录使用delete from 表名; 还是用truncate table 表名;
	删除方式:delete 一条一条删除,不清空auto_increment记录数。
	truncate 直接将表删除,重新建表,auto_increment将置为零,从新开始。
条件查询
比较运算符	
	>  <  <=   >=   =  <>   != 	大于、小于、大于(小于)等于、不等于
	BETWEEN  ...AND... 	显示在某一区间的值(含头含尾)
	IN(set) 			显示在in列表中的值,例:in(100,200)
	LIKE ‘张pattern’	模糊查询,Like语句中,%代表零个或多个任意字符,_代表一个字符,例如:first_name like ‘_a%’;
	IS NULL 			判断是否为空

逻辑运算符
	and	多个条件同时成立
	or	多个条件任一成立
	not	不成立,例:where not(salary>100);
	
去除重复关键字:distinct 
CASE WHEN
方式一:
	SELECT CASE WHEN result > 90 THEN 'A' 
		WHEN result > 80 THEN 'B' 
		WHEN result > 60 THEN 'C'
		WHEN result > 30 THEN 'D'
	 	ELSE 'E' END grade 
		FROM student WHERE id = #{id}
方式二:
	SELECT  SUM(population), CASE country 
	 	WHEN '中国' THEN '亚洲'  
	  	WHEN '加拿大'  THEN '北美洲' ' 
		ELSE '其他' END 
MYSQL数据类型

在这里插入图片描述

日期类型:

在这里插入图片描述

字符串二进制文本类型:

在这里插入图片描述

DOS操作数据乱码解决:
查看MySQL内部设置的编码
	show variables like 'character%'; 查看所有mysql的编码
	
修改client、connection、results的编码一致(GBK编码)
client connetion result 和客户端保持一致,都为GBK
将客户端编码修改为gbk.
	#方式1:单独设置
	set character_set_client=gbk; 
	set character_set_connection=gbk;
	set character_set_results=gbk;
	#方式2:快捷设置
	set names gbk;
添加主键约束
	方式一:创建表时,在字段描述处,声明指定字段为主键:
			CREATE TABLE Persons
			(
			Id_P int PRIMARY KEY,
			LastName varchar(255),
			FirstName varchar(255),
			Address varchar(255),
			City varchar(255)
			)
	方式二:创建表时,在constraint约束区域,声明指定字段为主键:
	格式:[constraint 名称] primary key (字段列表)
	关键字constraint可以省略,如果需要为主键命名,constraint不能省略,主键名称一般没用。
	字段列表需要使用小括号括住,如果有多字段需要使用逗号分隔。声明两个以上字段为主键,我们称为联合主键。
	CREATE TABLE Persons
	(
	FirstName varchar(255),
	LastName varchar(255),
	Address varchar(255),
	City varchar(255),
	CONSTRAINT pk_PersonID PRIMARY KEY (FirstName,LastName)
	或
	CREATE TABLE Persons
	(
	FirstName varchar(255),
	LastName varchar(255),
	Address varchar(255),
	City varchar(255),
	PRIMARY KEY (FirstName)
	)
	方式三:创建表之后,通过修改表结构,声明指定字段为主键:
	ALTER TABLE Persons ADD [CONSTRAINT 名称] PRIMARY KEY (字段列表)
	CREATE TABLE Persons
	(
	FirstName varchar(255),
	LastName varchar(255),
	Address varchar(255),
	City varchar(255)
	)
	ALTER TABLE Persons ADD PRIMARY KEY (FirstName)
删除主键约束
	ALTER TABLE Persons DROP PRIMARY KEY
自动增长列
	CREATE TABLE Persons
	(
	P_Id int PRIMARY KEY AUTO_INCREMENT,
	LastName varchar(255),
	FirstName varchar(255),
	Address varchar(255),
	City varchar(255)
	)

默认地,AUTO_INCREMENT 的开始值是 1,如果希望修改起始值,请使用下列 SQL 语法:
	ALTER TABLE Persons AUTO_INCREMENT=100

非空约束
	方式一:创建表,下面的 SQL 语句强制 "Id_P" 列和 "LastName" 列不接受 NULL 值:
		CREATE TABLE Persons
		(
		Id_P int NOT NULL,
		LastName varchar(255) NOT NULL,
		FirstName varchar(255),
		Address varchar(255),
		City varchar(255)
		)
	方式二:修改表结构
		添加非空约束 ALTER TABLE student MODIFY LastName varchar(255) NOT NULL
		删除非空约束 ALTER TABLE student MODIFY LastName varchar(255) 

唯一约束
	方式1:创建表时,在字段描述处,声明唯一:
	CREATE TABLE Persons
	(
	Id_P int UNIQUE,
	LastName varchar(255) NOT NULL,
	FirstName varchar(255),
	Address varchar(255),
	City varchar(255)
	)
	
	方式2:创建表时,在约束区域,声明唯一:
	CREATE TABLE Persons
	(
	Id_P int,
	LastName varchar(255) NOT NULL,
	FirstName varchar(255),
	Address varchar(255),
	City varchar(255),
	CONSTRAINT 名称UNIQUE (Id_P)
	)
	方式3:创建表后,修改表结构,声明字段唯一:
	ALTER TABLE Persons ADD [CONSTRAINT 名称] UNIQUE (Id_P)

删除唯一约束
	ALTER TABLE Persons DROP INDEX名称
	如果添加唯一约束时,没有设置约束名称,默认是当前字段的字段名。

默认约束
	方式一: 创建表,字段处声明
	CREATE TABLE Persons
	(
	Id_P int,
	LastName varchar(255) NOT NULL,
	FirstName varchar(255),
	Address varchar(255) DEFAULT '北京',
	City varchar(255)
	)
	方式二: 修改表结构
	ALTER TABLE Persons MODIFY Address VARCHAR(255) DEFAULT '北京'

	删除默认约束ALTER TABLE Persons MODIFY Address VARCHAR(255)

内连接查询:
	 隐式内连接:select * from A,B where 条件;
	 显示内连接:select * from A inner join B on 条件;
左外连接查询:
	 select * from A left outer join B on 条件;
右外连接查询:
	 select * from A right outer join B on 条件;

From 表名   把数据从硬盘加载到内存中形成一张伪表
On 条件     根据on条件对伪表及其他表进行扫描拼接,拼接成一张完整的新伪表

在这里插入图片描述
在这里插入图片描述

事务

在这里插入图片描述
我们来看看在不同的隔离级别下,事务A会有哪些不同的返回结果,也就是图里面V1、V2、V3的返回值分别是什么。
若隔离级别是“读未提交”, 则V1的值就是2。这时候事务B虽然还没有提交,但是结果已经被A看到了。因此,V2、V3也都是2。
若隔离级别是“读提交”,则V1是1,V2的值是2。事务B的更新在提交后才能被A看到。所以, V3的值也是2。
若隔离级别是“可重复读”,则V1、V2是1,V3是2。之所以V2还是1,遵循的就是这个要求:事务在执行期间看到的数据前后必须是一致的。
若隔离级别是“串行化”,则在事务B执行“将1改成2”的时候,会被锁住。直到事务A提交后,事务B才可以继续执行。所以从A的角度看, V1、V2值是1,V3的值是2。

猜你喜欢

转载自blog.csdn.net/qq_44692896/article/details/102727261