认识一下其他数据类型,前面介绍了VARCHAR和DATE
常用数据类型:CHAR、VARCHAR、BLOB、INT、DEC、DATE、DATETIME。每种数据类型的存储规则都不一样。
列名 | 说明 | 范例 | 最佳数据类型 |
price | 某物品价格 | 5678.39 | DEC(5,2) |
zip_code | 5至10个字符 | 90210-0010 | VARCHAR(10) |
atomic_weight | 原子量可能是小数点后超过6位的浮点数 | 4.002602 | DEC(10,6) |
comments | 长文本,超过255个字 | Joe,I'm at the shareholder's meeting.They just gave a demo... | BLOB |
quantity | 某项物品的库存量 | 239 | INT |
tax_rate | 百分比 | 3.755 | DEC(5,3) |
book_title | 文本字符串 | HeadFirst SQL | VARCHAR(50) |
gender | 单个字符,F或M | m | CHAR(1) |
phone_number | 10位数,不加标点符号 | TX,CA | CHAR(2) |
anniversary | 月、日、年 | 11/22/2023 | DATE |
games_won | 以数字表示获胜的比赛场数 | 15 | INT |
meeting_time | 时间和日期 | 10:30 a.m.4/12/2020 | DATETIME |
看完这个数据类型,我们感觉应该在检查下我们创建的my_contacts表,查看已创建的表,可以用DESC命令。
DESC my_contacts;
mysql> desc my_contacts;
+------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| last_name | varchar(30) | YES | | NULL | |
| first_name | varchar(20) | YES | | NULL | |
| email | varchar(50) | YES | | NULL | |
| birthday | date | YES | | NULL | |
| profession | varchar(50) | YES | | NULL | |
| location | varchar(50) | YES | | NULL | |
| status | varchar(20) | YES | | NULL | |
| interests | varchar(100) | YES | | NULL | |
| seeking | varchar(100) | YES | | NULL | |
+------------+--------------+------+-----+---------+-------+
9 rows in set (0.01 sec)
此时我们想加入性别列,在email的下面(右边),birthday的上面(左边),重建表格可以吗?
不可以,会报错,也很麻烦。当然你了解后hi知道,可以将数据库整张表删除,但这是一件比较危险的行为,可能导致数据丢失。那么,这需要用哪些方法囔?
如果是刚刚建立的表,删除表比创建表简单很多。
DROP TABLE my_contacts;
DROP TABLE会删除表和表里的所有数据。DROP TABLE无论表中是否有数据,都会执行,小心使用,小心使用,小心使用!!!(还不明白去网上看看那些删库跑路的故事)
> DROP TABLE my_contacts;
Query OK,0 rows affected(0.02 sec)
方法1:重新创建,并插入需要的列字段。
CREATE TABLE my_contacts
(
last_name VARCHAR(30),
first_name VARCHAR(20),
email VARCHAR(50),
gender CHAR(1),
birthday DATE,
profession VARCHAR(50),
location VARCHAR(50),
status VARCHAR(20),
interests VARCHAR(100),
seeking VARCHAR(100)
);
Query OK, 0 rows affected (0.03 sec)
这时,my_contacts表已经具备了,但是它里面没有数据,我们现象下它变成表的样子,应该是
last_name | first_name | gender | birthday | profession | location | status | interests | seeking | |
我们下一步就需要将数据填写进去,使用INSERT语句
INSERT INTO your_table(column_name1,column_name2,...) VALUES('value1','value2',...);
表名后面跟着列名,VALUES后面跟着是对应列的值。输入时,只要确保列名和数据对应。
INSERT INTO my_contacts
(last_name,first_name,email,gender,birthday,profession,location,status,interests,seeking)
VALUES
('Anderson','Jillian','jill_anderson@breakneckpizza.com','F','1980-09-05','Technical Writer','Palo Alto,CA','Single','kayaking,Reptiles','Relationship,Friends');
用Enter换行控制语句的可读性是个好办法
三种INSERT语句形式
1. 改变列顺序
INSERT INTO my_contacts
(interests,first_name,last_name,gender,email,birthday,profession,location,status,seeking)
VALUES
('Kayaking,Reptiles','Jillian','Anderson','F','jill_anderson@breakneckpizza.com','1980-09-05','Technical Writer','Palo Alto,CA','Single','Relationship,Friends');
列名顺序不同,只要数值对应一起调整,结果一样正常显示!
2. 省略列名
INSERT INTO my_contacts
VALUES
('Anderson','Jillian','jill_anderson@breakneckpizza.com','F','1980-09-05','Technical Writer','Palo Alto,CA','Single','Kayaking,Reptiles','Relationship,Friends');
列名可以省略,只要数据值按列顺序全部填入,必须与列名顺序完全对应。
3. 省略部分列
INSERT INTO my_contacts
(last_name,first_name,email)
VALUES
('Anderson','Jillian','jill_anderson@breakneckpizza.com');
只填入一部分列值,一样是数值对应相应的列。那么问题来了?那些没有填入数据的列会存入什么囔?
mysql> INSERT INTO my_contacts(last_name,first_name,email) VALUES('Anderson','Jillian','jill_anderson@breakneckpizza.com');
Query OK, 1 row affected (0.01 sec)
这时候需要需要查看表数据,怎么做囔?
当当当~~~~以SELECT语句窥探表
SELECT * FROM my_contacts;
这里只有表名,这语句看起来非常简介,我们执行一下看看结果。
mysql> select * from my_contacts;
+-----------+------------+----------------------------------+--------+------------+------------------+--------------+--------+-------------------+----------------------+
| last_name | first_name | email | gender | birthday | profession | location | status | interests | seeking |
+-----------+------------+----------------------------------+--------+------------+------------------+--------------+--------+-------------------+----------------------+
| Anderson | Jillian | jill_anderson@breakneckpizza.com | F | 1980-09-05 | Technical Writer | Palo Alto,CA | Single | kayaking,Reptiles | Relationship,Friends |
| Anderson | Jillian | jill_anderson@breakneckpizza.com | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
+-----------+------------+----------------------------------+--------+------------+------------------+--------------+--------+-------------------+----------------------+
2 rows in set (0.00 sec)
这两条数据一个是一开始INSERT全部数据,另一个是第3种省略部分列的数据插入,其他的示例并未执行,所以这里我们看到的两条,同时,我们看到省略后,没有数据的列显示的内容为NULL。后面我们再详细介绍。