菜鸟学SQL之——DDL语言的学习(MySQL)

DDL语言的学习

数据定义语言:库和表的管理

一、库的管理(创建、修改、删除)

1.库的创建create

语法

create database [if not exists] 库名; #if not exists,如果库存在了,就不创建了
create database db_name default charset = utf8;//创建库,且规定编码集是utf-8
2.库的修改alter

更改库的字符集

alter database books character set utf8;
3.库的删除drop
drop database [if exists]books; #if exists 如果库存在才删除

二、表的管理(创建、修改、删除)

1.表的创建

语法

create table 表名(列名 列的类型 [(长度) 约束],
               列名 列的类型 [(长度) 约束],
               列名 列的类型 [(长度) 约束],
               ...
               列名 列的类型 [(长度) 约束],
               )

eg:

create table book(
    id int primary key auto_increment #设置主键、数值自增
    bName varchar(20) not null, #值不能为空 
    price double, 
    authorId int,
    publishDate datetime #出版日期 
) charset = utf8;#设置这个表的字符集为utf-8
2.表的修改

语法alter table 表名 add|drop|modify|change column 列名 【列类型 约束】;

  • 修改列名

    ALTER TABLE book CHANGE COLUMN publishdate pubDate DATETIME;
    
  • 修改列的类型或约束

    ALTER TABLE book MODIFY COLUMN pubdate TIMESTAMP;
    
  • 添加新列

    ALTER TABLE author ADD COLUMN annual DOUBLE【FIRST|AFTER 字段名】; #默认添加到最后一列,AFTER 字段名:指定添加到谁后面
    
  • 删除列

    ALTER TABLE author DROP COLUMN annual;
    
  • 修改表名

    ALTER TABLE author RENAME 【TO】 book_author;
    
3.表的删除

语法:drop table [if exists] book_author

4.表的复制
  • 仅仅复制表的结构

    create table copy1 like author
    
  • 复制表的结构+数据

    create table copy2 select * from author[where 筛选条件];
    

三、常见约束

含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性

分类:五大约束

  • NOT NULL: 非空,用于保证该字段的值不能为空(姓名、学号)

  • DEFAULT:默认,用以保证该字段有默认值(性别)

  • PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空(学号、员工编号)

  • UNIQUE:唯一,用于保证该字段的值具有唯一性 ,可以为空(座位号)

  • FOREIGN KEY(不支持):外键,用于限制两个表的关系,用于保证该字段的值必须来自主表的关联列的值。

    ​ 在从表添加外键约束,用于引用主表中某列的值(学生表的专业编号)

添加约束的时机:

  • 创建表时
  • 修改表时

约束的添加分类:

  • 列级约束
    • 五大约束语法上都支持,但外键约束没效果
  • 表级约束
    • 除了非空、默认,其他都支持

主键和唯一的对比

保证唯一性 是否允许为空 一个表中可以有多少个 是否允许组合
主键 × 至多有一个 √,但不推荐 primary key(id,stuname)
唯一键 √(但只能有一个null) 可以有多个 √,但不推荐unique(seat,seat2)
一、创建表时添加约束
1.添加列级约束

语法:直接在字段名和类型后面追加约束类型即可

只支持:默认、非空、主键、唯一

CREATE TABLE stuinfo (
	id INT PRIMARY KEY, #主键
	stuName VARCHAR(255) NOT NULL, #非空
	seat INT UNIQUE, #唯一
	age INT DEFAULT, #默认
	majorId INT REFERENCES major(id) #外键
);
2.添加表级约束

语法:在各个字段的最下面:【constraint 约束名】 约束类型(字段名)

CREATE TABLE stuinfo (
	id INT 
	stuName VARCHAR(255),
	seat INT, 
	
	CONSTRAINT pk PRIMARY KEY(id),#给约束起名字
	UNIQUE(seat) #也可以不起名
);
二、修改表时添加约束

语法:

添加非空约束

alter table tb_stuinfo modify column stuname varchar(255) not null;

添加默认约束

alter table tb_stuinfo modify column age int default 12;

添加主键

alter table tb_stuinfo modify column id int primary key; #列级
alter table tb_stuinfo add primary key(id);#表级
三、修改表时删除约束

删除非空约束

alter table tb_stuinfo modify column stuname varchar(20) null;

删除默认约束

alter table tb_stuinfo modify column age int;

删除主键

alter table tb_stuinfo drop primary key;

删除唯一

alter table tb_stuinfo drop index seat;

四、标识列

又称自增长列

含义:可以不用手动的插入值,系统提供默认的序列值

特点

  • 标识列必须和key搭配使用(主键、唯一)
  • 一个表至多一个标识列
  • 标识列的类型只能是数值型(int、double…)
  • 标识列可以通过 set auto_increment_increment = 3; 设置步长
创建表时设置标识列
CREATE TABLE stuinfo (
	id INT PRIMARY KEY AUTO_INCREMENT, #自增
	stuName VARCHAR(255),
	seat INT, 
	
);
修改表时设置标识列
alter table tb_stuinfo modify column id int primary key auto_increment;

猜你喜欢

转载自blog.csdn.net/ysf15609260848/article/details/104841282