mysql的DDL語言

描述
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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章