1. 程式人生 > 實用技巧 >SQL基礎語法—其他語句

SQL基礎語法—其他語句

1 alter database語句

alter database語句用來修改資料庫的屬性

Syntax:
ALTER {DATABASE | SCHEMA} [db_name]
    alter_specification ...

alter_specification:
    [DEFAULT] CHARACTER SET [=] charset_name
  | [DEFAULT] COLLATE [=] collation_name

db_name可以不指定,如果不指定說明是修改當前資料庫的屬性;

character set代表修改資料庫的預設字符集;

collate代表修改資料庫的預設排序規則;

如果修改了資料庫的預設字符集或排序規則,那資料庫中的所有儲存過程和函式都需要重新建立一遍。

2 alter view語句

alter view語句用來修改檢視的定義,本身的語法結構和create view相同,語句所起到的作用和create or replace view語句相同。

Syntax:
ALTER
    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    [DEFINER = { user | CURRENT_USER }]
    [SQL SECURITY { DEFINER | INVOKER }]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]

示例:

mysql> alter view v_students_male as select sid,sname from students where sex=0;
mysql> select * from v_students_male;
+------+-------+
| sid | sname |
+------+-------+
| 1 | aaa |

3 drop database語句

drop database語句用來刪除資料庫操作,即刪除了資料庫也刪除了庫裡的所有表:

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name

刪除資料庫的操作將刪除該資料庫所在資料夾下的.bak .dat .hsh .mrg .myd .myi .trg .trn .cfg .db .frm .ibd .ndb .par

以及db.opt檔案。

示例:

mysql> drop database test2;
Query OK, 1 row affected (0.07 sec)
mysql> drop database if exists test4;
Query OK, 0 rows affected (0.00 sec)

4 drop index語句

drop index語句用來刪除索引操作:

DROP INDEX index_name ON tbl_name

刪除tbl_name表中的名字叫index_name的索引。

示例:

mysql> drop index idx_st_sname on students;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0

5 drop table語句

drop table語句用來刪除一個或多個表操作,當然也可以刪除臨時表 :

Syntax:
DROP [TEMPORARY] TABLE [IF EXISTS]
    tbl_name [, tbl_name] ...
    [RESTRICT | CASCADE]

RESTRICT/CASCADE兩個關鍵詞在5.7版本中沒用。

示例:

mysql> drop table students2;
Query OK, 0 rows affected (0.01 sec)
mysql> drop table if exists students2;
Query OK, 0 rows affected, 1 warning (0.00 sec)

6 drop view語句

drop view語句用來刪除一個或多個檢視

Syntax:
DROP VIEW [IF EXISTS]
    view_name [, view_name] ...
    [RESTRICT | CASCADE]

RESTRICT/CASCADE兩個關鍵詞在5.7版本中沒用。

示例:

mysql> drop view v_students_male;
Query OK, 0 rows affected (0.00 sec)
mysql> drop view if exists v_students_male;
Query OK, 0 rows affected, 1 warning (0.00 sec)

7 rename table語句

rename table語句用來重新命名一個或多個表:

Syntax:
RENAME TABLE
    tbl_name TO new_tbl_name
    [, tbl_name2 TO new_tbl_name2] ...

當想讓兩個表名相互調換時,可以執行語句:

RENAME TABLE old_table TO tmp_table,
	new_table TO old_table,
	tmp_table TO new_table;

rename table能將表中的資料,索引,主鍵定義都自動轉換到新表下,但檢視和對原表分配的許可權不能自動轉換到新表,需要手動執行。

mysql> rename table students to students_test;
Query OK, 0 rows affected (0.03 sec)

mysql> show create table students_test;
+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| students_test | CREATE TABLE `students_test` (
 `sid` int(11) DEFAULT NULL,
 `sname` varchar(20) DEFAULT NULL,
 `sex` int(11) DEFAULT NULL,
 UNIQUE KEY `idx_st_sid` (`sid`),
 KEY `idx_st_union` (`sname`,`sex`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

mysql> select * from v_students_female; ##原有檢視查詢失敗
ERROR 1356 (HY000): View 'test.v_students_female' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them

8 truncate table語句

truncate table語句用來刪除/截斷表裡的所有資料。

TRUNCATE [TABLE] tbl_name

delete刪除所有資料在邏輯上含義相同,但效能更快。類似執行了drop tablecreate table兩個語句。

示例:

mysql> truncate table students_test;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from students_test; ##查詢結果為空
Empty set (0.00 sec)

9 alter table語句

Alter table … add [column_name]
Alter table … add constraint [name] unique [index/key] [name]
Alter table … add constraint [name] foreign key (column_name) references table_name(column_name)
Alter table … drop column [column_name]
Alter table … drop [index/key] [index_name]