您的位置:首页 > 数据库 > MySQL

2020-08-01Mysql数据库

2020-08-01 23:49 537 查看

DataBase
关系型数据库、非关系型数据库
关系型数据库sql:mysql、oracle、sql server等
非关系型数据库nosql(no only sql):redis等,对象存储,通过对象自身属性决定

mysql安装不用exe,用安装包安装

skip-grant-tables在my.ini中加上后,服务就会刚启动就停止??
因为在MYSQL8.0中取消了这个特性,先以管理员身份启动一个CMD窗口,cd /d切换到bin目录下,输入指令:
mysqld --console --skip-grant-tables --shared-memory
然后再开一个cmd窗口进行登录,就可以免密登录了

但凡更改authentication_string都是更改的密码加密关系,并不是直接修改密码的值

flush privileges;
SET PASSWORD FOR root@localhost = ‘123456’;

Navicat中各库作用:
在MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权 限等。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。
PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数。并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表。

建库基本格式:
字符集:UTF-8
数据库排序规则:UTF-8_genneral_ci

主键生成:
https://www.guidgenerator.com/online-guid-generator.aspx

不区分大小写
所有语句都要加分号! CRUD
DDL 定义
DML 操作
DQL 查询
DCL 控制

操作数据库:
CREATE DATABASE NAME
DROP DATABASE NAME
USE NAME
SHOW NAME

数据库的列类型
tinyint、smallint、mediumint、int、bigint、float、double、decimal

char、varchar、text

date YYYY-MM-DD、time HH–MM-SS
datetime
timestamp

null

字段属性
Unsigned:无符号整数,不能定义为负数
自增
非空
主键唯一
0填充

创建表:

CREATE TABLE IF NOT EXISTS `TableName`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
//AUTO_INCREMENT 是自增用的
`name` varchar(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`sex` varchar(2)
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT=UTF8

desc TableName -------显示表结构

INNODB--------数据库引擎,mysql默认使用
MYISAM--------之前使用
INNODB支持事务支持、外键约束,但是不支持全文检索,表空间大,安全性高

ALTER TABLE Teacher RENAME Teacher1:更改表名
ALTER TABLE Teacher ADD age INT(5):增加字段
ALTER TABLE Teacher MODIFY age VARCHAR(5):修改约束
ALTER TABLE Teacher CHANGE age age1 VARCHAR(10) 重命名
ALTER TABLE Teacher DROP age 删除表的字段

DROP TABLE IF EXISTS Teacher 删除整个表

增删表的操作最好加一个IF判断,避免报错

字段名用``来包裹,在table键上面

外键

DML

一条INSERT 语句插入多条值:

insert into people(`ID`,`Name`,`age`,`score`) values('2','li',16,'68'),('3','su',17,'68');

CURRENT_TIME :常量,当前时间

delete和truncate:
都是删数据,但是truncate不会影响事务,而且自增计数器归零

查询语言的学习:

create database if not exists `school`;
-- 创建一个school数据库
use `school`;-- 创建学生表
drop table if exists `student`;
create table `student`(
`studentno` int(4) not null comment '学号',
`loginpwd` varchar(20) default null,
`studentname` varchar(20) default null comment '学生姓名',
`sex` tinyint(1) default null comment '性别,0或1',
`gradeid` int(11) default null comment '年级编号',
`phone` varchar(50) not null comment '联系电话,允许为空',
`address` varchar(255) not null comment '地址,允许为空',
`borndate` datetime default null comment '出生时间',
`email` varchar (50) not null comment '邮箱账号允许为空',
`identitycard` varchar(18) default null comment '身份证号',
primary key (`studentno`),
unique key `identitycard`(`identitycard`),
key `email` (`email`)
)engine=myisam default charset=utf8;

-- 创建年级表
drop table if exists `grade`;
create table `grade`(
`gradeid` int(11) not null auto_increment comment '年级编号',
`gradename` varchar(50) not null comment '年级名称',
primary key (`gradeid`)
) engine=innodb auto_increment = 6 default charset = utf8;

-- 创建科目表
drop table if exists `subject`;
create table `subject`(
`subjectno`int(11) not null auto_increment comment '课程编号',
`subjectname` varchar(50) default null comment '课程名称',
`classhour` int(4) default null comment '学时',
`gradeid` int(4) default null comment '年级编号',
primary key (`subjectno`)
)engine = innodb auto_increment = 19 default charset = utf8;

-- 创建成绩表
drop table if exists `result`;
create table `result`(
`studentno` int(4) not null comment '学号',
`subjectno` int(4) not null comment '课程编号',
`examdate` datetime not null comment '考试日期',
`studentresult` int (4) not null comment '考试成绩',
key `subjectno` (`subjectno`)
)engine = innodb default charset = utf8;

-- 插入学生数据 其余自行添加 这里只添加了2行
insert into `student` (`studentno`,`loginpwd`,`studentname`,`sex`,`gradeid`,`phone`,`address`,`borndate`,`email`,`identitycard`)
values
(1000,'123456','张伟',0,2,'13800001234','北京朝阳','1980-1-1','text123@qq.com','123456198001011234'),
(1001,'123456','赵强',1,3,'13800002222','广东深圳','1990-1-1','text111@qq.com','123456199001011233');

-- 插入成绩数据  这里仅插入了一组,其余自行添加
insert into `result`(`studentno`,`subjectno`,`examdate`,`studentresult`)
values
(1000,1,'2013-11-11 16:00:00',85),
(1000,2,'2013-11-12 16:00:00',70),
(1000,3,'2013-11-11 09:00:00',68),
(1000,4,'2013-11-13 16:00:00',98),
(1000,5,'2013-11-14 16:00:00',58);

-- 插入年级数据
insert into `grade` (`gradeid`,`gradename`) values(1,'大一'),(2,'大二'),(3,'大三'),(4,'大四'),(5,'预科班');

insert into `subject`(`subjectno`,`subjectname`,`classhour`,`gradeid`)values
(1,'高等数学-1',110,1),
(2,'高等数学-2',110,2),
(3,'高等数学-3',100,3),
(4,'高等数学-4',130,4),
(5,'C语言-1',110,1),
(6,'C语言-2',110,2),
(7,'C语言-3',100,3),
(8,'C语言-4',130,4),
(9,'Java程序设计-1',110,1),
(10,'Java程序设计-2',110,2),
(11,'Java程序设计-3',100,3),
(12,'Java程序设计-4',130,4),
(13,'数据库结构-1',110,1),
(14,'数据库结构-2',110,2),
(15,'数据库结构-3',100,3),
(16,'数据库结构-4',130,4),
(17,'C#基础',130,1);

对结果进行字符串拼接:
select CONCAT(“学号:”,studentno,",姓名:",studentname) 综合 from student;

去重:
select DISTINCT studentno from result;

like代表模糊查询,代表一个字符
select * from student where name like "刘";
这样就能查到姓刘的,且名字两个字的人

select * from student where stuNo in (“1001”,“1002”,“1012”)

select b.studentno as '学号',b.studentname as '姓名',a.studentresult as '成绩',c.subjectname as '科目',
d.gradename as '年级' from result a
right join student b on a.studentno = b.studentno
left join `subject` c on a.subjectno = c.subjectno
left join grade d on b.gradeid = d.gradeid
//left和right的主要区别在于以谁为基准表,如果确定了这个核心基准表,那么能够符合连接条件的结果全部显示,如果基准表中有不符合
//连接条件的数据,也会显示,问题在于不符合连接条件的相应字段会显示为NULL

各种结果处理关键字使用顺序:
where
group by
having
order by 【desc降序 asc升序】
limit(0,5) ------------起始值,页面大小

-----------MYSQL函数-----------

常用函数
https://www.runoob.com/mysql/mysql-functions.html

聚合函数

select COUNT(studentname) from student
//计数

count(字段)---------------忽略null值
count(*)-----------------不会忽略null值
count(1)---------------不会忽略null值

select s.subjectno,s.subjectname,AVG(studentresult) as 平均分,MAX(studentresult) as 最高分,MIN(studentresult) as 最低分
from `result` r
inner join `subject` s on r.`subjectno`=s.`subjectno`
group by subjectno
HAVING 平均分>85

------------MYSQL事务----------

----------------------同时成功,同时失败

把一组SQL放到一个批次中执行,
ACID 原子性、一致性、隔离性、持久性
原子性:要么都成功,要么都失败
一致性:事务前后的数据完整性保持一致
隔离性:多个用户并发访问数据库,数据库为没一个用户开启的事务,不能被其他事务的操作数据干扰,互相隔离
持久性:事务一旦提交不可逆,被持久化到数据库中

脏读:一个事务读取了另外一个事务未提交的数据
不可重复读:同一个事务内一行数据,多次读取结果不通
虚度(幻读):一个事务内读取到别的事务插入数据,导致前后不一致

set autocommit = 0; 关闭事务自动提交
start transcation -------------标记事务开始

commit -----------------提交,持久化
ROLLBACK------------回滚:回到原来的样子
set autocommit = 1; 开启事务自动提交

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: