微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySQL之数据表控制语句

博文大纲:

一、约束条件相关语句

1、主键约束(主键约束要求主键列的数据唯一,并且不允许为空)
<!--创建库-->
mysql> create database test01; 
<!--切换至新库-->
MysqL> use test01;
<!--创建一个带有主键约束的表-->
MysqL> create table t1(
    -> id int(10),
    -> name varchar(10) primary key,
    -> sex varchar(5),
    -> info varchar(200)
    -> );

确定创建的是否为主键(该列是否有PRI字样):

MySQL之数据表控制语句


上述方法,是在定义列的同时定义主键,下面来写一下定义完所有列之后指定主键:

MysqL> create table t2(
    -> id int(10),
    -> name varchar(10),
    -> sex varchar(5),
    -> primary key(id)
    -> );

确认是否有主键:

MySQL之数据表控制语句

2、非空约束(不允许列的值为空)
MysqL> create table t3(
    -> id int(6) not null,
    -> name varchar(10)
    -> );

查看表信息确认:

MySQL之数据表控制语句

3、设置值的唯一性(不允许重复数据,可以为空,但只能有一个空,否则就会被视为重复)
MysqL> create table t7(
    -> id int not null unique,
    -> name varchar(20)
    -> );

查看其表结构:

MySQL之数据表控制语句

可以看到其被标识为了主键,但是在创建时并没有指定它是主键,而是这一列的属性基本满足了主键的要求,如唯一、不可以为空。

4、设置列的认值(如果该列为空,则写入认值)
MysqL> create table t4(
    -> id int(2) not null,
    -> name varchar(20),
    -> project varchar(20) default 'MysqL'
    -> );

查看确认:

MySQL之数据表控制语句

5、设置自增值(一般用于id列,自增列必须设置为主键)

注:MysqL只允许设置初始值,而不允许设置自增值,也就是说,可以设置为第一个值为5,然后依次递增,如:5、6、7.....但不可以设置其一次递增2个数,比如:5、7、9......

MysqL> create table t5(
    -> id int not null primary key auto_increment,
    -> name varchar(20)
    -> );

查看表结构进行确认:

MySQL之数据表控制语句

测试其自增效果

MysqL> insert into t5(name) values('zhangsan'),('lisi');
MysqL> select * from t5;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
|  2 | lisi     |
+----+----------+

从上面的测试可以看出,只插入了两个name的值,并没有插入id的值,但是查看表数据时,id已经有值了,说明自增生效。

设置自增的起始值

#定义初始值为5
MysqL> create table t6(                                  
    -> id int primary key auto_increment,
    -> name varchar(20)
    -> ) auto_increment=5;
#插入数据进行测试
MysqL> insert into t6(name) values('zhangsan'),('lisi'); 

验证其自增值:

MySQL之数据表控制语句

二、ALTER指令的使用

1、修改列值的数据长度
MysqL> desc t1;            <!--查看t1表的结构-->
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(10)      | YES  |     | NULL    |       |
| name  | varchar(10)  | NO   | PRI | NULL    |       |
| sex   | varchar(5)   | YES  |     | NULL    |       |
| info  | varchar(200) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
MysqL> alter table t1 modify name varchar(20);      <!--修改其name字段的长度为20-->

确认修改后的表结构:

MySQL之数据表控制语句

2、修改字段名(在修改字段名的同时,还可以修改其新字段名的数据类型及数据长度)
MysqL> desc t1;         <!--查看其info列-->
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(10)      | YES  |     | NULL    |       |
| name  | varchar(20)  | NO   | PRI | NULL    |       |
| sex   | varchar(5)   | YES  |     | NULL    |       |
| info  | varchar(200) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+

MysqL> alter table t1 change info infofo char(20);    <!--修改其info列的名字及数据类型-->

验证修改后的结果:

MySQL之数据表控制语句

3、向表中插入一个新的字段

1)在最后一列插入新列:

MysqL> desc t3;             <!--确认t3列当前的字段-->
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(6)      | NO   |     | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
MysqL> alter table t3 add tel int(13);         <!--插入一个tel列-->

查看插入后的列:

MySQL之数据表控制语句


2)在表格开头插入新列:

MysqL> alter table t3 add sex char(1) first;

3)在指定的列后面插入新列:

MysqL> alter table t3 add loc varchar(255) after name;
4、添加字段时添加约束
MysqL> alter table t3 add hobyy varchar(255) default 'work';
5、添加一个外键

进行此操作前,需要自行找一个有主键的表(我这里t1表的name列是主键)。

现在t1表的结构如下:

MySQL之数据表控制语句


t3表的结构如下:

MySQL之数据表控制语句

现在将t3表的name列添加为t1表的name列的外键(其中t3_t1_name为自定义的约束名称):

MysqL> alter table t3 add constraint t3_t1_name foreign key(name) references t1(name);

查看t3表的变化:

MySQL之数据表控制语句

6、删除外键

将上面添加的外键删除,t3_t1_name是外键的名称

MysqL> alter table t3 drop foreign key t3_t1_name;
MysqL> alter table t3 drop  key t3_t1_name;
7、删除
MysqL> alter table t3 drop tel;                <!--删除t3表的tel列-->

注意:如果要删除的列和其他表中的列有关联关系,则需要先删除关系,再删除列。否则当以后再创建了相同名称的列时,会自动将其建立关系。

8、修改列的顺序
<!--将name字段移动到表的第一列-->
MysqL> alter table t3 modify name varchar(10) first;
9、删除
MysqL> drop table t5;            <!--直接删除-->
Query OK, 0 rows affected (0.00 sec)

MysqL> drop table t5;            <!--再次删除,由于已经删除了,所以表不存在,会报错-->
ERROR 1051 (42S02): UnkNown table 'test01.t5'
MysqL> drop table if exists t5;       <!--进行判断后删除,if exists表示如果存在就删除-->
Query OK, 0 rows affected, 1 warning (0.00 sec)
<!--可以看到上述返回的信息有1个warning事项,可以执行以下命令进行查看-->
MysqL> show warnings;    <!--记录的信息时不知道test01库中的t5表-->
+-------+------+---------------------------+
| Level | Code | Message                   |
+-------+------+---------------------------+
| Note  | 1051 | UnkNown table 'test01.t5' |
+-------+------+---------------------------+
1 row in set (0.00 sec)

同样,当执行删除表操作时,如果存在关联关系,则需要先删除关联关系,再删除表。

———————— 本文至此结束,感谢阅读 ————————

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐