十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
博文大纲:
网站建设、基于HTML5技术的Web开发、手机站开发、微信开发等互联网应用服务。成都创新互联始终关注着互联网行业的前沿动态,创新互联坚信:真诚的态度,勤奋的工作是我们赢得客户信赖的基础;而不断创新、力求完美,才是创新互联共同迈向美好未来的保证。
- 一、约束条件相关语句
- 主键约束
- 非空约束
- 设置值的唯一性
- 设置列的默认值
- 设置自增值
- 二、ALTER指令的使用
- 修改列值的数据长度
- 修改字段名
- 向表中插入一个新的字段
- 添加字段时添加约束
- 添加一个外键
- 删除外键
- 删除列
- 修改列的顺序
- 删除表
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> create table t2(
-> id int(10),
-> name varchar(10),
-> sex varchar(5),
-> primary key(id)
-> );
确认是否有主键:
mysql> create table t3(
-> id int(6) not null,
-> name varchar(10)
-> );
查看表信息确认:
mysql> create table t7(
-> id int not null unique,
-> name varchar(20)
-> );
查看其表结构:
可以看到其被标识为了主键,但是在创建时并没有指定它是主键,而是这一列的属性基本满足了主键的要求,如唯一、不可以为空。
mysql> create table t4(
-> id int(2) not null,
-> name varchar(20),
-> project varchar(20) default 'mysql'
-> );
查看确认:
注: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> 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> desc 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);
确认修改后的表结构:
mysql> desc t1;
+-------+--------------+------+-----+---------+-------+
| 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);
验证修改后的结果:
1)在最后一列插入新列:
mysql> desc 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);
查看插入后的列:
2)在表格开头插入新列:
mysql> alter table t3 add sex char(1) first;
3)在指定的列后面插入新列:
mysql> alter table t3 add loc varchar(255) after name;
mysql> alter table t3 add hobyy varchar(255) default 'work';
进行此操作前,需要自行找一个有主键的表(我这里t1表的name列是主键)。
现在t1表的结构如下:
t3表的结构如下:
现在将t3表的name列添加为t1表的name列的外键(其中t3_t1_name为自定义的约束名称):
mysql> alter table t3 add constraint t3_t1_name foreign key(name) references t1(name);
查看t3表的变化:
将上面添加的外键删除,t3_t1_name是外键的名称。
mysql> alter table t3 drop foreign key t3_t1_name;
mysql> alter table t3 drop key t3_t1_name;
mysql> alter table t3 drop tel;
注意:如果要删除的列和其他表中的列有关联关系,则需要先删除关系,再删除列。否则当以后再创建了相同名称的列时,会自动将其建立关系。
mysql> alter table t3 modify name varchar(10) first;
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;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> show warnings;
+-------+------+---------------------------+
| Level | Code | Message |
+-------+------+---------------------------+
| Note | 1051 | Unknown table 'test01.t5' |
+-------+------+---------------------------+
1 row in set (0.00 sec)
同样,当执行删除表操作时,如果存在关联关系,则需要先删除关联关系,再删除表。
———————— 本文至此结束,感谢阅读 ————————