对一个数据列建立的约束,称为列级约束。
对多个数据列建立的约束,称为表级约束。
列级约束既可以在列定义时声明,也可以在列定义后声明。
表级约束只能在列定义后声明。
数据表(或称表)是数据库最重要的组成部分之一,是其它对象的基础。数据表即二维表,行称为记录,列称为字段。
打开数据库
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 [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 [LOW_PRIORITY] [IGNORE] table_reference SET col_name1 = {expr|DEFAULT} [, col_name2 = {expr|DEFAULT}] ... [WHERE where_condition]
# 删除记录(单表删除)
DELETE FROM tbl_name [WHERE where_condition]
# 查找记录
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}]
]
每一个表达式表示想要的一列,必须至少有一个。
多个列之间以英文逗号分隔。
星号(*
)表示多有列。tbl_name.*
可以表示命名表的所有列。
查询表达式可以使用[AS] alias_name为其赋予别名。
别名可用于GROUP BY,ORDER BY或HAVING子句。
对记录进行过滤,如果没有指定WHERE子句,则显示所有记录。
在WHERE表达式中,可以使用MySQL支持的函数或运算符。
[GROUP BY {col_name|position} [ASC|DESC], ... ]
ASC:生序,默认值。
DESC:降序。
[HAVING where_condition]
where_condition
中要么使用聚合函数,要么出现的字段一定要在SELECT中出现。
聚合函数:count() …
[ORDER BY {col_name|expr|position} [ASC|DESC], ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
offset是从0开始的。
创建数据表同时将查询结果写入到数据表
CREATE TABLE [IF NOT EXISTS] tbl_name [(create_definition, ...)] select_statement
示例:
子查询(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。
子查询可以返回标量、一行、一列或子查询。