MySQL中外键定义级展现结果_mysql基础知识整理

本文详细介绍了MySQL中的外键约束,包括其要求、参照操作以及数据表的添加、删除和修改操作。此外,还涵盖了列级约束、表级约束、主键和唯一约束的管理,以及数据表的插入、更新、删除和查询操作。
摘要由CSDN通过智能技术生成

2ff34e647e2e3cdfd8dca593e17d9b0a.png

约束:

按功能划分:

NOT NULL, RPIMARY KEY, UNIQUE KEY, DEFAULT,FOREIGN KEY

按数据列的数目划分:

表级约束&列级约束

外键约束:

外键约束的要求:1.父表和子表必须使用相同的存储引擎,而且禁止使用临时表

2.数据表的存储引擎只能为InnoDB

3.外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度可以不同。4.外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL将自动创建索引。

外键约束的参照操作:1.CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行

2.SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL.如果使用该选项,必须保证子表列没有指定NOT NULL.

3.RESTRICT:拒绝对父表的删除或更新操作。

4.NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同。

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

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

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

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

修改数据表

添加单列1ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name]

添加多列1ALTER TABLE tbl_name ADD[COLUMN] (col_name column_defination,........)

删除列1

2ALTER TABLE tbl_name DROP [COLUMN] col_name

ALTER TABLE user DROP password,DROP username

添加唯一约束1ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX | KEY] [index_name] [index_type] (index_col_name,.....)

index_name : 索引名字

(显示数据表中索引名字:SHOW INDEXS FROM tbl_name)

添加外键约束1ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN KEY  [index_name]  (index_col_name,....)  reference_definition1例:ALTER TABLE user2 ADD FOREIGN KEY (pid) REFERENCE provinces (id)

删除主键约束1ALTER TABLE tbl_name DROP PRIMARY KEY

删除唯一约束1

2

3ALTER TABLE tbl_name DROP {INDEX | KEY} index_name

例:ALTER TABLE user DROP INDEX username

(注意是删除username上的唯一约束,而不是删除掉这个字段)

删除外键约束1ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol

修改列定义1

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

例:ALTER TABLE user MODIFY id SMALLINT UNSIGNED NOT NULL FIRST

修改列名称1ALTER TABLE tbl_name CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST | AFTER col_name]

数据表更名

方法一:1

2ALTER TABLE tbl_name RENAME [TO | AS]  new_tbl_name

例:ALTER TABLE user2 RENAME user3

方法二:1RENAME TABLE tbl_name TO new_tbl_name [, tbl_name2  TO new_name2] .....

插入记录 INSERT1

2INSERT [INTO] tbl_name [(col_name)] {VALUES | VALUE} ({expr | DEFAULT},.......),{......},......

例:INSERT  users VALUES (NULL,"tom","456",25,1)1INSERT [INTO] tbl_name SET col_name = {expr | DEFAULT},......

说明:与第一种方式的区别在于,此方法可以使用子查询(SubQuery)1INSERT [INTO] tbl_name [(col_name,.....)] SELECT .....

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

更新记录(单表更新)UPDATE1

2UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1 = {expr | DEFAULT}  [,  col_name2 =

{expr2 | DEFAULT}].....  [WHERE where_condition]

若不加where条件 , 表示修改所有的表中记录

DELETE 删除记录(单表删除)1DELETE FROM tbl_name [WHERE where_condition]

SELECT 查找记录1SELECT 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 字句。1

2例:SELECT username, id FROM users

SELECT users.username, users.id FROM users(使用多表连接时使用) WHERE 条件表达式对记录进行过滤,如果没有指定WHERE字句,则显示所有记录。

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

GROUP BY查询结果分组1

2

3[GROUP BY {col_name | position} [ASC | DESC (升序降序) ],...... ] HAVING  对分组条件进行指定

例:SELECT sex FROM users GROUP BY sex;

SELECT sex, age FROM users GROUP BY sex HAVING age > 35 ;

ORDER BY对查询结果进行排序1

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

按id降序排列:SELECT * FROM users ORDER BY id DESC;

LIMIT限制查询结果返回的数量1

2

3[LIMIT  {[offset,]  row_count | row_count  OFFSET offset  }]

例:SELECT * FROM users LIMIT 2;       (返回前两条记录)

SELECT * FROM users LIMIT 2,2;  (返回第三四条记录)

子查询

子查询(Subquery)是指出现在其他SQL语句内的SELECT子句。1

2

3例如: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。

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

子查询条件关键字:ANY SOME ALL

使用[ NOT ] IN 的子查询

使用[ NOT ] EXISTS 的子查询

INSERT …. SELECT

将查询结果写入到数据表.1INSERT [INTO] tbl_name [(col_name,...)] SELECT ...

多表更新1UPDATE table_references SET col_name1 = {expr | DEFAULT}[, col_name = {expr | DEFAULT}]...[WHERE where_condition]

CREATE … SELECT

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

连接

MySQL在SELECT语句,多表更新,多表删除语句中支持JOIN操作。

1.png

连接条件

使用ON关键字来设定连接条件,也可以使用WHERE来代替。

通常使用ON关键字来设定连接条件。

使用WHERE关键字进行结果集记录的过滤。1、内连接:在MySQL中JOIN,INNER JOIN,CROSS JOIN是等价的

2、外连接:LEFT JOIN左外连接;RIGHT JOIN右外连接

3、连接条件:使用ON设定连接条件,也可以用WHERE代替

(ON:设定连接条件;WHERE:进行结果集记录的过滤)

4:内连接是返回左表及右表符合连接条件的记录

5、例如:SELECT * FROM tabA JOIN tabB ON tabA.name = tabB.name;表示返回都含有的name值对应的字段

2.png

3.png

外连接1A LEFT JOIN B join_condition

数据表B的结果集依赖数据表A

数据表A的结果集根据左连接条件依赖所有数据表(B表除外)

左外连接条件决定如何检索数据表B(在没有指定WHERE条件的情况下)

如果数据表A的某条记录符合WHERE条件,但是在数据表B不存在符合连接条件的记录,将生成一个所有列为空的额外的B行。

如果使用内连接查找的记录在连接数据表中不存在,并且在WHERE字句中尝试以下操作:col_name IS NULL时,如果col_name被定义为NOT NULL,MySQL将在找到符合连接条件的记录后停止搜索更多的行。

自身连接

同一个数据表对其自身进行连接。1例:SELECT s.type_id , s.type_name , p.type_id  FROM tdb_goods AS s LEFT JOIN  tdb_goods AS p;

多表删除1

2

3DELETE tbl_name [.*] [, tbl_name[.*]]... FROM table_references[WHERE where_condition]

DELETE t1 FROM tdb_goods AS t1 LEFT JOIN (SELECT goods_id, goods_name FROM tdb_goods  GROUP BY  goods_name HAVING count(goods_name) >=2 ) AS t2 ON

t1.goods_name = t2.goods_name  WHERE t1.goods_id > t2.goods_id;

子查询:

出现在sql语句中的select子句,而子查询必须要出现在小括号()内,他的外层可以是select语句,insert语句,update语句,delete语句,而且在子查询中可以包含多个关键词:group by ,order by ,limit以及相关函数。引发子查询的情况有比较运算符 ,in(NOT)in运算符,exist(NOT EXIST)引发的子查询.

连接:

连接分为外连接和内连接,内连接主要显示的是左表和右表当中都符合连接条件的记录。外链接有分为左外连接和右外连接,左外连接显示的是左表中的全部记录和右表符合条件的记录,右外连接和左外连接相反,mysql中的select,多表更新和删除都可以用到内连接,左,右连接。

函数

查询api吧。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值