文章目录
相关概念
数据定义语言
库和表的管理
一、库的管理 创建,修改,删除
二、表的管理 创建,修改,删除创建:create
修改:alter
删除:drop
一、库
1.库的创建
语法:
create database [if not exits] 库名
#案例:创建库books
CREATE DATABASE IF NOT EXISTS books
2.库的修改
注意:库一般不会修改,如果修改库的话就会引发很多的问题
#更改库的字符集
ALTER DATABASE books CHARACTER SET gbk;
3.库的删除
DROP DATABASE IF EXISTS books;
二、表
1.表的创建☆
/*
语法:
create table 表名(
列名 列的类型【(长度) 约束】,
列名 列的类型【(长度) 约束】,
列名 列的类型【(长度) 约束】,
......
列名 列的类型【(长度) 约束】
)
*/
#案例:创建表 book
CREATE DATABASE book;
CREATE TABLE book(
id INT,#编号
bName VARCHAR(20),#图书名
price DOUBLE,#价格
authorId INT,#作者编号
publishDate DATETIME#出版日期
);
#创建表author
CREATE TABLE author(
id INT,
au_name VARCHAR(20),
nation VARCHAR(10)
)
2.表的修改
/*
alter table 表名 add|drop|modify|change column 列名【类型 约束】;
*/
DESC `author`
DESC book
#①修改列名
ALTER TABLE `book` CHANGE COLUMN `publishDate` pubDate DATETIME;
#②修改列的类型或约束
ALTER TABLE `book` MODIFY COLUMN `pubDate` TIMESTAMP;
#③添加新列
ALTER TABLE `author` ADD COLUMN annual DOUBLE;
#④删除列
ALTER TABLE `author` DROP COLUMN annual;
#⑤修改表名
ALTER TABLE `author` RENAME TO `author_book`;
3.表的删除
DROP TABLE IF EXISTS`author_book`;
SHOW TABLES;
4.表的复制
INSERT INTO `author`
VALUES(1,'老舍','中国'),
(2,'村上春树','日本'),
(3,'鲁迅','中国'),
(4,'金庸','中国');
SELECT * FROM `author`;
SELECT * FROM copy4;
①仅仅复制表的结构
CREATE TABLE copy LIKE `author`;
#②复制表的结构+数据
CREATE TABLE copy2
SELECT * FROM `author`;
③创建表并复制部分的数据
CREATE TABLE copy3
SELECT id,`au_name`
FROM `author`
WHERE `nation`='中国';
④复制表的部分结构
CREATE TABLE copy4
SELECT id,`nation`
FROM `author`
WHERE 0;
三、标识列
相关概念
又称为自增长列 含义:可以不用手动的插入值,系统提供默认的序列值
特点:
1.标识列必须和主键搭配吗?不一定,但要求是一个key(比如主键,唯一键,外键等)
2.一个表可以有几个标识列?至多一个
3.标识列的搭配的类型只能是数值型
4.标识列可以通过set auto_increment_increment=3;设置步长 可以通过手动插入值来设置起始的值
DROP TABLE IF EXISTStab_info
1、创建表时添加标识列
CREATE TABLE tab_info(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
address VARCHAR(20)
)
2、修改表时添加标识列
CREATE TABLE tab_info(
id INT ,
NAME VARCHAR(20),
address VARCHAR(20)
)
ALTER TABLE `tab_info` MODIFY COLUMN `id` INT PRIMARY KEY AUTO_INCREMENT;
3、修改表时删除标识列
ALTER TABLE `tab_info` MODIFY COLUMN `id` INT;
其实就是相当于不写
四、数据类型
相关概念
#常见的数据类型
数值型:
整数
小数:
定点数
浮点数
字符型:
较短的文本:char,varchar
较长的文本:text,blob(较长的二进制数据)
日期型:
1、整形
/*
分类:
tinyint,smallint,mediumint,int/integer,bigint
1 2 3 4 8字节
特点:
①如果不设置有符号还是无符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字
②如果插入的数值超过了整型的范围,会报 out of range异常,并且插入临界值
③如果不设置长度,会有默认的长度
长度代表了显示的宽度,而不是数据的范围,范围是根据哪一个来分(tinyint,smallint,mediumint,int/integer,bigint)的,如果不够用会用0在左边填充,但必须搭配zerofill使用
*/
2、小数
/*
分类:
1.浮点型
float(M,D)
double(M,D)
定点型
dec(M,D)
decimal(M,D)
特点:
①
M:整数部位(长度)+小数部位(长度)
D:小数部位(长度)
如果超过长度的范围则插入临界值
②
M和D都可以省略
如果是decimal,则默认为10,D默认为0
如果是float和double,则会根据插入的数值的精度来决定精度
③
定点型的精度较高,如果要求插入的数值的精度较高如货币运算等则考虑使用
*/
/*
原则:
所选择的类型越简单越好,能保存数值的类型越小越好
*/
3、字符型
/*较短的文本:
char
varchar
其他:
binary和varbinary用于保存较短的二进制
enum用于保存枚举
set用于保存集合
较长的文本:
text
blob(较大的二进制)
特点:
写法 M的意思 特点 空间的耗费 效率
char char(M) 最大的字符数,可以省略默认为1 固定长度的字符 比较耗费 高
varchar varchar(M) 最大的字符数,不可以省略 固定长度的字符 比较节省 低
*/
4.日期型
/*
分类:
date 只保存日期
time 只保存时间
year 只保存年
datetime保存日期+时间
timestamp保存日期+时间
特点:
字节 范围 时区等的影响
datetime 8 1000-9999 不受
timestamp 4 1970-2038 受
*/
五、常见约束
相关概念
#常见约束
/*
含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确性和可靠性
分类:六大约束
not null:非空,用于保证该字段的值不能为空
比如姓名,学号等
default:默认,用于保证该字段有默认值
比如性别
primary key:主键,用于保证该字段具有唯一性,并且非空
比如学号,员工编号等
unique:唯一,用于保证该字段的值具有唯一性,可以为空
比如座位号
check:检查约束【MySQL中不支持】
比如性别,年龄
foreign key:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
在从表添加外键约束,用于引用主表中某列的值
比如学生表的专业编号,员工表的部门编号,员工表的工种编号
添加约束的时机:
1.创建表时
2.修改表时
约束的添加分类:
列级约束
六大约束语法上都支持,但外键约束没有效果
表级约束
除了非空、默认,其他的都支持
主键和唯一的大对比:
保证唯一性 是否允许为空 一个表中可以有多少个 是否允许组合
主键 √ × 至多有1个 √,但不推荐
唯一 √ √(但是只能允许一个数据为空) 可以有多个 √,但不推荐
外键:
1.要求在从表设置外键关系
2.从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
3.主表的关联列必须是一个key(一般是主键或唯一)
4.插入数据时,先插入主表,再插入从表
删除数据时,先删除从表,再删除主表
*/
CREATE TABLE 表名(
字段名 字段类型 列级约束,
字段名 字段类型,
表级约束
)
1、创建表时添加约束
/*
语法:
直接在字段名和类型后面追加约束类型即可
只支持:
默认,主键,唯一,非空
*/
CREATE DATABASE student;
①.添加列级约束
CREATE TABLE stuinfo(
id INT PRIMARY KEY,
stuName VARCHAR(20) NOT NULL,
gender CHAR(1) CHECK(gender='男' OR gender='女'),
seat INT UNIQUE,
age INT DEFAULT 18,
majorId INT REFERENCES major(id)
);
CREATE TABLE major(
id INT PRIMARY KEY,
majorName VARCHAR(20)
);
DESC major
DESC `stuinfo`
②.添加表级约束
/*
语法:在各个字段的最下面
【constraint 约束名】约束类型(字段名)
*/
DROP TABLE stuinfo;
CREATE TABLE stuinfo(
id INT ,
stuName VARCHAR(20),
gender CHAR(1) ,
seat INT ,
age INT ,
majorId INT ,
PRIMARY KEY(id),
UNIQUE(seat),
CHECK(gender='男' OR gender='女'),
FOREIGN KEY(majorid) REFERENCES major(id)
);
DESC stuinfo
SHOW INDEX FROM stuinfo
③通用的写法(就是表级添加和列级添加一起使用)
CREATE TABLE stuinfo(
id INT PRIMARY KEY,
stuName VARCHAR(20) NOT NULL,
gender CHAR(1) CHECK(gender='男' OR gender='女'),
seat INT UNIQUE,
age INT DEFAULT 18,
majorId INT ,
CONSTRAINT fk_majorId FOREIGN KEY(majorid) REFERENCES major(id)
);
2、修改表时添加约束
/*
1.添加列级约束
alter table 表名 modify column 字段名 字段类型 新约束
2.添加表级约束
alter table 表名 add【constraint 约束名】约束类型(字段名)【外键的引用】
*/
DROP TABLE stuinfo;
CREATE TABLE stuinfo(
id INT ,
stuName VARCHAR(20),
gender CHAR(1) ,
seat INT ,
age INT ,
majorId INT
);
DESC `stuinfo`
①.添加主键约束
列级约束
ALTER TABLE `stuinfo` MODIFY COLUMN id INT PRIMARY KEY;
或者
表级约束
ALTER TABLE `stuinfo` ADD PRIMARY KEY(id);
②.添加外键
ALTER TABLE `stuinfo` ADD CONSTRAINT fk_`stuinfo`_`major` FOREIGN KEY(majorid) REFERENCES major(id);
#3.添加唯一,非空等都是一样的
3、修改表时删除约束
删除约束
(删除约束就是ALTER修改的时候后面不写约束就是了,就相当于是删除了但是删除主键,唯一和外键会有差别(用到了DROP)但是也可以用不写的方法)
删除主键
ALTER TABLE stuinfo DROP PRIMARY KEY;
删除唯一
ALTER TABLE `stuinfo` DROP INDEX seat;
删除外键约束
ALTER TABLE `stuinfo`DROP FOREIGN KEY majorid;
列级约束 列的后面 语法都支持,但是外键没有效果 不可以取约束名
表级约束 所有列的下面 默认和非空不支持,其他支持 可以取约束名(主键没有效果)