DDL語言庫與表的管理(創建、修改、刪除)、一些常見的數據類型(整形、浮點|定點、日期,字元) ...
2020 5/9
二十二、DDL(數據定義語言)->用於庫和表的管理
一、 庫的管理
a) 創建
b) 修改
c) 刪除
二、 表的管理
a) 創建: create
b) 修改: alter
c) 刪除: drop
#庫的管理
1.庫的創建
語法:
create database [if not exists] 庫名;(if not exists->是為了提高容錯性,沒有就創建、有的就不創建)
如:CREATE DATABASE if not exists books;
2.庫的修改(基本上不修改,若想修改庫名,則需要在服務端的data里修改)
修改庫的字元集:
ALTER DATABASE 庫名 CHARACTER SET 字元集;
如:
ALTER DATABASE books CHARACTER SET gbk;
3.庫的刪除
DROP DATABASE IF EXISTS庫名;
如:DROP DATABASE IF EXISTS books;
#表的管理
1.表的創建
語法:
create table(if not exists) 表名(
列名 類型[(長度) 約束],
列名 類型[(長度) 約束],
列名 類型[(長度) 約束],
…
列名 類型[(長度) 約束]
);
案例:
CREATE TABLE emp5(
id INT(7),
First_name VARCHAR(25),
Last_name VARCHAR(25),
Dept_id INT(7)
); (可使用if not exists來提高容錯性)
查看表結構:
2.表的修改
① 修改列名
② 修改列的類型或約束
③ 添加新列
④ 刪除列
⑤ 修改表名
語法:
alter table 表名 change|modify|drop|add column 列名 【列類型 約束】;
#修改列名
語法:
ALTER TABLE 表名 CHANGE COLUMN舊列名 新列名 新類型(一定要加上);
案例:把Last_name欄位名稱改為last_name;
ALTER TABLE emp5 CHANGE COLUMN Last_name last_name VARCHAR(30);
#修改列的類型或約束
語法:ALTER TABLE 表名 CHANGE COLUMN列名 新類型或約束;
案例:修改了last_name欄位的長度
ALTER TABLE emp5 MODIFY COLUMN last_name VARCHAR(49);
#添加新列
語法:
ALTER TABLE 表名 ADD 新列名 新類型【約束】;
案例:向表中添加新列test_column,類型自定義
ALTER TABLE emp5 ADD COLUMN test_column VARCHAR(25);
#刪除列
語法:
ALTER TABLE emp5 ADD COLUMN test_column VARCHAR(25);
案例:刪除表中的test_column欄位
ALTER TABLE emp5 DROP COLUMN test_column;
語法:
ALTER TABLE 表名 RENAME [TO] 新表名;
案例:把表名重命名為emp6;
ALTER TABLE emp5 RENAME TO emp6;
3.表的刪除
語法:
drop table 表名;
案例:
DROP TABLE 【if exists】emp6;(可使用if exists來提高容錯性)
- 表的複製
#僅僅複製表的結構(使用LIKE關鍵字)
CREATE TABLE employees2 Like employees;
#複製表的數據+結構(使用子查詢)
CREATE TABLE employee3
SELECT * FROM employees;
#只複製部分表的數據(使用帶篩選條件的子查詢)
CREATE TABLE employee4
SELECT * FROM employees
WHERE employee_id>150;
#僅僅複製某些欄位(不攜帶數據)
CREATE TABLE employee5
SELECT job_id,department_id FROM employees
WHERE 1=0;(只要where後的篩選條件不成立,那麼就不會接待數據)
二十三、常見的數據類型
分類:
數值型:
整形
小數:
浮點型
定點型
字元型:
較短的文本:char、varchar
較長的文本:text、bolb(較長的二進位數據)
#整形
類型 tinyint smallint mediumint int/integer bigint
所占位元組大小 1 2 3 4 8
特點:
① 如果不設置有符號還是無符號,則預設為有符號,如果想設置為無符號,則需要添加unsigned關鍵字
② 如果要插入的數據超出了整形的範圍,會報出out of range異常,並且插入臨界值
③ 如果不設置長度,則系統會有預設的長度
④ 類型中的長度欄位代表的是顯示數據的最大寬度,若數據小於該長度則會用0在左邊填充,但必須搭配zerofull關鍵字使用(此時預設為無符號整形)
#小數
1.浮點型
a) float(M,D)
b) double(M,D)
2.定點型
a) dec(M,D)
b) decimal(M,D)
特點:
① M代表的是整數和小數部分的總長度,D代表的是小數部位的長度,若超過範圍則插入臨界值
② M和D度可以省略,如果是float和double,則會根據插入的數值來決定精度,如果是decimal,則M預設為10,D預設為0
③ 定點型的精度較高,如果需要求插入的數值類型精度較高如貨幣元素那則可以考慮使用
使用原則:所選擇的類型越簡單越好,能保存的數值的類型越小越好
#字元型
1.較短的文本
char(M)
varchar(M)
binary和varbinary(包含二進位文本字元串)
enum->枚舉類型,要求插入的值必須屬於列表中指定的值之一
set->集合類型,和Enum類型類似,裡面可以保存0~64個成,一次可以選取多個成員
2.較長的文本
text
bolb(較長的二進位數據)
特點:
① 關於char 和varchar
寫法 M的意思 特點 空間的耗費
char char(M) 最大的字元數(可以省略,預設為1) 固定長度的字元 高
varchar varchar(M) 最大的字元數(不可省略) 可變長度的字元 低
關於固定與可變長度,那“數字”舉例,char會給它分配M個字元大小的空間,而varchar 就給它分配2個空間,長度隨輸入的值變化
#日期型
date:只保存日期
time:只保存時間
year:只保存年
位元組 範圍 時區等的影響
datetime 8 1000-9999 受
timestamp 4 1970-2038 不受
具體如下:
CREATE TABLE tab_date(
t1 DATETIME,
t2 TIMESTAMP
);#創建表
INSERT INTO tab_date VALUES(now(),now());
SELECT * FROM tab_date;
show VARIABLES like 'time_zone';
set time_zone ='+9:00';#改變時區
可發現改變時區後,t2的值發生變化,受到了時區的影響