描述
DDL,數據定義語言;
數據庫的管理:創建、刪除、修改
數據表的管理:創建、刪除、修改
創建:CREATE
修改:ALTER
刪除:DROP
數據庫管理
創建數據庫
CREATE DATABASE [IF NOT EXISTS] 數據庫名;
案例:創建數據庫Books,如果不存在的話。
CREATE DATABASE IF NOT EXISTS Books;
案例:創建數據庫Shoes
CREATE DATABASE Shoes;
更改指定數據庫的字符集
ALTER DATABASE Books CHARACTER SET gbk;
刪除數據庫
DROP DATABASE Books;
DROP DATABASE IF EXISTS Books;
數據表管理
創建數據表
CREATE TABLE [IF NOT EXISTS] 表名(
列名 數據類型 [長度,約束],
列名 數據類型 [長度,約束],
···
列名 數據類型 [長度,約束]
);
案例:在數據庫Books中,創建表Person
CREATE TABLE Person(
id int,# 編號
name VARCHAR(20),#名稱
age int
);
修改數據表
ALTER TABLE 表名 ADD|MODIFY|DROP|CHANGE COLUMN 列名 [列類型 約束]
(1)修改列名
ALTER TABLE Person CHANGE COLUMN name stuName VARCHAR(20);
(2)修改列的類型或者約束
ALTER TABLE Person MODIFY COLUMN age VARCHAR(2);
(3)添加列
ALTER TABLE Person ADD grade VARCHAR(10);
(4)刪除列
ALTER TABLE Person DROP COLUMN grade;
(5)修改表名
ALTER TABLE Person RENAME TO PersonInfo;
刪除數據表
DROP TABLE [IF EXISTS] PersonInfo;
表的複製
(1) 複製表的結構
CREATE TABLE PersonInfo_copy LIKE PersonInfo;
(2) 複製表的結構和數據
CREATE TABLE PersonInfo_copy1 SELECT * FROM PersonInfo;
(3) 複製表的結構和部分數據
CREATE TABLE PersonInfo_copy2 SELECT id,name FROM PersonInfo WHERE age > 20;
常見的數據類型
數值型:整型、小數(定點數、浮點數)
字符型:較短文本(CHAR、VARCHAR)、較長文本(TEXT、BLOB)
日期型
**整型 **
分類:tinyint、smallint、mediumint、int/integer、bigint
特點:
(1) 如果不設置無符號還是有符號,默認是有符號。如果想設置無符號,需要添加UNSIGNED關鍵字;
(2) 如果插入的數值超出了整型的範圍,OUT OF RANGE警告,默認插入臨界值;
(3) 如果不設置長度,根據類型的不同默認長度也不同;
如何設置無符號和有符號
DROP TABLE IF EXISTS PersionInfo;
CREATE TABLE PersionInfo(
id INT,
age INT UNSIGNED
);
如果向無符號列中插入有符號的數值,默認值將會是0
INSERT INTO PersionInfo VALUES(-123,-1234);
如果向列中插入超過整型範圍的數值,將會插入最大|最小的臨界值
INERT INTO PersionInfo VALUES(2147483648,4294967296);
指定整型的數據類型長度,位數不夠時使用0填充,這時默認是無符號。
CREATE TABLE number_info(
id INT(2) ZEROFILL,
money INT(10) ZEROFILL
);
INSERT INTO number_info VALUES(1,100),(2,100000);
小數
分類:
浮點型:FLOAT(M,D)、DOUBLE(M,D)
定點型:DEC(M,D)、DECIMAL(M,D)
特點:
(1) M代表整數位數+小數位數
(2) D代表小數的精度
(3) 如果插入的數值超過了M的位數,默認插入M位數的臨界值
(4) M、D都可以省略,Decimal類型的(M默認爲10,D默認爲0)
CREATE TABLE table_float(
a FLOAT,
b DOUBLE,
c DECIMAL(5,2)
);
如果插入數值超過M指定的位數,那麼將會插入M位數的臨界值
INSERT INTO table_float VALUES(12.2,16.6,12345.26);
如果插入數值的精度超過D指定的位數,那麼會將數值的D位後的數值進行四捨五入
INSERT INTO table_float VALUES(10.1,11.1,123.446);
字符型
分類:
較短文本:CHAR、VARCHAR
較長文本:TEXT、BLOB(二進制)
其他:
BINARY、VARBINARY用於保存較短的二進制
ENUM用於保存枚舉
SET用於保存集合
CHAR,固定長度的字符,比較耗費空間,效率高。
VARCHAR,可變長度的字符,比較節省空間,效率低。
CREATE TABLE table_char(
name VARCHAR(10),
sex ENUM('男','女'),
location SET('山東','濟南','德州','聊城')
);
向表中插入枚舉值
INSERT INTO table_char VALUES('胖虎','男'),('靜香','女');
向表中插入集合
INSERT INTO table_char VALUES('大雄','男','山東,聊城');
日期型
分類:DATE、TIME、YEAR、DATETIME,TIMESTAMP
DATETIME和TIMESTAMP的特點
類型 | 字節數 | 範圍 |
---|---|---|
DATETIME | 8 | 1000 ~ 9999 |
TIMESTAMP | 4 | 1970 ~ 2038 |
CREATE TABLE table_date(
date1 DATETIME,
date2 TIMESTAMP
);
INSERT INTO table_date VALUES(NOW(),NOW());
常見約束
約束插入的數據的完整性和正確性。
分類:
- NOT NULL:非空約束,該列的值不能爲空
- DEFAULT:默認值。一般用於性別(男、女)。
- PRIMARY KEY:主鍵,必填,保證字段值在一個表中的唯一性。
- UNIQUE:唯一約束,可空,保證字段值在表中的唯一性。
- CHECK:檢查約束[mysql不支持該類型約束]
- FOREIGN KEY:外鍵,保證兩個表的關係。
CREATE TABLE 表名(
字段名 字段類型 列級約束,
字段名 字段類型 列級約束,
表級約束
);
案例:添加列級約束
# 創建學生信息表
CREATE TABLE student(
id INT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
gender CHAR(1) CHECK(gender='男' OR gender ='女'),
seat INT UNIQUE,
age INT DEFAULT 18,
grade_id INT
);
# 查看錶的結構信息
DESC student;
# 查看錶中的索引信息
SHOW INDEX FROM student;
添加表級約束
# 創建年級信息表
CREATE TABLE grade(
id INT,
name VARCHAR(20)
);
# 創建學生信息表
CREATE TABLE student(
id INT,
name VARCHAR(20),
gender CHAR(1),
seat INT,
age INT,
grade_id INT,
CONSTRAINT id_pk PRIMARY KEY(id),
CONSTRAINT name_unique UNIQUE(name),
CONSTRAINT ck_gender CHECK(gender='男' OR gender ='女'),
CONSTRAINT fk_grade_id FOREIGN KEY(grade_id) REFERENCES grade(id)
);
# 查看student表的索引
SHOW INDEX FROM student;
主鍵和唯一約束的區別
類型 | 是否唯一 | 是否允許爲NULL | 說明 |
---|---|---|---|
主鍵約束 | 是 | 否 | 表中允許有一個 |
唯一約束 | 是 | 是 | 表中允許有多個 |
外鍵的特點
- 要求在從表添加
- 從表的外鍵列的類型和主表的關聯列的類型兼容
- 主表的關聯列必須是主鍵
- 插入數據時,先插入主表,再插入從表,刪除數據時,先刪除從表,再刪除主表。
修改表時添加約束
# 列級約束
ALTER TABLE student MODIFY COLUMN name VARCHAR(50) NOT NULL;
ALTER TABLE student MODIFY COLUMN age INT DEFAULT 20;
# 表級約束
ALTER TABLE student ADD PRIMARY KEY(id);
# 給student表添加外鍵
ALTER TABLE student ADD FOREIGN KEY(grade_id) REFERENCES grade(id);
修改表時刪除約束
# 刪除非空約束
ALTER TABLE student MODIFY COLUMN name VARCHAR(20) [NULL];
# 刪除主鍵
ALTER TABLE student DROP PRIMARY KEY;
# 刪除唯一約束
ALTER TABLE student DROP INDEX age;
# 刪除外鍵,注意這裏是約束名稱,不是外鍵列的名稱
ALTER TABLE student DROP FOREIGN KEY fk_grade_id;
標識列
自增長列,自動增長,一般用於列類型爲數值類型。
案例:創建表時設置標識列
CREATE TABLE tab_identity(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL
);
# 修改自增長列的增長值大小
SHOW VARIABLES LIKE '%auto_increment%';
SET auto_increment_increment=3;
修改表時設置標識列
ALTER TABLE student MODIFY COLUMN id INT PRIMARY KEY AUTO_INCREMENT;
SHOW INDEX FROM student;
修改表時刪除標識列
ALTER TABLE student MODIFY COLUMN id INT PRIMARY KEY;