mysql数据库

mysql数据库

Mysql数据库

Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

  • Mysql是开源的,所以不需要支付额外的费用。
  • Mysql支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
  • MySQL使用标准的SQL数据语言形式。
  • Mysql可以允许于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
  • Mysql对PHP有很好的支持
  • MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。
  • Mysql是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统。

mysql数据库的安装

参考链接: https://www.cnblogs.com/xsmile/p/7753984.html

1.下载

官网下载地址1:https://dev.mysql.com/downloads/mysql/

官网下载地址2, https://downloads.mysql.com/archives/community/

2.拉到网页下面,选择 Windows (x86, 64-bit), ZIP Archive

3.点击download,网页跳转后,不要点击 ‘Login’ 和 ‘Sign up’,点击 No thanks, just start my download

4.解压到指定路径

5.进入解压好后的文件夹,创建my.ini文件并用编辑器打开,进行编辑,内容如下:

[mysql]

# 设置mysql客户端默认字符集

default-character-set=utf8

[mysqld]

#设置3306端口

port = 3306

# 设置mysql的安装目录

basedir=对应目录:\mysql-5.7.21-winx64

# 设置mysql数据库的数据的存放目录

datadir=对应的目录:\mysql-5.7.21-winx64\data

# 允许最大连接数

max_connections=200

# 服务端使用的字符集默认为utf-8

character-set-server=utf8

# 创建新表时将使用的默认存储引擎

6(可以忽略) .default-storage-engine=INNODB6.下载安装VC++ https://dl.pconline.com.cn/download/864971-1.html,下载好后,直接进行安装

我这里是VC++2015版的,也可以下载其他版本

7.添加环境变量,
    右键我的电脑,高级系统设置,环境变量,下面的滚动框找到Path,双击打开后,在末尾添加, C:\mysql\mysql-8.0.13-winx64\bin

8.以管理员身份运行终端,进入文件包的bin目录
 在终端依次输入:
  
  cd mysql-8.0.13-winx64
  cd bin
  mysqld --install
  mysqld --initialize
  net start mysql
9.服务启动成功后,在musql文件包data目录下找以 .err 结束的文件,用编辑器打开,
找到一行,
A temporary password is generated for root@localhost: 初始化密码

复制初始化密码

10.在终端输入
mysql -uroot -p 初始化密码

11.进入数据库成功后,输入
alter user user() indentified by 123456;
123456是新密码,可以换成你自己想要的

12.下次登录就可以直接在终端输入 mysql -uroot -p123456

修改密码:

8.0+ ALTER user ‘root’@‘localhost’ IDENTIFIED BY ‘root’;

前版本: set password for 用户名@localhost = password(‘新密码’);

建库以及基本系统信息的操作

1.远程登陆mysql服务器
mysql -uroot -p -h192.168.137.10 -P3306

2.查询数据库
show databases;
默认数据库:
mysql - 用户权限相关数据
test - 用于用户测试数据
information_schema - MySQL本身架构相关数据

3.查看当前用户
select user();

4.查看当前所在数据库
select database();

5.查看数据库版本
select version();

6.查看数据库状态
show status; 当前会话状态
show global status; 全局数据库状态
show slave status\G; 查看主从数据库状态信息

7.查询数据库参数
show variables;

8.修改数据库参数
show variables like ‘max_connect%’;
set global max_connect_errors = 1000;(重启数据库会失效,要在配置文件中修改)

9.查看当前数据库队列
show processlist;

10.创建数据库
CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; # 默认编码格式utf8
COLLATE utf8_general_ci用于数据库中的排序规则
CREATE DATABASE 数据库名称 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; # 默认编码格式gbk

11.进入数据库
USE db_name

12.查看权限
show grants for ‘用户’@‘IP地址’

13.授权
grant 权限 on 数据库.表 to ‘用户’@‘IP地址’

14.取消权限
revoke 权限 on 数据库.表 from ‘用户’@‘IP地址’

数据库表的操作

1.登陆数据库系统

在命令行中登陆MySQL数据库管理系统,输入一下内容:

mysql -h ip地址 -u 用户名 -p 密码

很多人都知道这个,但是其中参数的具体表示什么我们还是要了解的,其中,“-h”参数指连接的主机名,所以后面是localhost;“-u”参数表示用户名,此处的用户名为root;“-p”参数表示用户的密码,按下Enter键后就显示“Enter password:”,输入密码即可登录进去了。

2.创建数据库

在创建数据库之前,我们可以查看已经存在的数据库:

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| community          |
| community_test     |
| data               |
| mydata             |
| mysql              |
| performance_schema |
| test               |
+--------------------+
8 rows in set (0.04 sec)

创建数据库的格式:CREATE DATABASE 数据库名;

示例:创建一个名为example的数据库

3.删除数据库:

格式:DROP DATABASE 数据库名;

示例:删除example数据库

mysql>  DROP DATABASE example;
Query OK, 0 rows affected (0.07 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| community          |
| community_test     |
| data               |
| mydata             |
| mysql              |
| performance_schema |
| test               |
+--------------------+
8 rows in set (0.00 sec)

4**.数据库存储引擎**

存储引擎就是指表的类型,数据库存储引擎决定了表在计算机的存储方式。

MySQL中查询存储引擎的类型命令:SHOW ENGINES;

mysql> SHOW ENGINES;
+--------------------+---------+------------------------------------------------
----------------+--------------+------+------------+
| Engine             | Support | Comment
                | Transactions | XA   | Savepoints |
+--------------------+---------+------------------------------------------------
----------------+--------------+------+------------+
| FEDERATED          | NO      | Federated MySQL storage engine
                | NULL         | NULL | NULL       |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables
                | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine
                | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to
 it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine
                | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for tempor
ary tables      | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine
                | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and f
oreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema
                | NO           | NO   | NO         |
+--------------------+---------+------------------------------------------------
----------------+--------------+------+------------+
9 rows in set (0.00 sec)

查询结果中,Engine参数指存储引擎名称;Support参数说明MySQL是否支持该类型引擎;Comment参数表示对该引擎的评论;Transaction参数表示是否支持事务处理;XA参数表示是否分布式交易处理的XA规范;Savepoints参数表示是否支持保存点,以方便事务的回滚操作;由上面我们看到InnoDB存储引擎是default的,也就是数据库默认的存储引擎,下面我们简单介绍一下InnoDB。

InnoDB是MySQL的一种存储引擎,InnoDB给MySQL提供了事务、回滚、崩溃修复能力和多版本并发控制的事务安全。InnoDB是MySQL上第一个提供外键约束的表引擎,而且对事务处理的能力,也是其他存储引擎不能比拟的。不过这种引擎的缺点就是读写效率稍差,占用的数据空间相对比较大。

5.创建表

1)创建表的形式:
CREATE TABLE 表名 (
    属性名 数据类型 [完整约束条件],
    属性名 数据类型 [完整约束条件],
    ...
    ...
    属性名 数据类型 [完整约束条件]
);

在创建之前要选择数据库,格式:USE 数据库名;

示例创建一个student表:

mysql> use example;
Database changed
mysql> CREATE TABLE student (
    -> id int,
    -> name varchar(20)
    -> );
Query OK, 0 rows affected (0.09 sec)

创建表的时候涉及到一个完整性约束条件,下面就列出一个完整性约束条件表:

约束条件说明
PRIMARY KEY标识该属性为该表的主键,可以唯一的标识对应的元组
FOREIGN KEY标识该属性为该表的外键,是与之联系某表的主键
NOT NULL标识该属性不能为空
UNIQUE标识该属性的值是唯一的
AUTO_INCREMENT标识该属性的值是自动增加,这是MySQL的SQL语句的特色
DEFAULT为该属性设置默认值

下面讲解一下上面完整性约束条件的应用:

2)设置表的主键

单字段主键格式:属性名 数据类型 PRIMARY KEY

示例:

mysql>  CREATE TABLE student1 (
    -> id int PRIMARY KEY,
    -> name varchar(20)
    -> );
Query OK, 0 rows affected (0.06 sec)

多字段主键格式:PRIMARY KEY(属性名1,属性名2…属性名n)

示例:

mysql> CREATE TABLE student2 (
    -> id int,
    -> stu_id int,
    -> name varchar(20),
    -> PRIMARY KEY(id,stu_id)
    -> );
Query OK, 0 rows affected (0.00 sec)

3)设置表的外键

格式:CONSTRAINT 外键别名 FOREIGN KEY(属性1,属性2,…属性n) REFERENCES 表名(属性1’,属性2’,…属性n’)

示例:

mysql> CREATE TABLE teacher (
    -> id int PRIMARY KEY,
    -> stu_id int,
    -> name varchar(20),
    -> CONSTRAINT STUID FOREIGN KEY(stu_id) REFERENCES student1(id)
    -> );
Query OK, 0 rows affected (0.00 sec)

4)设置表的非空约束

简单的说就是不让这个属性的值为空,不填的话就会报错

格式:属性名 数据类型 NOT NULL

5)设置表的唯一性约束

就是这个属性的值是不能重复的

格式:属性名 数据类型 UNIQUE

6)设置表的属性值自动增加

AUTO_INCREMENT约束的字段可以是任何整数类型(TINYINT、SMALLINT、INT和BIGINT),在默认的情况下,该字段的值是从1开始自增

格式:属性名 数据类型 AUTO_INCREMENT

7)设置表的属性的默认值

格式:属性名 数据类型 DEFAULT 默认值

下面对4-7进行综合示例:

mysql> CREATE TABLE student3 (
    -> id int PRIMARY KEY AUTO_INCREMENT,
    -> teacher_id int UNIQUE,
    -> name varchar(20) NOT NULL,
    -> sex varchar(10) DEFAULT 'male'
    -> );
Query OK, 0 rows affected (0.01 sec)

8)查看表结构

查看表基本结构语句DESCRIBE

格式:DESCRIBE 表名;

通过查看表的结构,就很明确的对表进行解读,而且可以查看一下自己创建的表有没错误,这个SQL语句必须会用啊

示例:

mysql> desc student3;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| id         | int(11)     | NO   | PRI | NULL    | auto_increment |
| teacher_id | int(11)     | YES  | UNI | NULL    |                |
| name       | varchar(20) | NO   |     | NULL    |                |
| sex        | varchar(10) | YES  |     | male    |                |
+------------+-------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

查看表详细结构语句SHOW CREATE TABLE

通过这个SQL语句可以查看表的详细定义,除了字段名、字段的数据类型、约束条件外,还可以查看表的默认存储引擎和字符编码

格式:SHOW CREATE TABLE 表名;

示例:

mysql> SHOW CREATE TABLE student3;
+----------+-----------------------------------
-----------------------------------------------
-----------------------------------------------
---------------------------------------------+
| Table    | Create Table


                                             |
+----------+-----------------------------------
-----------------------------------------------
-----------------------------------------------
---------------------------------------------+
| student3 | CREATE TABLE `student3` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `teacher_id` int(11) DEFAULT NULL,
  `name` varchar(20) NOT NULL,
  `sex` varchar(10) DEFAULT 'male',
  PRIMARY KEY (`id`),
  UNIQUE KEY `teacher_id` (`teacher_id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
+----------+-----------------------------------
-----------------------------------------------
-----------------------------------------------
---------------------------------------------+
1 row in set (0.00 sec)

6.修改表:

1)修改表名

表名可以在一个数据库中唯一的确定一张表。

格式:ALTER TABLE 旧表名 RENAME 新表名;

示例:

mysql> ALTER TABLE student RENAME student4;
Query OK, 0 rows affected (0.11 sec)

mysql> DESCRIBE student;
ERROR 1146 (42S02): Table 'example.student' doesn't exist

由上面可以看出,改名后的表已经不存在了。

2)修改字段的数据类型

格式:ALTER TABLE 表名 MODIFY 属性名 数据类型;

示例:

[复制代码](javascript:void(0)😉

复制代码

复制代码

mysql> DESCRIBE student1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.08 sec)

mysql> ALTER TABLE student1 MODIFY name varchar(30);
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE student1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(30) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

复制代码

复制代码

[复制代码](javascript:void(0)😉

3)修改字段名:

格式:ALTER TABLE 表名 CHANGE 旧属性名 新属性名 新数据类型;

示例:

mysql> DESCRIBE student1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(30) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> ALTER TABLE student1 CHANGE name stu_name varchar(40);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE student1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| stu_name | varchar(40) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

修改的字段名的同时也修改了数据类型

4)增加字段

格式:ALTER TABLE 表名 ADD 属性名1 数据类型 [完整性约束条件] [FIRST | AFTER 属性名2];

其中,“属性名1”参数指需要增加的字段的名称;“FIRST”参数是可选参数,其作用是将新增字段设置为表的第一个字段;“AFTER”参数也是可选的参数,其作用是将新增字段添加到“属性名2”后面;“属性名2”当然就是指表中已经有的字段

示例:

mysql> DESCRIBE student1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| stu_name | varchar(40) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> ALTER TABLE student1 ADD teacher_name varchar(20) NOT NULL AFTER id;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE student1;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| id           | int(11)     | NO   | PRI | NULL    |       |
| teacher_name | varchar(20) | NO   |     | NULL    |       |
| stu_name     | varchar(40) | YES  |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

5)删除字段

格式:ALTER TABLE 表名 DROP 字段名;

示例:

mysql> DESCRIBE student1;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| id           | int(11)     | NO   | PRI | NULL    |       |
| teacher_name | varchar(20) | NO   |     | NULL    |       |
| stu_name     | varchar(40) | YES  |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

mysql> ALTER TABLE student1 DROP teacher_name;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE student1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| stu_name | varchar(40) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

6)更改表的存储引擎

格式:ALTER TABLE 表名 ENGINE = 存储引擎名;

示例:

mysql> SHOW CREATE TABLE student2;
+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
| Table    | Create Table


+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
| student2 | CREATE TABLE `student2` (
  `id` int(11) NOT NULL DEFAULT '0',
  `stu_id` int(11) NOT NULL DEFAULT '0',
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`,`stu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
1 row in set (0.05 sec)

mysql> ALTER TABLE student2 ENGINE = MYISAM;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SHOW CREATE TABLE student2;
+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
| Table    | Create Table


+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
| student2 | CREATE TABLE `student2` (
  `id` int(11) NOT NULL DEFAULT '0',
  `stu_id` int(11) NOT NULL DEFAULT '0',
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`,`stu_id`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312 |
+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
1 row in set (0.00 sec)

7)删除表的外键约束

格式:ALTER TABLE 表名 DROP FOREIGN KEY 外键别名;

示例:

mysql> SHOW CREATE TABLE teacher;
+---------+------------------------------------------------
-----------------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------+
| Table   | Create Table


                                                  |
+---------+------------------------------------------------
-----------------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------+
| teacher | CREATE TABLE `teacher` (
  `id` int(11) NOT NULL,
  `stu_id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `STUID` (`stu_id`),
  CONSTRAINT `STUID` FOREIGN KEY (`stu_id`) REFERENCES `stu
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
+---------+------------------------------------------------
-----------------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------+
1 row in set (0.08 sec)

mysql> ALTER TABLE teacher DROP FOREIGN KEY STUID;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SHOW CREATE TABLE teacher;
+---------+------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------------+
| Table   | Create Table

                                                        |
+---------+------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------------+
| teacher | CREATE TABLE `teacher` (
  `id` int(11) NOT NULL,
  `stu_id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `STUID` (`stu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
+---------+------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------------+
1 row in set (0.00 sec)

6.删除表

格式:DROP TABLE 表名;

删除没有被关联的普通表:直接上面的SQL语句就行了

删除被其他表关联的父表:

方法一:先删除子表,在删除父表

                                 |

±--------±-----------------------------------------------

--------------------------------------------------------+
| teacher | CREATE TABLE teacher (
id int(11) NOT NULL,
stu_id int(11) DEFAULT NULL,
name varchar(20) DEFAULT NULL,
PRIMARY KEY (id),
KEY STUID (stu_id)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
±--------±-----------------------------------------------

--------------------------------------------------------+
1 row in set (0.00 sec)




## 6.删除表

  格式:DROP TABLE 表名;

  删除没有被关联的普通表:直接上面的SQL语句就行了

  删除被其他表关联的父表:

  方法一:先删除子表,在删除父表

  方法二:删除父表的外键约束(上面有介绍),再删该表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值