MySQL基础
一、数据库概述
数据库(Database,DB)一个按照一定的数据结构来组织、存储数据的仓库。用户可以对数据进行增加、修改、删除和查询(简称“增删改查”)操作。
数据库管理系统(Database Management System,DBMS)是指一种操作和管理数据库的软件,用来建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户可以通过它访问数据库中表的数据。
按照数据的组织形式,数据库可以分为关系型数据库(有MySQL, Oracle, SQL Server等)和非关系型数据库(也称NoSQL, 有HBase, MongoDB, Redis等)两种。
二、MySQL简介
MySQL是一个流行的关系型数据库管理系统,由瑞典MySQLAB公司开发, 目前属于Oracle旗下产品。
MySQL拥有体积小、速度快、性能高、使用简单等优点, 开放源代码, 使用门槛低。
Tips:(LAMP组合)
…操作系统-Linux
…Web服务器-Apache
…数据库-MySQL
…服务器端脚本解释器-PHP
三、MySQL数据库管理
Tips:
查看mysql数据库版本的几种方法
- 创建数据库
create database 数据库名;
- 查询数据库
show databases;
- 删除数据库
drop database 数据名;
四、MySQL数据表管理
数据库的数据文件存放在MySQL的data目录下,每个数据库对应一个目录,在数据库目录中存储各个数据表文件。每个数据表对应3个文件。分别为.frm、.myd、.myi类型文件。
- 创建数据表
use 数据库名;
create table 表名(字段名 类型(长度), 字段名 类型(长度))
创建数据库语句要明确数据表的结构、各字段的名称、类型及长度等信息。 - 查看数据表
show tables; (–列出所有表名)
describe 库名.表名; (–查看某一个表在具体结构)
若使用use语句进入某个数据库,则可以用"describe 表名"直接查看该库中某表的结构 - 修改数据表
(1) 修改表名
alter table 旧表名 rename 新表名;
(2) 修改字段名
alter table 表名 change 旧属性名 新属性名 新数据类型;
如果不想修改该字段的数据类型,则只需写成原来的类型即可
(3) 修改字段类型
alter table 表名 modify 属性名 数据类型;
(4) 增加字段
alter table 表明 add 属性名 数据类型;
(5) 删除字段
alter table 表名 drop 属性名; - 删除数据表
use 数据库名;
drop 表名;
或
drop table 数据库名.表名;
五、MySQL用户管理
为保证数据库的安全性,MySQL提供了一套完善的数据库用户及权限管理系统。
在初始化MySQL后,会默认创建一个root用户,这个用户属于数据库超级管理员角色,具有一切权限,但root用户权限太大,以至于该用户可能误操作或可以破坏数据库系统,容易造成严重的安全问题。因此,需要创建一些权限小的用户,用于对普通数据库的管理运维,以及通过数据库进行开发。MySQL用户账户的创建、授权及其他管理,均需使用root用户。
5. 创建与删除用户
(1) 创建用户
create user ‘username’@’host’ identified by ‘password’;
username-要创建的用户名
host-指定用户在哪个主机上可以登录,若该用户是本地用户可以使用localhost,若想让该用户从任意远程主机登录,则可以使用通配符%
password-表示该用户的登录密码,密码可以为空,若密码为空,则用户不需要密码登录服务器
例如:
(2) 删除用户
drop user ‘username’@‘host’;
6. 授予与回收用户权限
(1) 授予用户权限
grant priviledges on dbname.tablename to ‘username’@‘host’;
priviledges-要授予用户的操作权限(select、insert、update等)如果要授予用户所有权限则使用all
dbname-数据库名
tablename-数据表名
如果要对所有的数据库和表的相应操作权限,则可用“*”表示
注意:分 号 要 记 得 加 上
(2) 回收用户权限
revoke priviledges on dbname.tablename from ‘username’@‘host’;
7. 设置与更改用户密码
set password for ‘username’@‘host’ = password(‘newpassword’);
-----------------------------------------我是分界线------------------------------------------
六、SQL基本语法
SQL(结构化查询语言):
(1)DDL-数据定义语句,定义了不同数据库、表、列、索引等数据库对象。常用的语句关键字包括create,drop,alter等。
(2)DML-数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性。常用语句的关键字包括insert,delete,update,select等。
(3)DCL-数据控制语句,定义了数据库、表、字段、用户的访问权限和安全级别。常用语句的关键字包括grant,revoke等。
1. MySQL基本数据类型:数值型、字符串、日期和时间类型
(1)数值型:整型、浮点型、定点型
数据类型 | 存储空间 | 表示范围 |
TINY INT | 1 | -128~127 |
SMALL INT | 2 | -32768~32767 |
MEDIUM INT | 3 | -8388608~8388607 |
INT | 4 | |
BIG INT | 8 | |
FLOAT(M,D) | 4 | 8位精度,M数字总位数,D小数点后数字位数 |
DOUBLE(M,D) | 8 | 8位精度,M数字总位数,D小数点后数字位数 |
(2)字符串类型:char、varchar、binary、varbinary、blob、text、enum、set
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255字节 | 定义固定长度字符串 |
VARCHAR | 0-65535 字节 | 定义可变长度字符串 |
TINYBLOB | 0-255字节 | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
BLOB | 0-65 535字节 | 二进制形式的长文本数据 |
TEXT | 0-65 535字节 | 长文本数据 |
MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
ENUM | 0-4 294 967 295字节 | 极大文本数据 |
- CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
CHAR : 当你想要储存一个长度不足 255 的字符时,MySQL 会用空格来填充剩下的字符。因此在读取数据时,char 类型的数据要进行处理,把后面的空格去除。
总结起来,有几点:
- 经常变化的字段用 varchar
- 知道固定长度的用 char
- 尽量用 varchar
- 超过 255 字符的只能用 varchar 或者 text
- 能用 varchar 的地方不用 text
- BINARY 和 VARBINARY用来存储二进制字符串,存储和使用方式与CHAR和VARCHAR类似。它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值。另外,当保存BINARY值时,会在它右边填充0x00(零字节)值以达到指定长度。
- BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。
BLOB和TEXT的不同点:
- 当保存或检索BLOB和TEXT的值时不删除尾部空格
- 在比较时,会用空格对TEXT进行扩充以适应比较的对象
- 对于BLOB和TEXT的索引,必须指定索引前缀的长度。
- BLOB和TEXT不能有默认值
- ENUM表示枚举类型
- SET表示集合对象,可包含0~64个成员,其所占存储空间的大小是因集合成员数量的不同而有所不同的。
集合成员数量 | 所占存储空间(Bytes) |
---|---|
1~8 | 1 |
9~16 | 2 |
17~24 | 3 |
25~32 | 4 |
32~64 | 8 |
SET和ENUM的不同点:
- SET可以一次选择多个成员,ENUM只能选择一个
(2)日期和时间类型:DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
TIMESTAMP类型有专有的自动更新特性,将在后面描述。
类型 | 大小(字节) | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | ‘-838:59:59’/‘838:59:59’ | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 UTC~ 2038-1-19 03:14:07 UTC | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
2.数据插入(INSERT语句)
插入语句 insert into 表名 values (值1, 值2, …);
INSERT INTO 表名 VALUES (值1, 值2, ..);
此时values后的值的排列要与该表中存储的列名排列一致
INSERT INTO 表名 (列1,列2, ...) VALUES (值1, 值2, ....);
此时values后的值的排列要与into句子后的列名排列一致