SQL DDL 數據定義語句
阿新 • • 發佈:2018-06-14
源表 結構 arc esc 可選參數 表名 ini 字段 IE
前言
- DDL(Data Definition Language)語句:數據定義語句,這些語句定義了不同的數據段、數據庫、表、列、索引等數據庫對象。常用的語句關鍵字主要包括 create、drop、alter 等。
1、DDL 數據庫操作語句
1)創建數據庫語句
# 創建數據庫,數據使用默認編碼方式 utf8mb4 # create database 數據庫名; > create database test; Query OK, 1 row affected (0.04 sec)
# 創建數據庫,指定數據編碼方式 # create database 數據庫名 character set 字符集; > create database test character set gbk; Query OK, 1 row affected (0.02 sec)
2)刪除數據庫語句
# 刪除數據庫 # drop database 數據庫名; > drop database test; Query OK, 0 rows affected (0.05 sec)
# 刪除數據庫,如果數據庫存在就刪除 # drop database if exists 數據庫名; > drop database if exists test; Query OK, 0 rows affected (0.01 sec)
3)顯示所有數據庫語句
# 顯示所有數據庫 > show databases; +--------------------+ | Database | +--------------------+ | information_schema | | performance_schema | | mysql | | sys | +--------------------+ 4 rows in set (0.01 sec)
系統自動創建的數據庫
- 上面的顯示結果中的 4 個數據庫都是安裝 MySQL 時系統(macOS)自動創建的。
- information_schema:主要存儲了系統中的一些數據庫對象信息,不如用戶表信息、列信息、權限信息、字符集信息、分區信息等。
- performance_schema:主要用於收集數據庫服務器性能參數。
- mysql:包含權限配置,事件,存儲引擎狀態,主從信息,日誌,時區信息,用戶權限配置等。
- sys:performance_schema 的替代方案。
4)顯示數據庫的創建信息語句
# 顯示數據庫具體信息 # show create database 數據庫名; > show create database test; +----------+---------------------------------------------------------------------------------------------+ | Database | Create Database | +----------+---------------------------------------------------------------------------------------------+ | test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ | +----------+---------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
5)選擇操作的數據庫語句
# 選擇操作的數據庫 # use 數據庫名; > use test; Database changed
6)顯示正在操作的數據庫語句
# 顯示正在操作的數據庫 > select database(); +------------+ | database() | +------------+ | test | +------------+ 1 row in set (0.00 sec)
7)導出數據庫語句
# 導出數據庫,同時倒出數據庫表結構和數據 # mysqldump -u 用戶名 -p 數據庫名 > 導出到的目標文件路徑.sql; $ mysqldump -u root -p test > /Users/qianchia/Desktop/test.sql; Enter password:
# 導出數據庫,只倒出數據庫表結構 # mysqldump -u 用戶名 -p -d 數據庫名 > 導出到的目標文件路徑.sql; $ mysqldump -u root -p -d test > /Users/qianchia/Desktop/test.sql; Enter password:
- 導出數據庫是在系統命令模式下操作。
8)導入數據庫語句
# 導入數據庫/表 # source 導入的目標文件路徑.sql; > source /Users/qianchia/Desktop/test.sql; Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.01 sec) ... Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0
- 導入數據庫是在選擇了操作數據庫後在 mysql 命令模式下操作。
2、DDL 表操作語句
1)創建表語句
# 創建表 # create table 表名 ( 列名稱字段 數據類型(長度) 約束條件, 列名稱字段 數據類型(長度) 約束條件 ); > create table student ( no int, name varchar(20), age int, score int ); Query OK, 0 rows affected (0.08 sec)
# 創建表,約束 > create table student ( no int unique, // 設置唯一約束 name varchar(20) not null, // 設置非空約束 age int, score int ); > create table student ( no int primary key, // 設置主鍵約束 name varchar(20), age int, score int ); > create table student ( no int, name varchar(20), age int, score int primary key(no) // 設置主鍵約束 ); > create table student ( no int primary key auto_increment, // 設置主鍵自增約束 name varchar(20), age int, score int ); > create table A ( ano int primary key, aname varchar(20), loc varchar(100) ); > create table B ( bno int primary key, bname varchar(20), bano int, # constraint 約束名稱 foreign key(外鍵名稱) references 源表(主鍵名稱) constraint fk_a_b foreign key(bano) references A(ano) // 設置外鍵約束 );
2)刪除表語句
# 刪除表 # drop table 表名; > drop table student; Query OK, 0 rows affected (0.07 sec)
# 刪除表,如果表存在就刪除 # drop table if exists 表名; > drop table if exists student; Query OK, 0 rows affected (0.06 sec)
3)顯示所有表語句
# 顯示所有表 > show tables; +----------------+ | Tables_in_test | +----------------+ | A | | B | | student | +----------------+ 3 rows in set (0.00 sec)
4)顯示表的創建信息語句
# 顯示表具體信息 > show create table student; +---------+--------------------------------------------------------------------------------------------------+ | Table | Create Table | +---------+--------------------------------------------------------------------------------------------------+ | student | CREATE TABLE `student` ( `no` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `age` int(11) DEFAULT NULL, `score` int(11) DEFAULT NULL, PRIMARY KEY (`no`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci | +---------+--------------------------------------------------------------------------------------------------+ 1 row in set (0.01 sec)
5)顯示表的數據結構語句
# 顯示表的數據結構 # desc 表名稱; > desc student; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | no | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | NO | | NULL | | | age | int(11) | YES | | NULL | | | score | int(11) | YES | | NULL | | +-------+-------------+------+-----+---------+----------------+ 4 rows in set (0.01 sec)
6)重命名表語句
# 重命名表 # alter table 舊表名稱 rename [to] 新表名稱; > alter table student rename [to] stu; Query OK, 0 rows affected (0.02 sec)
# 重命名表 # rename table 舊表名稱 to 新表名稱; > rename table student to stu; Query OK, 0 rows affected (0.08 sec)
7)修改表的字符集語句
# 修改表的字符集 # alter table 表名稱 cahracter set 字符集; > alter table student character set gbk; Query OK, 0 rows affected (0.05 sec) Records: 0 Duplicates: 0 Warnings: 0
8)導出表語句
# 導出數據庫指定的表,同時導出表結構和數據 # mysqldump -u 用戶名 -p 數據庫名 表名 > 導出到的目標文件路徑.sql; $ mysqldump -u root -p test student > /Users/haiqianj/Desktop/test.sql; Enter password:
# 導出數據庫指定的表,只導出表結構 # mysqldump -u 用戶名 -p -d 數據庫名 表名 > 導出到的目標文件路徑.sql; $ mysqldump -u root -p -d test student > /Users/haiqianj/Desktop/test.sql; Enter password:
- 導出表是在系統命令模式下操作。
9)導入表語句
# 導入表/數據庫 # source 導入的目標文件路徑.sql; > source /Users/qianchia/Desktop/test.sql; Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.01 sec) ... Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0
- 導入表是在選擇了操作數據庫後在 mysql 命令模式下操作。
3、DDL 列字段操作語句
1)添加列語句
# 添加列,添加單列 # alter table 表名稱 add [column] 列名稱 類型 [約束] [first | after 列名稱]; > alter table student add cla varchar(20); Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0
# 添加列,添加多列 # alter table 表名稱 add [column] 列名稱 類型 [約束] [first | after 列名稱], add [column] 列名稱 類型 [約束] [first | after 列名稱], ...; > alter table student add cla varchar(20), add addr varchar(100); Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0
2)刪除列語句
# 刪除列,刪除單列 # alter table 表名稱 drop [column] 列名稱; > alter table student drop address; Query OK, 0 rows affected (0.10 sec) Records: 0 Duplicates: 0 Warnings: 0
# 刪除列,刪除多列 # alter table 表名稱 drop [column] 列名稱, drop [column] 列名稱, ...; > alter table student drop class, drop address; Query OK, 0 rows affected (0.11 sec) Records: 0 Duplicates: 0 Warnings: 0
3)修改列名稱語句
# 修改列名稱,修改單列名稱 # alter table 表名稱 change [column] 舊列名稱 新列名稱 類型 [約束] [first | after 列名稱]; > alter table student change cla class int; Query OK, 0 rows affected (0.10 sec) Records: 0 Duplicates: 0 Warnings: 0
# 修改列名稱,修改多列名稱 # alter table 表名稱 change [column] 舊列名稱 新列名稱 類型 [約束] [first | after 列名稱], change [column] 舊列名稱 新列名稱 類型 [約束] [first | after 列名稱], ...; > alter table student change cla class int, change addr address varchar(100); Query OK, 0 rows affected (0.10 sec) Records: 0 Duplicates: 0 Warnings: 0
4)修改列屬性語句
# 修改列屬性,修改單列的字段類型及約束 # alter table 表名稱 modify [column] 列名稱 類型 [約束] [first | after 列名稱]; > alter table student modify cla int; Query OK, 0 rows affected (0.11 sec) Records: 0 Duplicates: 0 Warnings: 0
# 修改列屬性,修改多列的字段類型及約束 # alter table 表名稱 modify [column] 列名稱 類型 [約束] [first | after 列名稱], modify [column] 列名稱 類型 [約束] [first | after 列名稱], ...; > alter table student modify cla int, modify addr varchar(200); Query OK, 0 rows affected (0.10 sec) Records: 0 Duplicates: 0 Warnings: 0
5)修改列順序語句
- 在上邊的 add、change、modify 語句中的可選參數 [first | after 列名稱] 可以用老修改字段在表中的位置。
- first:放在所有列最前邊
after 列名稱:放在指定列之後
註意:change、first、after column 這些關鍵字都屬於 MySQL 在標準 SQL 上的擴展,在其它數據庫中不一定適用。
SQL DDL 數據定義語句