2.MySQL数据库表结构管理_数据库

2.MySQL数据库表结构管理

一、约束条件

  • 作用:限制字段赋值
  • 约束条件
  • null 允许为空(默认设置)
  • not null 不允许为null(空)
  • Null列下显示YES是表示可以赋空值,NO时表示不可以赋空值
  • key 建值类型
  • default 设置默认值,缺省为null
  • 默认值也可设置为 " ",表示0个字符,不为空
  • extra 额外设置
  • 以本表为例
    未设置约束条件,全是系统默认分配的。
mysql> create table t1 ( name char(10) , age int );
Query OK, 0 rows affected (0.00 sec)

mysql> desc t1;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| name | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> insert into t1 values (null ,null); --向表内插入空值
Query OK, 1 row affected (0.00 sec)
mysql> select * from t1; --查看表内容

1.1、查看约束条件

  • 查看:
desc  库名.表名;

1.2、设置约束条件

  • 新建t1表
    name不能为空,age不能为空,并设置默认值为19,sex默认可以为空,并设置枚举单选
mysql> drop table t1;    --删除原t1表
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;
Empty set (0.00 sec)

mysql> create table db2.t1 (name char(10) not null ,age int not null default 19 , sex enum ("boy" , "girl" ) );
Query OK, 0 rows affected (0.01 sec)
--新建t1表,name不能为空,age不能为空,并设置默认值为19,sex默认可以为空,并设置枚举单选
mysql> desc t1;
+-------+--------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------------+------+-----+---------+-------+
| name | char(10) | NO | | NULL | |
| age | int(11) | NO | | 19 | |
| sex | enum('boy','girl') | YES | | NULL | |
+-------+--------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
  • 向t1表中插入数据
mysql> insert into db2.t1 values( null ,  21 , null);
ERROR 1048 (23000): Column 'name' cannot be null
--报错,提示name列不能为空值.

mysql> insert into db2.t1 values( "tom" , 21 , null);
Query OK, 1 row affected (0.00 sec)
--成功,插入符合条件的值
  • 只向表中插入name和sex
mysql> insert into db2.t1 (name,sex)values("jerry","boy");
Query OK, 1 row affected (0.01 sec)

mysql> select * from t1; --查看表内容
+-------+-----+------+
| name | age | sex |
+-------+-----+------+
| tom | 21 | NULL |
| jerry | 19 | boy | --可以看到,我并没有给age赋值,但是我设置了默认值.
+-------+-----+------+ --所以自动为age赋默认值
2 rows in set (0.00 sec)

二、修改表结构

2.1、语法结构

  • 命令格式
    mysql>alter table 库名.表名 执行动作;
  • 执行动作
    add 添加字段
    change 修改字段名
    modify 修改字段类型
    drop 删除字段
    rename 修改表名

2.2、添加新字段

  • 示例
mysql> create table db1.t2( name char(10) , csnf year(4) );  --创建表
mysql> desc db1.t2; --查看表结构
mysql> insert into db1.t2 values("abc" ,"2010"); --插入内容
mysql> select * from db1.t2; --查看表内容
  • 添加内容
mysql> alter table db1.t2
-> add homeaddr char(50) default "beijing" ,add email varchar(30);
--不指定,默认按照先后顺序添加
mysql> alter table db1.t2 add stu_nu int first;
--first添加字段到第一列
mysql> alter table db1.t2
-> add sex enum("m" , "w" ) not null default "m" after name ;
--after name 表示插入到name这列的后面;
mysql> select * from db1.t2;
--查看表内容

2.3、修改字段名

  • 还是以t2表为例
mysql> alter table db1.t2
-> change stu_nu stu_num int;
--修改stu_nu为stu_num

2.4、修改字段类型

  • 示例
mysql> desc t2;
mysql> alter table db1.t2 modify stu_num tinyint unsigned ;
--将stu_num的类型由int改为tinyint unsigned
mysql> desc t2;

mysql> select * from t2;
mysql> alter table db1.t2 modify homeaddr char(50) default "beijing" after email;
--将homeaddr 放到 email 后面
mysql> select * from

2.5、删除字段

  • 示例
mysql> alter table  db1.t2  drop  stu_num  ,  drop email;
//删除stu_num 和 email
mysql> select * from t2;

2.6、修改表名

  • 示例
mysql> alter table  db1.t2 rename  db1.ttt222;

mysql> show tables;