字段就是在创建表的时候所添加的内容,比如id,name,password等关键信息,查看表中的字段在表中已经描述。
SQL命令:
SHOW COLUMNS FROM tablename;
mysql> SHOW COLUMNS FROM zusers;
+-----------+-------------------+------+------+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-----------------+------+------+---------------------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| vname | varchar(20) | YES | | NULL | |
| vpwd | varchar(50) | YES | | NULL | |
| add_time | timestamp | NO | | CURRENT_TIMESTAMP | |
+-----------+-------------------+------+------+---------------------+----------------+
4 rows in set
添加字段:ADD COLUMN
SQL命令:
ALTER TABLE <table name> ADD COLUMN <column name>;
mysql> ALTER TABLE zx_users ADD COLUMN phone int(20) UNSIGNED NULL DEFAULT NULL AFTER vpwd;
Query OK, 0 rows affected
Records: 0 Duplicates: 0 Warnings: 0
mysql>
参数说明
ALTER TABLE zx_users :在zx_users这个表上添加字段
ADD COLUMN phone :添加的字段名为phone
int(20) :字段类型为int型,长度为20
UNSIGNED :类型为无符号类型
NULL :添加内容时允许值为空
DEFAULT NULL :默认为空
AFTER vpwd :添加到字段vpwd后面,不加的话默认添加到表的末尾
查看字段:DESC
在表管理中已经介绍过。
SQL命令:
SHOW COLUMNS FROM <tablename>;
或:
DESC <tablename>;
SHOW COLUMNS FROM zx_users;
+-----------+-------------------+------+------+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-----------------+------+------+---------------------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| vname | varchar(20) | YES | | NULL | |
| vpwd | varchar(50) | YES | | NULL | |
| add_time | timestamp | NO | | CURRENT_TIMESTAMP | |
+-----------+-------------------+------+------+---------------------+----------------+
4 rows in set
修改字段类型:CHANGE COLUMN
SQL命令:
ALTER TABLE <tablename> CHANGE COLUMN <columnname> …
修改字段名
SQL命令:
ALTER TABLE <tablename> CHANGE COLUMN <columnname> <new columnname>;
删除字段: DROP COLUMN
SQL命令:
ALTER TABLE <tagblename> DROP COLUMN <columnname>;
mysql> DESC zx_users;
+-----------+-------------------+------+------+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-----------------+------+------+---------------------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| vname | varchar(20) | YES | | NULL | |
| vpwd | varchar(50) | YES | | NULL | |
| add_time | timestamp | NO | | CURRENT_TIMESTAMP | |
| test | int(10) unsigned | YES | | NULL | |
+-----------+-------------------+------+------+---------------------+----------------+
5 rows in set
mysql> ALTER TABLE zx_users DROP COLUMN test;
Query OK, 0 rows affected
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC zx_users;
+-----------+-------------------+------+------+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-----------------+------+------+---------------------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| vname | varchar(20) | YES | | NULL | |
| vpwd | varchar(50) | YES | | NULL | |
| add_time | timestamp | NO | | CURRENT_TIMESTAMP | |
+-----------+-------------------+------+------+---------------------+----------------+
4 rows in set
字段数据类型定义
MySQL支持的类型
数值类型
TINYINT:对应char类型,占用1字节。
取值范围:有符号:-127~127,无符号:0~255;
INT:对应int类型,占用4字节。
取值范围:有符号:-231 ~231-1,无符号:0 ~232-1;
TINYBLOB:最大占用255字节
BLOB:占用0~64K字节
字符串类型
m为值的长度
CHAR(m) :占用m字节,m为字符串长度,m:0~255
VARCHAR(m) :占用m字节,m为字符串长度,m:0~216-1
TEXT(m) :占用m字节,m为字符串长度,m:0~216-1
LOGTEXT(m) :占用m字节,m为字符串长度,m:0~232-1
时间类型
DATE :占用4字节,取值范围:1000-01-01 ~ 9999-12-31,格式:YYYY-MM-DD
DATETIME :占用8字节,取值范围:1000-01-01 00:00:00 ~ 9999-12-31 23:59:59,格式:YYYY-MM-DD HH:MM:SS
TIME :占用3字节,取值范围:-838:59:59 ~ 838:59:59,格式:HH:MM:SS
YEAR :占用1字节,取值范围:1901 ~ 2155 格式:YYYY
TIMESTAMP :占用4字节,取值范围:1970-01-01 00:00:00 ~ 2037-12-31 23:59:59格式:YYYY-MM-DD HH:MM:SS
TIMESTAMP主要用于插入时间戳
对时间类型的字段,可以调用系统的函数进行插入时间。
如之前创建表中,对类型为timestamp 的add_time字段的默认值设置为CURRENT_TIMESTAMP。因此在默认情况下插入值,该字段的值就默认为系统插入了一个时间戳。
例如:插入一个值
mysql> insert into zx_users(vname,vpwd) values ('user1',MD5('123456'));
Query OK, 1 row affected
mysql> select * from zx_users where vname = 'user1';
+----+-------+----------------------------------+--------+---------------------+
| id | vname | vpwd | phone | add_time |
+----+-------+----------------------------------+--------+---------------------+
| 2 | user1 | e10adc3949ba59abbe56e057f20f883e | NULL | 2017-11-05 10:32:15 |
+----+-------+----------------------------------+--------+---------------------+
1 row in set
mysql>
表中的键值
在创建表的时候有一段:
PRIMARY KEY (id
)
键值为关系型数据库关联检索数据的关键,只有键值的数值是唯一的,只要键值不等,即使后面的数据相等,也不影响数据检索。
再插入一个值的结果
mysql> insert into zx_users(vname,vpwd,phone) values ('user1',MD5('123456'),10086);
Query OK, 1 row affected
mysql> select * from zx_users where vname = 'user1';
+----+-------+----------------------------------+--------+---------------------+
| id | vname | vpwd | phone | add_time |
+----+-------+----------------------------------+--------+---------------------+
| 2 | user1 | e10adc3949ba59abbe56e057f20f883e | NULL | 2017-11-05 10:32:15 |
| 3 | user1 | e10adc3949ba59abbe56e057f20f883e | 10086 | 2017-11-05 10:49:28 |
+----+-------+----------------------------------+--------+---------------------+
2 row in set
mysql>
键值绝对不可公开,仅仅允许后台和维护MySQL使用,前端只能利用vname字段和vpwd字段。
表与表之间的关联其实是通过每张表的键值关联,一张表要添加关联另一张表的信息,仅仅只能添加另一张表键值的字段,不能将另一张表的其他信息“复制”到另一张表上。
详细使用在8.2章。
添加时间戳
在创建表的时候有一段:
`add_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
为当前表添加一个时间戳字段,这样就可以查看值的创建时间,在时间数据类型中展示到,添加了用户名和密码之后,就会调用系统函数
CURRENT_TIMESTAMP创建一个时间戳