SQL基础
对数据库进行查询和修改操作的语言叫做SQL(Structured Query language, 机构化查询语言)。
SQL是一种数据库查询和程序设计的语言,用于存取数据以及查询,更新和管理关系数据库系统。
1、数据定义语言(Date Definition Language, DDL)
用来创建和删除数据库以及表 等对象
- DROP : 删除
- CREATE : 创建
- ALTER : 修改
2、数据操作语言(Date Manipulation Language, DML)
用来变更表中的记录
- SELECT : 查询表数据
- INSERT : 向表中插入新数据
- UPDATE : 更新表数据
- DELETE : 删除表数据
3、数据查询语言(Date Query language , DQL)
用来查询表中的记录,主要包含SELECT命令,来查询表中的数据
4、数据控制语言(Date Control language, DCL)
用来确认或者取消对数据库中的数据进行的变更。还可以对数据库中的用户设定权限
- GRANT : 赋予用户操作权限
- REVOKE : 取消用户的操作权限
- COMMIT : 确认对数据库中的数据进行的变更
- ROLLBACK : 取消对数据库中的数据进行的变更
5、数据库所有的命令可以跨行书写,但是必须一“ ; ” , 英文的分号结束
数据库操作
1、查看数据库
在MYSQL中,使用 SHOW DATABASES 语句来查看或显示当前用户权限范围以内的数据库
//语法格式
SHOW DATABASES [LIKE '数据库名'];
//常用查看所有数据库
SHOW DATABASES;
SHOW DATABASES LIKE '%A'; //查看以A结尾的数据库
SHOW DATABASES LIKE 'A%'; //查看以A开头的数据库
SHOW DATABASES LIKE '%A%'; //查看包含A的数据库
LIKE “数据库名” : 可选项,用于匹配指定的数据库名称,完全匹配和部分匹配,数据库名用’ ’
2、创建数据库
在MYSQL中,使用CREATE DATABASE 语句来创建数据库
MYSQL不允许在同一系统下创建两个相同名称的数据库
CREATE DATABASE [IF NOT EXISTS] <数据库名>
[[DEFAULT] CHARACTER SET <字符集名>]
[[DEFAULT] COLLATE <校对集名>];
数据库名 : 数据库名称必须符合操作系统的文件夹命名规则,不能以数字开头
if not exists : 在创建数据库之前进行判断,只有数据库不存在时才执行创建操作。
[default] character set : 指定数据库字符集,不指定使用系统默认字符集
[default] collate : 指定字符集的默认校对规则
CREATE DATABASE IF NOT EXISTS test01;
3、修改数据库
只能对数据库使用的字符集和校对规则进行修改,数据库的这些特性都存储在db.opt文件中
ALTER DATABASE [数据库名]
[[DEFAULT] CHARACTER SET <字符集名>] | [[DEFAULT] COLLATE <校对集名>];
alter database 用于更改数据库的全局特性
4、删除数据库
DROP DATABASE [IF EXISTS] <数据库名>;
if exists : 用于防止当数据库不存在时发生的错误
drop database : 删除数据库中所有的表格并同时删除数据库
5、选择数据库
USE <数据库名>;
在mysql中,use语句用来选择当前的操作的数据库,直到遇到下一个use
use语句用来完成数据库到数据间的跳转
当使用 create database 后,数据库不会作为当前数据库,需要使用use指定
6、注释
#单行注释
-- 单行注释,-- 注释符后加个空格才生效
/*多行注释
mysql 不限制注释的数量
*/
数据类型
mysql数据类型大概分为5中
-
数值类型
整数类型和浮点数类型统称为数值数据类型
整数类型 :TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT
浮点数类型 : FLOAT、DOUBLE
定点数类型 : DECLMAL
-
日期/时间类型
YEAR、TIME、DATE、DATETIME、TIMESTAMP
-
字符串类型
CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET、…
-
二进制类型
BIT、BINARY、BINARY、VARBINARY、BLOB、MEDIUMBLOB、LONGBLOB
1、整数类型
整数类型又称数值型数据,主要用来存储数字
不同的整数类型有不同的取值范围,并且需要不同的存储空间,应根据实际需要选择合适的类型,这样有利于提高查询的效率和节省存储空间
类型名称 | 说明 | 存储需求 |
---|---|---|
TINYINT | -128〜127 | 0 〜255 |
SMALLINT | -32768〜32767 | 0〜65535 |
MEDIUMINT | -8388608〜8388607 | 0〜16777215 |
INT (INTEGER) | -2147483648〜2147483647 | 0〜4294967295 |
BIGINT | -9223372036854775808〜9223372036854775807 | 0〜18446744073709551615 |
TINYINT 1个字节
SMALLINT 2个字节
MEDIUMINT 3个字节
INT(integhr) 4个字节
BIGINT 8个字节
整数类型字段可以添加 AUTO_INCREMENT 自增约束条件
提示: 显示宽度和数据类型的取值范围无关的。显示宽度只是指明MySQL最大可能显示的数字个数,数值的位数小于指定的宽度是会有空格填充。如果插入了大于显示宽度的值,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能够显示出来
2、小数类型
MySQL中使用浮点数和定点数来表示小数
浮点类型分为两种:
单精度浮点数 : FLOAT 双精度浮点数: DOUBLE
定点类型 : DECIMAL
FLOAT 4个字节
DOUBLE 8个字节
DECIMAL(M, D) /DEC M+2个字节
浮点数取值范围 M(1~255) 和 D(1~30) M表示宽度,D表示小数位数
decimal 默认D为0,M为10;
注意:
不论是定点还是浮点类型,如果用户指定的精度超出精度范围,则会四舍五入进行处理
在MySQL中,定点数以字符串形式存储,在对精度要求比较高的时候,使用decimal类型比较好
两个浮点数进行减法和比较运算时也容易出问题,尽量避免做浮点数的比较
3、日期和时间类型
每一个类型都有合法的取值范围,当指定不合法的值时,系统将“零”值出入数据库中
类型名称 | 日期格式 | 日期范围 | 存储需求 |
---|---|---|---|
YEAR | YYYY | 1901 ~ 2155 | 1 个字节 |
TIME | HH:MM:SS | -838:59:59 ~ 838:59:59 | 3 个字节 |
DATE | YYYY-MM-DD | 1000-01-01 ~ 9999-12-3 | 3 个字节 |
DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 8 个字节 |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC | 4 个字节 |
YEAR YYYY 1个字节
TIME HH:MM:SS 3个字节
DATE YYYY-MM-DD 3个字节
DATETIME YYYY-MM-DD HH:MM:SS 8个字节
TIMESTAMP YYYY-MM-DD HH:MM:SS 4个字节
-
YEAR
year 类型是一个单字节类型,表示年
-
以4位字符串或4位数字表示year, 范围’1901’ ~ ‘2155’
-
以2位字符串格式表示year : ‘00’~‘69’ ->2000~2069 ‘70’ ~ ‘99’ -> 1970~1999
超过取值范围的值被转换为2000
-
以两位数字表示YEAR, 1~69 ->2001~2069 70~99 -> 1970~1999
-
-
TIME
HH:MM:SS HH表示小时,MM表示分钟,SS表示秒
TIME 类型的取值范围为 -838:59:59~838:59:59,小时部分如此大的原因是 TIME 类型不仅可以用于表示一天的时间(必须小于 24 小时),还可能是某个事件过去的时间或两个事件之间的时间间隔(可大于 24 小时,或者甚至为负)
-
DATE
DATE 类型用于仅需要日期值时,没有时间部分,在存储时需要 3 个字节。日期格式为 ‘YYYY-MM-DD’,其中 YYYY 表示年,MM 表示月,DD 表示日。
-
DATETIME
-
TIMESTAMP
4、字符串类型
字符串类型用来存储字符串数据,还可以存储图片和声音的而精致数据。字符串可以区分或者不区分大小写的串比较,还可以使用正则表达式进行匹配查找
MySQL 中的字符串类型有 CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、ENUM、SET 等。
CHAR(M) 固定的长度非二进制字符串
VARCHAR(M) 变长非二进制字符串
TINYTEXT 非常小的非二进制字符串
TEXT 小的非二进制字符串
MEDIUMTEXT 中等大小的非二进制字符串
LONGTEXT 大的非二进制字符串
ENUM 枚举类型,只能有一个枚举字符串值
SET 一个设置,字符串对象可以有零个或多个SET成员
VARCHAR 和 TEXT 类型是变长类型,其存储需求取决于列值的实际长度,而不是取决于类型的最大可能尺寸。
-
CHAR 、VARCHAR
CHAR(M) 为固定长度字符串,在定义时指定字符串列长。当保存时,在右侧填充空格以达到指定的长度。M 表示列的长度,范围是 0~255 个字符。
VARCHAR(M) 是长度可变的字符串,M 表示最大列的长度,M 的范围是 0~65535。VARCHAR 的最大实际长度由最长的行的大小和使用的字符集确定,而实际占用的空间为字符串的实际长度加 1。
-
TEXT
EXT 列保存非二进制字符串,如文章内容、评论等。当保存或查询 TEXT 列的值时,不删除尾部空格。
TEXT 类型分为 4 种:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。不同的 TEXT 类型的存储空间和数据长度不同。
- TINYTEXT 表示长度为 255(28-1)字符的 TEXT 列。
- TEXT 表示长度为 65535(216-1)字符的 TEXT 列。
- MEDIUMTEXT 表示长度为 16777215(224-1)字符的 TEXT 列。
- LONGTEXT 表示长度为 4294967295 或 4GB(232-1)字符的 TEXT 列。
-
E