Mysql
1. 什么是mysql
MySQL是一个**关系型数据库管理系统****,MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
2.安装mysql
2.1.下载地址
MySQL-5.7 64下载
https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-winx64.zip
2.2.安装步骤
-
解压zip包,并记住路径
-
添加环境变量(与jdk环境变量类似)
-
在mysql的安装文件下新建my.ini文件
-
编辑my.ini文件,注意路径
[mysqld] basedir=E:\mysql\mysql-5.7.19\ datadir=E:\mysql\mysql-5.7.19\data\ port=3306 skip-grant-tables
-
启动管理员模式下的CMD,并将路径切换至mysql下的bin目录,然后输入mysql -install
-
在输入 mysql -initialize-insecure --user=mysql
-
然后再次启动mysql然后用命令 mysql -u root -p进入mysql管理界面(密码可为空)
-
进入界面后更改root密码
update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';
(最后输入 flush privileges;刷新权限)
-
修改 my.ini文件删除最后一句 skip-grant-tables
-
重启mysql即可正常使用
net stop mysql net start mysql
2.3出现的问题
-
在mysql的bin目录下面执行: mysqld --install
报错:
信息如下:
Install/Remove of the Service Denied
解决办法:
打开cmd.exe程序的时候选择“用管理员身份打开”。
-
安装MySql是出现: The service already exists! The current server installed;
【解决方法】
-
管理员运行CMD
-
执行sc query mysql
-
执行sc delete mysql
-
-
安装MySQL时出现mysqld: Can’t create directory ‘E:\mysql\mysql-5.7\data’ (Error)
原因:my.ini文件中的basedir(设置mysql的安装目录)、datadir(设置mysql数据库的数据的存放目录)与MySQL解压后的路径不一致
解决办法:
将basedir=E:\Software\mysql-5.7.24-winx64 改为 basedir=D:\Software\mysql-5.7.24-winx64 (改为MySQL解压后的路径)
将datadir=E:\Software\mysql-5.7.24-winx64\data 改为 datadir=D:\Software\mysql-5.7.24-winx64\data (改为MySQL解压后的路径\data)
4.安装MySQL时出现mysql -u root -p Enter password: ** ERROR 2003 (HY000): Can’t connect to MYSQLserver on ‘localhhost’(10061)
原因:上一次net stop mysql 后未开启
以管理员身份启动cmd命令行
输入net start mysql 报错:mysql 服务器无法启动
解决方案:
mysqld --initialize 初始化data目录后重新输入net start mysql命令即可。
3.基本命令操作
4. 可视化工具sqlyog的安装
4.1 sqlyog下载链接:
链接: https://pan.baidu.com/s/1D_iRna8V90omfHsKHyeBtg 提取码: bqht
复制这段内容后打开百度网盘手机App,操作更方便哦
4.2 安装步骤
全部下一步,安装路径自己选,证书密匙上网查
5.操作数据库
-
创建数据库
CREATE DATABASE [IF NOT EXISTS] school;
-
删除数据库
DROP DATABASE [IF EXISTS] school
-
使用数据库
USE school
-
查看数据
SHOW DATABASE --查看所有的数据库
6.数据类型
数值
- tinyint 十分小的数据 1个byte
- smallint 较小的数据 2个byte
- mediumint 中等大小的数据 3个byte
- int 标准的整数 4个byte 常用的
- bigint 较大的数据 8个byte
- float 浮点数(单) 4个byte
- double 浮点数(双) 8个byte
- deciaml 字符串形式的浮点数 金融计算的时候使用
字符串
- char 定长字符串 0-255 bytes
- varchar 可变字符串 0-65535 bytes
- tinytext 短文本串 0-255 bytes
- text 文本串 0-65535 bytes
- mediumtext 中长文本串 0-16777215 bytes
- longtext 超长文本串 0-4294967295 bytes
日期
- date YYYY-MM-DD 日期格式
- time HH:mm:ss 时间格式
- year YYYY 年份
- datetime YYYY-MM-DD HH:mm:ss 最常用
- timestamp 时间戳 1970.1.1 到现在的毫秒数 也较为常用
null
- 没有值,未知
- 注意,不要使用null进行运算,结果为null
7.表的操作
7.1创建表
属性
unsigened:
- 无符号的整数
- 声明了该列不能声明为负数
zerofill
- 0填充
- 不足的数,使用0来填充
自增
- 通常理解为自增,自动在上一条记录的基础上+1(默认)
- 通常用来设计唯一的主键~ index, 必须是整数类型
- 可以自定义设计主键自增的起始值和步长
7.2 语法
CREATE TABLE [IF NOT EXISTS] `表名`(
`字段名` 列类型 [属性][索引][注释],
`字段名` 列类型 [属性][索引][注释],
`字段名` 列类型 [属性][索引][注释],
......
PRIMARY KEY(`字段名`)
)
示例
CREATE TABLE IF NOT EXISTS `runoob_tbl`(
`runoob_id` INT UNSIGNED AUTO_INCREMENT,
`runoob_title` VARCHAR(100) NOT NULL,
`runoob_author` VARCHAR(40) NOT NULL,
`submission_date` DATE,
PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
7.3 查看常用命令
SHOW CREATE DATABASE school -- 查看创建数据库的语句
SHOW CREATE TANLE student -- 查看student数据表的定义语句
DESC student -- 查看表的结构
7.4数据库引擎MYISAM和INNODB的区别
MYISAM | INNODB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间的大小 | 较小 | 较大,约为前者的2倍 |
常规使用操作
- MYISAM 节约空间,速度较快
- INNODB 安全性高,事务的处理,多表多用户操作
7.5 在物理空间的位置
- 所有的数据库文件都在data目录下,本质还是文件的存储!
- MYSQL引擎在物理文件上的区别
- INNODB 在数据库表中只有一个*.frm文件,以及上级目录下的ibdata1文件
- MYISAM
- *.frm 表结构的定义文件
- *.MYD 数据文件(data)
- *.MYI 索引文件(index)
7.6 设置数据库的字符集编码
CHARSET=utf8
- 不设置的话,会是mysql默认的字符集编码~(不支持中文)
- MYSQL的默认编码是Latin, 不支持中文
- 在my.ini 中配置默认的编码
character-set-server=utf8
7.7 表的修改与删除
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cjvmAltO-1596337610214)(C:\Users\吴泉明\Pictures\mysql\微信截图_20200728185103.png)]
-- 删除表
DROP TABLB IF EXISTS teacher1
注意点:
- 所有是创建和删除操作尽量加上判断,以免报错
- ``字段名,使用这个包裹!
- 注释–/**/
- sql关键字大小写不敏感,建议写小写
- 所有的符号全部用英文!
7.8添加外键
定义语法
[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
REFERENCES tbl_name (index_col_name, ...)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
该语法可以在 CREATE TABLE 和 ALTER TABLE 时使用,如果不指定CONSTRAINT symbol,MYSQL会自动生成一个名字。
ON DELETE、ON UPDATE表示事件触发限制,可设参数:
① RESTRICT(限制外表中的外键改动,默认值)
② CASCADE(跟随外键改动)
③ SET NULL(设空值)
④ SET DEFAULT(设默认值)
⑤ NO ACTION(无动作,默认的)
外键约束
- 父表更新时子表也更新,父表删除时如果子表有匹配的项,删除失败;
- 父表更新时子表也更新,父表删除时子表匹配的项也删除。
建议:
- 以上的都是物理外键,数据库级别的外键,我们不建议使用!(避免数据库过多造成困扰)
最佳实践:
- 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
- 我们想使用多张表的数据,想使用外键(程序去实现)