MySQL数据库
MySQL 是一个关系型数据库,使用 SQL 语言进行增删改查操作,目前属于 Oracle 旗下的产品。
MySQL 数据库开源免费,能够跨平台,支持分布式,性能也不错,可以和 PHP、Java 等 Web 开发语言完美配合,非常适合中小型企业作为 Web 数据库(网站数据库)。
数据库管理工具
- Navicat for MySQL
Navicat是一款桌面版MySQL管理工具,它和微软的SQLServer的管理器很像,简单易用。Navicat的优势在于使用图形化的用户界面,可以让用户管理更加轻松。
Navicat for MySQL:http://www.navicat.com.cn/products/navicat-for-mysql
- phpMyAdmin
通过WEB方式控制和操作MYSQL数据库
phpmyadmin官网:https://www.phpmyadmin.net/
phpmyadmin中文网:http://www.phpmyadmin.org.cn/
- Adminer
Adminer是一个类似于phpMyAdmin的MySQL管理客户端,支持MySQL、MS SQL、PostgreSQL、SQLite等主流,支持多语言(已自带11种翻译语言文件,可以按自己的需求翻译相应的语言),整个程序只有一个PHP文件,使用起来非常方便!
Adminer官网:https://www.adminer.org/
- SQLyog
SQLyog是一个易于使用的、快速而简洁的图形化管理MYSQL数据库的工具,它能够在任何地点有效地管理你的数据库。
SQLyog官网:https://sqlyog.en.softonic.com/
连接Mysql数据库
格式: mysql -h主机地址 -u用户名 -p用户密码
1、连接到本机上的MYSQL。
首先win+R输入CMD打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p
,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码。
如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>
注:如果不想每次输入mysql命令都进入到mysql/bin目录下,可以设置环境变量,不然系统会提示找不到mysql命令。
2、系统环境变量的配置
找到MySQL安装的路径下的bin文件夹,我这里使用的是集成环境UPUPW ,MySQL的安装目录在D:\UPUPW_ANK_W64\Modules\MySQL\bin
环境变量的设置:我的电脑右键=>选择属性=>选择高级系统设置=>环境变量=>系统变量中的Path=>点击编辑=>点击新建=>将路径复制进去=>保存即可。设置好环境变量,在任意文件夹下都可以执行MySQL
3、连接到远程主机上的MYSQL。
假设远程主机的IP为:127.0.0.1,用户名为root,密码为abcd123。则键入以下命令:
mysql -h 127.0.0.1-u root -p;(注:u与root之间可以不用加空格,其它也一样)
3、退出MYSQL命令: exit (回车)
修改MySQL连接密码
格式:mysqladmin -u用户名 -p旧密码 password 新密码
1、给root加个密码1234
mysqladmin -u root -password 1234
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。
2、再将root的密码改为admin
mysqladmin -u root -p 1234 password admin
SQL 语句分类
- DDL: 数据定义, create, alter,drop
- DML: 数据操作, insert, update,delete,select,(CURD)
- DCL: 数据控制, grant, revoke
- TCL: 事件控制, commit, rollback
数据库定义语言DDL
数据库模式定义语言DDL(Data Definition Language),是用于描述数据库中要存储的现实世界实体的语言。
- CREATE DATABASE 创建数据库
- CREATE TABLE 创建表
- ALTER TABLE 修改表
- DROP TABLE 删除表
- CREATE VIEW 创建视图
- ALTER VIEW 修改视图
- DROP VIEW 删除视图
- TRUNCATE TABLE 清空表
- CREATE INDEX 创建索引
- DROP INDEX 删除索引
数据库相关操作
MySQL查看数据库(SHOW DATABASES语句)
MySQL创建数据库(CREATE DATABASE语句)
MySQL修改数据库:ALTER DATABASE用法简介
MySQL删除数据库(DROP DATABASE语句)
MySQL选择数据库(MySQL USE语句)
-
增
-
create database 库名称;
-
create database 数据库名称 charset 编码方式;
-
-
删
- drop database 库名称;
-
改
- 修改编码方式:alter database 库名称 charset 编码方式;
-
查
- 查看所有库:show databases;
- 查看指定库:show database 库名称;
-
选
- use 数据库名称;
-- 创建数据库
# create database 数据库名称 charset 编码方式 collate 排序规则;
create database phpedu collate utf8mb4_unicode_ci;
-- 修改数据库 alter database 库名称 charset 编码方式;
-- 删除数据库
drop database phpedu;
-- 选择默认数据库
use phpedu;
-- 查看所以数据库
show databases;
-- 查看建库语句
show create database phpedu;
-- 查看状态
status
-- 查看当前数据库
select database();
-- 查看登录用户
select user();
-- 连接数据库时就选中当前数据库myblog
mysql -uroot -proot myblog;
对于数据库来说,字符集的选择更加重要。因为数据库中存储的大部分内容都是各种文字,字符集对数据库的存储、处理性能,以及日后系统的移植、推广都会受到影响。
utf8mb4 表示这种字符集由 1~ 4个字节组成,如果需要支持 emoji 表情,通常需要选择 utf8mb4 的字符集来支持。随着互联网的发展,有越来越多的应用需要 utf8mb4 的字符集来支持。在最新的 MySQL8.0 中,默认字符集已经由 latin1 变为了 utf8mb4。
排序规则:一般选择utf8mb4_unicode_ci是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序
数据库表相关操作
-
CREATE TABLE 创建表
-
ALTER TABLE 修改表
-
DROP TABLE 删除表
-
增
- 增加表单create table 表名称(字段1 数据类型,字段2 数据类型…限制条件);
- 至少有一个字段和数据类型,最后一个字段已经最后一个数据类型结束后不加,逗号
-
删
- 删除表:drop table 表名称;
- 清空表里面数据: truncate table 表名称;
-
改
字段
- 添加字段:alter table 表名称 add 字段 字段数据类型
- 删除字段:alter table 表名称 drop 字段
- 修改字段数据类型:alter table 表名称 modify 字段 新的数据类型
- 替换字段:alter table 表名称 change 旧字段名称 新字段 新字段数据类型
表
- 改表名称:rename table 表名称 to 新名称
- 改表的编码:alter table 表名 charset 新编码;
-
查
- 查看所有表:show tables
- 查看指定表结构:desc 表名称
- 查看指定表创建信息:show create table 表名称
表的字段类型
MySQL提供了一组可以赋给表中各个列的数据类型,每个类型都强制数据满足为该数据类型预先确定的一组规则,例如大小、类型及格式。支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符类型)
日期和时间数据类型
MySQL数据类型 | 含义 |
---|---|
date | 3字节,日期,格式:2014-09-18 |
time | 3字节,时间,格式:08:42:30 |
datetime | 8字节,日期时间,格式:2014-09-18 08:42:30 |
timestamp | 4字节,自动存储记录修改的时间 |
year | 1字节,年份 |
timestamp与datetime:
- datetime 的日期范围比较大,1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 , timestamp 所占存储空间比较小,只是 datetime 的一半。
-
TIMESTAMP 用于表示 年月日 时分秒,但是记录的年份 比较短暂,1970-01-01 00:00:01 ~ 2038, TIMESTAMP列必须有默认值,默认值可以为“0000-00-00 00:00:00”,但不能为null。
-
TIMESTAMP 和时区相关,更能反映当前时间。当插入日期时,会先转换为本地时区后再存放;当查询日期时,会将日期转换为本地时区后再显示。所以不同时区的人看到的同一时间是 不一样的。
-
TIMESTAMP 的属性受 Mysql 版本和服务器 SQLMode 的影响较大。
-
如果记录的日期需要让不同时区的人使用,最好使用 TIMESTAMP。
-
一般建表时候,创建时间用datetime int ,更新时间用timestamp。
数值数据类型
整型
MySQL数据类型 | 含义(有符号) |
---|---|
tinyint | 1字节,范围(-128~127) |
smallint | 2字节,范围(-32768~32767) |
mediumint | 3字节,范围(-8388608~8388607) |
int | 4字节,范围(-2147483648~2147483647) |
bigint | 8字节,范围(±9.22*10的18次方) |
浮点型
MySQL数据类型 | 含义 |
---|---|
float(m, d) | 4字节,单精度浮点型,m总个数,d小数位 |
double(m, d) | 8字节,双精度浮点型,m总个数,d小数位 |
decimal(m, d) | decimal是存储为字符串的浮点数 |
字符串数据类型
MySQL数据类型 | 含义 |
---|---|
char(n) | 固定长度,最多255个字符 |
varchar(n) | 可变长度,最多65535个字符 |
tinytext | 可变长度,最多255个字符 |
text | 可变长度,最多65535个字符 |
mediumtext | 可变长度,最多2的24次方-1个字符 |
longtext | 可变长度,最多2的32次方-1个字符 |
1.char(n)和varchar(n)中括号中n代表字符的个数,并不代表字节个数,所以当使用了中文的时候(UTF8)意味着可以插入m个中文,但是实际会占用m*3个字节。
2.同时char和varchar最大的区别就在于char不管实际value都会占用n个字符的空间,而varchar只会占用实际字符应该占用的空间+1,并且实际空间+1<=n。
3.超过char和varchar的n设置后,字符串会被截断。
4.char的上限为255字节,varchar的上限65535字节,text的上限为65535。
5.char在存储的时候会截断尾部的空格,varchar和text不会。
6.varchar会使用1-3个字节来存储长度,text不会。
创建数据库表
CREATE TABLE 语句用于创建数据库中的表
命令格式如下:
CREATE TABLE table_name
(
column_name1 data_type(size) constraint_name,
column_name2 data_type(size) constraint_name,
column_name3 data_type(size) constraint_name,
....
);
-
column_name 参数规定表中列的名称。
-
data_type 参数规定列的数据类型(例如 varchar、integer、decimal、date 等等)。
-
size 参数规定表中列的最大长度。
在 SQL 中,我们有如下约束:
- NOT NULL - 指示某列不能存储 NULL 值。
NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
- UNIQUE - 保证某列的每行必须有唯一的值。
- PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
PRIMARY KEY 约束唯一标识数据库表中的每条记录。主键必须包含唯一的值。主键列不能包含 NULL 值。每个表都应该有一个主键,并且每个表只能有一个主键。
- FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
- CHECK - 保证列中的值符合指定的条件。
- DEFAULT - 规定没有给列赋值时的默认值。
名称 | 类型 | 约束条件 | 说明 |
---|---|---|---|
user_id | int(10) | 不允许为空,无重复 | 用户标识,主键,自动递增 |
user_name | varchar(20) | 不允许为空,无重复 | 用户名,唯一索引 |
user_pwd | varchar(60) | 不允许为空 | 用户密码 |
user_sex | tinyint(1) | 默认值为0 | 用户性别 1男0女 |
create_time | int(10) | 不允许为空 | 注册时间,时间戳 |
update_time | timestamp | 不允许为空 | 修改时间 |
根据如上结构创建表
# 创建数据库
create database mydb;
# 选择当前数据库
use mydb;
## 创建用户表结构
create table `users`(
`user_id` int(10) not null auto_increment comment '用户ID' primary key,
`user_name` varchar(20) not null comment '用户名' unique key,
`user_pwd` varchar(60) not null comment '用户密码',
`user_sex` tinyint(1) comment '0男1女' default '0',
`create_time` int(10) not null,
`update_time` timestamp not null default current_timestamp() on update current_timestamp()
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
修改数据库表
修改表指的是修改数据库中已经存在的数据表的结构。MySQL 使用 ALTER TABLE 语句修改表。常用的修改表的操作有修改表名、修改字段数据类型或字段名、增加和删除字段、修改字段的排列位置、