MySQL学习(上)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL学习(上)

一、MySQL安装和卸载

详细步骤请见博客资源中的详细步骤

详细安装教程

完全卸载教程


1.安装完毕之后:管理员模式下进入黑窗口启动mysql

2.用命令 mysql -u root -p 进入mysql管理界面

3.进入界面后更改root密码

update mysql.user set authentication_string=password(‘123456’) where user=‘root’ and Host = ‘localhost’;


4.刷新权限

flush privileges;


5.修改mysql安装目录下的my.ini文件删除最后一句skip-grant-tables

6.配置好环境之后,不需要进入mysql安装目录即可在任意地方启动

7.重新启动mysql即可正常使用

net start mysql // 启动

net stop mysql //结束


8.安装工具SQLyog

6c0bd266c92b4c3c8e2d77a999da3d76.png663e42999c8b4d4d961dae5cba12530d.png


二、MySQL语法

1.数据库操作

创建数据库 : create database [if not exists] 数据库名;

删除数据库 : drop database [if exists] 数据库名;

查看数据库 : show databases;

使用数据库 : use 数据库名;

f824e8fb4c08423c94eb42c253169a3b.png


创建数据表

语法:

create table [if not exists] `表名`(
  `字段名1` 列类型 [属性][索引][注释],
  `字段名2` 列类型 [属性][索引][注释],
  `字段名3` 列类型 [属性][索引][注释],
  #...
  `字段名n` 列类型 [属性][索引][注释],
)[表类型][表字符集][注释];


说明:反引号用于区别MySQL保留字与普通字符而引入的(键盘esc下面的键)


数据值和列类型

列类型:规定数据库中该列存放的数据类型

数值类型

tinyint: 非常小的数据 1字节

smallint : 较小的数据 2字节

mediumint:中等大小的数据 3字节

int: 标准整数 4字节


字符串类型

char[]: 固定长字符串,检索快但废空间 M字符

varchar[]: 可变字符串 变长度

tinytext: :微型文本串

text: 文本串


日期和时间型数据类型

DATE: YYYY-MM-DD,日期格式

TIME: Hh:mm:ss, 时代格式

DATETIME: YY-MM-DD hh:mm:ss

TIMESTAMP:YYYYMMDDhhmmss 格式表示的时间戳

YEAR: YYYY格式的年份值


Null值

未知值/没有值 不要用Null进行算术运算,结果仍未Null


数据字段属性:

Unsigned:无符号 声明该数据列不允许负数

ZEROFILL:0填充的 不足位数的用0来填充,如int(3),则为005

Auto_inCrement:

自动增长的,每添加一条数据,自动在上一个记录数上加1(默认)

通常用于设置主键,且为整数类型,可定义起始值和步长,当前表设置步长时,只影响当前表,set@@auto_increment_increment=5;影响所有使用自增的表(全局)

NULL和NOT NULL:默认为null,如果设置为not null,则该列必须有值

DEFAULT:默认的;用于设置默认值

例如:性别字段:默认‘男’,否则为‘女;若无指定该列的值,则默认值为‘’男’的值


例题:创建一个school数据库,创建学生表(列,字段) ,学号int 登录密码varchar(20) 姓名,性别varchar(2),出生日期(datatime),家庭住址,email 创建表之前 , 一定要先选择数据库

show create database wei //查看数据库的定义

show create table student // 查看数据表的定义

desc student //显示表的结构

4986770b90214236803f82e0df124276.png

USE wei
CREATE TABLE IF NOT EXISTS `student` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '生日',
`address` VARCHAR(100) DEFAULT NULL COMMENT '地址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
DESC student


数据表的类型

设置数据表的类型:

create table 表名(

省略一些代码 MySQL注释 #单行注释 /**/ 多行注释)engine = myisam(or innodb)

show engines #查看mysql所支持的引擎类型(表类型)

适用场合:

节约空间及相应速度–MyISAM

安全性,事务处理及多用户操作数据表=InnoDB


数据表的存储位置

MySQL数据表以文件方式存在磁盘中,包括表文件,数据文件,以及数据库中的选项文件

位置:Mysql安装目录\data\下存放数据表,目录名对应数据库名,该目录下文件名对应数据表

*.frm - 表结构定义文件

*.MYD - 数据文件(data)

*.MYI - 索引文件(index)


设置数据表字符集

我们可以为数据库,数据表,数据列设定不同的字符集,设定方法为:

创建时通过命令来设置,如果:create table 表名() charset = uft8

如无设定,根据MySQL数据库配置文件my.ini中的参数设定


2.修改数据库

修改表:alter table

修改表名:alter table 旧表名 rename as 新表名

添加字段:alter table 表名 add字段名 列属性[属性]

修改字符:alter table 表名 modify 字段名 列类型[属性] /alter table 表名 change 旧字段名 新字段名 列属性[属性]

删除字符:alter table 表名 drop 字段名

删除数据表

语法:drop table if exists 表


  • if exist 为可选,判断是否存在该数据表
  • 如删除不存在的数据表会抛出错误
    其他
    1.每个库目录存在一个保存当前数据库的选项文件dp.opt
    2.注释:#单行 /**/多行
    3.SQL对大小写不敏感
    4.清除已有语句:\c


外键:

将一个表的值放入第二个表来表示关联,所使用的值是第一个表的主键值,此时,第二个表中保存这些值的属性成为外键

作用:保持数据一致性,完整性,主要目的是控制存储在外键表中的数据约束,使两张表形成关联,外键只能引用外表中的列的值或适用空值

创建外键

建表时指定外键约束:

创建外键的方式一:创建子表同时创建外键
//年级表
CREATE TABLE `grade`(
`gradeid`INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级ID',
`gradename`VARCHAR(50) NOT NULL COMMENT '年级名称' ,
PRIMARY KEY(`gradeid`) 
)ENGINE= INNODB DEFAULT CHARSET=utf8
//学生信息表(学号,姓名,性别,年级,手机,地址,出生日期,邮箱,身份证号)
CREATE TABLE `student` (
`studentno` INT(4) NOT NULL COMMENT '学号',
`studentname` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`sex` TINYINT(1) DEFAULT '1' COMMENT '性别',
`gradeid` INT(10) DEFAULT NULL COMMENT '年级',
`phoneNum` VARCHAR(50) NOT NULL COMMENT '手机',
`address` VARCHAR(255) DEFAULT NULL COMMENT '地址',
`borndate` DATETIME DEFAULT NULL COMMENT '生日',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
`idCard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号',
PRIMARY KEY (`studentno`),
KEY `FK_gradeid` (`gradeid`),
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
创建外键方式二:创建子表完毕后,修改子表添加外键
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`);


删除外键

操作:删除grade表,删除具有主外键关系的表时,要先删子表,后删主表

删除外键:later table student drop foreign key FK_gradeid;
索引还在,所以要删除索引 : alter table student drop index FK_gardeid;


3.DML语言

数据库的意义:数据存储,数据管理

1.通过sqlyog等管理工具管理数据库数据 -

2.同通过DML语句管理数据库数据


DML:数据库操作语言 用于操作数据库对象中所包含的数据

包括:inset(添加数据语句) updata(更行数据语句) delete(删除数据语句)

添加数据

语法:insert into 表名[(字段1,字段2,字段3…)]VALUES(值1,值2…)

注意:可同时插入多条数据,values后用英文逗号隔开

USE wei
INSERT INTO grade(gradename) VALUES('大二');
//添加的值务必与表结构,数据列,顺序相对应,且数量一致
//一次插入多条数据
INSERT INTO grade(gradename) VALUES('大四'),('研究生');


修改数据

语法:update 表名 set column_name=value[,column_name2 = value2,…][where condition];

注意:column_name为要更改的数据列 condition为筛选条件,如不指定则修改该表的所有列数据

where条件子句

修改年级年级信息
UPDATE grade SET gradename = '高中' WHERE gradeid = 1;


删除数据

语法:delete from 表名[where condition];

注意:condition为筛选条件,如不指定则删除该表的所有列数据

删除最后一个数据
DELETE FROM grade WHERE gradeid = 5


TRUNCATE命令

作用:用于完全清空表数据,但表结构,索引,约束等不变

语法:TURNCATE [table] table_name;

清空年级表 
TRUNCATE grade


注意区别与delete命令:

相同:都能删除数据,不删除表结构,但truncate速度更快

不同:适用truncate table重新设置atuo_increment计时器,适用truncate table不会对事务有影响

测试:

//创建一个测试表
CREATE TABLE `test` (
`id` INT(4) NOT NULL AUTO_INCREMENT,
`coll` VARCHAR(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
//插入几个测试数据
INSERT INTO test(coll) VALUES('row1'),('row2'),('row3');
//删除表数据(不带WHERE条件的DELETE)
DELETE FROM test;
//结论:如不指定WHERE则删除该表的所有数据,自增当前值依然可以从原来基础上进行,会记录日志
//删除表数据(TRUNCATE)
TRUNCATE TABLE test;
DESC test
//结论:TRUNCATE删除数据,自增当前值会恢复到初始值重新开始,不会记录日志
//同样适用DELETE清空不同引擎的数据库数据


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
54 3
|
6月前
|
SQL 关系型数据库 MySQL
关于MySQL数据库的学习指南总结
【6月更文挑战第17天】MySQL是流行的关系型DBMS,适合各种应用。学习要点包括安装配置、数据类型、SQL(如SELECT、INSERT)、关系模型、表设计、SQL查询(如WHERE、ORDER BY)、事务处理、用户管理、性能优化和高级技术如存储过程、触发器。了解ACID特性,使用索引和内存优化提升性能,通过备份恢复确保数据安全。不断学习新技术以提升技能。
103 3
|
2月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
84 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
2月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
175 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
2月前
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
70 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
2月前
|
关系型数据库 MySQL 数据库
mysql关系型数据库的学习
mysql关系型数据库的学习
23 0
|
2月前
|
Kubernetes 关系型数据库 MySQL
k8s学习--利用helm部署应用mysql,加深helm的理解
k8s学习--利用helm部署应用mysql,加深helm的理解
265 0
|
3月前
|
SQL 关系型数据库 MySQL
学习MySQL操作的有效方法
学习MySQL操作的有效方法
50 3
|
3月前
|
SQL 关系型数据库 MySQL
如何学习 MySQL?
如何学习 MySQL?
40 3
|
4月前
|
SQL 关系型数据库 MySQL
学习mysql基础操作
【8月更文挑战第20天】学习mysql基础操作
41 1