一、约束条件

  • 作用:限制字段赋值
  • 约束条件
    • 默认值也可设置为 " ",表示0个字符,不为空

    • Null列下显示YES是表示可以赋空值,NO时表示不可以赋空值

    • null 允许为空(默认设置)

    • not null 不允许为null(空)

    • key 建值类型

    • default 设置默认值,缺省为null

    • 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 t2

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;