菜鳥學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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章