目录
可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。
查询和更新指令构成了 SQL 的 DML 部分:
从数据库表中获取数据
语法
# 获取表中某一列数据
select 列名称 from 表名称;
# 或获取表中所有数据
select * from 表名称;
更新数据库表中的数据
语法
# 更新列中某个值
update 表名称 set 列名称 = 新值 where 列名称 = 某值;
# 跟新某一行中若干列
update 表名称 set 列名称1 = 新值1,列名称2 = 新值2 where 列名称 = 某值;
从数据库表中删除数据
语法
# 删除表中的某行
delete from 表名称 where 列名称 = 值;
# 删除所有行(在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:)
delete from 表名称;
delete * from 表名称;
向数据库表中插入数据
语法
insert into 表名称 values (值1,值2,...);
# 指定要插入的列
insert into 表名称(列1,列2,...) values (值1,值2,...);
关键词 distinct 用于返回唯一不同的值,仅仅列出不同(distinct)的值的列。
语法
select distinct 列名称 from 表名称;
如需有条件地从表中选取数据,可将 where 子句添加到 select 语句。
语法
select 列名称 from 表名称 where 列 运算符 值;
and 和 or 可在 where 子语句中把两个或多个条件结合起来。
如果第一个条件和第二个条件都成立,则 and 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 or 运算符显示一条记录。
语法
select 列名称 from 表名称 where 列 运算符 值 and 列 运算符 值;
select 列名称 from 表名称 where 列 运算符 值 or 列 运算符 值;
ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照升序对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
语句
select 列名称1,列名称2 from 表名称 order by 列名称1 [asc(desc)];
# 先按列名称1排序,然后以列名称3排序
select 列名称1,列名称2,列名称3 from 表名称 order by 列名称1 [asc(desc)],列名称3 [asc(desc)];
SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。
查看数据库列表
语法
show databases;
创建新数据库
语法
create database 数据库名称;
查看某个数据库详细信息
语法
show create database 数据库名称;
修改数据库
语法:
# 修改数据库编码格式
alter database 数据库名称 charset=编码格式;
删除数据库
语法
drop database 数据库名称;
查看当前数据库下所有数据表
语法
show tables;
创建新表
语法
# 创建新表,[]中内容可省略
create table 表名称
(
列名称1 数据类型[(最大位数) 约束],
列名称2 数据类型[(最大位数) 约束],
列名称3 数据类型[(最大位数) 约束],
...
) engine=引擎名称, charset=编码类型;
在 MySQL 中,有三种主要的类型:文本、数字和日期/时间类型。
数据类型 | 描述 |
---|---|
CHAR(size) | 保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。 |
VARCHAR(size) | 保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。注释:如果值的长度大于 255,则被转换为 TEXT 类型。 |
TINYTEXT | 存放最大长度为 255 个字符的字符串。 |
TEXT | 存放最大长度为 65,535 个字符的字符串。 |
BLOB | 用于 BLOBs (Binary Large OBjects)。存放最多 65,535 字节的数据。 |
MEDIUMTEXT | 存放最大长度为 16,777,215 个字符的字符串。 |
MEDIUMBLOB | 用于 BLOBs (Binary Large OBjects)。存放最多 16,777,215 字节的数据。 |
LONGTEXT | 存放最大长度为 4,294,967,295 个字符的字符串。 |
LONGBLOB | 用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字节的数据。 |
ENUM(x,y,z,etc.) | 允许你输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。注释:这些值是按照你输入的顺序存储的。可以按照此格式输入可能的值:ENUM(‘X‘,‘Y‘,‘Z‘) |
SET | 与 ENUM 类似,SET 最多只能包含 64 个列表项,不过 SET 可存储一个以上的值。 |
数据类型 | 描述 |
---|---|
TINYINT(size) | -128 到 127 常规。0 到 255 无符号*。在括号中规定最大位数。 |
SMALLINT(size) | -32768 到 32767 常规。0 到 65535 无符号*。在括号中规定最大位数。 |
MEDIUMINT(size) | -8388608 到 8388607 普通。0 to 16777215 无符号*。在括号中规定最大位数。 |
INT(size) | -2147483648 到 2147483647 常规。0 到 4294967295 无符号*。在括号中规定最大位数。 |
BIGINT(size) | -9223372036854775808 到 9223372036854775807 常规。0 到 18446744073709551615 无符号*。在括号中规定最大位数。 |
FLOAT(size,d) | 带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 |
DOUBLE(size,d) | 带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 |
DECIMAL(size,d) | 作为字符串存储的 DOUBLE 类型,允许固定的小数点。 |
* 这些整数类型拥有额外的选项 UNSIGNED。通常,整数可以是负数或正数。如果添加 UNSIGNED 属性,那么范围将从 0 开始,而不是某个负数。
数据类型 | 描述 |
---|---|
DATE() | 日期。格式:YYYY-MM-DD注释:支持的范围是从 ‘1000-01-01‘ 到 ‘9999-12-31‘ |
DATETIME() | *日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS注释:支持的范围是从 ‘1000-01-01 00:00:00‘ 到 ‘9999-12-31 23:59:59‘ |
TIMESTAMP() | *时间戳。TIMESTAMP 值使用 Unix 纪元(‘1970-01-01 00:00:00‘ UTC) 至今的描述来存储。格式:YYYY-MM-DD HH:MM:SS注释:支持的范围是从 ‘1970-01-01 00:00:01‘ UTC 到 ‘2038-01-09 03:14:07‘ UTC |
TIME() | 时间。格式:HH:MM:SS 注释:支持的范围是从 ‘-838:59:59‘ 到 ‘838:59:59‘ |
YEAR() | 2 位或 4 位格式的年。注释:4 位格式所允许的值:1901 到 2155。2 位格式所允许的值:70 到 69,表示从 1970 到 2069。 |
* 即便 DATETIME 和 TIMESTAMP 返回相同的格式,它们的工作方式很不同。在 INSERT 或 UPDATE 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。
查看某个表的详细信息
语法
show create table 表名称;
查看某个表的结构信息
语法
desc 表名称;
alter table语句用于在已有的表中添加,修改或删除列
语法
# 在表中添加列
alter table 表名称
add 列名称 数据类型;
# 删除表中的列
alter table 表名称
drop column 列名称;
# 修改表中列的数据类型
alter table 表名称
alter column 列名称 数据类型;
删除表
语法
drop table 表名称;
删除表内的数据,但并不删除表本身
语法
truncate table 表名称;
创建索引(搜索键)
语法
# 在表中创建一个简单的索引,允许使用重复的值
create index 索引名称
on 表名称 (列名称1,列名称2,...); # 列名称规定需要索引的列,如果想降序索引,可以在列名称后加desc
# 在表中创建一个唯一的索引
create unique 索引名称;
on 表名称 (列名称1,列名称2,...);
删除索引
语法
# 各数据库有差别,mysql语法如下
alter table 表名称
drop index 索引名称;
原文:https://www.cnblogs.com/zj420255586/p/11574614.html