MySQL 中的SQL(2)

表级约束和列级约束

对一个数据列建立的约束,称为列级约束。

对多个数据列建立的约束,称为表级约束。

列级约束既可以在列定义时声明,也可以在列定义后声明。

表级约束只能在列定义后声明。

数据表操作

数据表(或称表)是数据库最重要的组成部分之一,是其它对象的基础。数据表即二维表,行称为记录,列称为字段。

USE

打开数据库

USE 数据库名称;

创建数据表

CREATE TABLE [IF NOT EXISTS] table_name (column_name data_type, ...)

查看数据表列表

SHOW TABLES [FROM db_name] [LIKE 'pattern' | WHERE expr]

查看数据表结构

SHOW COLUMNS FROM tbl_name

插入表记录

INSERT [INTO] tbl_name [(col_name,...)] VALUES(val,...)

如果省略col_name就需要写全数据表所有的值。

记录查找

SELECT expr,... FROM tbl_name

添加单列(数据表字段)

ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST|AFTER col_name]

省略[FIRST|AFTER col_name]参数将位于所有列的最后面。

添加多列(数据表字段)

ALTER TABLE tbl_name ADD [COLUMN] (col_name column_definition, ...)

删除列(数据表字段)

ALTER TABLE tbl_name DROP [COLUMN] col_name

添加主键约束

ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name, ...)

添加唯一约束

ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name, ...)

添加外键约束

ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name, ...) reference_definition

添加/删除默认约束

ALTER TABLE tbl_name ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}

删除主键约束

ALTER TABLE tbl_name DROP PRIMARY KEY

删除唯一约束

ALTER TABLE tbl_name DROP {INDEX | KEY} index_name

删除外键约束

ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol

修改列定义

ALTER TABLE tbl_name MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]

修改列名称

ALTER TABLE tbl_name CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST | AFTER col_name]

数据表更名

#方法1
ALTER TABLE tbl_name RENAME [TO|AS] new_tbl_name

#方法2
RENAME TABLE tbl_name TO new_tbl_name [, tbl_name2 TO new_tbl_name2] ...

数据表数据操作

INSERT
#插入记录(可以插入多条记录)
INSERT [INTO] tbl_name [(col_name, ...)] {VALUES|VALUE} ({expr|DEFAULT}, ...), (...), ...
#插入记录(不可以插入多条记录)
INSERT [INTO] tbl_name SET col_name = {expr|DEFAULT}, ...

说明:与前一种方式的区别在于,此方法可以使用子查询(SubQuery)。由比较运算引发子查询(SubQuery)。

插入记录

INSERT [INTO] tbl_name [(col_name, ...)] SELECT ...

# 说明:此方法可以将查询结果插入到指定数据表。

示例:

1.创建“商品分类”表
CREATE TABLE IF NOT EXISTS tdb_goods_cates(cate_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,cate_name VARCHAR(40));

2.查询tdb_goods表的所有记录,并且按"类别"分组
SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;

3.将分组结果写入到tdb_goods_cates数据表
INSERT tdb_goods_cates (cate_name) SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;
UPDATE
# 更新记录(单表更新)
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1 = {expr|DEFAULT} [, col_name2 = {expr|DEFAULT}] ... [WHERE where_condition]
DELETE
# 删除记录(单表删除)
DELETE FROM tbl_name [WHERE where_condition]
SELECT
# 查找记录
SELECT select_expr [, select_expr ...] 
[
    FROM table_references
    [WHERE where_condition]
    [GROUP BY {col_name|position} [ASC|DESC], ... ]
    [HAVING where_condition]
    [ORDER BY {col_name|expr|position} [ASC|DESC], ...]
    [LIMIT {[offset,] row_count | row_count OFFSET offset}]
]
select_expr 查询表达式

每一个表达式表示想要的一列,必须至少有一个。

多个列之间以英文逗号分隔。

星号(*)表示多有列。tbl_name.*可以表示命名表的所有列。

查询表达式可以使用[AS] alias_name为其赋予别名。

别名可用于GROUP BY,ORDER BY或HAVING子句。

WHERE 条件表达式

对记录进行过滤,如果没有指定WHERE子句,则显示所有记录。

在WHERE表达式中,可以使用MySQL支持的函数或运算符。

GROUP BY 查询结果分组

[GROUP BY {col_name|position} [ASC|DESC], ... ] ASC:生序,默认值。 DESC:降序。

HAVING 分组条件

[HAVING where_condition] where_condition中要么使用聚合函数,要么出现的字段一定要在SELECT中出现。

聚合函数:count() …

ORDER BY 对查询结果进行排序

[ORDER BY {col_name|expr|position} [ASC|DESC], ...]

LIMIT 限制查询返回的数量

[LIMIT {[offset,] row_count | row_count OFFSET offset}] offset是从0开始的。

CREATE … SELECT

创建数据表同时将查询结果写入到数据表 CREATE TABLE [IF NOT EXISTS] tbl_name [(create_definition, ...)] select_statement

示例:

  • 通过CREATE…SELECT来创建数据表并且同时写入记录 CREATE TABLE tdb_goods_brands (brand_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,brand_name VARCHAR(40) NOT NULL) SELECT brand_name FROM tdb_goods GROUP BY brand_name;

子查询

子查询(Subquery)是指出现在其他SQL语句内的SELECT子句。例如: SELECT * FROM t1 WHERE col1=(SELECT col2 FROM t2); 其中SELECT * FROM t1称为Outer Query/Outer Statement。SELECT col2 FROM t2称为SubQuery。

子查询指嵌套在查询内部,且必须始终出现在圆括号内。子查询可以包含多个关键字或条件,如DISTINCT、GROUP BY、ORDER BY、LIMIT函数等。子查询外层的查询可以是:SELECT、INSERT、UPDATE、SET或DO。

子查询可以返回标量、一行、一列或子查询。

联系我们

邮箱 626512443@qq.com
电话 18611320371(微信)
QQ群 235681453

Copyright © 2015-2024

备案号:京ICP备15003423号-3