MySQL基础(四)——DDL

本文介绍了MySQL的基础DDL操作,包括库的创建、修改、删除,表的设计、修改、复制,以及数据类型、常见约束的详细讲解。通过实例演示了如何创建表、添加和修改字段,以及设置非空约束、默认值和索引等关键概念。
摘要由CSDN通过智能技术生成

MySQL基础(四)——DDL

视频学习来源:MySQL_基础+高级篇- 数据库 -sql -mysql教程_mysql视频_mysql入门_尚硅谷;

作者:木子六日;

MySQL版本:5.7.33;

库的管理

# 库的管理
# 创建库
CREATE DATABASE books;

# 一般会这样写来避免库已经存在
CREATE DATABASE
IF NOT EXISTS books;

# 修改库
# 修改字符集
ALTER DATABASE books CHARACTER
SET utf8;

# 删除库
DROP DATABASE books;

# 一般会这样写来避免库不存在
DROP DATABASE
IF EXISTS books;

表的管理

USE books;

# 表的管理
# 创建表
/*
	语法格式如下:
	create  table 表名(
		字段名 字段类型(长度) 约束,
		字段名 字段类型(长度) 约束,
		字段名 字段类型(长度) 约束,
		……
		字段名 字段类型(长度) 约束
	);
*/
CREATE TABLE book (
	id INT,
	bName VARCHAR (20),
	price DOUBLE,
	authorId INT,
	publishDate DATETIME
);

# 修改表
# 修改字段名
# ALTER TABLE 表名 CHANGE COLUMN 原字段名 新字段名 字段类型;
ALTER TABLE book CHANGE COLUMN publishDate pubDate datetime;

# 修改字段类型
# ALTER TABLE 表名 MODIFY COLUMN 字段名 新类型;
ALTER TABLE book MODIFY COLUMN pubDate TIMESTAMP;

# 添加一个字段
# ALTER TABLE 表名 ADD COLUMN 字段名 字段类型;
ALTER TABLE book ADD COLUMN salary DOUBLE;

# 删除字段
# ALTER TABLE 表名 DROP COLUMN 字段名;
ALTER TABLE book DROP COLUMN salary;

# 修改表名
# ALTER TABLE 就表名 RENAME TO 新表名;
ALTER TABLE book RENAME TO books;

# 删除表
DROP TABLE books;

DROP TABLE
IF EXISTS books;

# 查看表结构
DESC book;

# 查看所有表
SHOW TABLES;

# 表的复制
# 仅仅复制表结构
CREATE TABLE copy LIKE book;

# 复制结构和数据(当然也可以只复制部分数据,就看你子查询怎么写了)
CREATE TABLE copy2 SELECT
	*
FROM
	book;

SELECT
	*
FROM
	copy2;

数据类型

# 数据类型
# 整数
# TINYINT--1字节,SMALLINT--2字节,MEDIUMINT--3字节,INT--4字节,INTEGER--4字节,BIGINT--8字节
# 默认都是有符号的,即可以插入负数
# 设置为无符号如下:
CREATE TABLE t_int (t1 INT, t2 INT UNSIGNED);

# 我们也可以给整型设置长度,但是毫无意义,并不会影响整型的存储范围。
# 只有搭配zerofill关键字一起使用时,长度设置才有意义,他会使用0填充并且变为无符号(命令行才可以,Navicat还是不会填充的);
DROP TABLE
IF EXISTS t_int;

CREATE TABLE t_int (
	t1 INT (5) ZEROFILL,
	t2 INT UNSIGNED
);

INSERT INTO t_int
VALUES
	(1, 12);

SELECT
	*
FROM
	t_int;

# 小数
# FLOAT(浮点)--4字节,DOUBLE(浮点)--8字节,DECIMAL(定点)--8字节
CREATE TABLE t_float (
	f FLOAT (5, 2),
	d DOUBLE (5, 2),
	de DECIMAL (5, 2)
);

# M表示整数位数加小数位数一共最多是M位,D表示小数部分最多D位;
# 如果小数位数超出D,会四舍五入到D位,如果总位数(小数部分四舍五入后)超出M,直接报错;
# decimal的默认精度是M为10,D为0;
# FLOAT和double都是无所谓的;
INSERT INTO t_float
VALUES
	(123.45, 124.4, 134.456);

SELECT
	*
FROM
	t_float;

# 字符型
# char 长度可以省略,默认是1,哪怕你插入的字符长度为3,如果你的类型是char(6)的话,他还是会开辟6个字符的空间;
# 所以char比varchar要更费空间,但是他的效率比varchar要高一些;
# varchar的长度不能省略;
CREATE TABLE t_char (c CHAR, v VARCHAR(5));

INSERT INTO t_char
VALUES
	('a', 'ljj');

SELECT
	*
FROM
	t_char;

# 枚举型(只能插入指定的结果集中的一个)
CREATE TABLE t_enum (e enum('a', 'b', 'c'));

INSERT INTO t_enum
VALUES
	('b');

# set型(只能插入指定的结果集中的任意个,用逗号分割)
CREATE TABLE t_set (s SET('a', 'b', 'c'));

INSERT INTO t_set
VALUES
	('b,a,c');

# 二进制类型
# BINARY,TINYBLOB,VARBINARY,BLOB二进制类型
# 日期类型
# date(只有日期),time(只有时间),year(只有年),datetime(日期和时间都有),timestamp(时间戳)
CREATE TABLE t_date (t1 TIMESTAMP, t2 datetime);

INSERT INTO t_date
VALUES
	(NOW(), NOW());

SELECT
	*
FROM
	t_date;

常见约束

# 常见约束
/*
	六大常见约束:
		NOT NULL:非空
		DEFAULT:默认值
		PRIMARY KEY:主键,唯一,非空
		UNIQUE:唯一,但可以为空
		CHECK:检查[mysql中不支持]
		FOREIGN KEY:外键

列级约束:不支持外键;
表级约束: 除了非空和默认,其他都可以写;

语法:
CREATE TABLE 表名(
	字段名	字段类型	列级约束,
	字段名	字段类型	列级约束,
	……
	字段名	字段类型	列级约束,
	表级约束
);
*/
USE students;

CREATE DATABASE
IF NOT EXISTS students;

CREATE TABLE
IF NOT EXISTS major (
	id INT PRIMARY KEY,
	majorName VARCHAR (20)
);

DROP TABLE
IF EXISTS stuInfo;

# 列级约束
CREATE TABLE
IF NOT EXISTS stuInfo (
	id INT PRIMARY KEY,
	stuName VARCHAR (20) NOT NULL,
	gender CHAR (1) CHECK (gender = '男' OR gender = '女'),
	seat INT UNIQUE,
	age INT DEFAULT 19
);

-- DESC stuInfo;
DROP TABLE
IF EXISTS stuInfo;

# 表级约束
CREATE TABLE
IF NOT EXISTS stuInfo (
	id INT,
	stuName VARCHAR (20),
	gender CHAR (1),
	seat INT,
	age INT,
	majorId INT,
	CONSTRAINT pk PRIMARY KEY (id),
	CONSTRAINT uq UNIQUE (seat),
	CONSTRAINT ck CHECK (gender = '男' OR gender = '女'),
	CONSTRAINT fk FOREIGN KEY (majorId) REFERENCES major (id)
);

# CONSTRAINT 名称   这个东西不写也没事,就是取个名字而已
DESC stuInfo;

# UNIQUE,PRIMARY KEY,FOREIGN KEY都是有索引的
SHOW INDEX
FROM
	stuInfo;

# 一般来说,除了外键我们都是把约束写成列级约束的,除了外键
INSERT INTO stuInfo (id, stuName, seat)
VALUES
	(1, 'a', NULL),
	(2, 'a', NULL),
	(3, 'a', NULL);

SELECT
	*
FROM
	stuInfo;

# mysql5.7.33版本亲测可以的unique约束可以添加多个null,但是有些版本的mysql好像不可以
# 主键和unique约束都是可以组合的,例如
USE students;

SHOW INDEX
FROM
	stu2;

CREATE TABLE
IF NOT EXISTS stu2 (
	id1 INT,
	id2 INT,
	un1 INT,
	un2 INT,
	PRIMARY KEY (id1, id2),
	UNIQUE (un1, un2)
);

DESC stu2;

# 修改约束(注意auto_increment并不是一个约束,而是一个标识列
# 他必须与key与数值型搭配使用[主键、唯一键、外键],而且一个表只能有一个标识列)
USE students;

DESC stuInfo;

ALTER TABLE stuInfo MODIFY COLUMN id INT auto_increment;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值