数据库基础语法---MySQL8.0忘记密码怎么办?写在最后

一、启动MySQL

1、以管理员身份进入命令行

2、启动mysql 服务

net start mysql

3、停止mysql 服务

net stop mysql

二、登陆MySQL

1、命令行进入MySQL的安装路径的bin目录下,输入命令 mysql -u root -p 回车进入数据库

mysql -u root -p

连接认证语法:

mysql  -h  主机ip地址  -P  端口号  -u  用户名  -p密码

mysql  -h  localhost  -p  3306  -u  root  -ppassword

2、退出数据库,exit 或 quit 回车退出登陆


三、SQL语法

1、创建数据库

create database DatabaseName;    --create database 数据库名;

2、查看所有数据库

show databases; 

3、创建表

use DatabaseName;    -- DatabaseName 为你要操作的数据库
create table TableName(    --TableName 为表名
    id int primary key auto_increment,--主键约束:primary key,被主键修饰过的字段,唯一非空。一张表只能有一个主键,但是主键可以包含多个字段;auto_increment自增。
    name varchar(20),--数据类型varchar为可变长度的字符串。
    chinese double(5,2),--该参数长度为5,小数位占两个,最大值:999.99
    english double(5,2),
    math double(5,2)
);

例如:在数据库 liarning 中 创建一个 scores表

4、查看当前数据库下的所有表

show tables;

例如:

5、查看表的结构

desc TableName;    -- TableName 为你的表 的名称

例如:查看scores 表 的表结构

6、修改数据库表的名称

alter table TableName rename to NewTableName;  --TableName:旧表名称,NewTableName:新表名称

例如:将表名 班级表 修改为 Class;

7、修改表的字段(字段名称和类型)(change/modify)

change 可以更改“列名”和“列类型” (每次都要把新列名和旧列名写上, 即使两个列名没有更改,只是改了类型)

modify 只能更改列属性,只需要写一次列名, 比change 省事点

change

alter table TableName change FieldName NewFieldName;    --alter table 表名 change 字段名称 新的字段名称;

例如: id int(11)  修改为 ID varchar(50)

-- change 修改列名 和 类型(注:只修改类型时,列名要写两次)

modify:更改列属性

1、进入MySQL数据库
2、输入命令:alter table 表名 modify 字段名 字段类型;

 添加字段

1、 向building_manager中添加字段 instance_id

alter table building_manager add column instance_id varchar(255);

2、向building_manager 中添加字段 expire_time

alter table building_manager add column expire_time datetime;

删除字段 

alter table `表名` DROP COLUMN 字段名;


1. 新增记录

insert into TableName value(字段值1,字段值2,字段值3...);    -- TableName 为表名
或
replace into TableName value(字段值1,字段值2,字段值3...);    -- TableName 为表名

MySQL 提供了Ignore 用来避免数据的重复插入.

IGNORE :

若有导致unique key 冲突的记录,则该条记录不会被插入到数据库中.

用法:INSERT IGNORE INTO .....

replace into 跟 insert 功能类似

不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。

要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。

注:若添加中文报错,ERROR 1366 (HY000): Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1

则修改中文列的编码格式如下:(若中文列有多列,可多次修改)

alter table students change name name varchar(255) character set utf8;

例如:(注:若主键没有默认值,则必须指定值(自增时不用))

insert into scores value(1,'张三',98,99,100);

insert into scores(id,name,english,math) values(2,"李四",89,231);

insert into scores(id,chinese) value(3,100);

-- 自增时

insert into scores value(default, '张三', 98, 99, 100)

insert into scores value(null, '张三', 98, 99, 100)

结果如下:

2. 修改记录

update 表名 set 字段名=新字值 where 条件;

例如:

3. 删除一条记录

delete from 表名 where 条件; 

例如:

4. 查询记录

select * from 表名;    -- 查看整个表
select 字段1,字段2 from scores;    -- 查看仅含字段1和字段2 的数据内容

例如:

添加 distinct  去重,例如:

-- 将英语分数加10 后显示出来,在查询结果上进行运算,不影响数据库里面的值

 添加注释

 1. 给表添加注释

# 语法
ALTER TABLE 表名 COMMENT '注释';
# 示例
ALTER TABLE tb_user COMMENT '用户信息表2';

2. 给字段添加注释

 修改字段备注,其实就是修改字段的定义

ALTER TABLE tb_user MODIFY COLUMN name VARCHAR(30) NOT NULL COMMENT '姓名2';

 


约束 

MySQL唯一约束(UNIQUE KEY)

非外键约束

示例:

-- 删除表
drop table t_student;
-- 创建数据库表
creat table t_student(
    sno int(6) auto_increment,
    sname varchar(6) not null,    -- not null 列级约束
    sex char(1) default '男',
    age int(3),
    email varchar(15),
    constraint pk_stu primary key (sno),    -- 表级约束;pk_stu 主键约束的名字
    constraint ck_stu_sex check (sex = '男' || sex = '女'),    -- 表级约束
    constraint ck_stu_age check (age >= 18 and age <= 50),    -- 表级约束
    constraint uq_stu_email unique (email)
);

外键约束

create table t_class(
    cno int(4) primary key auto_increment,
    cname varchar(10) not null,
    room char(4)
);
create table t_student(
    sno int(6) primary key auto_increment,
    sname varchar(5) not null,
    classno int(4),
    constraint fk_stu_classno foreign key (classno) references t_class (cno)
);

 MySQL设置时区

进入MySQL数据库之后,输入命令show variables like'%time_zone'; 看下有没有设置时区

show variables like'%time_zone';

结果如下:

如果你的system_time_zonetime_zone 的值也是SYSTEM那是还没有设置时区,

输入命令:set global time_zone = '+8:00';设置时区

set global time_zone = '+8:00';

结果如下设置成功:


 书写顺序

select  <要返回的列名>
from  <表名>
join  <join表>  on  <join条件>
where  <where条件> like <%>
group by  <分组条件>  having  <分组后的筛选条件>
order by  <排序条件>
limit  <行数限制>

 操作两条属性用“ ”,and是出现在where后面 

升序:ASC     倒序:DESC

例如:select * from table_name where minor like '10%' order by minor DESC limit(20,30);


 MySQL 中的 IN 运算符用来判断表达式的值是否位于给出的列表中;如果是,返回值为 1,否则返回值为 0。
NOT IN 的作用和 IN 恰好相反,NOT IN 用来判断表达式的值是否不存在于给出的列表中;如果不是,返回值为 1,否则返回值为 0。

SELECT
	* 
FROM
	`gm_device_beacon` 
WHERE
	1 = 1 
	AND BUILD_ID = 123
	AND FLOOR_NO = '5' 
	AND ( id ) NOT IN (

	SELECT
		id 
	FROM
		`gm_device_beacon` 
	WHERE
		1 = 1 
		AND TIME IS NOT NULL 
		AND BUILD_ID = 123
	  AND FLOOR_NO = '5' 
	)

 结果 = sql.1 - sql.2

如:结果9条记录 = 第一个sql的44条记录 - 第二个sql的35条记录

MySQL UNION 操作符

  •  MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
  • DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。

  • ALL: 可选,返回所有结果集,包含重复数据。

GROUP BY 语句

  • GROUP BY 语句根据一个或多个列对结果集进行分组。

  • 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。

使用 MySQL 的 JOIN 在两个或多个表中查询数据。菜鸟教程JOIN...ON...

  • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
  • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
  • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
SELECT a.id, a.author, b.count FROM table1 a INNER JOIN table2 b ON a.author = b.author;

 

MySQL: left join 与 join 有所不同。 MySQL LEFT JOIN 会读取左边数据表的全部数据,即便右边表无对应数据。

MySQL: right join 会读取右边数据表的全部数据,即便左边边表无对应数据。

 MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作。

为了处理这种情况,MySQL提供了三大运算符:

  • IS NULL: 当列的值是 NULL,此运算符返回 true。
  • IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
  • <=>: 比较操作符(不同于 = 运算符),当比较的的两个值相等或者都为 NULL 时返回 true。

关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。

在 MySQL 中,NULL 值与任何其它值的比较(即使是 NULL)永远返回 NULL,即 NULL = NULL 返回 NULL 。

MYSQL 事务处理主要有两种方法:

1、用 BEGIN, ROLLBACK, COMMIT来实现

  • BEGIN 开始一个事务
  • ROLLBACK 事务回滚
  • COMMIT 事务确认

2、直接用 SET 来改变 MySQL 的自动提交模式:

  • SET AUTOCOMMIT=0 禁止自动提交
  • SET AUTOCOMMIT=1 开启自动提交

扩展:数据库三大范式

第一范式:每个列都不可再拆分

第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分

第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其它非主键



MySQL忘记密码系列:

让MySQL登录的时候跳过密码验证,百度都是让改my.ini配置文件,但是我这里改过配置文件之后MySQL的服务就会自动停止,而且不能再次打开。参考连接:MySQL8.0忘记密码后重置密码

用以下方法不用修改my.ini 文件 ,

以管理员身份打开cmd,

1、先关掉MySQL服务,

net stop mysql

2、输入以下命令:

mysqld --console --skip-grant-tables --shared-memory

3、再次启动MySQL服务

net start mysql

4、服务启动后可以无密码,直接回车进入MySQL

mysql.exe -u root

 5、然后执行sql命令将root用户密码设置为空

UPDATE mysql.user SET authentication_string='' WHERE user='root' and host='localhost'; 

 6、再次设置密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

 然后下次登录就可以使用你的新密码登录啦,

一定要记好你的密码哈

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值