mysql中数据定义和数据控制语言_MySQL 数据定义语言(DDL)
SQL 包含以下 4部分:1數(shù)據(jù)定義語言(DDL):DROP、CREATE、ALTER 等語句。2數(shù)據(jù)操作語言(DML):INSERT(插入)、UPDATE(修改)、DELETE(刪除)語句。3數(shù)據(jù)查詢語言(DQL):SELECT 語句。4 數(shù)據(jù)控制語言(DCL): GRANT、REVOKE、COMMIT、ROLLBACK 等語句。
MySQL之DDL(Data Definition Language): 數(shù)據(jù)定義語言:CREATE,ALTER,DROP等
DDL:操作數(shù)據(jù)庫,表(CRUD)
1、操作數(shù)據(jù)庫(CRUD)
(1)C(Create):創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE [IF NOT EXISTS]數(shù)據(jù)庫名[[DEFAULT] CHARACTER SET字符集名][[DEFAULT]COLLATE 校對規(guī)則名];[ ]中的內(nèi)容是可選的。
語法說明如下:
數(shù)據(jù)庫名:創(chuàng)建數(shù)據(jù)庫的名稱。MySQL 的數(shù)據(jù)存儲區(qū)將以目錄方式表示 MySQL 數(shù)據(jù)庫,因此數(shù)據(jù)庫名稱必須符合操作系統(tǒng)的文件夾命名規(guī)則,不能以數(shù)字開頭,盡量要有實際意義。注意在 MySQL 中不區(qū)分大小寫。IF NOT EXISTS:在創(chuàng)建數(shù)據(jù)庫之前進行判斷,只有該數(shù)據(jù)庫目前尚不存在時才能執(zhí)行操作。此選項可以用來避免數(shù)據(jù)庫已經(jīng)存在而重復創(chuàng)建的錯誤。[DEFAULT] CHARACTER SET:指定數(shù)據(jù)庫的字符集。指定字符集的目的是為了避免在數(shù)據(jù)庫中存儲的數(shù)據(jù)出現(xiàn)亂碼的情況。如果在創(chuàng)建數(shù)據(jù)庫時不指定字符集,那么就使用系統(tǒng)的默認字符集。[DEFAULT] COLLATE:指定字符集的默認校對規(guī)則。
eg.
mysql> CREATE DATABASE IF NOT EXISTStest-> DEFAULT CHARACTER SETutf8-> DEFAULTCOLLATE utf8_general_ci;
Query OK,1 row affected, 1 warning (0.01 sec)
(2)R(Retrieve):查詢
SHOW DATABASES [LIKE '數(shù)據(jù)庫名'];
語法說明如下:LIKE 從句是可選項,用于匹配指定的數(shù)據(jù)庫名稱。LIKE從句可以部分匹配,也可以完全匹配。
數(shù)據(jù)庫名由單引號' '包圍。
eg.查詢?nèi)?/p>
mysql>show databases;+--------------------+
| Database |
+--------------------+
| information_schema | |
| mqcms |
| mysql |
| performance_schema |
| phpmyadmin |
| sys |
| test |
| test_aa |
| ultrax |
+--------------------+
9 rows in set (0.00 sec)
eg.查詢某一個(我有test和test_aa兩個庫)
mysql> show databases like 'test';+-----------------+
| Database (test) |
+-----------------+
| test |
+-----------------+
1 row in set (0.00 sec)
mysql> show databases like '%test%';+-------------------+
| Database (%test%) |
+-------------------+
| dedetest |
| test |
| test_aa |
+-------------------+
3 rows in set (0.00 sec)
這里的like跟模糊查詢一樣%aa%;%aa;aa%;
eg.查詢某個數(shù)據(jù)庫的創(chuàng)建語言
mysql> show create databasetest;+----------+---------------------------------------------------------------+
| Database | Create Database |
+----------+---------------------------------------------------------------+
| test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8*/ |
+----------+---------------------------------------------------------------+
1 row in set (0.00 sec)
(3)U(Update):修改
ALTER DATABASE [數(shù)據(jù)庫名]{[DEFAULT] CHARACTER SET |
[DEFAULT] COLLATE }
語法說明如下:ALTER DATABASE用于更改數(shù)據(jù)庫的全局特性。
使用ALTER DATABASE 需要獲得數(shù)據(jù)庫 ALTER權限。
數(shù)據(jù)庫名稱可以忽略,此時語句對應于默認數(shù)據(jù)庫。CHARACTER SET 子句用于更改默認的數(shù)據(jù)庫字符集。
eg.修改數(shù)據(jù)庫test的字符集
mysql> ALTER DATABASEtest-> DEFAULT CHARACTER SETgb2312-> DEFAULTCOLLATE gb2312_chinese_ci;
Query OK,1 row affected (0.02sec)
mysql> show create databasetest;+----------+-----------------------------------------------------------------+
| Database | Create Database |
+----------+-----------------------------------------------------------------+
| test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET gb2312*/ |
+----------+-----------------------------------------------------------------+
1 row in set (0.00 sec)
(4)D(Delete):刪除
DROP DATABASE [IF EXISTS] 語法說明如下::指定要刪除的數(shù)據(jù)庫名。IF EXISTS:用于防止當數(shù)據(jù)庫不存在時發(fā)生錯誤。DROP DATABASE:刪除數(shù)據(jù)庫中的所有表格并同時刪除數(shù)據(jù)庫。使用此語句時要非常小心,以免錯誤刪除。如果要使用 DROP DATABASE,需要獲得數(shù)據(jù)庫 DROP 權限。
注意:MySQL 安裝后,系統(tǒng)會自動創(chuàng)建名為 information_schema 和 mysql 的兩個系統(tǒng)數(shù)據(jù)庫,系統(tǒng)數(shù)據(jù)庫存放一些和數(shù)據(jù)庫相關的信息,如果刪除了這兩個數(shù)據(jù)庫,MySQL 將不能正常工作。
使用 DROP DATABASE 命令時要非常謹慎,在執(zhí)行該命令后,MySQL 不會給出任何提示確認信息。DROP DATABASE 刪除數(shù)據(jù)庫后,數(shù)據(jù)庫中存儲的所有數(shù)據(jù)表和數(shù)據(jù)也將一同被刪除,而且不能恢復。因此最好在刪除數(shù)據(jù)庫之前先將數(shù)據(jù)庫進行備份。
eg.刪除數(shù)據(jù)庫test_aa;
mysql> DROP DATABASE IF EXISTStest_aa;
Query OK,0 rows affected (0.02sec)
mysql> show databases like 'test%';+------------------+
| Database (test%) |
+------------------+
| test |
+------------------+
1 row in set (0.00 sec)
2、操作數(shù)據(jù)表(CRUD)
(1)C(Create)創(chuàng)建表
CREATE TABLE ([表定義選項])[表選項][分區(qū)選項];
其中,[表定義選項]的格式為: [,…]
CREATE TABLE語句的主要語法及使用說明如下:CREATE TABLE:用于創(chuàng)建給定名稱的表,必須擁有表CREATE的權限。:指定要創(chuàng)建表的名稱,在 CREATE TABLE 之后給出,必須符合標識符命名規(guī)則。表名稱被指定為 db_name.tbl_name,以便在特定的數(shù)據(jù)庫中創(chuàng)建表。無論是否有當前數(shù)據(jù)庫,都可以通過這種方式創(chuàng)建。在當前數(shù)據(jù)庫中創(chuàng)建表時,可以省略 db-name。如果使用加引號的識別名,則應對數(shù)據(jù)庫和表名稱分別加引號。例如,'mydb'.'mytbl' 是合法的,但 'mydb.mytbl'不合法。:表創(chuàng)建定義,由列名(col_name)、列的定義(column_definition)以及可能的空值說明、完整性約束或表索引組成。
默認的情況是,表被創(chuàng)建到當前的數(shù)據(jù)庫中。若表已存在、沒有當前數(shù)據(jù)庫或者數(shù)據(jù)庫不存在,則會出現(xiàn)錯誤。
eg.創(chuàng)建一張測試表test_tbl;
字段名稱
字段類型
字段備注
id
int(11)
ID
name
varchar(20)
名稱
age
int(11)
年齡
sex
tinyint(4)
性別0 男 1女 2 未知
mysql> usetest;Databasechanged
mysql>show tables;+----------------+
| Tables_in_test |
+----------------+
| board |
| data |
+----------------+
2 rows in set (0.01sec)
mysql> CREATE TABLEtest_tbl->(-> id INT(11),-> name VARCHAR(20),-> age INT(11),-> sex TINYINT(4)->);
Query OK,0 rows affected (0.03 sec)
復制表結構:
CREATE TABLE like ;
eg.
mysql> CREATE TABLE test_tbl_cp liketest_tbl;
Query OK,0 rows affected (0.01 sec)
(2)R(Retrieve)查看表
查看所有表:
SHOW TABLES;
eg.
mysql>show tables;+----------------+
| Tables_in_test |
+----------------+
| board |
| data |
| test_tbl |
| test_tbl_cp |
+----------------+
4 rows in set (0.00 sec)
查看表結構:
DESCRIBE ;
或簡寫成:DESC ;
DESCRIBE/DESC 語句可以查看表的字段信息,包括字段名、字段數(shù)據(jù)類型、是否為主鍵、是否有默認值等
eg.
mysql> DESCtest_tbl;+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | tinyint(4) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00sec)
其中,各個字段的含義如下:Null:表示該列是否可以存儲 NULL值。Key:表示該列是否已編制索引。PRI 表示該列是表主鍵的一部分,UNI 表示該列是 UNIQUE索引的一部分,MUL 表示在列中某個給定值允許出現(xiàn)多次。Default:表示該列是否有默認值,如果有,值是多少。
Extra:表示可以獲取的與給定列有關的附加信息,如 AUTO_INCREMENT 等。
SHOW CREATE TABLE語句可以用來顯示創(chuàng)建表時的CREATE TABLE語句:
SHOW CREATE TABLE \G;
提示:使用 SHOWCREATE TABLE 語句不僅可以查看創(chuàng)建表時的詳細語句,而且可以查看存儲引擎和字符編碼。如果不加“\G”參數(shù),顯示的結果可能非常混亂,加上“\G”參數(shù)之后,可使顯示的結果更加直觀,易于查看。
eg.
mysql> show create tabletest_tbl\G;*************************** 1. row ***************************
Table: test_tblCreate Table: CREATE TABLE`test_tbl` (
`id`int(11) DEFAULT NULL,
`name`varchar(20) DEFAULT NULL,
`age`int(11) DEFAULT NULL,
`sex`tinyint(4) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=gb23121 row in set (0.00 sec)
(3)U(Update)修改
ALTER TABLE [修改選項]修改選項的語法格式如下:
{ADD COLUMN
| CHANGE COLUMN
| ALTER COLUMN { SET DEFAULT | DROP DEFAULT}| MODIFY COLUMN
| DROP COLUMN
| RENAME TO
}
添加字段:
ALTER TABLE ADD [約束條件] [FIRST|AFTER 已存在的字段名];
新字段名為需要添加的字段的名稱;FIRST 為可選參數(shù),其作用是將新添加的字段設置為表的第一個字段;AFTER 為可選參數(shù),其作用是將新添加的字段添加到指定的已存在的字段名的后面。
eg.在表test_tbl的name后面添加新字段name_cp:
mysql> ALTER TABLE test_tbl ADD name_cp VARCHAR(20) AFTER name;
Query OK,0 rows affected (0.03sec)
Records:0 Duplicates: 0 Warnings: 0mysql> desctest_tbl;+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| name_cp | varchar(20) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | tinyint(4) | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
修改字段名稱:
ALTER TABLE CHANGE ;
其中,舊字段名指修改前的字段名;新字段名指修改后的字段名;新數(shù)據(jù)類型指修改后的數(shù)據(jù)類型,如果不需要修改字段的數(shù)據(jù)類型,可以將新數(shù)據(jù)類型設置成與原來一樣,但數(shù)據(jù)類型不能為空。
eg.修改name的名稱改為names
mysql> ALTER TABLEtest_tbl-> CHANGE name names VARCHAR(20);
Query OK,0 rows affected (0.02sec)
Records:0 Duplicates: 0 Warnings: 0mysql> desctest_tbl;+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| names | varchar(20) | YES | | NULL | |
| name_cp | varchar(20) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | tinyint(4) | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
修改/刪除字段默認值:
ALTER TABLE ALTER COLUMN { SET DEFAULT | DROP DEFAULT }
eg.將字段sex的默認值改為2
mysql> ALTER TABLE test_tbl ALTER sex SET DEFAULT 2;
Query OK,0 rows affected (0.01sec)
Records:0 Duplicates: 0 Warnings: 0mysql> desctest_tbl;+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| names | varchar(20) | YES | | NULL | |
| name_cp | varchar(50) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | tinyint(4) | YES | | 2 | |
+---------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
修改字段類型:
ALTER TABLE MODIFY 其中,表名指要修改數(shù)據(jù)類型的字段所在表的名稱,字段名指需要修改的字段,數(shù)據(jù)類型指修改后字段的新數(shù)據(jù)類型。
eg.修改name_cp的數(shù)據(jù)類型varchar(50)
mysql> ALTER TABLEtest_tbl-> MODIFY name_cp varchar(50);
Query OK,0 rows affected (0.01sec)
Records:0 Duplicates: 0 Warnings: 0mysql> desctest_tbl;+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| name_cp | varchar(50) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | tinyint(4) | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
刪除字段:
ALTER TABLE DROP ;
其中,字段名指需要從表中刪除的字段的名稱。
eg.刪除sex字段
mysql> ALTER TABLEtest_tbl-> DROPsex;
Query OK,0 rows affected (0.02sec)
Records:0 Duplicates: 0 Warnings: 0mysql> desctest_tbl;+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| names | varchar(20) | YES | | NULL | |
| name_cp | varchar(50) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
修改表名:
ALTER TABLE RENAME [TO] ;
其中,TO?為可選參數(shù),使用與否均不影響結果。
eg.修改表名test_tbl改為test_tb;
mysql> ALTER TABLEtest_tbl-> RENAME TOtest_tb;
Query OK,0 rows affected (0.02sec)
mysql>show tables;+----------------+
| Tables_in_test |
+----------------+
| board |
| data |
| test_tb |
| test_tbl_cp |
+----------------+
4 rows in set (0.00 sec)
(4)D(Delete)刪除表
DROP TABLE [IF EXISTS] 表名1 [,表名2, 表名3 ...]對語法格式的說明如下:
表名1, 表名2, 表名3 ...表示要被刪除的數(shù)據(jù)表的名稱。DROP TABLE可以同時刪除多個表,只要將表名依次寫在后面,相互之間用逗號隔開即可。IF EXISTS 用于在刪除數(shù)據(jù)表之前判斷該表是否存在。如果不加 IF EXISTS,當數(shù)據(jù)表不存在時 MySQL 將提示錯誤,中斷 SQL 語句的執(zhí)行;加上 IF EXISTS 后,當數(shù)據(jù)表不存在時 SQL 語句可以順利執(zhí)行,但是會發(fā)出警告(warning)。
兩點注意:
用戶必須擁有執(zhí)行 DROP TABLE 命令的權限,否則數(shù)據(jù)表不會被刪除。
表被刪除時,用戶在該表上的權限不會自動刪除。
eg.刪除表test_tbl_cp
mysql> DROP TABLEtest_tbl_cp;
Query OK,0 rows affected (0.01sec)
mysql>show tables;+----------------+
| Tables_in_test |
+----------------+
| board |
| data |
| test_tb |
+----------------+
3 rows in set (0.00 sec)
總結
以上是生活随笔為你收集整理的mysql中数据定义和数据控制语言_MySQL 数据定义语言(DDL)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 读取geotiff_科学网
- 下一篇: conda 安装mysql_centos