MySQL
SQL 分类
SQL语言在功能上主要分为如下3大类:
DDL(Data Definition Languages、数据定义语言),这些语句定义了不同的数据库、表、视图、索
引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构。
主要的语句关键字包括CREATE 、DROP 、ALTER 等。
DML(Data Manipulation Language、数据操作语言),用于添加、删除、更新和查询数据库记
录,并检查数据完整性。
主要的语句关键字包括INSERT 、DELETE 、UPDATE 、SELECT 等。
SELECT是SQL语言的基础,最为重要。
DCL(Data Control Language、数据控制语言),用于定义数据库、表、字段、用户的访问权限和
安全级别。
主要的语句关键字包括GRANT 、REVOKE 、COMMIT 、ROLLBACK 、SAVEPOINT 等。
因为查询语句使用的非常的频繁,所以很多人把查询语句单拎出来一类:DQL(数据查询语言)。
还有单独将COMMIT 、ROLLBACK 取出来称为TCL (Transaction Control Language,事务控制语
言)。
基本规则
- SQL 可以写在一行或者多行。为了提高可读性,各子句分行写,必要时使用缩进
- 每条命令以 ; 或 \g 或 \G 结束
- 关键字不能被缩写也不能分行
- 关于标点符号
- 必须保证所有的()、单引号、双引号是成对结束的
- 必须使用英文状态下的半角输入方式
- 字符串型和日期时间类型的数据可以使用单引号(' ')表示
- 列的别名,尽量使用双引号(" "),而且不建议省略as
- MySQL 在 Windows 环境下是大小写不敏感的
- MySQL 在 Linux 环境下是大小写敏感的
- 数据库名、表名、表的别名、变量名是严格区分大小写的
- 关键字、函数名、列名(或字段名)、列的别名(字段的别名) 是忽略大小写的。
- 推荐采用统一的书写规范:
- 数据库名、表名、表别名、字段名、字段别名等都小写
- SQL 关键字、函数名、绑定变量等都大写
数据库
创建
CREATE DATABASE [IF NOT EXISTS] name [CHAHRCTER SET utf8] [COLLATE utf8_bin];
CHAHRCTER字符集
COLLATE校对规则 utf8_bin区分大小写 ,默认utf8_general_ci不区分大小写
查看删除数据库
DROP DATABASE [IF EXISTS] name;
SHOW DATABASES ;
SHOW CREATE DATABASE hello;#显示数据库创建语句
备份和恢复数据库
mysqlump -u 用户名 -p -B 数据库1 数据库2 数据库3 >d:\\文件名.sql #doc命令
mysqlump -u 用户名 -p 数据库1 表1 表2 表3 >d:\\文件名.sql #doc命令
Source 文件名.sql #mysql命令
创建表
CREATE TABLE table_name
(
field datatype,
field datatype,
field datatype,
)character set字符集 collate 校对规则 engine引擎
MySQL常用数据类型
整型
| 类型 | 占字节数 | 最大宽度 | 无符号的数值范围 | 有符号的数值范围 |
|---|
| bit(m) | bit(m) m1到64 | | | |
| int[unsigned] | 4 | int(11) | 0 到 2^32 – 1 | -2^31 到 2^31 – 1 |
| tinyint[unsigned] | 1 | tinyint(4) | 0 到 2^8 – 1 | - 2^7 到 2^7 – 1 |
| smallint[unsigned] | 2 | smallint(6) | 0 到 2^16 – 1 | - 2^15 到 2^15 – 1 |
| mediumint[unsigned] | 3 | mediumint(9) | 0 到 2^24 – 1 | - 2^23 到 2^23 – 1 |
| bigint[unsigned] | 8 | bigint(20) | 0到 2^64 – 1 | - 2^63 到 2^63 – 1 |
CREATE TABLE `BIT`(num BIT(8));
INSERT INTO `BIT` VALUES (123); #01111011
INSERT INTO `BIT` VALUES (255);
SELECT *FROM `BIT` WHERE num=255; #11111111
浮点型
| 类型 | 所占字节数 | 备注 |
|---|
| float(m,d) | 4 | 单精度,m 为总个数, d 小数点后边位数 ,默认是float(10,2) |
| double(m,d) | 8 | 双精度,m 为总个数,d为小数点后边位数,默认是double(16,4) |
| decimal(m,d) | m字节(mysql3.23之前版本),m+2字节(mysql 3.23以后版本 ) | 储存为字符串的浮点数 m大小为1-256,d的大小为0-30,默认是decimal(18,9) |
CREATE TABLE `DECIMAL`(
num1 float,
num2 double,
num3 decimal(30,20)
);
INSERT INTO `DECIMAL` VALUES (88.12345678912345,88.12345678912345,88.12345678912345);
SELECT *FROM `DECIMAL`;
88.1235,88.12345678912345,88.12345678912345000000
字符串类型
| 类型 | 字节范围大小 | 备注 |
|---|
| varchar | 0-65535字节,使用中根据编码实际情况填写,如utf8为65532/3字符,gbk为65532/2字符 | 可变长度字符串(必须指定长度) [0-2^16-1] |
| char | 0-255字节 | 固定长度字符串 |
| tinytext | 0-255字节 | 短文本字符串(不能指定长度) |
| text | 0-65535字节 | 长文本数据 |
| longtext | 0-4294967295字节 | 极大文本数据 [0-2^24-1] |
| tinyblob | 0-255字节 | 二进制字符串(存储图片,视频等)(不能指定长度) |
| blob | 0-65535字节 | 二进制形式的长文本 [0-2^16-1] |
| longblob | 0-4294967295字节 | 二进制形式的极大文本数据 |
CHAR(4) #这个4表示字符数(最大255),不是字节数,中英文都放4个,按字符计算
VARCHAR(4) #这个4表示字符数,中英文都以定义好的表的编码来存放数据,一个字符所占的字节数取决于编码
日期和时间类型
| 类型 | 所占字节数 | 存储格式 | 支持的范围 |
|---|
| date | 3 | YYYY-MM-DD | ‘1000-01-01’ 到 ‘9999-12-31’ |
| time | 3 | HH:MM:SS | ‘-838:59:59’ 到 ‘838:59:59’ |
| datetime | 8 | YYYY-MM-DD HH:MM:SS | ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’ |
| timestamp | 4 | 自动存储记录修改的时间,设置值时只允许设置数字类型的值 | 时间戳,从1970-01-01 00:00:00到当前的时间差值。 |
| year | 1 | YYYY | 1901 到 2155 |
复合类型
| 类型 | 说明 | 举例 |
|---|
| set | 集合类型 | set(‘num1’,‘num2’,‘num3’) |
| enum | 枚举类型 | enum(‘num1’,‘num2’,‘num3’) |
修改表
CREATE TABLE `emp`(
`id` INT,
`name` VARCHAR(32),
`sex` CHAR(1),
`birthday` DATE,
`entry_date` DATETIME,
`job` VARCHAR(32),
`salary` DOUBLE,
`resume` TEXT
)CHARSET utf8 COLLATE utf8_bin ENGINE INNODB;
INSERT INTO `emp` VALUES
(100,'name1','男',
'2000-11-11','2010-11-10 11:11:11',
'job1',3000,'resume1');
添加列
ALTER TABLE tablename ADD (column databyte [DEFAULT expr]);
ALTER TABLE emp ADD `image` VARCHAR(32) NOT NULL DEFAULT '' AFTER resume;
查看表结构
DESC TableName;
DESC emp;
修改列
ALTER TABLE TableName MODIFY (column databyte [DEFAULT expr]);
ALTER TABLE emp MODIFY job VARCHAR(60) NOT NULL DEFAULT '';
修改列名
ALTER TABLE TableName CHANGE `OldName` `NewName` VARCHAR(32) NOT NULL DEFAULT '';
删除列
ALTER TABLE TableName DROP (column databyte);
ALTER TABLE emp DROP sex;
修改表名
RENAME TABLE emp TO employee;
修改表的字符集
ALTER TABLE employee CHARACTER SET utf8;