db-engines.com:可以查询数据库软件使用排名
1.SQL介绍
- SQL 指结构化查询语言
- SQL 使我们有能力访问数据库
- SQL 是一种 ANSI 的标准计算机语言
- 编者注:ANSI,美国国家标准化组织
2.SQL分类
分类 | 含义 |
---|---|
DDL | 数据定义语言 |
DCL | 数据控制语言 |
DML | 数据操作语言 |
DQL | 数据查询语言 |
2.1DDL语句功能说明
DDL | 功能说明 |
---|---|
CREATE | 创建数据库结构 |
ALTER | 修改数据库结构 |
DROP | 删除数据库结构 |
RENAME | 更改数据库对象的名称 |
TRUNCATE | 删除表的全部内容 |
2.1.1DDL的应用
A:对于库的应用
- 增:创建数据库
SQL语句:CREATE DATABASE zfs CHARSET utf8mb4;
mysql> create database oldboy charset utf8mb4;
Query OK, 1 row affected (0.00 sec)
- 删
SQL语句:DROP DATABASE zfs;
mysql> drop database oldboy;
Query OK, 0 rows affected (0.00 sec)
- 改
SQL语句:ALTER DATABASE zfs CHARSET utf8;
mysql> alter database zfs charset utf8mb4;
Query OK, 1 row affected (0.00 sec)
- 查
SQL语句:SHOW DATABASES;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| world |
| zfs |
+--------------------+
6 rows in set (0.00 sec)
B:对于表的应用
表的属性:
表属性 | 含义 |
---|---|
字符集 | utf8mb4 |
存储引擎 | InnoDB |
列属性 | 含义 |
---|---|
数据类型 | 1.数字类型 2.字符串类型 3.时间类型 4.二进制类型 5.时间类型 |
约束 | 1.primary key(非空且唯一,每张表只能有一个)2.not null(非空约束) 3.unique key(唯一约束) |
其他属性 | 1.unsigned (对于数字列 ,非负数)2.default(默认值)3.auto_increment (自增长)4.comment(注释(表,列)) |
- 数据类型:
int:默认存储占4bytes,存储长度2^32-1
tinyint:默认存储占1bytes,存储长度0-255) - 字符串类型
char(10):括号里定义最大字符长度,最多可以存255个字符,定长,(10)定义的是10个字符,实际所占的字符是10个字符,如果小于是则系统会默认填充。
varchar(10):括号里定义最大字符长度,最多可以存65535个字符,可变长,按需分配磁盘空间。
enum():限定值的取值范围,比如性别(男,女,未知)等。 - 时间类型
datetime:范围为从 1000-01-01 00:00:00.000000 至 9999-12-31 23:59:59.999999
timestamp: 1970-01-01 00:00:00.000000 至 2038-01-19 03:14:07.999999,timestamp会受到时区的影响
B.1 对于表的应用
- 增
SQL语句:建表
CREATE TABLE stu(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
NAME VARCHAR(100) NOT NULL COMMENT '姓名',
age TINYINT UNSIGNED NOT NULL DEFAULT 99 COMMENT '年龄' ,
gender ENUM('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',
shijian TIMESTAMP NOT NULL DEFAULT NOW() COMMENT '入学时间'
)ENGINE=INNODB CHARSET=utf8mb4 COMMENT '学生表';
注:建表规范
1. 表名必须是小写,不能数字开头,和业务有关
2. 每个表都要有主键列,可以定制无关列
3. 每个列要非空约束,可以定制默认值,数字列用0填充,字符串列null填充
4. 每个列必须要有注释.
5. 选择合适的数据类型
6. 表必须设置字符集和存储引擎
- 删
SQL语句:
(1)DROP TABLES stu;
(2)TRUNCATE TABLES stu;(只清空表格内容,不删除表结构)
(3)DESC stu;(查看表结构)
mysql> drop tables stu;
- 改
SQL语句:
(1)ALTER TABLE stu ADD telephone CHAR(11) NOT NULL COMMENT'联系方式';
(2) ALTER TABLE stu DROP telephone;(删除列)
(3)ALTER TABLE stu CHANGE gender sex CHAR(1) NOT NULL DEFAULT 'n' COMMENT '性别'(改某一列的名称或属性)
(4)ALTER TABLE stu ADD telnum CHAR(11) NOT NULL UNIQUE KEY
COMMENT '手机号' AFTER NAME;(在某一列后插入新的一列)
(5)ALTER TABLE stu CHARSET utf8;(更改表的字符集)
(6)ALTER TABLE stu ENGINE=INNODB;(更改表的存储引擎) - 查
mysql> use zfs; #进入zfs库
mysql> use zfs;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
mysql> show tables; #查所有表
+---------------+
| Tables_in_zfs |
+---------------+
| stu |
+---------------+
1 row in set (0.00 sec)
mysql> desc stu; 查stu表的属性信息
+---------+---------------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| NAME | varchar(100) | NO | | NULL | |
| age | tinyint(3) unsigned | NO | | 99 | |
| gender | enum('m','f','n') | NO | | n | |
| shijian | timestamp | NO | | CURRENT_TIMESTAMP | |
+---------+---------------------+------+-----+-------------------+----------------+
5 rows in set (0.00 sec)
mysql> show create table stu; #查看建表的时候SQL语句,和表的备注信息
| stu | CREATE TABLE `stu` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',
`NAME` varchar(100) NOT NULL COMMENT '姓名',
`age` tinyint(3) unsigned NOT NULL DEFAULT '99' COMMENT '年龄',
`gender` enum('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',
`shijian` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '入学时间',
2.2DML语句功能说明
DML | 功能说明 |
---|---|
SELECT | 从表或视图中检索数据行 |
INSERT | 插入数据到表或视图 |
UPDATE | 更新数据 |
DELETE | 删除数据 |
CALL | 调用过程 |
MERGE | 合并(插入或修改) |
COMMIT | 将当前事务所做的更改永久化(写入数据库) |
ROLLBACK | 取消上次提交以来的所有操作 |
A.针对数据行进行操作
- 增
(1)对应行信息录入
INSERT INTO stu(NAME,age,sex)
VALUES('zhang3',11,'m');
(2)根据表格的顺序录入
INSERT INTO stu
VALUES(2,'ls',18,'m',NOW();
(3)批量录入
INSERT INTO
stu(NAME,age,sex)
VALUES
('zs',12,'m'),
('w5',14,'f'),
('ss',19,'f'); - 删
(1)删除zhang3这一列
DELETE FROM stu WHERE NAME='zhang3'; - 改
(1)将ls的年龄修改为28
UPDATE stu SET age=28 WHERE NAME='ls' - 查
(1)查表的内容
SELECT * FROM stu;
(2)根据条件筛选
SELECT * FROM stu WHERE age=1;
2.3DCL语句功能说明
DCL | 功能说明 |
---|---|
CRANT | 授予其他用户对数据库结构的访问权限 |
REVOKE | 收回用户访问数据库结构的权限 |
2.4DCQL语句功能说明
DQL | 功能说明 |
---|---|
select | 查询 |
show | 查询 |
2.4.1 select
A.select单独使用(mysql)
mysql> select@@port; #查询my.cf参数信息
+--------+
| @@port |
+--------+
| 3306 |
+--------+
1 row in set (0.00 sec)
B.select配合函数使用
mysql> select now(); #select配合函数
+---------------------+
| now() |
+---------------------+
| 2019-08-16 15:19:00 |
+---------------------+
1 row in set (0.00 sec)
mysql> select concat('2008'); #将字符打印
+----------------+
| concat('2008') |
+----------------+
| 2008 |
+----------------+
1 row in set (0.00 sec)
mysql> select concat(user,"@",host) from mysql.user; #select拼接
+-------------------------+
| concat(user,"@",host) |
+-------------------------+
| app@10.0.0.% |
| root@10.0.0.% |
| zfs@10.0.0.% |
| mysql.session@localhost |
| mysql.sys@localhost |
| root@localhost |
+-------------------------+
6 rows in set (0.00 sec)
mysql> select group_concat(user,"@",host) from mysql.user; #将列转成行显示
+----------------------------------------------------------------------------------------------------+
| group_concat(user,"@",host) |
+----------------------------------------------------------------------------------------------------+
| app@10.0.0.%,root@10.0.0.%,zfs@10.0.0.%,mysql.session@localhost,mysql.sys@localhost,root@localhost |
+----------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
C.select配合字句使用
select 单表子句的顺序:
1.select 2.from 3.where 4.group by 5.having 6.order by 7.limit 8.union all
C.1from字句的应用
子句 | 含义 |
---|---|
SELECT * FROM city; | 查询city表中所用数据 |
SELECT NAME ,CountryCode FROM city; | 查询city表中的某两列 |
C.2where字句的应用
子句 | 含义 | 分类 |
---|---|---|
SELECT * FROM city WHERE countrycode='CHN'; | 查询中国所有的城市信息 | WHERE 配合等值查询 |
SELECT * FROM city WHERE population<100; | 查询人口数量少于100人的城市信息 | WHERE 配合不等值(> < >= <= ) |
SELECT*FROM city WHERE countrycode LIKE 'CH%'; | 查询一下国家代号是CH打头的城市信息 | WHERE 配合 LIKE 模糊查询 |
SELECT * FROM city WHERE countrycode='CHN' AND population>5000000; | 查询一下中国人口数量大于500w的城市信息 | WHERE 配合逻辑连接符(AND OR) |
SELECT * FROM city WHERE population BETWEEN 1000000 AND 2000000; | 查询世界上,人口数在100w-200w之间的城市 | WHERE 配合 BETWEEN AND语句的应用 |
SELECT * FROM city WHERE countrycode IN ('CHN','USA'); | 查询中国或美国的城市信息 | WHERE 配合 in 使用 |
C.3ROUP BY聚合函数应用
db-engines.com:可以查询数据库软件使用排名
1.SQL介绍
- SQL 指结构化查询语言
- SQL 使我们有能力访问数据库
- SQL 是一种 ANSI 的标准计算机语言
- 编者注:ANSI,美国国家标准化组织
2.SQL分类
分类 | 含义 |
---|---|
DDL | 数据定义语言 |
DCL | 数据控制语言 |
DML | 数据操作语言 |
DQL | 数据查询语言 |
2.1DDL语句功能说明
DDL | 功能说明 |
---|---|
CREATE | 创建数据库结构 |
ALTER | 修改数据库结构 |
DROP | 删除数据库结构 |
RENAME | 更改数据库对象的名称 |
TRUNCATE | 删除表的全部内容 |
2.1.1DDL的应用
A:对于库的应用
- 增:创建数据库
SQL语句:CREATE DATABASE zfs CHARSET utf8mb4;
mysql> create database oldboy charset utf8mb4;
Query OK, 1 row affected (0.00 sec)
- 删
SQL语句:DROP DATABASE zfs;
mysql> drop database oldboy;
Query OK, 0 rows affected (0.00 sec)
- 改
SQL语句:ALTER DATABASE zfs CHARSET utf8;
mysql> alter database zfs charset utf8mb4;
Query OK, 1 row affected (0.00 sec)
- 查
SQL语句:SHOW DATABASES;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| world |
| zfs |
+--------------------+
6 rows in set (0.00 sec)
B:对于表的应用
表的属性:
表属性 | 含义 |
---|---|
字符集 | utf8mb4 |
存储引擎 | InnoDB |
列属性 | 含义 |
---|---|
数据类型 | 1.数字类型 2.字符串类型 3.时间类型 4.二进制类型 5.时间类型 |
约束 | 1.primary key(非空且唯一,每张表只能有一个)2.not null(非空约束) 3.unique key(唯一约束) |
其他属性 | 1.unsigned (对于数字列 ,非负数)2.default(默认值)3.auto_increment (自增长)4.comment(注释(表,列)) |
- 数据类型:
int:默认存储占4bytes,存储长度2^32-1
tinyint:默认存储占1bytes,存储长度0-255) - 字符串类型
char(10):括号里定义最大字符长度,最多可以存255个字符,定长,(10)定义的是10个字符,实际所占的字符是10个字符,如果小于是则系统会默认填充。
varchar(10):括号里定义最大字符长度,最多可以存65535个字符,可变长,按需分配磁盘空间。
enum():限定值的取值范围,比如性别(男,女,未知)等。 - 时间类型
datetime:范围为从 1000-01-01 00:00:00.000000 至 9999-12-31 23:59:59.999999
timestamp: 1970-01-01 00:00:00.000000 至 2038-01-19 03:14:07.999999,timestamp会受到时区的影响
B.1 对于表的应用
- 增
SQL语句:建表
CREATE TABLE stu(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
NAME VARCHAR(100) NOT NULL COMMENT '姓名',
age TINYINT UNSIGNED NOT NULL DEFAULT 99 COMMENT '年龄' ,
gender ENUM('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',
shijian TIMESTAMP NOT NULL DEFAULT NOW() COMMENT '入学时间'
)ENGINE=INNODB CHARSET=utf8mb4 COMMENT '学生表';
注:建表规范
1. 表名必须是小写,不能数字开头,和业务有关
2. 每个表都要有主键列,可以定制无关列
3. 每个列要非空约束,可以定制默认值,数字列用0填充,字符串列null填充
4. 每个列必须要有注释.
5. 选择合适的数据类型
6. 表必须设置字符集和存储引擎
- 删
SQL语句:
(1)DROP TABLES stu;
(2)TRUNCATE TABLES stu;(只清空表格内容,不删除表结构)
(3)DESC stu;(查看表结构)
mysql> drop tables stu;
- 改
SQL语句:
(1)ALTER TABLE stu ADD telephone CHAR(11) NOT NULL COMMENT'联系方式';
(2) ALTER TABLE stu DROP telephone;(删除列)
(3)ALTER TABLE stu CHANGE gender sex CHAR(1) NOT NULL DEFAULT 'n' COMMENT '性别'(改某一列的名称或属性)
(4)ALTER TABLE stu ADD telnum CHAR(11) NOT NULL UNIQUE KEY
COMMENT '手机号' AFTER NAME;(在某一列后插入新的一列)
(5)ALTER TABLE stu CHARSET utf8;(更改表的字符集)
(6)ALTER TABLE stu ENGINE=INNODB;(更改表的存储引擎) - 查
mysql> use zfs; #进入zfs库
mysql> use zfs;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
mysql> show tables; #查所有表
+---------------+
| Tables_in_zfs |
+---------------+
| stu |
+---------------+
1 row in set (0.00 sec)
mysql> desc stu; 查stu表的属性信息
+---------+---------------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| NAME | varchar(100) | NO | | NULL | |
| age | tinyint(3) unsigned | NO | | 99 | |
| gender | enum('m','f','n') | NO | | n | |
| shijian | timestamp | NO | | CURRENT_TIMESTAMP | |
+---------+---------------------+------+-----+-------------------+----------------+
5 rows in set (0.00 sec)
mysql> show create table stu; #查看建表的时候SQL语句,和表的备注信息
| stu | CREATE TABLE `stu` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',
`NAME` varchar(100) NOT NULL COMMENT '姓名',
`age` tinyint(3) unsigned NOT NULL DEFAULT '99' COMMENT '年龄',
`gender` enum('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',
`shijian` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '入学时间',
2.2DML语句功能说明
DML | 功能说明 |
---|---|
SELECT | 从表或视图中检索数据行 |
INSERT | 插入数据到表或视图 |
UPDATE | 更新数据 |
DELETE | 删除数据 |
CALL | 调用过程 |
MERGE | 合并(插入或修改) |
COMMIT | 将当前事务所做的更改永久化(写入数据库) |
ROLLBACK | 取消上次提交以来的所有操作 |
A.针对数据行进行操作
- 增
(1)对应行信息录入
INSERT INTO stu(NAME,age,sex)
VALUES('zhang3',11,'m');
(2)根据表格的顺序录入
INSERT INTO stu
VALUES(2,'ls',18,'m',NOW();
(3)批量录入
INSERT INTO
stu(NAME,age,sex)
VALUES
('zs',12,'m'),
('w5',14,'f'),
('ss',19,'f'); - 删
(1)删除zhang3这一列
DELETE FROM stu WHERE NAME='zhang3'; - 改
(1)将ls的年龄修改为28
UPDATE stu SET age=28 WHERE NAME='ls' - 查
(1)查表的内容
SELECT * FROM stu;
(2)根据条件筛选
SELECT * FROM stu WHERE age=1;
2.3DCL语句功能说明
DCL | 功能说明 |
---|---|
CRANT | 授予其他用户对数据库结构的访问权限 |
REVOKE | 收回用户访问数据库结构的权限 |
2.4DCQL语句功能说明
DQL | 功能说明 |
---|---|
select | 查询 |
show | 查询 |
2.4.1 select
A.select单独使用(mysql)
mysql> select@@port; #查询my.cf参数信息
+--------+
| @@port |
+--------+
| 3306 |
+--------+
1 row in set (0.00 sec)
B.select配合函数使用
mysql> select now(); #select配合函数
+---------------------+
| now() |
+---------------------+
| 2019-08-16 15:19:00 |
+---------------------+
1 row in set (0.00 sec)
mysql> select concat('2008'); #将字符打印
+----------------+
| concat('2008') |
+----------------+
| 2008 |
+----------------+
1 row in set (0.00 sec)
mysql> select concat(user,"@",host) from mysql.user; #select拼接
+-------------------------+
| concat(user,"@",host) |
+-------------------------+
| app@10.0.0.% |
| root@10.0.0.% |
| zfs@10.0.0.% |
| mysql.session@localhost |
| mysql.sys@localhost |
| root@localhost |
+-------------------------+
6 rows in set (0.00 sec)
mysql> select group_concat(user,"@",host) from mysql.user; #将列转成行显示
+----------------------------------------------------------------------------------------------------+
| group_concat(user,"@",host) |
+----------------------------------------------------------------------------------------------------+
| app@10.0.0.%,root@10.0.0.%,zfs@10.0.0.%,mysql.session@localhost,mysql.sys@localhost,root@localhost |
+----------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
C.select配合字句使用
select 单表子句的顺序:
1.select 2.from 3.where 4.group by 5.having 6.order by 7.limit 8.union all
C.1from字句的应用
子句 | 含义 |
---|---|
SELECT * FROM city; | 查询city表中所用数据 |
SELECT NAME ,CountryCode FROM city; | 查询city表中的某两列 |
C.2where字句的应用
子句 | 含义 | 分类 |
---|---|---|
SELECT * FROM city WHERE countrycode='CHN'; | 查询中国所有的城市信息 | WHERE 配合等值查询 |
SELECT * FROM city WHERE population<100; | 查询人口数量少于100人的城市信息 | WHERE 配合不等值(> < >= <= ) |
SELECT*FROM city WHERE countrycode LIKE 'CH%'; | 查询一下国家代号是CH打头的城市信息 | WHERE 配合 LIKE 模糊查询 |
SELECT * FROM city WHERE countrycode='CHN' AND population>5000000; | 查询一下中国人口数量大于500w的城市信息 | WHERE 配合逻辑连接符(AND OR) |
SELECT * FROM city WHERE population BETWEEN 1000000 AND 2000000; | 查询世界上,人口数在100w-200w之间的城市 | WHERE 配合 BETWEEN AND语句的应用 |
SELECT * FROM city WHERE countrycode IN ('CHN','USA'); | 查询中国或美国的城市信息 | WHERE 配合 in 使用 |
C.3ROUP BY聚合函数应用
db-engines.com:可以查询数据库软件使用排名
1.SQL介绍
- SQL 指结构化查询语言
- SQL 使我们有能力访问数据库
- SQL 是一种 ANSI 的标准计算机语言
- 编者注:ANSI,美国国家标准化组织
2.SQL分类
分类 | 含义 |
---|---|
DDL | 数据定义语言 |
DCL | 数据控制语言 |
DML | 数据操作语言 |
DQL | 数据查询语言 |
2.1DDL语句功能说明
DDL | 功能说明 |
---|---|
CREATE | 创建数据库结构 |
ALTER | 修改数据库结构 |
DROP | 删除数据库结构 |
RENAME | 更改数据库对象的名称 |
TRUNCATE | 删除表的全部内容 |
2.1.1DDL的应用
A:对于库的应用
- 增:创建数据库
SQL语句:CREATE DATABASE zfs CHARSET utf8mb4;
mysql> create database oldboy charset utf8mb4;
Query OK, 1 row affected (0.00 sec)
- 删
SQL语句:DROP DATABASE zfs;
mysql> drop database oldboy;
Query OK, 0 rows affected (0.00 sec)
- 改
SQL语句:ALTER DATABASE zfs CHARSET utf8;
mysql> alter database zfs charset utf8mb4;
Query OK, 1 row affected (0.00 sec)
- 查
SQL语句:SHOW DATABASES;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| world |
| zfs |
+--------------------+
6 rows in set (0.00 sec)
B:对于表的应用
表的属性:
表属性 | 含义 |
---|---|
字符集 | utf8mb4 |
存储引擎 | InnoDB |
列属性 | 含义 |
---|---|
数据类型 | 1.数字类型 2.字符串类型 3.时间类型 4.二进制类型 5.时间类型 |
约束 | 1.primary key(非空且唯一,每张表只能有一个)2.not null(非空约束) 3.unique key(唯一约束) |
其他属性 | 1.unsigned (对于数字列 ,非负数)2.default(默认值)3.auto_increment (自增长)4.comment(注释(表,列)) |
- 数据类型:
int:默认存储占4bytes,存储长度2^32-1
tinyint:默认存储占1bytes,存储长度0-255) - 字符串类型
char(10):括号里定义最大字符长度,最多可以存255个字符,定长,(10)定义的是10个字符,实际所占的字符是10个字符,如果小于是则系统会默认填充。
varchar(10):括号里定义最大字符长度,最多可以存65535个字符,可变长,按需分配磁盘空间。
enum():限定值的取值范围,比如性别(男,女,未知)等。 - 时间类型
datetime:范围为从 1000-01-01 00:00:00.000000 至 9999-12-31 23:59:59.999999
timestamp: 1970-01-01 00:00:00.000000 至 2038-01-19 03:14:07.999999,timestamp会受到时区的影响
B.1 对于表的应用
- 增
SQL语句:建表
CREATE TABLE stu(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
NAME VARCHAR(100) NOT NULL COMMENT '姓名',
age TINYINT UNSIGNED NOT NULL DEFAULT 99 COMMENT '年龄' ,
gender ENUM('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',
shijian TIMESTAMP NOT NULL DEFAULT NOW() COMMENT '入学时间'
)ENGINE=INNODB CHARSET=utf8mb4 COMMENT '学生表';
注:建表规范
1. 表名必须是小写,不能数字开头,和业务有关
2. 每个表都要有主键列,可以定制无关列
3. 每个列要非空约束,可以定制默认值,数字列用0填充,字符串列null填充
4. 每个列必须要有注释.
5. 选择合适的数据类型
6. 表必须设置字符集和存储引擎
- 删
SQL语句:
(1)DROP TABLES stu;
(2)TRUNCATE TABLES stu;(只清空表格内容,不删除表结构)
(3)DESC stu;(查看表结构)
mysql> drop tables stu;
- 改
SQL语句:
(1)ALTER TABLE stu ADD telephone CHAR(11) NOT NULL COMMENT'联系方式';
(2) ALTER TABLE stu DROP telephone;(删除列)
(3)ALTER TABLE stu CHANGE gender sex CHAR(1) NOT NULL DEFAULT 'n' COMMENT '性别'(改某一列的名称或属性)
(4)ALTER TABLE stu ADD telnum CHAR(11) NOT NULL UNIQUE KEY
COMMENT '手机号' AFTER NAME;(在某一列后插入新的一列)
(5)ALTER TABLE stu CHARSET utf8;(更改表的字符集)
(6)ALTER TABLE stu ENGINE=INNODB;(更改表的存储引擎) - 查
mysql> use zfs; #进入zfs库
mysql> use zfs;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
mysql> show tables; #查所有表
+---------------+
| Tables_in_zfs |
+---------------+
| stu |
+---------------+
1 row in set (0.00 sec)
mysql> desc stu; 查stu表的属性信息
+---------+---------------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| NAME | varchar(100) | NO | | NULL | |
| age | tinyint(3) unsigned | NO | | 99 | |
| gender | enum('m','f','n') | NO | | n | |
| shijian | timestamp | NO | | CURRENT_TIMESTAMP | |
+---------+---------------------+------+-----+-------------------+----------------+
5 rows in set (0.00 sec)
mysql> show create table stu; #查看建表的时候SQL语句,和表的备注信息
| stu | CREATE TABLE `stu` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',
`NAME` varchar(100) NOT NULL COMMENT '姓名',
`age` tinyint(3) unsigned NOT NULL DEFAULT '99' COMMENT '年龄',
`gender` enum('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',
`shijian` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '入学时间',
2.2DML语句功能说明
DML | 功能说明 |
---|---|
SELECT | 从表或视图中检索数据行 |
INSERT | 插入数据到表或视图 |
UPDATE | 更新数据 |
DELETE | 删除数据 |
CALL | 调用过程 |
MERGE | 合并(插入或修改) |
COMMIT | 将当前事务所做的更改永久化(写入数据库) |
ROLLBACK | 取消上次提交以来的所有操作 |
A.针对数据行进行操作
- 增
(1)对应行信息录入
INSERT INTO stu(NAME,age,sex)
VALUES('zhang3',11,'m');
(2)根据表格的顺序录入
INSERT INTO stu
VALUES(2,'ls',18,'m',NOW();
(3)批量录入
INSERT INTO
stu(NAME,age,sex)
VALUES
('zs',12,'m'),
('w5',14,'f'),
('ss',19,'f'); - 删
(1)删除zhang3这一列
DELETE FROM stu WHERE NAME='zhang3'; - 改
(1)将ls的年龄修改为28
UPDATE stu SET age=28 WHERE NAME='ls' - 查
(1)查表的内容
SELECT * FROM stu;
(2)根据条件筛选
SELECT * FROM stu WHERE age=1;
2.3DCL语句功能说明
DCL | 功能说明 |
---|---|
CRANT | 授予其他用户对数据库结构的访问权限 |
REVOKE | 收回用户访问数据库结构的权限 |
2.4DCQL语句功能说明
DQL | 功能说明 |
---|---|
select | 查询 |
show | 查询 |
2.4.1 select
A.select单独使用(mysql)
mysql> select@@port; #查询my.cf参数信息
+--------+
| @@port |
+--------+
| 3306 |
+--------+
1 row in set (0.00 sec)
B.select配合函数使用
mysql> select now(); #select配合函数
+---------------------+
| now() |
+---------------------+
| 2019-08-16 15:19:00 |
+---------------------+
1 row in set (0.00 sec)
mysql> select concat('2008'); #将字符打印
+----------------+
| concat('2008') |
+----------------+
| 2008 |
+----------------+
1 row in set (0.00 sec)
mysql> select concat(user,"@",host) from mysql.user; #select拼接
+-------------------------+
| concat(user,"@",host) |
+-------------------------+
| app@10.0.0.% |
| root@10.0.0.% |
| zfs@10.0.0.% |
| mysql.session@localhost |
| mysql.sys@localhost |
| root@localhost |
+-------------------------+
6 rows in set (0.00 sec)
mysql> select group_concat(user,"@",host) from mysql.user; #将列转成行显示
+----------------------------------------------------------------------------------------------------+
| group_concat(user,"@",host) |
+----------------------------------------------------------------------------------------------------+
| app@10.0.0.%,root@10.0.0.%,zfs@10.0.0.%,mysql.session@localhost,mysql.sys@localhost,root@localhost |
+----------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
C.select配合字句使用
select 单表子句的顺序:
1.select 2.from 3.where 4.group by 5.having 6.order by 7.limit 8.union all
C.1from字句的应用
子句 | 含义 |
---|---|
SELECT * FROM city; | 查询city表中所用数据 |
SELECT NAME ,CountryCode FROM city; | 查询city表中的某两列 |
C.2where字句的应用
子句 | 含义 | 分类 |
---|---|---|
SELECT * FROM city WHERE countrycode='CHN'; | 查询中国所有的城市信息 | WHERE 配合等值查询 |
SELECT * FROM city WHERE population<100; | 查询人口数量少于100人的城市信息 | WHERE 配合不等值(> < >= <= ) |
SELECT*FROM city WHERE countrycode LIKE 'CH%'; | 查询一下国家代号是CH打头的城市信息 | WHERE 配合 LIKE 模糊查询 |
SELECT * FROM city WHERE countrycode='CHN' AND population>5000000; | 查询一下中国人口数量大于500w的城市信息 | WHERE 配合逻辑连接符(AND OR) |
SELECT * FROM city WHERE population BETWEEN 1000000 AND 2000000; | 查询世界上,人口数在100w-200w之间的城市 | WHERE 配合 BETWEEN AND语句的应用 |
SELECT * FROM city WHERE countrycode IN ('CHN','USA'); | 查询中国或美国的城市信息 | WHERE 配合 in 使用 |
C.3ROUP BY聚合函数应用
db-engines.com:可以查询数据库软件使用排名
1.SQL介绍
- SQL 指结构化查询语言
- SQL 使我们有能力访问数据库
- SQL 是一种 ANSI 的标准计算机语言
- 编者注:ANSI,美国国家标准化组织
2.SQL分类
分类 | 含义 |
---|---|
DDL | 数据定义语言 |
DCL | 数据控制语言 |
DML | 数据操作语言 |
DQL | 数据查询语言 |
2.1DDL语句功能说明
DDL | 功能说明 |
---|---|
CREATE | 创建数据库结构 |
ALTER | 修改数据库结构 |
DROP | 删除数据库结构 |
RENAME | 更改数据库对象的名称 |
TRUNCATE | 删除表的全部内容 |
2.1.1DDL的应用
A:对于库的应用
- 增:创建数据库
SQL语句:CREATE DATABASE zfs CHARSET utf8mb4;
mysql> create database oldboy charset utf8mb4;
Query OK, 1 row affected (0.00 sec)
- 删
SQL语句:DROP DATABASE zfs;
mysql> drop database oldboy;
Query OK, 0 rows affected (0.00 sec)
- 改
SQL语句:ALTER DATABASE zfs CHARSET utf8;
mysql> alter database zfs charset utf8mb4;
Query OK, 1 row affected (0.00 sec)
- 查
SQL语句:SHOW DATABASES;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| world |
| zfs |
+--------------------+
6 rows in set (0.00 sec)
B:对于表的应用
表的属性:
表属性 | 含义 |
---|---|
字符集 | utf8mb4 |
存储引擎 | InnoDB |
列属性 | 含义 |
---|---|
数据类型 | 1.数字类型 2.字符串类型 3.时间类型 4.二进制类型 5.时间类型 |
约束 | 1.primary key(非空且唯一,每张表只能有一个)2.not null(非空约束) 3.unique key(唯一约束) |
其他属性 | 1.unsigned (对于数字列 ,非负数)2.default(默认值)3.auto_increment (自增长)4.comment(注释(表,列)) |
- 数据类型:
int:默认存储占4bytes,存储长度2^32-1
tinyint:默认存储占1bytes,存储长度0-255) - 字符串类型
char(10):括号里定义最大字符长度,最多可以存255个字符,定长,(10)定义的是10个字符,实际所占的字符是10个字符,如果小于是则系统会默认填充。
varchar(10):括号里定义最大字符长度,最多可以存65535个字符,可变长,按需分配磁盘空间。
enum():限定值的取值范围,比如性别(男,女,未知)等。 - 时间类型
datetime:范围为从 1000-01-01 00:00:00.000000 至 9999-12-31 23:59:59.999999
timestamp: 1970-01-01 00:00:00.000000 至 2038-01-19 03:14:07.999999,timestamp会受到时区的影响
B.1 对于表的应用
- 增
SQL语句:建表
CREATE TABLE stu(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
NAME VARCHAR(100) NOT NULL COMMENT '姓名',
age TINYINT UNSIGNED NOT NULL DEFAULT 99 COMMENT '年龄' ,
gender ENUM('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',
shijian TIMESTAMP NOT NULL DEFAULT NOW() COMMENT '入学时间'
)ENGINE=INNODB CHARSET=utf8mb4 COMMENT '学生表';
注:建表规范
1. 表名必须是小写,不能数字开头,和业务有关
2. 每个表都要有主键列,可以定制无关列
3. 每个列要非空约束,可以定制默认值,数字列用0填充,字符串列null填充
4. 每个列必须要有注释.
5. 选择合适的数据类型
6. 表必须设置字符集和存储引擎
- 删
SQL语句:
(1)DROP TABLES stu;
(2)TRUNCATE TABLES stu;(只清空表格内容,不删除表结构)
(3)DESC stu;(查看表结构)
mysql> drop tables stu;
- 改
SQL语句:
(1)ALTER TABLE stu ADD telephone CHAR(11) NOT NULL COMMENT'联系方式';
(2) ALTER TABLE stu DROP telephone;(删除列)
(3)ALTER TABLE stu CHANGE gender sex CHAR(1) NOT NULL DEFAULT 'n' COMMENT '性别'(改某一列的名称或属性)
(4)ALTER TABLE stu ADD telnum CHAR(11) NOT NULL UNIQUE KEY
COMMENT '手机号' AFTER NAME;(在某一列后插入新的一列)
(5)ALTER TABLE stu CHARSET utf8;(更改表的字符集)
(6)ALTER TABLE stu ENGINE=INNODB;(更改表的存储引擎) - 查
mysql> use zfs; #进入zfs库
mysql> use zfs;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
mysql> show tables; #查所有表
+---------------+
| Tables_in_zfs |
+---------------+
| stu |
+---------------+
1 row in set (0.00 sec)
mysql> desc stu; 查stu表的属性信息
+---------+---------------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| NAME | varchar(100) | NO | | NULL | |
| age | tinyint(3) unsigned | NO | | 99 | |
| gender | enum('m','f','n') | NO | | n | |
| shijian | timestamp | NO | | CURRENT_TIMESTAMP | |
+---------+---------------------+------+-----+-------------------+----------------+
5 rows in set (0.00 sec)
mysql> show create table stu; #查看建表的时候SQL语句,和表的备注信息
| stu | CREATE TABLE `stu` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',
`NAME` varchar(100) NOT NULL COMMENT '姓名',
`age` tinyint(3) unsigned NOT NULL DEFAULT '99' COMMENT '年龄',
`gender` enum('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',
`shijian` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '入学时间',
2.2DML语句功能说明
DML | 功能说明 |
---|---|
SELECT | 从表或视图中检索数据行 |
INSERT | 插入数据到表或视图 |
UPDATE | 更新数据 |
DELETE | 删除数据 |
CALL | 调用过程 |
MERGE | 合并(插入或修改) |
COMMIT | 将当前事务所做的更改永久化(写入数据库) |
ROLLBACK | 取消上次提交以来的所有操作 |
A.针对数据行进行操作
- 增
(1)对应行信息录入
INSERT INTO stu(NAME,age,sex)
VALUES('zhang3',11,'m');
(2)根据表格的顺序录入
INSERT INTO stu
VALUES(2,'ls',18,'m',NOW();
(3)批量录入
INSERT INTO
stu(NAME,age,sex)
VALUES
('zs',12,'m'),
('w5',14,'f'),
('ss',19,'f'); - 删
(1)删除zhang3这一列
DELETE FROM stu WHERE NAME='zhang3'; - 改
(1)将ls的年龄修改为28
UPDATE stu SET age=28 WHERE NAME='ls' - 查
(1)查表的内容
SELECT * FROM stu;
(2)根据条件筛选
SELECT * FROM stu WHERE age=1;
2.3DCL语句功能说明
DCL | 功能说明 |
---|---|
CRANT | 授予其他用户对数据库结构的访问权限 |
REVOKE | 收回用户访问数据库结构的权限 |
2.4DCQL语句功能说明
DQL | 功能说明 |
---|---|
select | 查询 |
show | 查询 |
2.4.1 select
A.select单独使用(mysql)
mysql> select@@port; #查询my.cf参数信息
+--------+
| @@port |
+--------+
| 3306 |
+--------+
1 row in set (0.00 sec)
B.select配合函数使用
mysql> select now(); #select配合函数
+---------------------+
| now() |
+---------------------+
| 2019-08-16 15:19:00 |
+---------------------+
1 row in set (0.00 sec)
mysql> select concat('2008'); #将字符打印
+----------------+
| concat('2008') |
+----------------+
| 2008 |
+----------------+
1 row in set (0.00 sec)
mysql> select concat(user,"@",host) from mysql.user; #select拼接
+-------------------------+
| concat(user,"@",host) |
+-------------------------+
| app@10.0.0.% |
| root@10.0.0.% |
| zfs@10.0.0.% |
| mysql.session@localhost |
| mysql.sys@localhost |
| root@localhost |
+-------------------------+
6 rows in set (0.00 sec)
mysql> select group_concat(user,"@",host) from mysql.user; #将列转成行显示
+----------------------------------------------------------------------------------------------------+
| group_concat(user,"@",host) |
+----------------------------------------------------------------------------------------------------+
| app@10.0.0.%,root@10.0.0.%,zfs@10.0.0.%,mysql.session@localhost,mysql.sys@localhost,root@localhost |
+----------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
C.select配合字句使用
select 单表子句的顺序:
1.select 2.from 3.where 4.group by 5.having 6.order by 7.limit 8.union all
C.1from字句的应用
子句 | 含义 |
---|---|
SELECT * FROM city; | 查询city表中所用数据 |
SELECT NAME ,CountryCode FROM city; | 查询city表中的某两列 |
C.2where字句的应用
子句 | 含义 | 分类 |
---|---|---|
SELECT * FROM city WHERE countrycode='CHN'; | 查询中国所有的城市信息 | WHERE 配合等值查询 |
SELECT * FROM city WHERE population<100; | 查询人口数量少于100人的城市信息 | WHERE 配合不等值(> < >= <= ) |
SELECT*FROM city WHERE countrycode LIKE 'CH%'; | 查询一下国家代号是CH打头的城市信息 | WHERE 配合 LIKE 模糊查询 |
SELECT * FROM city WHERE countrycode='CHN' AND population>5000000; | 查询一下中国人口数量大于500w的城市信息 | WHERE 配合逻辑连接符(AND OR) |
SELECT * FROM city WHERE population BETWEEN 1000000 AND 2000000; | 查询世界上,人口数在100w-200w之间的城市 | WHERE 配合 BETWEEN AND语句的应用 |
SELECT * FROM city WHERE countrycode IN ('CHN','USA'); | 查询中国或美国的城市信息 | WHERE 配合 in 使用 |
C.3ROUP BY聚合函数应用
常用函数
函数 | 含义 |
---|---|
COUNT() | 统计行数或个数 |
SUM() | 求和 |
MIN() | 求最小值 |
MAX() | 求最大值 |
AVG() | 平均值 |
GROUP_CONCAT() | 主要用来处理一对多的查询结果,通常会结合GROUP BY一起使用 |
子句 | 含义 |
---|---|
SELECT countrycode,COUNT(NAME) FROM cityGROUP BY countrycode; | 统计一下每个国家的城市个数 |
SELECT countrycode,COUNT(NAME) ,GROUP_CONCAT(NAME) FROM cityGROUP BY countrycode; | 统计一下每个国家城市名列表 |
SELECT countrycode , COUNT(DISTINCT district) FROM city GROUP BY countrycode; | 统计一下每个国家的省的个数 |
SELECT countrycode ,SUM(population) FROM city GROUP BY countrycode; | 统计一下每个国家的总人口数 |
C.4having语句的使用
**在group by执行后过滤 **
例:统计一下每个国家的人口数量
SQL语句:
USE world;
SELECT countrycode,COUNT(DISTINCT district) FROM city
GROUP BY countrycode
HAVING COUNT(DISTINCT district)>20;
C.5order by语句的使用
将过滤后的列表进行排序操作,默认是从小到大,从大到小加desc
SQL语句默认从小到大:
SELECT countrycode,COUNT(DISTINCT district) FROM city
GROUP BY countrycode
HAVING COUNT(DISTINCT district)>20
ORDER BY COUNT(DISTINCT district);
SQL语句从大到小:
SELECT countrycode,COUNT(DISTINCT district) FROM city
GROUP BY countrycode
HAVING COUNT(DISTINCT district)>20
ORDER BY COUNT(DISTINCT district) DESC;
C6.limit语句的使用
分页显示
例:显示前10行
SELECT countrycode,COUNT(DISTINCT district) FROM city
GROUP BY countrycode
HAVING COUNT(DISTINCT district)>20
ORDER BY COUNT(DISTINCT district) DESC LIMIT 10;
例:显示11-15行
SELECT countrycode,COUNT(DISTINCT district) FROM city
GROUP BY countrycode
HAVING COUNT(DISTINCT district)>20
ORDER BY COUNT(DISTINCT district) DESC LIMIT 10,5; #10,5的意识是跳过前10行,最多显示5行
C7.union all语句的使用
将多个结果集显示并列成一个
列:看地10行和第15行
SQL语句:
(SELECT countrycode , COUNT(DISTINCT district) FROM city
GROUP BY countrycode
HAVING COUNT(DISTINCT district)>20
ORDER BY COUNT(DISTINCT district) DESC LIMIT 9,1)
UNION ALL
(SELECT countrycode , COUNT(DISTINCT district) FROM city
GROUP BY countrycode
HAVING COUNT(DISTINCT district)>20
ORDER BY COUNT(DISTINCT district) DESC LIMIT 14,1)
3.通过添加状态列实现伪删除
(1) 添加状态列
ALTER TABLE stu ADD state TINYINT NOT NULL DEFAULT 1;
(2) 删除行
原语句:
DELETE FROM stu WHERE NAME='ls';
改写为:
UPDATE stu SET state=0 WHERE NAME='ls';
(3)查询检查
SELECT * FROM stu WHERE state=1;