SQL笔记|青训营

136 阅读6分钟

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]4int(11)0 到 2^32 – 1-2^31 到 2^31 – 1
tinyint[unsigned]1tinyint(4)0 到 2^8 – 1- 2^7 到 2^7 – 1
smallint[unsigned]2smallint(6)0 到 2^16 – 1- 2^15 到 2^15 – 1
mediumint[unsigned]3mediumint(9)0 到 2^24 – 1- 2^23 到 2^23 – 1
bigint[unsigned]8bigint(20)0到 2^64 – 1- 2^63 到 2^63 – 1
CREATE TABLE `BIT`(num BIT(8));
-- m=8 表示一个字节0-255 --
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

字符串类型

类型字节范围大小备注
varchar0-65535字节,使用中根据编码实际情况填写,如utf8为65532/3字符,gbk为65532/2字符可变长度字符串(必须指定长度) [0-2^16-1]
char0-255字节固定长度字符串
tinytext0-255字节短文本字符串(不能指定长度)
text0-65535字节长文本数据
longtext0-4294967295字节极大文本数据 [0-2^24-1]
tinyblob0-255字节二进制字符串(存储图片,视频等)(不能指定长度)
blob0-65535字节二进制形式的长文本 [0-2^16-1]
longblob0-4294967295字节二进制形式的极大文本数据
CHAR(4) #这个4表示字符数(最大255),不是字节数,中英文都放4个,按字符计算
VARCHAR(4) #这个4表示字符数,中英文都以定义好的表的编码来存放数据,一个字符所占的字节数取决于编码

日期和时间类型

类型所占字节数存储格式支持的范围
date3YYYY-MM-DD‘1000-01-01’ 到 ‘9999-12-31’
time3HH:MM:SS‘-838:59:59’ 到 ‘838:59:59’
datetime8YYYY-MM-DD HH:MM:SS‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’
timestamp4自动存储记录修改的时间,设置值时只允许设置数字类型的值时间戳,从1970-01-01 00:00:00到当前的时间差值。
year1YYYY1901 到 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;