MySQL语句(三)补充部分
表的查询:
SHOW TABLES [ FROM db_name ] [ LIKE ‘pattern’ | WHERE expr];
列的查询:
SHOW COLUMNS FROM tbl_name;
对表添加索引:
ALTER TABLE tbl_name ADD INDEX 索引名 (字段名);
建表时可能会用到的几种条件:
**约束:**保证数据的一致性和完整性
**分类1:**分为列级约束和表级约束。列级约束只能对单个字段起作用,列级可对多个。且列级约束可以再列声明的前后使用,而表级约束只能在列声明以后使用。
**分类2:**分为主键约束、唯一约束、外键约束、默认约束、非空约束。
其中的非空约束NOT NULL和默认约束DEFAULT很好理解,即这一字段不能为空和字段的某一个值使用默认值。这两种都属于列级约束。
(1)主键约束 PRIMARY KEY 一个表中只能有一个主键约束,且默认主键不能为空
(2)唯一约束 UNIQUE KEY 一个表中可以有多个唯一约束,且该字段可以为空
(3)外键约束 FOREIGN KEY 从其他表中参照过来的,实现表的一对一或一对多
外键约束有一定的使用条件,即父表(被参照的表)和子表(有外键的表)
要使用相同的存储引擎InnoDB,并且不能是临时表。
其次,外键所在的列与父表中被参照的列必须有相同的数据类型
(如果是数字、符号要求其长度要一致;如果是字符,则长度可以不一致)
说到这里,顺便解释一下AUTO_INCREMENT (自动编号),系统中要求它必须与主键PRIMARY KEY放在一起才能使用,不能单独使用;但设定主键时不要求一定有AUTO_INCREMENT。
例:CREATE TABLE tb1(
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(30) NOT NULL
);
因为外键约束的操作涉及到至少两张表,所以对FOREIGN KEY 进行一下详细介绍:
CREATE TABLE XX (
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20) NOT NULL,
pid SMALLINT UNSIGNED,
FOREIGN KEY (pid) REFERENCES 参照的表名(参照的列名) ON DELETE CASCADE
);
从中看出FOREIGN KEY的语法是:
FOREIGN KEY (子表列名) REFERENCES 父表名(父表列名);
这一例子中用到了之前跳到的自动编号和主键约束、非空约束以及外键约束,而最后使用的CASCADE 的用法是:
ON XX CASCADE
是指“在对父表进行XX操作时(删除或更新等)对子表进行同步的操作”。
除了CASCADE外还可以使用 RESTRICT 和 NO ACTION 来拒绝对父表的删除或更新操作,即父表改变,子表不进行相应变化。
**tip:**想要对有外键的表进行插入(INSERT)操作时,需要先对父表插入,再对子表插入。
下面我们对不同约束的使用进行说明:
①:主键约束的添加和删除
ALTER TABLE tbl_name ADD [ CONSTRAINT [ symbol ] ]
PRIMARY KEY [ index_type ] (index_col_name);
其中, [ CONSTRAINT [ symbol ] ] 是对创建的主键约束进行命名,可有可无;index_type一般有两种,哈希和B tree ,一般情况下默认为第二种。
删除:
ALTER TABLE tbl_name DROP PRIMARY KEY ;
②:唯一约束的添加和删除
ALTER TABLE tbl_name ADD [ CONSTRAINT [ symbol ] ] UNIQUE KEY [ INDEX | KEY ]
[ index_name] [ index_type ] ( index_col_name,.....);
index_col_name是被添加约束的字段名。
删除:
ALTER TABLE tbl_name DROP UNIQUE { INDEX | KEY } index_name;
③:外键约束的添加和删除
ALTER TABLE tbl_name ADD [ CONSTRAINT [ symbol ] ]
FOREIGN KEY [ index_name ] ( index_col_name,...)
reference_definition ;
例: ALTER TABLE users ADD FOREIGN KEY (子表列名) REFERENCE 参照表名(参照列名);
删除:
ALTER TABLE tbl_name DROP FOREIGN KEY [ 约束名 ];
约束名即 [ CONSTRAINT [ symbol ] ]
④:默认约束的添加和删除
ALTER TABLE tbl_name ALTER [ COLUMN ] col_name
{ SET DEFAULT litera | DROP DEFAULT };
litera 是具体值