日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql中数据定义和数据控制语言_MySQL 数据定义语言(DDL)

發(fā)布時間:2023/12/2 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql中数据定义和数据控制语言_MySQL 数据定义语言(DDL) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。