DDL语言入门:描述数据库中要存储的现实世界实体的语言

一、库的管理

声明:本博文如存在问题,欢迎各位dalao指正!!!

1.创建
create database 库名;
-- 案例1
create database books;
-- 案例2:增加容错性,当不存在books表时创建,反之不创建
create database if not exists books;
2.修改
-- 更改库的字符集:设置字符集为gbk
alter database books character set gbk;
3.删除
-- 安全删除库
drop database if exists books;

二、表的管理

1.创建
create table 表名(
    列名 列的类型【(长度) 约束】,
    列名 列的类型【(长度) 约束】,
    列名 列的类型【(长度) 约束】,
    ...
    列名 列的类型【(长度) 约束】
)
-- 案例1:创建book表
create table books(
    id int,
    bname varchar(20),
    price double,
    author int,
    publishDate datetime
)
-- 案例2:创建作者表author
create table author(
    id int,
    au_name varchar(20),
    nation varchar(10)
)
2.修改

-- 修改列名:column可以省略
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 book_author;
3.删除
-- 安全删除一个表
DROP TABLE if exists book_author ;
-- 查看当前库的所有表
show tables;

三、通用的写法

 通用的建库写法:
DROP DATABASE IF EXISTS 旧库名;
CREATE DATABASE 新库名;
-- 通用的建表写法
DROP TABLE if EXISTS 旧表名;
CREATE TABLE 新表名();

四、表的复制

插入数据:
INSERT INTO author 
VALUES(1,'zym','日本'),(2,'ljf','中国'),(3,'lli','中国');
-- 1.只复制的结构
CREATE TABLE copy like author;
-- 2.复制表的结构和数据
CREATE TABLE copy2
SELECT * FROM author;
-- 3.只复制部分
CREATE TABLE copy3
SELECT id,au_name
FROM author
WHERE nation='中国';
-- 4.仅仅复制某些字段,不包含数据
CREATE TABLE copy4
SELECT id,au_name
FROM author 
WHERE 0;

五、六大约束

1. NOT NULL
非空,用于保证该字段的值不能为空,比如姓名、学号
2. DEFAULT
默认,用于保证该字段有默认值,比如性别
3. PRIMARY KEY
主键,英语保证该字段的值具有唯一性,并且非空;比如学号,员工编号等。
4. FOREIGN KEY
外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值。
    在从表设置外键关系; 从表的外键类型要与主表的主键类型一致或者兼容,名称无要求;
    从表的关联列必须是一个key(一般是主键或者唯一)
    删除数据时,要先删除从表,再删除主表;插入数据时,先加入主表,再加入从表。
5. UNIQUE
唯一,用于保证该字段的值具有唯一性,可以为空;比如座位号。
6. CHECK
检查约束,比如年龄,性别。

1)、添加约束的时机:

1.创建表时添加约束

-- 列级约束
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 FOREIGN KEY REFERENCES majorId(id) /*列级约束添加外键,事时上没有用*/
);

CREATE TABLE major(
    id INT PRIMARY KEY,
    majorName VARCHAR(20)
);
-- 表级约束
CREATE TABLE stuinfo(
    id int ,
    stuName VARCHAR(20) not NULL,
    gender CHAR(1) ,
    seat INT UNIQUE,
    age INT DEFAULT 18,
    majorId INT ,
    /*添加表级约束,主键改名也没有效果还是primary key*/
    CONSTRAINT pk PRIMARY KEY(id),
    CONSTRAINT uq UNIQUE(seat),
    CONSTRAINT ck CHECK(gender='男' or gender='女'),
    CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorId) REFERENCES major(id)
);
CREATE TABLE major(
    id INT PRIMARY KEY,
    majorName VARCHAR(20)
);

2.修改表时添加约束

-- 添加非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;
-- 添加默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
-- 添加主键约束
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;/*添加列级约束写法*/
ALTER TABLE stuinfo ADD PRIMARY KEY(id);/*添加表级约束写法*/
-- 添加唯一
ALTER TABLE stuinfo MODIFY column seat INT UNIQUE;/*列级约束*/
ALTER TABLE stuinfo ADD UNIQUE(seat);/*表级约束*/

3.修改表时删除约束

-- 删除非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;
-- 删除默认约束
ALTER TABLE stuinfo MODIFY column age int;
-- 删除主键
ALTER TABLE stuinfo DROP PRIMARY KEY;
-- 删除唯一
ALTER TABLE stuinfo DROP INDEX seat;
-- 删除外键
ALTER TABLE stuinfo DROP FOREIGN KEY(majorId);

2)、约束的添加分类:

1.列级约束
        六大约束都支持,但外键约束和check约束没有作用。
        直接在在字段名和类型后面追加约束类型即可
2.表级约束
        除了非空和默认,其他的都支持。
        在最后一个字段名的末尾加 【constraint 约束名】约束类型(字段名);
CREATE TABLE 表名(
    字段名 字段类型 列级约束,
    字段名 字段类型m
    表级约束
)

3)、一般情况下设置字段约束

主键、默认、非空、唯一使用列级约束( PRIMARY KEY, DEFAULT, NOT NULL, UNIQUE )
外键、检查使用表级约束( FOREIGN KEY, CHECK)

六.常见的数据类型

1.数值型

1.1整形(字节数)
TINYINT SMALLINT  mediumint INT INTEGER bigint
   1       2          3      4     1      8
-- 如何设置有符号和无符号:无符号在字段的类型后面加上unsigned,默认有符号、
t2 int unsigned;
*1.2小数*
-- 定点数:m表示整数和小数合起来的总位数,d表示小数的位数
DEC(m,d);
DECIMAL(m,d);/*最大值与double相同*/
-- 浮点数
FLOAT(m,d) DOUBLE(m,d)
  4          8
-- 原则:所选择的类型越简单越好

2、字符型

2.1较短的文本
CHAR(m):固定字符长度为m,字符长度不可变;
VARCHAR(m):最大字符长度为m,字符长度可变。
2.2较长的文本
text
blob(较大的二进制)
2.3枚举enum类型
CREATE TABLE tab_char(
    c1 enum('a','b','c')
);
-- 只能插入枚举中存在的数据,大小写都可以。
INSERT INTO tab_char VALUES('a');
2.4 set集合类型
CREATE TABLE tab_char(
    c1 set('a','b','c')
);
-- set插入数据可以同时插入多条,如下
INSERT INTO tab_char VALUES('a'),('a,b');

3.日期类型

DATE 只保存日期
DATETIME 保存日期+时间
TIMESTAMP 保存日期+时间(受时区,版本模式影响较大)
TIME 只保存时间
YEAR 只保存年
发布了29 篇原创文章 · 获赞 12 · 访问量 6873

猜你喜欢

转载自blog.csdn.net/Zheng_lan/article/details/105210173