DDL語言的學習
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;