MySQL 数据库

一、数据库的创建、查看、删除

MySQL的服务名是mysql80 

1、创建

#创建一个名称为db01的数据库。[图形化和指令演示]
#使用指令创建数据库
CREATE DATABASE db01;
#删除数据库指令
DROP DATABASE db01;
#创建一个使用utf8字符集的db02数据库
CREATE DATABASE db02 CHARACTER SET utf8;
#创建一个使用utf8字符集,并带校对规则的db03数据库
CREATE DATABASE db03 CHARACTER SET utf8 COLLATE utf8_bin;
#校对规则utf8 bin区分大小默认utf8_general_ci不区分天小写

2、查看、删除 

#查看当前数据库服务器中的所有数据库
SHOW DATABASES;
#查看前面创建的db01数据库的定义信息
SHOW CREATE DATABASE `db02`;
#在创建数据库,表的时候,为了规避关键字,可以使用反引号解决
#删除前面创建的db01数据库
DROP DATABASE db02;

二、数据库的备份和恢复

方法: 

#备份,要在Dos下执行mysqldump指令其实在mysql安装目录\bin
#这个备份的文件,就是对应的sq1语句
mysqldump -u root -p -B db02 db03 > d:\\bak.sql


#恢复数据库(注意:进入Mysql命令行再执行
source d:\\bak.sql
#第二个恢复方法,直接将bak.sq1的内容放到查询编辑器中,执行

1、数据库备份 

2、数据库恢复 

3、备份表

三、表

1、创建表

#指令创建表  user
#id            整形
#name          字符串
#password      字符串
#birthday       日期
CREATE TABLE `user`(
					id INT,
					`name` VARCHAR (255),
					`password` VARCHAR (255),
					`birthday` DATE)
					#下面不写默认与数据库相同
					CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB;

 2、数据类型

1、int

decimal[M,D]  M为长度,D为小数的位数。D写0时就是很多字节的整型

整数类型默认为有符号,设置为无符号的要加关键字unsigned

CREATE TABLE t(
	    `id` INT UNSIGNED);

2、bit 

#演示bit类型使用#说明
#1. bit(m)m在1-64
#2.添加数据范围按照你给的位数来确定,比如m = 8表示一个字节 0~255
#3.显示按照bit
#4.查询时,仍然可以按照数来查询
CREATE TABLE t05 (num BIT(8));
INSERT INTO t05 VALUES(255);
SELECT * FROM t05;
SELECT * FROM t05 WHERE num = 1;

3、小数 

CREATE TABLE t06 (
						num1 FLOAT,
						num2 DOUBLE,
						num3 DECIMAL(30,20));
#添加数据
INSERT INTO t06 VALUES(88.12345678912345,88.12345678912345,88.12345678912345);
SELECT *FROM t06;

 4、字符串

utf8编码3个字节表示一个字符,gbk编码2个字节表示一个字符,所以varchar(size)中所能填写的最大值不同

细节:

1.char()是定长的,比如用char(4)存储'aa' ,那么它占用的空间任然是4个字符,varchar()是变长的,比如用varchar(4)存储‘aa’,存储空间是:两个字符+(1~3)个字节(用于记录数据大小)。

2.如果确定某个数据的长度,就用char(),因为查询速度:char() > varchar()

3.mediumtext 和  longtext 也是变长的

5、日期类型 

#创建一张表,date , datetime , timestamp
CREATE TABLE t2 (
	birthday DATE,
	#生日
	job_time DATETIME,
	#记录年月日时分秒
	login_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP #登录时间,如果希望1ogin_time列自动更新,则设置语句
	#NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 
	#意思是:非空,创建时如果空则写入当前时间,更新时更新为当前时间
);

INSERT INTO t2 (birthday, job_time)
VALUES
	(
		'2022-11-11',
		'2022-11-11 10:10:10'
	);

SELECT
	*
FROM
	t2;

 3、修改表

#添加一个列
#不允许为空,默认为'',在`name`列的后面
ALTER TABLE `user` ADD `image` VARCHAR(32) NOT NULL DEFAULT '' AFTER `name`;
#修改password列,使其长度为60
ALTER TABLE `user` MODIFY `password` VARCHAR(60) NOT NULL DEFAULT '' ;
#删除birthday列
ALTER TABLE `user` DROP `birthday`;
#修改表名
RENAME TABLE `user` TO `user01`;
#修改表的字符集
ALTER TABLE `user01` CHARACTER SET utf8;
#列明name改为user_name
ALTER TABLE `user01` CHANGE `name` `user_name` VARCHAR(32) NOT NULL DEFAULT '';

四、数据的增删改查

1、添加数据(INSERT)

INSERT INTO `user01` (
	id,
	user_name,
	image,
	`password`
)
VALUES
	(1, 'jack', 'sss', '123'),
	(2, '张三', 'aaa', '456');

细节:

1、字符串和日期类型添加数据时要用 '' 括起来

2、如果该列使int型的,但是添加时使'30',可以添加成功,数据库底层会尝试把字符串转换成int型,但是写成'abc'就不行了。

2、修改数据(UPDATE)

-- 1.将所有员工薪水修改为5000元。[如果没有带where条件,会修改所有的记录,因此要小心]
UPDATE employee
SET salary = 5000;

-- 2.将姓名为小妖怪的员工薪水修改为3000元。
UPDATE employee
SET salary = 3000
WHERE
	user_name = '小妖怪';

-- 3.将老妖怪的薪水在原有基础上增加1000元
UPDATE employee
SET salary = salary + 1000 , job = '军师'
WHERE
	user_name = '老妖怪';

细节:如果没有带where条件,会修改所有的记录

3、删除数据(DELETE)

DELETE
FROM
	user01
WHERE
	user_name = 'jack';

细节:

 4、查询数据(SELECT)

1、单表

SELECT
	`name` AS '姓名',
	(chinese + math + english) AS '总分'
FROM
	student;

细节:

1、between是闭区间 

2、like   后  % 不固定大小,_固定大小

1、排序(order by)

SELECT
	`name` AS '姓名',
	(chinese + math + english) AS '总分'
FROM
	student
WHERE
	`name` LIKE '李%' 
ORDER BY
	'总分' DESC; #或者 (chinese + math + english) DESC;
2、统计函数 
1、count

SELECT
	COUNT(*)
FROM
	user01
WHERE
	`user_name` LIKE '张%';

注意:


2、sum 
3、avg 

 4、max/min
3、分组查询(group by)

#显示平均工资低于2000的部门号和它的平均工资
SELECT
	AVG(sal),
	deptno
FROM
	emp
GROUP BY
	deptno
HAVING
	AVG(sal) < 2000;
4、字符串相关

 5、数学相关函数

6、时间日期相关函数

 

7、加密和系统函数 
 8、流程控制函数

9、分页查询 

 2、多表

SELECT * FROM t1,t2;

返回t1,t2的笛卡尔集

自连接

嵌套查询

子查询临时表

all、any

多列子查询:

查询与ALLEN的部门和岗位完全相同的所有雇员(并且不含ALLEN本人)

#(字段1,字段2 ...) = (select 字段1,字段2 from . 。。。)
#分析:1.得到ALLEN的部门和岗位
SELECT
	deptno,
	job
FROM
	emp
WHERE
	ename = 'ALLEN';

#分析: 2把上面的查询当做子查询来使用,并且使用多列子查询的语法进行匹配
SELECT
	*
FROM
	emp
WHERE
	(deptno, job) = (
		SELECT
			deptno,
			job
		FROM
			emp
		WHERE
			ename = 'ALLEN'
	)
AND ename != 'ALLEN';

表的自我复制 
#表的自我复制
INSERT INTO user01 SELECT * FROM user01;
复制表 
#复制属性列
CREATE TABLE t1 LIKE t2;
#复制内容
INSERT INTO t1 SELECT	* FROM t2;
表元素去重 
#创建一个临时表结构与原表相同
CREATE TABLE user01_temp LIKE user01;
#向临时表中添加原表去重的数据
INSERT INTO user01_temp
SELECT DISTINCT * FROM user01;
#删除原表中的信息
DELETE FROM user01;
#把临时表中的信息添加到原表中
INSERT into user01
SELECT * FROM user01_temp;
#删除临时表
DROP TABLE user01_temp;
合并查询(union、union all) 

左外连接(LEFT JOIN)
SELECT `name`,stu.id,grade
FROM stu LEFT JOIN exam ON stu.id = exam.id;
右外连接(RIGHT JOIN)

五、表约束

1、主键(PRIMARY KEY)

CREATE TABLE t17 (
	id INT PRIMARY KEY,
	#表示id列是主键
	`name` VARCHAR (32),
	email VARCHAR (32)
);

CREATE TABLE t17 (
	id INT PRIMARY KEY,
	#表示id列是主键
	`name` VARCHAR (32),
	email VARCHAR (32),
	PRIMARY KEY(id,`name`)
);

 2、not null、unique

细节:

unique约束的列可以有多个NULL 

3、外键

#创建主表my_class
CREATE TABLE my_class (
	id INT PRIMARY KEY,
	`name` VARCHAR (32) NOT NULL DEFAULT ''
);

#创建从表my_stu
CREATE TABLE my_stu (
	id INT PRIMARY KEY,
	#学生编号
	`name` VARCHAR (32) NOT NULL DEFAULT '',
	class_id INT,
	#下面指定外键关系
	FOREIGN KEY (class_id) REFERENCES my_class (id)
);

细节:

4、check(mysql8.0之后支持)

CREATE TABLE t23 (
	id INT PRIMARY KEY,
	`name` VARCHAR (32),
	sex VARCHAR (6) CHECK (sex IN('man', 'woman')),
	sal DOUBLE CHECK (sal > 1000 AND sal < 2000)
);

 5、自增长

CREATE TABLE t25
(id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR (32) NOT NULL DEFAULT '',
`name` VARCHAR(32) NOT NULL DEFAULT '');

ALTER TABLE t25 AUTO_INCREMENT = 100;

细节:

1.一般来说自增长是和primary key配合使用的
2.自增长也可以单独使用[但是需要配合一个unique]
3.自增长修饰的字段为整数型的(虽然小数也可以但是非常非常少这样使用)
4.自增长默认从1开始,你也可以通过如下命令修改altertable表名auto_increment =新的开始值;
5.如果你添加数据时,给自增长字段(列)指定的有值,则以指定的值为准,下面再添加数据时从最大的值开始,如果指定了自增长,一般来说,就按照自增长的规则来添加数据

六、索引

1、创建索引 

注意:

当创建表时定义主键和unique时,MySQL会自动创建索引 

 2、删除索引

3、修改索引

先删除,在添加

4、查询索引

#1
SHOW INDEX FROM t5
#2
SHOW KEYS FROM t5
#3
SHOW indexes FROM t5

七、事务

1、开启事务

2、隔离级别

#查看当前会话隔离级别
SELECT @@transaction_isolation;
#查看系统当前隔离级别
SELECT @@global.transaction_isolation;
#设置当前会话隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
#设置系统当前隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL[你设置的级别]

八、存储引擎

九、视图

1、对视图的总结

1.视图是根据基表(可以是多个)来创建的视图是虚拟的表

2.视图也有列,数据来自基表

3.通过视图可以修改基表的数据

4.基表的改变,也会影响到视图的数据

5.视图可以再创建视图

2、视图的使用

十、MySQL管理 

1、用户管理

 2、权限管理

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值