SQL的要點(diǎn)是中抽象應(yīng)用程序以避免數(shù)據(jù)存儲(chǔ)格式。你應(yīng)該總是以你想要檢索數(shù)據(jù)的意愿指定順序。例如:
為東昌等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及東昌網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為做網(wǎng)站、成都做網(wǎng)站、東昌網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
SELECT col_name1, col_name2, col_name3 FROM tbl_name;
將以col_name1、col_name2、col_name3的順序返回列,而:
SELECT col_name1, col_name3, col_name2 FROM tbl_name;
將以col_name1、col_name3、col_name2的順序返回列。
在一個(gè)應(yīng)用程序中,你應(yīng)該決不基于他們的位置使用SELECT * 檢索列,因?yàn)楸环祷氐牧械捻樞蛴肋h(yuǎn)不能保證;對(duì)你的數(shù)據(jù)庫的一個(gè)簡(jiǎn)單改變可能導(dǎo)致你的應(yīng)用程序相當(dāng)有戲劇性地失敗。
不管怎樣,如果你想要改變列的順序,你可以這樣做:
以正確的列順序創(chuàng)建一張新表。
執(zhí)行INSERT INTO new_table SELECT fields-in-new_table-order FROM old_table.
刪除或改名old_table。
ALTER TABLE new_table RENAME old_table。
如果只是結(jié)果集中交換兩列:
select name,id from 表名;
如果更改表結(jié)構(gòu):
alter table 表名 modify column id int auto_increment after name;
比如:
#建立測(cè)試表 t1
mysql create table t1(id int auto_increment,name varchar(20),primary key(id))engine=innodb,default charset=utf8;
Query OK, 0 rows affected (0.11 sec)
#插入3條數(shù)據(jù)
mysql insert into t1(name) values ("aa"),("bb"),("cc");
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql select * from t1;
+----+------+
| id | name |
+----+------+
| 1 | aa |
| 2 | bb |
| 3 | cc |
+----+------+
3 rows in set (0.00 sec)
#結(jié)果集中排列name到id前
mysql select name,id from t1;
+------+----+
| name | id |
+------+----+
| aa | 1 |
| bb | 2 |
| cc | 3 |
+------+----+
3 rows in set (0.00 sec)
#改變表結(jié)構(gòu),使name在id前
mysql alter table t1 modify column id int auto_increment after name;
Query OK, 3 rows affected (0.19 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql select * from t1;
+------+----+
| name | id |
+------+----+
| aa | 1 |
| bb | 2 |
| cc | 3 |
+------+----+
3 rows in set (0.00 sec)
mysql desc t1;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| name | varchar(20) | YES | | NULL | |
| id | int(11) | NO | PRI | NULL | auto_increment |
+-------+-------------+------+-----+---------+----------------+
首先,請(qǐng)考慮是否的確需要更改表中的列順序。SQL的核心要點(diǎn)是從數(shù)據(jù)存儲(chǔ)格式獲取應(yīng)用??倯?yīng)指定檢索數(shù)據(jù)的順序。在下面的第1條語句中,以col_name1、col_name2、col_name3順序返回列;在第2條語句中,以col_name1、col_name3、col_name2順序返回列: MySQL SELECT col_name1, col_name2, col_name3 FROM tbl_name; mysql SELECT col_name1, col_name3, col_name2 FROM tbl_name; 如果決定更改表列的順序,可執(zhí)行下述操作: 用具有新順序的列創(chuàng)建新表。 執(zhí)行該語句: mysql INSERT INTO new_table - SELECT columns-in-new-order FROM old_table; 撤銷或重命名old_table。 將新表重命名為原始名稱: SELECT *十分適合于測(cè)試查詢。但是,在應(yīng)用程序中,永遠(yuǎn)不要依賴SELECT *的使用,不要依賴根據(jù)其位置檢索列。如果添加、移動(dòng)或刪除了列,所返回的列的順序和位置不會(huì)保持相同。