目录:
》SQL通用规则说明
SQL分类:
》DDL(数据定义:用于操作数据库、表、字段)
》DML(数据编辑:用于对表中的数据进行增删改)
》DQL(数据查询:用于对表中的数据进行查询)
》DCL(用户权限:用于创建用户、修改数据库访问权限等)
SQL通用规则说明:
SQL语句可以单行编写,也可以多行编写,以英文分号结束
SQL语句可以使用空格、缩进来美化SQL语句
SQL语句不区分大小写, 关键字建议大写,表、字段等建议小写
注释:SQL语句中的单行注释可以使用 -- 注释内容;多行注释可以使用/*注释内容*/
1. 数据库操作语法
-- (查看所有数据库)
show databases;
-- (切换数据库)
use 数据库名
-- (查看当前所在数据)
select database();
-- (创建数据库)
create database 数据库名;
-- (创建之前检查数据库是否存在,如果存在则不创建)
create database if not exists 数据库名;
-- (创建数据库,并设置字符集)
create database 数据库名 default charset utf8mb4;
-- (删除数据库)
drop database 数据库名;
2. 表操作语法(注意:创建表之前需要切换数据库)
-- (查询当前数据库所有表)
show tables;
-- (创建表)
create table user_table(
id int comment '编号',
name varchar(50) comment '姓名',
age int comment '年龄',
gender varchar(1) comment '性别'
) comment '用户表';
-- (查询表结构)
desc 表名;
-- (查询表的创建语句)
show create table 表名;
-- (清空表数据)
delete table 表名;
-- (删除表)
drop table 表名;
-- (修改字段名)
ALTER TABLE 表名 MODIFY COLUMN 旧字段名 新字段名 数据类型;
-- (修改字段数据类型)
ALTER TABLE 表名 MODIFY COLUMN 字段名 新数据类型;
3. mysql中的数据类型
数字类型:整数类型包括 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,浮点数类型包括 FLOAT 和 DOUBLE,定点数类型为 DECIMAL。
日期/时间类型:包括 YEAR、TIME、DATE、DATETIME 和 TIMESTAMP。
字符串类型:包括 CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM 和 SET 等。
二进制类型:包括 BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。
以上这些数据类型不用记,下面我会整一张表你就懂了
|-------------|-------------|------------------------------|--------------------------------------------------------|---------------------------------------|
| 分类 | 类型(关键字) | 字节 | 有符号 | 无符号 |
| 数字类型(整数类型) | TINYINT | 1 字节 | -128 到 127 | 0 到 255 |
| 数字类型(整数类型) | SMALLINT | 2 字节 | -32,768 到 32,767 | 0 到 65,535 |
| 数字类型(整数类型) | MEDIUMINT | 3 字节 | -8,388,608 到 8,388,607 | 0 到 16,777,215 |
| 数字类型(整数类型) | INT | 4 字节 | -2,147,483,648 到 2,147,483,647 | 0 到 4,294,967,295 |
| 数字类型(整数类型) | BIGINT | 8 字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 0 到 18,446,744,073,709,551,615 |
| 数字类型(浮点数类型) | FLOAT | 4 字节 | -3.402823466E+38 到 -1.175494351E-38 | 0 和 1.175494351E-38 到 3.402823466E+38 |
| 数字类型(浮点数类型) | DOUBLE | 8 字节 | -1.7976931348623157E+308 到 -2.2250738585072014E-308 | 0 和 2.2250738585072014E-308 |
| 数字类型(定点数类型) | DECIMAL | 取决于指定的精度和小数位数 | 存储范围和精度因具体实现而异,通常支持指定的精度和小数位数。 ||
| 日期/时间类型 | YEAR | 1 字节 | | |
| 日期/时间类型 | TIME | 3 字节 | | |
| 日期/时间类型 | DATE | 3 字节 | | |
| 日期/时间类型 | DATETIME | 8 字节 | | |
| 日期/时间类型 | TIMESTAMP | 4 字节 | | |
| 字符串类型 | CHAR | 固定长度,取决于定义的字符长度。 | | |
| 字符串类型 | VARCHAR | 变长,取决于实际存储的字符长度。 | | |
| 字符串类型 | BINARY | 固定长度,取决于定义的字节长度。 | | |
| 字符串类型 | VARBINARY | 变长,取决于实际存储的字节长度 | | |
| 字符串类型 | BLOB | 根据实际存储的数据量不同而变化 | | |
| 字符串类型 | TEXT | 根据实际存储的字符量不同而变化 | | |
| 字符串类型 | ENUM | 根据所定义的枚举值数量而变化 | | |
| 字符串类型 | SET | 根据所定义的集合值数量而变化 | | |
| 二进制类型 | BIT | 根据定义的位数进行计算,最小单位为1字节 | | |
| 二进制类型 | BINARY | | | |
| 二进制类型 | VARBINARY | | | |
| 二进制类型 | TINYBLOB | 根据实际存储的数据量不同而变化,最大长度为 255 字节 | | |
| 二进制类型 | BLOB | | | |
| 二进制类型 | MEDIUMBLOB | 根据实际存储的数据量不同而变化,最大长度为 16MB | | |
| 二进制类型 | LONGBLOB | 根据实际存储的数据量不同而变化,最大长度为 4GB | | |
4. (有符号)和(无符号)的概念
接下来要理解一下(有符号)和(无符号)的概念,别的文章对这两个东西描述太官方了,不照顾小白。(有符号)=(有负号),(无符号)=(无符号),假如说你想存储"-100"这个数, 首先这个是一个数字,那你可以选择数字类型有(TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT)等,且这是一个带有负号的数字, 那就得用有符号类型。
注意点:
(有符号)和(无符号)是在建表或者修改表字段的时候使用
大部分数据类型一般默认指定的都是(有符号)
(有符号)字段可以存储(无符号)数字,(无符号)字段也可以存储(有符号)数字,为什么会这样呢? 那么区分他们的意义在哪? 我也不知道,根据官方的话来说可以提高性能和可读性。
(有符号)字段除了存储带有-号的数字, 还可以存储带别的符号的数字么?不行,带别的符号那属于字符串类型了。
那么如何给字段定义(有符号)和(无符号)呢?请看如下
需求:将"-100" 和 "100" 这两个数字分别用int类型的(有符号)和(无符号)存储到名为"test_table"的表中
-- (建表时定义)
create table test_table (
nub int unsigned, -- 无符号
nub2 int signed -- 有符号,signed 可以省略
);
-- (修改表时定义)
ALTER TABLE test_table MODIFY COLUMN nub2 INT unsigned; -- 将nub2字段修改为(无符号)
如何查看字段是否是(有符号)字段还是(无符号)字段呢?通过desc就可以看到,如下
5. 增、删、改
添加数据:insert
修改数据:update
删除数据:delete
5.1 添加数据
- 给指定字段添加数据
insert into 表名 (字段1,字段2,...) values (值1,值2,...);
- 给全部字段添加数据
insert into 表名 values (值1,值2,...);
- 添加多行数据
insert into 表名 (字段1,字段2,...) values (值1,值2,...),(值1,值2,...),(值1,值2,...);
insert into 表名 values (值1,值2,...),(值1,值2,...),(值1,值2,...);
注意:添加值时,如果值时字符串,则需要""引号括起来
5.2 更新数据
update 表名 set 字段名1 = 新值1,字段名2=新值2,...where 条件
注意:如果不加where条件, 则一整列的数据都将被修改
5.3 删除数据
-- (删除某一行数据)
delete from 表名 where 条件
-- (删除整张表的数据)
delete from 表名
-- (删除某个字段的某个数据,不是删除一整行数据【用更新语句就可以解决啦,更新为空】)
update 表名 set 字段1=null where 条件
下一章节讲解基础查询