1. 程式人生 > >MySQL基礎 對錶操作

MySQL基礎 對錶操作

參考書籍:MySQL與MariaDB學習指南

修改一張資料庫裡面的表之前我們需要對錶進行備份,備份的工作一方面可以對錶進行備份,另一方面是對整個資料庫備份。

1.先建立一個數據庫和一張表

CREATE database dogs; /*建立一個dogs的資料庫*/

/*或者使用dogs作為預設的資料庫 USE dogs; */

CREATE TABLE dogs.dog(    /*建立一個dogs表*/
  id INT AUTO_INCREMENT,
  scientfic_name char(26),
  age INT(2)
);

2.對錶操作之前先進行備份

//user_name是你的使用者名稱 -p 表示需要輸入密碼 '>' 是重定向符,將表的內容放入備份的sql檔案裡面

mysqldump --user='user_name' -p \ 
dogs dogs > /opt/dog.sql ;

//備份資料庫的操作

mysqldump --user'user_name' -p \
dogs > dogs.sql

3.恢復備份的操作

mysql --user'user_name' -p \
dogs < dogs.sql 

由於每一次修改表以及刪除表的操作都比較難恢復到初始態。一旦出現錯誤就會比較麻煩。所以我們需要先學習並且養成備份的習慣

修改表的語法

1.新增一列order_id

ALTER TABLE dogs 
ADD COLUMN order_id INT;

2.在id項後面一項新增order_id 項 

ALTER TABLE dogs 
ADD COLUMN order_id INT AFTER id;

3.設定一個具有列舉型別參考表的新列

如果一個列的資料是固定的,那麼在定義它的時候我們可以使用列舉型別,也可以再建立一個表去給出詳細的資訊。但是列舉型別本身就是一種參考表

/*建立一個狗的原產地這樣一個列*/
ALTER TABLE new_dog 
MODIFY COLUMN address
ENUM(
'ASIAN',
'AMERICA',
'Europe',
'Austrlia');
AFTER order_id;

3.關於表的其他操作

DESCRIBE dogs.dog; /*查看錶的內容*/

DROP dogs.dog; /*刪掉表dog*/

SHOW COLUMNS FROM table_name LIKE 'col_name';/*檢視一個列*/

CREATE TABLE test.new_dog LIKE dogs.dog   /*複製一份dog表到new_dog裡面,但是沒有資料,只有相應的配置*/

設定列的預設值

可以使用CHANGE語句或者是ALTER語句,而且不用擔心的是修改了列的預設值不會對之前的儲存資料有影響

/*修改new_dogs表的address項的型別為int 並且初始值設定為8*/
ALTER TABLE new_dogs
CHANGE COLUMN address INT DEFAULT 8;

/*修改表的age項的初始值預設為8 使用ALTER*/
ALTER TABLE new_dogs
ALTER COLUMN age SET DEFAULT 8;

修改AUTO_INCREMENT的預設值

/*從下一行開始初始值從10開始*/
ALTER TABLE birds 
AUTO_INCREMENT = 10;

重命名錶的操作

重新命名的時候要注意,不能與其他表重名,而且最好不要包含連線符 ‘- ’ 因為Mysql會把他當成減號


RENAME TABLE table_old TO table_new ;

並且RENAME命令也可以用來移動表,這一點和linux shell中的mv差不多,可以將一個表不改名字的移動到另一個數據庫。

使用order by指令對錶進行重排序

SELECT * FROM code 
ORDER BY name
LIMIT 3;

關於索引的理解

索引是為了更加方便的對錶內的資訊進行檢索和查詢,但是索引並不是列。一個列是PRIMARY KEY是說它與索引關聯了,而不是說它就是索引。索引可以是單獨定義出來,也可以是建表之後新增的。

SHOW INDEX FROM tables \G /*查看錶的引數資訊,可以看到當前的索引關聯*/

/*explain語句是用來解釋,索引被如何應用的而不是顯示查詢結果 */

EXPLAIN SELECT * FROM tables WHERE name = 'JJ' \G 

/*建立索引*/

ALTER TABLE humans 
ADD INDEX human_name(name_last,name_first); 
/*該索引是一對鍵值對,所以無論輸入哪個名字都會使用human_name選項*/

對一個索引值關聯的列進行修改名稱之前需要將主鍵的值去掉

DROP PRIMARY KEY之後再對列名進行修改,不然會出現主鍵不能與某一列關聯的錯誤。