一、SQL通用语法
1、SQL语句可以单行或多行书写,以分号结尾
2、SQL语句可以使用空格/缩进来增强语句的可读性
3、MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
4、注释:
(1)单行注释:– 注释内容 或 #注释内容(注意:“–”后需要空一格)
(2)多行注释:注释内容 /* */
二、SQL分类
1、DDL(Data Definition Language):数据定义语言,用来定义数据库对象(数据库、表、字段)
2、DML(Data Manipulation Language):数据操作语言,用来对数据库表中的数据进行增删改
3、DQL(Data QueryLanguage):数据查询语言,用来查询数据中表的记录
4、DCL(Data Control Language):数据控制语言,用来创建数据库用户、控制数据库的访问权限
三、SQL分类详解
1、DDL
1.1 定义
数据定义语言(Data Definition Language,DDL):用来定义数据库对象(数据库、表、字段),主要用于对数据库、数据表、数据表字段进行操作。
1.2 核心指令
(1)创建:CREATE。主要用于创建数据库、数据表
(2)删除:DROP。主要用于删除数据库、数据表
(3)修改:ALTER。主要用于添加/修改字段、修改数据类型等。
1.3 DDL-数据库操作命令
1.3.1 数据库操作常用命令
1、查询所有数据库: show databases;
2、查询当前数据库: select database();
3、创建数据库: create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则];
4、删除:drop database [if exists] 数据库名;
5、使用:use 数据库名;
1.3.2 数据库操作实例
1、查询所有数据库: show databases;
2、创建数据库:create database XXX;
or create database if not exists XXX;
(可以避免已经存在相同名字的数据库)
使用第二种方式创建数据库,可以看到如果数据库已存在,会抛出一个warning。
3、创建一个指定字符集的数据库: create database ittest default charset utf8mb4;
4、删除: drop database XXX
; or drop database if exists XXX;
删除一个不存在的数据库,会出现报错,但是使用第二种方法删除,则会隐藏报错,跑出警告。
5、使用数据库:use XXX;
若在操作过程中,忘记使用的是哪个数据库,则可使用 select database();
查询当前数据库
若需要切换数据库,直接使用 use XXX;
即可
1.4 DDL-数据表操作命令
1.4.1 数据表操作常用命令
1、表查询
(1)查询当前数据库所有表:show tables;
(2)查询表结构: desc 表名;
(3)查询指定表的建表语句(详细): show create table 表名;
2、创建表
create table 表名(
字段1 字段1类型 [comment 字段1注释],
字段2 字段2类型 [comment 字段2注释],
....
字段n 字段n类型 [comment 字段n注释],
) [comment 表注释];
3、修改表
(1)添加字段: alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];
(2)修改数据类型: alter table 表名 modify 字段名 新数据类型(长度);
(3)修改字段和字段类型: alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束];
(4)删除字段: alter table 表名 drop 字段名;
(5)修改表名: alter table 表名 rename to 新表名;
(6)删除表:drop table [if exists] 表名;
(7)删除指定表,并重新创建该表:truncate table 表名;
1.4.2 数据表操作实例
1、创建表操作实例:查询与创建
(1)切换数据库(这里切换到练习用数据库): use XXX;
(2)创建表:create table XXX();
(3)查看数据库内数据表情况: show tables;
(4)查询表结构: decs tb_user;
(5)查询指定表的建表语句(查看详细内容): show create table tb_user;
其中:
‘ENGING’为存储引擎
‘DEFAULT CHARSET’为存储字符类型
‘COLLATE’为排列规则
2、数据类型实例
设计一张员工信息表,要求如下:
a. 编号(纯数字)
b. 员工工号(字符串类型,长度不超过10位)
c. 员工姓名(字符串类型,长度不超过10位)
d. 性别(男/女,存储一个汉字)
e. 年龄(正常人年龄,不可能存储负数)
f. 身份证号(二代身份证号均为18位)
g. 入职时间(取值年月日即可)
(1)添加表结构
查询刚刚的添加
3、表结构修改实例
(1)添加实例
为刚刚创建的emp表增加一个新的字段“昵称”为nickname,类型为varchar(20)
同样,添加完可以可以查询一下,desc emp;
(2) 修改实例
将emp表的nickname字段修改为username, 类型为varchar(30)。查询,修改成功
(3)删除实例
将emp表的字段username删除,查询,删除成功
(4)修改表名实例
将emp表的表名修改为employee
(5)删除表
① 删除
② 删除并重建(清空数据,保留表结构)
在删除表时,只会删除表中的数据
2、补充:数据类型
在MySQL中,数据类型一般分为数值类型、字符串类型、日期时间类型等
2.1 数值类型
类型 | 大小 | 有符号(SIGNED)范围 | 无符号(UNSIGNED)范围 | 描述 |
---|---|---|---|---|
TINYINT | 1 byte | (-128, 127) | (0, 255) | 小整数值 |
SMALLINT | 2 bytes | (-32768, 32767) | (0, 65535) | 大整数值 |
MEDIUMINT | 3 bytes | (-8388608, 8388607) | (0, 16777215) | 大整数值 |
INT或INIYEGER | 4 bytes | (-2147483648, 2147483647) | (0, 4294967295) | 大整数值 |
BIGINT | 8 bytes | (-2^63 , 2^63-1) | (0 , 2^64-1) | 极大整数值 |
FLOAT | 4 bytes | (-3.402823466 E+38,3.402823466351 E+38 ) | 0和(-1.175494351E-38,3.402823466351 E+38 ) | 单精度浮点数值 |
DOUBLE | 8 bytes | (-1.797693134862315 E+308, 1.7976931348623157 E+308) | 0和(2.2250738585072014 E-308, 1.7976931348623157 E+308) | 双精度浮点数值 |
DECIMAL | 依赖M(精度)和D(标度)的值 | 依赖M(精度)和D(标度)的值 | 小数值(精确定点数) |
2.2 字符串类型
类型 | 大小 | 描述 |
---|---|---|
CHAR | 0~255 bytes | 定长字符串 |
VARCHAR | 0~65535 bytes | 变长字符串 |
TINYBLOB | 0~255 bytes | 不超过255个字符的二进制数据 |
TINYTEXT | 0~255 bytes | 短文本字符串 |
BLOB | 0~65535 bytes | 二进制形式的长文本数据 |
TEXT | 0~65535 bytes | 长文本数据 |
MEDIUMBLOB | 0~16777215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0~16777215 bytes | 中等长度文本数据 |
LONGBLOB | 0~4294967285 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0~4294967285 bytes | 极大文本数据 |
2.3 日期时间类型
类型 | 大小 | 范围 | 格式 | 描述 |
---|---|---|---|---|
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 00:00:01 至 2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 混合时间和时间值,时间戳 |
————————————————
以上内容仅为学习笔记,若有问题,请大家指正批评!!