欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL数据库详解(一)

程序员文章站 2024-03-08 18:52:17
...

概述

1.什么是数据库(DataBase)

数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。

2.什么是数据库管理系统 (Database Management SystemDBMS)

一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。

3.数据库的分类

MySQL数据库详解(一)

4.数据库与数据库管理系统的关系

MySQL数据库详解(一)

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 早些年使用的
    MySQL数据库详解(一)

常规使用操作:

  • 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 那 个表(哪个字段)

注意:以上的操作都是物理外键,数据库级别的外键,我们不建议使用! (避免数据库过多造成困扰,这里了 解即可~)