SQL語句的分類(什麼是DDL)
操作Database
表結構操作TABLE
名字 | 型別 | 作用的物件 | 作用 |
---|---|---|---|
DDL 英文全稱 (Data Definition Language) | 數據定義語言 | 庫、表、列 | 建立、刪除、修改、庫或表結構,對數據庫或表的結構操作 |
DQL 英文全稱(Data Query Language) | 數據查詢語言 | 數據庫記錄(數據) | 查、用來查詢數據,對錶記錄的查詢 |
DCL 英文全稱(Data Control Language) | 數據控制語言 | 數據庫使用者 | 用來定義存取的許可權和安全級別,對使用者的建立,及授權 |
DML 英文全稱(Data Manipulation Language | 數據操作語言 | 數據庫記錄(數據) | 增、刪、改,對錶記錄進行更新(增、刪、改) |
DDL 用於結構定義、操作方法定義等。
包括:數據段、數據庫、表、列、索引等數據庫物件操作。
主要的語句關鍵字包括: create drop alter等
注意:database 不能改名。一些視覺化工具可以改名,它是建新庫,把所有表複製到新 庫,再刪舊庫完成的。
create database 數據庫名 [charset 字元集]; (關鍵字大寫效果:CREATE DATABASE 數據庫名;)
如果不指定字元集,則按照安裝 mysql 服務時選擇的預設字元集。例如:
#建立數據庫
#方式-1:直接建立[採用MySQL預設字元集latin1 -- cp1252 West European]
CREATE DATABASE mysql03;
#方式-2:建立並指定字元集[utf8 -- UTF-8 Unicode]
CREATE DATABASE mysql04 CHARACTER SET utf8;
#檢視校對規則
SHOW CHARACTER SET;
#方式-3:建立並指定字元集[utf8]和校對規則[utf8_general_ci]
CREATE DATABASE mysql05 CHARACTER SET utf8 COLLATE utf8_general_ci;
#建立數據庫[若數據庫不存在]
#IF EXISTS[刪除表使用過]
CREATE DATABASE IF NOT EXISTS mysql05;
show databases;
提示:當前使用者有許可權檢視的
#檢視有哪些數據庫
SHOW DATABASES;
drop database 數據庫名;
#刪除數據庫[直接刪除]
DROP DATABASE mysql03;
#刪除數據庫[判斷刪除]
DROP DATABASE IF EXISTS mysql04;
DROP DATABASE IF EXISTS mysql05;
use 數據庫名;
#定位數據庫
USE mysql01;
select database();
注意:要操作表格和數據之前必須先說明是對哪個數據庫進行操作,否則就要對所有 物件加上「數據庫名.」。
#檢視當前正在使用的數據庫
SELECT DATABASE();
#跨數據庫查詢表數據[數據庫名.表名]
#empinfo[mysql02]
#SELECT * FROM mysql01.empinfo;
SELECT * FROM mysql02.empinfo;
show tables; #前面必須有 use 數據庫名語句,否則報錯
show tables from 數據庫名;
#前往mysql02數據庫
USE mysql02;#SELECT DATABASE() -> mysql02
#檢視當前數據庫所有表
SHOW TABLES;
#檢視指定數據庫的表內容
SHOW TABLES FROM mysql01;
(1)基礎版
(2)詳細版
#建立測試數據庫test
DROP DATABASE IF EXISTS test;
CREATE DATABASE IF NOT EXISTS test CHARACTER SET utf8;
#定位到test[若沒有定位數據庫 那麼表會被存放到當前數據庫中]
USE test;
#在test庫中建立表Student[簡單建表方式]
CREATE TABLE student
(
stu_id INT,
stu_name VARCHAR(20),
stu_sex CHAR(2),
stu_age INT
);
#插入數據
INSERT INTO student VALUES(1001,'張三','男',16);
INSERT INTO student VALUES(1002,'李四','女',17);
#查詢資訊
SELECT * FROM student;
#SELECT DATABASE();
/*
建表設定 可選參數:
ENGINE=INNODB [當前表格的引擎]
AUTO_INCREMENT=1 [增長的起始值]
DEFAULT CHARSET=utf8; [表數據的預設字元集]
*/
#複雜的建表方式
#建立表emp [要求:定義主鍵、自增欄位、非空約束、預設值]
DROP TABLE IF EXISTS emp;
CREATE TABLE emp
(
emp_id INT PRIMARY KEY AUTO_INCREMENT,
emp_name VARCHAR(20) NOT NULL,
emp_sex CHAR(2) DEFAULT '男',
emp_age INT NOT NULL
)ENGINE=INNODB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8;
#新增數據測試
INSERT INTO emp(emp_name,emp_sex,emp_age) VALUES('八戒','男',28);
INSERT INTO emp(emp_name,emp_sex,emp_age) VALUES('嫦娥','女',18);
#INSERT INTO emp(emp_name,emp_sex) VALUES('梅超風','女');
INSERT INTO emp(emp_name,emp_age) VALUES('梅超風',38);
#檢視所有內容
SELECT * FROM emp;
desc 表名稱;
檢視錶的定義:SHOW CREATE TABLE 表名;
#檢視錶結構
DESC emp;
#檢視錶定義[獲得表定的標準SQL程式碼]
SHOW CREATE TABLE emp;
drop table 表名稱;
注意:
數據和結構都被刪除
所有正在執行的相關事務被提交
所有相關索引被刪除
DROP TABLE 語句不能回滾
#刪除表的 數據
DELETE FROM emp;
#刪除表的 數據和結構
DROP TABLE IF EXISTS emp;
#SELECT * FROM emp;
(1)重新命名錶
alter table 表名 rename 新表名;
rename table 表名 to 新表名;
#修改表名 語法-1[emp -> employee]
ALTER TABLE emp RENAME employee;
#emp已經被重新命名爲employee(不存在)
#SELECT * FROM emp;
SELECT * FROM employee;
#修改表名 語法-2[employee -> employees]
RENAME TABLE employee to employees;
SELECT * FROM employees;
(2)增加一列
alter table 表名 add 【column】 列名 數據型別; #預設在最後
alter table 表名 add 【column】 列名 數據型別 after 某一列;
alter table 表名 add 【column】 列名 數據型別 first;
注意:**!沒有!**alter table 表名 add 【column】 列名 數據型別 before 某一列;
#修改表 語法-1 新增列[emp_city] [預設新增爲表的最後一列]
ALTER TABLE employees ADD emp_city VARCHAR(20);
#修改表 語法-2 新增列[emp_address] [修飾"first" 使新列成爲首列]
ALTER TABLE employees ADD emp_address VARCHAR(20) FIRST;
#修改表 語法-3 新增列[emp_mail] [修飾"after 列名" 使新列插入在指定的列名後]
ALTER TABLE employees ADD emp_mail VARCHAR(20) AFTER emp_sex;
#ERROR
#ALTER TABLE employees ADD emp_xx VARCHAR(20) BEFORE emp_sex;
(3)刪除列
alter table 表名 drop 【column】 列名;
#刪除列 [將剛剛新增的"emp_mail"列刪除]
ALTER TABLE employees DROP COLUMN emp_mail;
#刪除列 [將剛剛新增的"emp_address"列刪除]
ALTER TABLE employees DROP emp_address;
SELECT * FROM employees;
DESC employees;
(4)修改列型別
alter table 表名 modify 【column】 列名 數據型別;
alter table 表名 modify 【column】 列名 數據型別 after 某一列;
alter table 表名 modify 【column】 列名 數據型別 first;
#修改列數據型別 語法-1 [emp_name varchar(20) -> varchar(30)]
ALTER TABLE employees MODIFY emp_name varchar(30);
#修改列數據型別 語法-1 [emp_age int -> float]
ALTER TABLE employees MODIFY emp_age float;
#修改列數據型別 語法-2 [使用"after 列名" 在修改型別的同時 移動列的位置到指定列的後方]
#修改emp_age列的數據型別爲int
ALTER TABLE employees MODIFY emp_age int AFTER emp_name;
#修改列數據型別 語法-3 [使用"first" 在修改型別的同時 移動列的位置到首列]
ALTER TABLE employees MODIFY emp_age float FIRST;
(5)修改列名等
alter table 表名 change 【column】 列名 新列名 數據型別
#修改列的名稱 [emp_city -> emp_address]
ALTER TABLE employees CHANGE emp_city emp_address VARCHAR(50);
#建立數據庫mytest1[簡單建立]
#建立數據庫mytest2 指定其編碼格式爲utf8 檢視校對規則 並選擇合適的規則
#檢視有哪些數據庫
#若數據庫mytest1存在 將其移除
#定位數據庫mytest2
#檢視當前正在使用的數據庫是否爲mytest2
#在mytest2中檢視其他數據庫的表數據
#建立學生表
#[具備以下列:學號(自增欄位)、姓名(非空約束)、性別(預設爲女)、年齡(非空約束)、地址、電話]
#[當前表格的引擎爲INNODB 增長的起始值爲1001 表數據的預設字元集爲UTF8]
#進行以下操作:
#檢視錶中所有內容
#檢視錶結構
#檢視錶定義
#修改表 修改表名[2種方式]
#修改表 新增列[city-城市 ...][3種方式]
#修改表 修改列的數據型別[name varchar2(20) -> varchar2(40) ...][3種方式]
#修改表 修改列的名[phone-tell]
#修改表 移除列[address]
#刪除表的 數據
#刪除表的 數據和結構
#建立數據庫mytest1[簡單建立]
CREATE DATABASE mytest1;
#檢視校對規則
SHOW CHARACTER SET;
#建立數據庫mytest2 指定其編碼格式爲utf8 檢視校對規則 並選擇合適的規則
CREATE DATABASE mytest2 CHARACTER SET utf8 COLLATE utf8_general_ci;
#檢視有哪些數據庫
SHOW DATABASES;
#若數據庫mytest1存在 將其移除
CREATE DATABASE IF EXISTS mytest1;
#定位數據庫mytest2
USE mytest2;
#檢視當前正在使用的數據庫是否爲mytest2
SELECT DATABASE();
#在mytest2中檢視其他數據庫的表數據
SELECT * FROM mysql02.empinfo;
#建立學生表
#[具備以下列:學號(自增欄位)、姓名(非空約束)、性別(預設爲女)、年齡(非空約束)、地址、電話]
#[當前表格的引擎爲INNODB 增長的起始值爲1001 表數據的預設字元集爲UTF8]
CREATE TABLE student
(
id VARCHAR(12) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30) NOT NULL,
sex CHAR(2) DEFAULT '女',
age INT NOT NULL,
address VARCHAR(50),
phone VARCHAR(11)
)ENGINE=INNODB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8;
#進行以下操作:
#檢視錶中所有內容
SELECT * FROM student;
#檢視錶結構
DESC student;
#檢視錶定義
SHOW CREATE TABLE student;
#修改表 修改表名[2種方式]
ALTER TABLE student RENAME students;
RENAME TABLE students to student;
#修改表 新增列[city-城市 ...][3種方式]
ALTER TABLE student ADD city VARCHAR(20);
ALTER TABLE student ADD column1 VARCHAR(20) FIRST;
ALTER TABLE student ADD column2 VARCHAR(20) AFTER age;
#修改表 修改列的數據型別[name varchar2(20) -> varchar2(40) ...][3種方式]
ALTER TABLE student MODIFY name varchar2(40);
ALTER TABLE student MODIFY column1 varchar2(22) AFTER name;
ALTER TABLE student MODIFY column2 varchar2(24) FIRST;
#修改表 修改列的名[phone-tell]
ALTER TABLE student CHANGE phone tell VARCHAR(11);
#修改表 移除列[address]
ALTER TABLE student DROP address;
#刪除表的 數據
DELETE FROM student;
#刪除表的 數據和結構
DROP TABLE IF EXISTS student;