1.约束
1.1.完成对数据的检验,保持数据的一致性和完整性。
1.2.表级的约束和列级约束(针对字段的个数分类)
1.3.功能分类:非空约束(NOT NULL)、主键约束(PRIMARY KEY)、唯一约束(UNIQUE KEY)、默认约束(DEFAULT)、外键约束(FOREIGN KEY)。
1.4.外键约束:保持数据的一致性和完整性,实现一对一或者一对多的关系。
1.4.1.父表和子表有相同的存储引擎,且禁止使用临时表
1.4.2.存储引擎只能为InnoDB
1.4.3.外键列和参照列必须有相似的数据类型,其中数字的长度或有符号位必须相同;而字符的长度可以不通。
1.4.4.外建列和参照列必须有索引,如果外建不存在索引,4.1.2版本之前MySQL不会自动创建索引但是之后会自动建立索引,参照列没有的话MySQL会自动创建(一般参照列为主键会自动创建索引)。
1.4.5.查看索引:SHOW INDEXS FROM table_name
1.4.6.配置默认引擎:在my.ini文件中找到default-storage-engine= INNODB
1.4.7.外建约束的建立
1)ALTER TABLE table_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_type] (index_col_name,…) REFERENCES table_name (index_col_name,…)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
1.4.8.外建关键字说明
1)ON DELETE、ON UPDATE表示事件触发限制,可设参数
2)CASCADE(跟随外键改动):父表删除或者更新自动删除或更新字表
3)SET NULL(设空值):父表删除或者更新,并设置字表外键列为NULL,前提是外建列未设置为NOT NULL
4)RESTRICT(限制外表中的外键改动):拒绝对父表的删除和更新
5)NO ACTION(无动作,默认的):标准SQL关键字
6)字表和父表的区分:当给A表引用B表的某个字段作为外建,那么B就是A的父表,A是B的子表。
7)很少物理的外键约束,一般用逻辑的外键约束(在定义表结构时候按照外键约束的逻辑去设置,但是不设置真正外建)。
1.5.表级和列级约束:按约束列的的个数多少区分,表级约束只有在列定义以后声明(很少用).
2.添加约束
2.1.添加主键约束(只能一个):ALTER TABLE table_name ADD [CONSTRAINT [symbol]] PEIMARY KEY [index_type] (index_col_name)
2.1.1.symbol:主键的名字
2.1.2.index_type:索引的类型,默认为btree索引,还有hash索引。
2.1.3.index_col_name:约束的字段比如:id。
2.2.添加唯一性约束(可以多个):ALTER TABLE table_name ADD[CONSTRAINT [symbol]] UINQUE [INDEX|KEY] [index_type] (index_col_name,...)
2.3.添加外键约束:ALTER TABLE table_name ADD FOREIGN KEY [index_type] (外键index_col_name) REFERENCES table_name1(主键index_col_name)
3.删约束
3.1.删除主键约束:ALTER TABLE table_name DROP PEIMARY KEY
3.2.删除唯一约束(一张表可以有多个唯一约束):ALTER TABLE table_name DROP {INDEX|KEY} index_name
3.3.删除外键约束(通过SHOW CREATE TABLE table_name查看外键约束的名字):ALTER TABLE table_name DROP FOREIGN KEY fk_symbol
4.修改数据库
4.1.添加列(添加多列的时候不能指定位置):ALTER TABLE table_name ADD col_name column_definition [FIRST|AFTER col_name]
4.2.删除列:ALTER TABLE table_name DROP col_name
4.3.修改列定义:ALTER TABLE table_name MODIFY col_name column_definition [FIRST|AFTER col_name]
4.4.修改列名称:ALTER TABLE table_name CHANGE old_col_name new_col_name column_definition [FIRST|AFTER col_name]
4.5.修改表名
1)ALTER TABLE table_name RENAME [AS|TO] new_table_name
2)RENAME table_name TO new_talbe_name [,table_name1 TO new_table_name1,......]
5.总结