与MYSQL的零距离接触(笔记三) 慕课网

约束与修改数据表

   1.约束保证数据的完整性和一致性。
    2.约束分为表级约束和列级约束。
    3.约束类型分为:
        NOT NULL(非空约束)
        PRIMARY KEY(主键约束)
        UNIQUE KEY(唯一约束)
        DEFAULT(默认约束)
        FOREIGN KEY(外键约束)

表级约束可以同时用于两个或两个以上的字段使用,而列级约束只能针对某一个字段
默认和非空约束不存在表级约束中,只能存在列级约束中,而主键、唯一、外键约束 既可以存在表级约束,也可以存在列级约束中。

        
外键约束
FOREIGN KEY
    保持数据一致性,完整性。实现一对一或一对多关系。
外键约束的要求:
    1.父表和子表必须使用相同的存储引擎,而且禁止使用临时表。
    2.数据表的存储引擎只能为InnoDB。
(编辑数据表的默认存储引擎    MySQL配置文件    default-storage-engine=INNODB)
    3.外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同。
    4.外键列和参照列必须创建索引。如果外键列不存在索引的话,mysql将自动创建索引。


net start mysql
mysql -uroot -p123456        
USE test;
创建数据表:
    CREATE TABLE provinces(
    id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    pname VARCHAR(20) NOT NULL
    );
SHOW CREATE TABLE provinces;     查看数据表
创建数据表:
    CREATE TABLE users(
    id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    pname VARCHAR(20) NOT NULL,
    pid BIGINT,                //(创建不同的数据类型  无法创建成功))
    FOREIGN KEY(pid) REFERENCES provinces(id)    //(外键约束)
重新修改:
    CREATE TABLE users(
    id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    pname VARCHAR(20) NOT NULL,
    pid SMALLINT,        //(相同的数据类型  不同的符号位也不能创建成功))
    FOREIGN KEY(pid) REFERENCES provinces(id)    //(外键约束)
重新修改:
    CREATE TABLE users(
    id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    pname VARCHAR(20) NOT NULL,
    pid SMALLINT UNSIGNED,    //(相同的数据类型  相同的符号位 能创建成功))
    FOREIGN KEY(pid) REFERENCES provinces(id)    //(外键约束)

显示索引:SHOW INDEXES FROM provinces;
换成网格的形态显示:SHOW INDEXES FROM provinces\G;
    SHOW CREATE TABLE users;

    
外键约束的参照操作:
    1.CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行
    2.SET NULL:从父表删除或更新行,并设置子表中的外键列为 NULL。
        如果使用该项,必须保证子表没有指定NOT NULL
    3.RESTRICT:拒绝对父表的删除或更新操作。
    4.NO ACTION :标准的MYSQL的关键字,在MYSQL中与RESTRICT相同。
例如:
    CREATE TABLE users(
    id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    pname VARCHAR(20) NOT NULL,
    pid SMALLINT UNSIGNED,
    FOREIGN KEY(pid) REFERENCES provinces(id) ON DELETE CASCADE
    );
    
    INSERT provinces(pname) VALUE("A") ;
    INSERT provinces(pname) VALUE("B") ;
    INSERT provinces(pname) VALUE("C") ;
查询插入记录  SELECT * FROM provinces;
    INSERT users1(pname,pid) values ("Tom",3);
    INSERT users1(pname,pid) values ("John",7);
    INSERT users1(pname,pid) values ("John",1);
    INSERT users1(pname,pid) values ("Rosc",3);
    
    DELETE FROM provinces WHERE id=3;


表级约束与列级约束
    对一个数据列创建的约束,称为列级约束。
    对多个数据表创建的约束,称为表级约束。
    列级约束既可以再列定义时声明,也可在列定义后声明。
    表级约束只能在列定义后声明。
    
修改数据表
    添加单列
    ALTER TABLE tb1_name ADD [COLUMN] col_name column_definition [FIRST | ALTER col_name]
    例如:
    ALTER TABLE users1 ADD age TINYINT UNSIGNED NOT NULL DEFAULT 10;  添加在列最后
    ALTER TABLE users1 ADD password VARCHAR(32) NOT NULL AFTER username;  添加到username后面
    ALTER TABLE users1 ADD  truename VARCHAR(20) NOT NULL FIRST;  添加列最前面
    
    添加多列
    ALTER TABLE tb1_name ADD [COLUMN] (col_name column_definition,...)
    
    删除列
    ALTER TABLE tb1_name DROP [COLUMN] col_name;
    ALTER TABLE users1 DROP truename; 删除truename列
    ALTER TABLE users1 DROP password,DROP age;删除password,age列
    
    添加主键约束
    ALTER TABLE tb1_name ADD [CONSTRAINT[symbol]] PRIMARY KEY [index_type] (index_col_name,...)
    ALTER TABLE users2 ADD CONSTRAINT PK_users2_id PRIMARY KEY (id)
    
    SHOW COLUMNS FROM users2;
    
    添加唯一约束
    ALTER TABLE tb1_name ADD [CONSTRAINT[symbol]] UNIQUR [INDEX | KEY] [inex_name] [index_type] (index_col_name,...)
    ALTER TABLE users2 ADD UNIQUE (username);
    
    添加外键约束
    ALTER TABLE tb1_name ADD [CONSTRAINT[symbol]]  
    ALTER TABLE users2 ADD FOREIGN KEY (pid) REFERENCES provinces(id);

    添加/删除默认约束
    ALTER TABLE tb1_name ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
    
    ALTER TABLE users2 ADD age TINYINT UNSIGNED NOT NULL;    users2添加一个数据类型
    SHOW COLUMNS FROM users2 查看数据表结构
    ALTER TABLE users2 ALTER age SET DEFAULT 15;  设置默认值15
    ALTER TABLE users2 ALTER age DROP DEFAULT; 删除默认约束
    
    删除主键约束
    ALTER TABLE tb1_name DROP PRIMARY KEY;
    ALTER TABLE users2  DROP PRIMARY KEY;
    

    删除唯一约束
    ALTER TABLE tb1_name DROP {INDEX|KEY} index_name;

            查找默认约束的名字    SHOW INDEXES FROM user;
    ALTER TABLE user DROP INDEX username;    //删除默认约束

    ALTER TABLE users2 DROP {INDEX|KEY} users2;
    
    删除外键约束
    ALTER TABLE users2 DROP FOREIGN KEY users2_ibfk_1;
    
    
    
修改列定义
ALTER TABLE tb1_name MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]
ALTER TABLE users2 MODIFY id SMALLINT UNSIGNED NOT NULL FIRST;   把id放在第一位
ALTER TABLE users2 MODIFY  id TINYINT UNSIGNED NOT NULL FIRST;  把id的数据类型变成TINYIN                                                                                      T类型

修改列名称
ALTER TABLE tb1_name CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]
ALTER TABLE users2 CHANGE pid p_id TINYINT UNSIGNED NOT NULL; 把pid改成p_id

数据表更名
方法1:
    ALTER TABLE tb1_name RENAME [TO|AS] new_tb1_name
    例如:ALTER TABLE tb1 RENAME TO tb_1;
方法2:
    RENAME TABLE tb1_name TO new_tb1_name [,tb1_name2 TO new_tb1_name2]
    例如 RENAME TABLE tb_1 to tb1;

posted @ 2019-01-03 20:45  Bambooboo  阅读(203)  评论(0编辑  收藏  举报