MySQL 约束&数据表操作

约束

作用:保证数据的完整性、一致性。

分类:

  • 表级约束:对多个数据列的约束
  • 列级约束:对一个数据列的约束
  • 区别:表级约束只能在列定义时声明;列级约束可以在定义后声明

具体

  • NOT NULL 非空约束
  • PRIMARY KEY 主键约束:保证唯一性,自动为非空,只有一个
  • UNIQUE KEY 唯一约束:保证唯一性,可以为空,可以多个
  • DEFAULT 默认约束:没有赋值时,自动赋默认值,可以多个
  • FOREIGN KEY 外键约束:实现1对n的关系(n为自然数)

主键约束

添加

ALTER TABLE tb_name ADD [ CONSTRAINT [symbol ] ]

PRIMARY KEY [ index_type ] ( index_col_name,... );

eg.:

ALTER TABLE user ADD CONSTRAINT id

PRIMARY KEY (id);

删除

ALTER TABLE tb_name DROP PRIMARY KEY;

eg.:

ALTER TABLE user DROP PRIMARY KEY;

 

唯一约束

添加

ALTER TABLE tb_name ADD [ CONSTRAINT [symbol ] ]

UNIQUE [ INDEX | KEY ] [ index_name ] [ index_type ]

( index_col_name,... );

eg.:

ALTER TABLE user ADD UNIQUE (username);

删除

ALTER TABLE tb_name DROP {INDEX | KEY} index_name

eg.:

ALTER TABLE user DROP INDEX username;

默认约束

添加、删除

ALTER TABLE tb_name ALTER [COLUMN] col_name

{ SET DEFAULT literal | DROP DEFAULT };

eg.:

ALTER TABLE user ALTER age SET DEFAULT 15;

 

外键约束

(子表有外键列的表,父表有参照列的)

  • 父子表,使用相同的存储引擎,非临时表
  • 数据表的存储引擎为InnoDB
  • 外键列和参照列有相似的数据类型(数字长度、有无符号必须相同)
  • 外键列和参照列有索引(外键列默认自动创建)

修改存储引擎(编辑配置文件my.ini)

default-storge-engine = InnoDB

外键约束的参照操作

  • CASCDE:当父表(删除|更新),则自动(删除|更新)子表对应的行
  • SET NULL:当父表(删除|更新),则设置表中的外键列为null
  • RESTRICT:拒绝对父表(删除|更新)
  • NO ACTION:同RESTRICT

添加

ALTER TABLE tb_name ADD [ CONSTRAINT [symbol ] ]

FOREIGN KEY [ index_name ] ( index_col_name,... )

reference_definition;

eg.:

ALTER TABLE user ADD FOREIGN KEY (pid) REFERENCES test (id);

删除

ALTER TABLE tb_name DROP FOREIGN KEY fk_symbol;

eg.:

ALTER TABLE user DROP FOREIGN KEY pid;

数据表操作

创建数据表

(最后一个不+,)

CREATE TABLE [IF NOT EXISTS] table_name(

column_name DATATYPE [UNSIGNED] [AUTO_INCREMENT] [PRIMARY KEY]

[ NULL | NOT NULL],

...

);
  • UTO_INCREMENT 自动编号:必须和主键一起用,起始为1,每次+1

eg.:test表pid,参照user表中的id

CREATE TABLE test (

id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

username VARCHAR(20) NOT NULL UNIQUE KEY,

age TINYINT UNSIGNED NULL,

sex ENUM('W','M',N) DEFAULT 'N',

pid BIGINT,

FOREIGN KEY (pid) REFERENCES user (id) ON DELETE CASCADE

);

修改数据表

ALTER TABLE tb_name RENAME [TO | AS ] new_tb_name;

RENAME TABLE tb_name TO new_tb_name

[,tb_name2 TO new_tb_name2]...;

添加单列

ALTER TABLE tb_name ADD [COLUMN] col_name

column_definition [ FIRST | AFTER col_name ] ;

eg.:

ALTER TABLE test ADD COLUMN password

VARCHAR(20) NOT NULL AFTER;

添加多列

ALTER TABLE tb_name ADD [COLUMN]

( col_name column_definition ,...);

eg.:

ALTER TABLE user ADD COLUMN

( age SMALLINT ,

address VARCHAR(32)

);

删除列

ALTER TABLE tb_name DROP [COLUMN] col_name;

eg.:

ALTER TABLE user DROP COLUMN password;

修改列定义

ALTER TABLE tb_name MODIFY [COLUMN] col_name

column_definition [FIRST | AFTER col_name]

修改列名称

ALTER TABLE tb_name CHANGE [COLUMN] old_col_name

new_col_name column_definition [FIRST | AFTER col_name]

查看数据表

SHOW TABLES [FROM db_name ]

[ LIKE 'pattern' | WHERE expr ]

eg.:

SHOW TABLES FROM test;

查看数据表结构

SHOW COLUMNS FROM tb_name;

eg.:

SHOW COLUMNS FROM test;

猜你喜欢

转载自blog.csdn.net/weixin_38500325/article/details/81477955