一、启动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、创建数据库
1create database DatabaseName; --create database 数据库名;
2、查看所有数据库
1show databases;
3、创建表
1
2
3
4
5
6
7
8use 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、查看当前数据库下的所有表
1show tables;
例如:
5、查看表的结构
1desc TableName; -- TableName 为你的表 的名称
例如:查看scores 表 的表结构
6、修改数据库表的名称
1alter table TableName rename to NewTableName; --TableName:旧表名称,NewTableName:新表名称
例如:将表名 班级表 修改为 Class;
7、修改表的字段(字段名称和类型)(change/modify)
change 可以更改“列名”和“列类型” (每次都要把新列名和旧列名写上, 即使两个列名没有更改,只是改了类型)
modify 只能更改列属性,只需要写一次列名, 比change 省事点
change:
1alter 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
1alter table building_manager add column instance_id varchar(255);
2、向building_manager 中添加字段 expire_time
1alter table building_manager add column expire_time datetime;
删除字段
1alter table `表名` DROP COLUMN 字段名;
1. 新增记录
1
2
3insert 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: 'xE5xBCxA0xE4xB8x89' for column 'name' at row 1
则修改中文列的编码格式如下:(若中文列有多列,可多次修改)
1alter 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. 修改记录
1update 表名 set 字段名=新字值 where 条件;
例如:
3. 删除一条记录
1delete from 表名 where 条件;
例如:
4. 查询记录
1
2select * from 表名; -- 查看整个表 select 字段1,字段2 from scores; -- 查看仅含字段1和字段2 的数据内容
例如:
添加 distinct 去重,例如:
-- 将英语分数加10 后显示出来,在查询结果上进行运算,不影响数据库里面的值
添加注释
1. 给表添加注释
1
2
3
4# 语法 ALTER TABLE 表名 COMMENT '注释'; # 示例 ALTER TABLE tb_user COMMENT '用户信息表2';
2. 给字段添加注释
修改字段备注,其实就是修改字段的定义
1ALTER TABLE tb_user MODIFY COLUMN name VARCHAR(30) NOT NULL COMMENT '姓名2';
约束
MySQL唯一约束(UNIQUE KEY)
非外键约束
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14-- 删除表 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) );
外键约束
1
2
3
4
5create table t_class( cno int(4) primary key auto_increment, cname varchar(10) not null, room char(4) );
1
2
3
4
5
6create 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'; 看下有没有设置时区
1show variables like'%time_zone';
结果如下:
如果你的system_time_zonetime_zone 的值也是SYSTEM那是还没有设置时区,
输入命令:set global time_zone = '+8:00';设置时区
1set global time_zone = '+8:00';
结果如下设置成功:
书写顺序
1
2
3
4
5
6
7select <要返回的列名> 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。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20SELECT * 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 语句会删除重复的数据。
1
2
3
4
5
6
7SELECT 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 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
1SELECT 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
'新密码'
;
然后下次登录就可以使用你的新密码登录啦,
一定要记好你的密码哈
最后
以上就是体贴寒风最近收集整理的关于数据库基础语法---MySQL8.0忘记密码怎么办?写在最后一、启动MySQL二、登陆MySQL三、SQL语法约束 MySQL设置时区 书写顺序扩展:数据库三大范式MySQL忘记密码系列:的全部内容,更多相关数据库基础语法---MySQL8内容请搜索靠谱客的其他文章。
发表评论 取消回复