MySQL数据库详解(一)
程序员文章站
2024-03-08 18:52:17
...
概述
1.什么是数据库(DataBase)
数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。
2.什么是数据库管理系统 (Database Management SystemDBMS)
一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。
3.数据库的分类
4.数据库与数据库管理系统的关系
MySQL数据库
1.MySQL的安装
1.下载后得到zip压缩包.
2.解压到自己想要安装到的目录,本人解压到的是D:\Environment\mysql-5.7.19
3.添加环境变量
我的电脑->属性->高级->环境变量
选择PATH,在其后面添加: 你的mysql 安装文件下面的bin文件夹
4.在D:\Environment\mysql-5.7.19下新建 my.ini 文件
5.编辑 my.ini 文件 ,注意替换路径位置
1 [mysqld]
2 basedir=D:\Program Files\mysql-5.7\
3 datadir=D:\Program Files\mysql-5.7\data\
4 port=3306
5 skip-grant-tables
6.启动管理员模式下的CMD,并将路径切换至mysql下的bin目录,然后输入mysqld – install (安装mysql)
7. 再输入 mysqld --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; 刷新权限)
8.修改 my.ini文件删除最后一句skip-grant-tables
9.重启mysql即可正常使用
2.数据库的连接
打开CMD命令符输入以下内容:
mysql -uroot -p123456 --连接数据库
update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost'; -- 修改用户密码
flush privileges; -- 刷新权限
show databases; -- 查看所有的数据库
mysql> use school -- 切换数据库 use 数据库名 Database changed
show tables; -- 查看数据库中所有的表
describe student; -- 显示数据库中所有的表的信息
create database westos; -- 创建一个数据库
exit; --退出连接
-- 单行注释(SQL 的本来的注释)
3.数据库的操作
(1)创建数据库
CREATE DATABASE [IF NOT EXISTS] westos;
(2)删除数据库
DROP DATABASE [IF EXISTS] westos;
(3)使用数据库
-- tab 键的上面,如果你的表名或者字段名是一个特殊字符,就需要带 ``
USE `school`
(4)查看数据库
SHOW DATABASES -- 查看所有的数据库
注意:mysql关键字不分区大小写
4.数据库的列类型
(1)基本数据
int 标准的整数 | 4个字节 |
---|---|
smallint 较小的数据 | 2个字节 |
mediumint 中等大小的数据 | 3个字节 |
bigint 较大的数据 | 8个字节 |
tinyint 十分小的数据 | 1个字节 |
float 浮点数 | 4个字节 |
double 浮点数 | 8个字节 (精度问题!) |
decimal 字符串形式的浮点数 | 金融计算的时候,一般是使用decimal |
(2)字符串
varchar | 可变字符串 0~65535 常用的变量 |
---|---|
char | 字符串固定大小的 0~255 |
tinytext | 微型文本 2^8 - 1 |
text | 文本串 2^16 -1 保存大文本 |
(3)时间日期
datetime | YYYY-MM-DD HH:mm:ss 最常用的时间格式 |
---|---|
date | YYYY-MM-DD , 日期格式 |
timestamp | 时间戳, 1970.1.1 到现在的毫秒数! |
time | HH:mm:ss 时间格式 |
year | 年份表示 |
(4)NULL:没有值,未知
注意:不要使用NULL进行运算,结果为NULL
5.、数据库的字段属性
Unsigned :
- 无符号的整数
- 声明了该列不能声明为负数
zerofill:
- 0填充的 不足的位数,使用0来填充
自增:
- 通常理解为自增,自动在上一条记录的基础上 + 1(默认)
- 通常用来设计唯一的主键~ index,必须是整数类型
- 可以自定义设计主键自增的起始值和步长
非空 NUll not null:
- 假设设置为 not null ,如果不给它赋值,就会报错!
- NUll ,如果不填写值,默认就是null!
默认:
- 设置默认的值!
- sex,默认值 为 男,如果不指定该列的值,则会有默认的值!
数据表
1.创建数据库表
格式:
CREATE TABLE [IF NOT EXISTS] `表名`(
'字段名' 列类型 [属性] [索引] [注释],
'字段名' 列类型 [属性] [索引] [注释],
......
'字段名' 列类型 [属性] [索引] [注释]
)[表类型][字符集设置][注释]
注意:
- 字符串使用 单引号括起来!
- 所有的语句后面加 , (英文的),后一个不用加
- PRIMARY KEY 主键,一般一个表只有一个唯一的主键!
- 注意点,使用英文 () , 表的名称 和 字段 尽量使用 `` 括起来
常用的命令:
SHOW CREATE DATABASE school -- 查看创建数据库的语句
SHOW CREATE TABLE student -- 查看student数据表的定义语句
DESC student -- 显示表的结构
2.数据表的类型
(1)数据库引擎:
- INNODB 默认使用
- MYISAM 早些年使用的
常规使用操作:
- MYISAM 节约空间,速度较快
- INNODB 安全性高,事务的处理,多表多用户操作
(2)MySQL 引擎在物理文件上的区别:
-
InnoDB 在数据库表中只有一个 *.frm 文件, 以及上级目录下的 ibdata1 文件
-
MYISAM 对应文件 : *.frm 表结构的定义文件 *.MYD 数据文件 (data) *.MYI 索引文件(index)
(3)设置数据库表的字符集编码
第一种方式:
CHARSET=utf81
不设置的话,会是mysql 默认的字符集编码~ (不支持中文!)
MySQL的默认编码是Latin1,不支持中文
第二种方式:
在my.ini 中配置默认的编码
character-set-server=utf8
3.修改删除表
(1)修改
-- 修改表名 : ALTER TABLE 旧表名 RENAME AS 新表名
ALTER TABLE teacher RENAME AS teacher1
-- 增加表的字段 : ALTER TABLE 表名 ADD 字段名 列属性
ALTER TABLE teacher1 ADD age INT(11)
-- 修改表的字段 (重命名,修改约束!) -- ALTER TABLE 表名 MODIFY 字段名 列属性[]
ALTER TABLE teacher1 MODIFY age VARCHAR(11)
-- 修改约束 -- ALTER TABLE 表名 CHANGE 旧名字 新名字 列属性[]
ALTER TABLE teacher1 CHANGE age age1 INT(1) -- 字段重名名
-- 删除表的字段: ALTER TABLE 表名 DROP 字段名
ALTER TABLE teacher1 DROP age1
(2)删除
-- 删除表(如果表存在再删除)
DROP TABLE IF EXISTS teacher1
外键
方式一:、在创建表的时候,增加约束 (麻烦,比较复杂)
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
-- 学生表的 gradeid 字段 要去引用年级表的 gradeid -- 定义外键key -- 给这个外键添加约束 (执行引用) references 引用
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 '出生日期',
`gradeid` INT(10) NOT NULL COMMENT '学生的年级',
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY(`id`),
KEY `FK_gradeid` (`gradeid`),
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`) )ENGINE=INNODB DEFAULT CHARSET=utf8
注意:删除有外键关系的表的时候,必须要先删除引用别人的表 (从表),再删除被引用的表 (主表)
方式二:创建表成功后,添加外键约束
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
-- 学生表的 gradeid 字段 要去引用年级表的 gradeid -- 定义外键key -- 给这个外键添加约束 (执行引用) references 引用
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 '出生日期',
`gradeid` INT(10) NOT NULL COMMENT '学生的年级',
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- 创建表的时候没有外键关系
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES
`grade`(`gradeid`);
-- ALTER TABLE 表 ADD CONSTRAINT 约束名 FOREIGN KEY(作为外键的列) REFERENCES 那 个表(哪个字段)
注意:以上的操作都是物理外键,数据库级别的外键,我们不建议使用! (避免数据库过多造成困扰,这里了 解即可~)