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;
发布了49 篇原创文章 · 获赞 12 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/P923284735/article/details/104592689