SQL语言是我们在使用数据库中必备的基础,接下来我会将SQL语言按4个分类来讲述我对于Mysql中SQL语言的理解与实践~
目录
1.SQL语言概述
1.1 SQL通用语法
1.2 SQL分类
1.3 DDL语句
SQL语句可以单行或者多行编写,以分号结尾
SQL语句可以使用空格/缩进来增强语句可读性
MySQL中的SQL语句不区分大小写
注释:
单行注释:-或者#
多行注释:/* 注释内容 */
分类 | 说明 |
---|---|
DDL | 数据定义语言,用来定义数据库对象(数据库,表,字段) |
DML | 数据操作语言,用来对数据库表中的数据进行增删改 |
DQL | 数据查询语言,用来查询数据库中表的记录 |
DCL | 数据库控制语言,用来创建数据库用户、控制数据库的访问权限 |
1.3.1 数据库操作
查询
查询所有数据库
SHOW DTATBASES;
###实践操作
mysql> show databases;
+---------------------+
| Database |
+---------------------+
| information_schema |
| mysql |
| performance_schema |
| runoob |
| sqltest |
| student |
| student_system |
| studentgrade_system |
| studentmanagement |
| sys |
| test |
| test1 |
| xiaomissm |
+---------------------+
查询当前数据库
SHOW DTATBASES;
###实践操作
mysql> show databases;
+---------------------+
| Database |
+---------------------+
| information_schema |
| mysql |
| performance_schema |
| runoob |
| sqltest |
| student |
| student_system |
| studentgrade_system |
| studentmanagement |
| sys |
| test |
| test1 |
| xiaomissm |
+---------------------+
创建
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
###实践操作
mysql> create database xqtest;
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
+---------------------+
| Database |
+---------------------+
| information_schema |
| mysql |
| performance_schema |
| runoob |
| sqltest |
| student |
| student_system |
| studentgrade_system |
| studentmanagement |
| sys |
| test |
| test1 |
| xiaomissm |
| xqtest |
+---------------------+
删除
DROP DATABASE[IF EXISTS]数据库名;
###操作示例
mysql> drop database if exists xqtest;
使用
USE 数据库名;
###操作示例
mysql> use test;
Database changed
1.3.2 表操作(需要我们USE选中对应的数据库,以xqtest数据库为例)
1.3.2.1 数据类型(表格数据来源于菜鸟教程)
数值类型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 Bytes | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 Bytes | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 Bytes | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 Bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 Bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 Bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 Bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
字符串类型
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255 bytes | 定长字符串 |
VARCHAR | 0-65535 bytes | 变长字符串 |
TINYBLOB | 0-255 bytes | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOB | 0-65 535 bytes | 二进制形式的长文本数据 |
TEXT | 0-65 535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295 bytes | 极大文本数据 |
日期时间类型
类型 | 大小 ( bytes) | 范围 | 格式 | 用途 |
---|---|---|---|---|
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' UTC 到 '2038-01-19 03:14:07' UTC结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYY-MM-DD hh:mm:ss | 混合日期和时间值,时间戳 |
1.3.2.2 查询
查询当前数据库所有表
SHOW TABLES;
###操作示例
mysql> show tables;
+------------------+
| Tables_in_xqtest |
+------------------+
| tb_user |
+------------------+
查询表结构
DESC 表名
###操作示例
mysql> desc tb_user;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
| age | int | YES | | NULL | |
| gender | varchar(1) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
查询指定表的建表语句
SHOW CREATE TABLE 表名
1.3.2.3 创建
CREATE TABLE 表名(
字段1 字段1类型 [COMMENT 字段1注释],
......
字段n 字段n类型 [COMMENT 字段n注释]
) [COMMENT 表注释];
###操作示例
mysql> use xqtest;
Database changed
mysql> create table tb_user(
-> id int comment '编号',
-> name varchar(30) comment '姓名',
-> age int comment '年龄',
-> gender varchar(1) comment '性别'
-> )comment '用户表';
注意注意:[...]为可选参数,最后一个字段后面没有逗号!!!
1.3.2.4 修改
添加字段
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT注释][约束];
###操作示例
mysql> alter table tb_user add nickname varchar(20) comment '昵称';
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc tb_user;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
| age | int | YES | | NULL | |
| gender | varchar(1) | YES | | NULL | |
| nickname | varchar(20) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
修改字段
修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
###操作示例
mysql> alter table tb_user modify username varchar(25);
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc tb_user;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
| age | int | YES | | NULL | |
| gender | varchar(1) | YES | | NULL | |
| username | varchar(25) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释][约束];
###操作示例
mysql> alter table tb_user change nickname username varchar(40) comment '用户名';
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc tb_user;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
| age | int | YES | | NULL | |
| gender | varchar(1) | YES | | NULL | |
| username | varchar(40) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
删除字段
ALTER TABLE 表名 DROP 字段名;
###操作示例
mysql> alter table tb_user drop username;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc tb_user;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
| age | int | YES | | NULL | |
| gender | varchar(1) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
修改表名
ALTER TABLE 表名 RENAME TO 新表名;
###操作示例
mysql> alter table tb_user rename to user;
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+------------------+
| Tables_in_xqtest |
+------------------+
| user |
+------------------+
1.3.2.5 删除
删除表
DROP TABLE[IF EXISTS] 表名;
###操作示例
mysql> drop table if exists tb_user;
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+------------------+
| Tables_in_xqtest |
+------------------+
| user |
+------------------+
删除指定表,并重新创建该表(数据会被删除,重新创建后是空表)
TRUNCATE TABLE 表名;
###操作示例
mysql> truncate table user;
Query OK, 0 rows affected (0.03 sec)
mysql> show tables;
+------------------+
| Tables_in_xqtest |
+------------------+
| user |
+------------------+