约束条件

约束条件

null 默认允许为空
not null 不允许为空
key 索引类型
default 设置默认值,缺省为null

普通/唯一/全文键 主/外键

一般用的比较多的是:普通/主/外键
普通索引标记是MUL,主键的标记是PRI,
########################################################################
enum

enum是枚举类型,它虽然只能保存一个值,却能够处理多达65535个预定义的值。
如果我们建立表时,结构是enum("girl","boy","secret") ,而往表里写入数据不是这三个中的一个,那么会默认是空字符串。

MariaDB [db1]> create table b(
-> id int primary key auto_increment,
-> name varchar(10) not null,
-> sex enum("girl","boy","secret") 这个字段的值只能是"girl","boy","secret"这三个中的一个。
-> )engine=innodb;


MariaDB [db1]> desc b;
+-------+-----------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| sex | enum('girl','boy','secret') | YES | | NULL | |
+-------+-----------------------------+------+-----+---------+----------------+


MariaDB [db1]> insert into b(name,sex) values("lisi","test"); 这里sex字段的值是"test",不是设置的那三个值中的一个

MariaDB [db1]> select * from b;
+----+------+------+
| id | name | sex |
+----+------+------+
| 1 | lisi | | 可以发现sex的值是空
+----+------+------+

########################################################################
not null 设置值不允许为空

需要注意的是,因为设置字符的值不能为空。所以我们无法往表里写入一个值是null,它会报错。但是值可以是" ",也可以是"null"。

mysql> use db2;
mysql> select database();
+------------+
| database() |
+------------+
| db2 |
+------------+

mysql> create table t4(name char(10) not null); 设置字符的值不能为空
mysql> insert into t4 values("bob");
mysql> insert into t4 values(" "); 值可以是" "
mysql> insert into t4 values("null"); 可用引号引起来"null"

mysql> select * from t4;
+------+
| name |
+------+
| bob |
| |
| null |
+------+

mysql> insert into t4 values(null); 值不能为空
ERROR 1048 (23000): Column 'name' cannot be null

mysql> drop table t4;
#########################################################################
mysql> create table t4(
-> name char(10) not null,
-> age tinyint not null default 25,
-> likes set("eat","sleep","game","zhang")
-> default "eat,sleep"
-> );

mysql> insert into t4(name)values("bob");
mysql> select * from t4;
+------+-----+-----------+
| name | age | likes |
+------+-----+-----------+
| bob | 25 | eat,sleep |
+------+-----+-----------+

mysql> desc t4;
+-------+-----------------------------------+------+-----+-----------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------------------------+------+-----+-----------+-------+
| name | char(10) | NO | | NULL | |
| age | tinyint(4) | NO | | 25 | |
| likes | set('eat','sleep','game','zhang') | YES | | eat,sleep | |
+-------+-----------------------------------+------+-----+-----------+-------+
########################################################################
alter 修改表结构

用法:
alter 表名 执行动作;

执行动作:
add 添加字段
modify 修改字段类型
change 修改字段名
drop 删除字段
rename 修改表名
#########################################################################
添加新字段

用法:
alter table 表名
add 字段名 类型(宽度) 约束类型;
可加 after 字段名;
或者 first;


mysql> alter table t4
-> add email varchar(30) default "stu@tedu.cn", 在最后一列,增加新字段
-> add tel char(11);

mysql> alter table t4
-> add stu_num char(9) first; 在第一列,增加新字段

mysql> alter table t4
-> add class char(7) default "nsd1808" after name; 在某字段后,增加新字段

mysql> select * from t4;
+---------+------+---------+-----+-----------+-------------+------+
| stu_num | name | class | age | likes | email | tel |
+---------+------+---------+-----+-----------+-------------+------+
| NULL | bob | nsd1808 | 25 | eat,sleep | stu@tedu.cn | NULL |
+---------+------+---------+-----+-----------+-------------+------+

mysql> desc t4;
+---------+-----------------------------------+------+-----+-------------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-----------------------------------+------+-----+-------------+-------+
| stu_num | char(9) | YES | | NULL | |
| name | char(10) | NO | | NULL | |
| class | char(7) | YES | | nsd1808 | |
| age | tinyint(4) | NO | | 25 | |
| likes | set('eat','sleep','game','zhang') | YES | | eat,sleep | |
| email | varchar(30) | YES | | stu@tedu.cn | |
| tel | char(11) | YES | | NULL | |
+---------+-----------------------------------+------+-----+-------------+-------+
#############################################################################
修改字段类型

用法:
alter table 表名
modify 字段名 类型(宽度) 约束条件;
可加 after 字段名;
或 first;

mysql> desc t4;
+---------+-----------------------------------+------+-----+-------------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-----------------------------------+------+-----+-------------+-------+
| stu_num | char(9) | YES | | NULL | |
| name | char(10) | NO | | NULL | |
| class | char(7) | YES | | nsd1808 | |
| age | tinyint(4) | NO | | 25 | |
| likes | set('eat','sleep','game','zhang') | YES | | eat,sleep | |
| email | varchar(30) | YES | | stu@tedu.cn | |
| tel | char(11) | YES | | NULL | |
+---------+-----------------------------------+------+-----+-------------+-------+

mysql> alter table t4
-> modify stu_num varchar(10);

mysql> alter table t4
-> modify age tinyint default 25
-> after name;

mysql> desc t4;
+---------+-----------------------------------+------+-----+-------------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-----------------------------------+------+-----+-------------+-------+
| stu_num | varchar(10) | YES | | NULL | |
| name | char(10) | NO | | NULL | |
| age | tinyint(4) | YES | | 25 | |
| class | char(7) | YES | | nsd1808 | |
| likes | set('eat','sleep','game','zhang') | YES | | eat,sleep | |
| email | varchar(30) | YES | | stu@tedu.cn | |
| tel | char(11) | YES | | NULL | |
+---------+-----------------------------------+------+-----+-------------+-------+

mysql> alter table t4 modify likes set('eat','sleep','game','zhang',"it","book") default "it,book";
可以复制原来的约束条件。要记住在数据库里,最好都用双引号"",因为它能屏蔽特殊字符!

mysql> desc t4;
+---------+-----------------------------------------------+------+-----+-------------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-----------------------------------------------+------+-----+-------------+-------+
| stu_num | varchar(10) | YES | | NULL | |
| name | char(10) | NO | | NULL | |
| age | tinyint(4) | YES | | 25 | |
| class | char(7) | YES | | nsd1808 | |
| likes | set('eat','sleep','game','zhang','it','book') | YES | | it,book | |
| email | varchar(30) | YES | | stu@tedu.cn | |
| tel | char(11) | YES | | NULL | |
+---------+-----------------------------------------------+------+-----+-------------+-------+
#############################################################################
修改字段名

用法:
alter table 表名
change 源字段名 新字段名 类型(宽度) 约束条件;

要注意的是:改的时候,如果跟新类型和约束条件时,也可修改字段类型。
用change可以修改 字段名 和 字段类型!

mysql> alter table t4 change email mail varchar(30) default "stu@tedu.cn";
############################################################################
删除字段 (1个或多个字段)

用法:
alter table 表名
drop 字段名;

删多个字段:
alter table 表名
drop 字段名,drop 字段名;

表中有多条记录时,此字段的这一列的值都会被删除。

MariaDB [db1]> select * from b; 原来表b有这么多个字段
+------+----+------+------+-------+-------+------+------+------+--------+
| uid | id | name | numb | numbe | ageee | haha | sex | age | number |
+------+----+------+------+-------+-------+------+------+------+--------+
| NULL | 1 | lisi | NULL | NULL | | 0 | | 25 | 0 |
+------+----+------+------+-------+-------+------+------+------+--------+

MariaDB [db1]> alter table b drop uid,drop numb,drop numbe,drop ageee,drop haha,drop number;

MariaDB [db1]> select * from b; 被删除的字段和该字段相应的值也会被删除
+----+------+------+------+
| id | name | sex | age |
+----+------+------+------+
| 1 | lisi | | 25 |
+----+------+------+------+
####################################################################################
修改表名

用法:
alter table 表名
rename 新表名

表对应的文件名,也会改变


MariaDB [db1]> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| a |
| b |
+---------------+


MariaDB [db1]> alter table b 把表b改成bbb
-> rename bbb;

MariaDB [db1]> show tables; 查看到已经改成功了
+---------------+
| Tables_in_db1 |
+---------------+
| a |
| bbb | 表b改成了bbb
+---------------+

 

转载于:https://www.cnblogs.com/summer2/p/10798333.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值