MySQL基礎知識總結3/3(DDL)

目錄

 

一、庫的管理

1、庫的創建

2、庫的修改

3、庫的刪除

二、表的管理

1、表的創建

2、表的修改

3、表的刪除 

4、表的複製 

三、常見的數據類型

整型

小數

位類型

char和varchar類型 

binary和varbinary類型 

Enum類型

Set類型 

日期和時間類型

datetime和timestamp的區別

常見約束 

創建表時添加約束

1、添加列級約束

2、添加表級約束

3、主鍵和唯一的對比

修改表時添加約束         

修改表時刪除約束 

案例       

標識列


一、庫的管理

1、庫的創建

語法:

create database 【if  not  exists】 庫名;

2、庫的修改

ALTER DATABASE 表名 CHARACTER SET 字符集;

alter database books 
  character set 'utf8' ;

3、庫的刪除

drop database if exists 庫名  

二、表的管理

1、表的創建

語法:

create table 表名(

                列名  列的類型【(長度) 約束】,

                列名  列的類型【(長度) 約束】,

                列名  列的類型【(長度) 約束】,

                ........

               列名  列的類型【(長度) 約束】

案例:在books數據庫中創建表book

CREATE TABLE book (
	id INT, #編號
	bName VARCHAR(20), #書名
	price DOUBLE, #價格
	authorId INT, #作者Id
	publishDate DATETIME #出版如期
)

 

創建表aothor

CREATE TABLE author(
	id INT, #作者編號
	au_name VARCHAR(20), 
	nation VARCHAR(10)
)

2、表的修改

#①修改列名

ALTER TABLE book 
  CHANGE COLUMN publishDate pubDate DATETIME  --column可以省略

#②修改列的類型或約束

ALTER TABLE book MODIFY COLUMN pubdate TIMESTAMP

#③添加新列

ALTER TABLE `author` ADD COLUMN annual DOUBLE 【first | after字段名】

#④刪除列

ALTER TABLE `author` DROP COLUMN annual

#⑤修改表名

ALTER TABLE `author` RENAME TO book_author

3、表的刪除 

drop table if exists 表名 

通用寫法:

DROP DATABASE IF EXISTS  舊庫名;

CREATE DATABASE  新庫名 ;

 

DROP TABLE IF EXISTS 舊庫名;

CREATE TABLE 表名

4、表的複製 

僅僅複製表的結構

CREATE TABLE COPY LIKE  表名

複製表結構+數據

CREATE  TABLE  COPY2   SELECT *  FROM  表名

三、常見的數據類型

整型

小數

位類型

char和varchar類型 

binary和varbinary類型 

Enum類型

Set類型 

日期和時間類型

datetime和timestamp的區別

 

常見約束 

含義:一種限制,用於限制表中的數據,爲了保證表中的數據的準確性和可靠性

分類:六大約束

NOT NULL:非空,用於保證該字段的值不能爲空。比如姓名、學號等

DEFAULT:默認,用於保證該字段的默認值,比如性別

PRIMARY KEY:主鍵,用於保證該字段的值具有唯一性,並且非空

UNIQUE:唯一,用於保證該字段具有唯一性,可以爲空,比如座位號

CHECK:檢查約束【MySQL不支持】比如年齡、性別

FOREIGN KEY:外鍵,用於限制兩個表的關係,用於保證該字段的值必須來自於主表的關聯列的值

比如:學生表的專業編號,員工表的部門編號,員工表的工種編號

 

添加約束的時機(前提是沒有數據):

1、創建表時

2、修改表時

約束的添加分類:

列級約束

        6大約束語法都支持,但外鍵約束沒有效果

表級約束

        除了非空、默認,其他的都支持

創建表時添加約束

1、添加列級約束

語法:直接在字段名和類型後面追加約束類型即可

只支持  主鍵、非空、默認、唯一

CREATE TABLE stuinfo(
	id INT PRIMARY KEY,#主鍵
	stuName VARCHAR(20) NOT NULL UNIQUE,#非空
	gender CHAR(1) CHECK(gender='男' OR gender ='女'),#檢查
	seat INT UNIQUE,#唯一
	age INT DEFAULT  18,#默認約束
	majorId INT REFERENCES major(id)#外鍵

);

2、添加表級約束

DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
	id INT,
	stuname VARCHAR(20),
	gender CHAR(1),
	seat INT,
	age INT,
	majorid INT,
	
	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)#外鍵
	
);

3、主鍵和唯一的對比

   保證唯一性 是否允許爲空  一個表中可以有多少個 是否允許組合
   主鍵              √              ×                    至多有1個     √,但不推薦
    唯一             √               √                   可以有多個   √,但不推薦
-- 通用的寫法:★

CREATE TABLE IF NOT EXISTS stuinfo(
	id INT PRIMARY KEY,
	stuname VARCHAR(20),
	sex CHAR(1),
	age INT DEFAULT 18,
	seat INT UNIQUE,
	majorid INT,
	CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)

);

4、外鍵的特點            
外鍵:
    1、要求在從表設置外鍵關係
    2、從表的外鍵列的類型和主表的關聯列的類型要求一致或兼容,名稱無要求
    3、主表的關聯列必須是一個key(一般是主鍵或唯一)
    4、插入數據時,先插入主表,再插入從表
    刪除數據時,先刪除從表,再刪除主表  
     

修改表時添加約束         

1、添加列級約束
alter table 表名 modify column 字段名 字段類型 新約束;

2、添加表級約束
alter table 表名 add 【constraint 約束名】 約束類型(字段名) 【外鍵的引用】;
 

DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
	id INT,
	stuname VARCHAR(20),
	gender CHAR(1),
	seat INT,
	age INT,
	majorid INT
)
DESC stuinfo;
-- 1.添加非空約束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20)  NOT NULL;
-- 2.添加默認約束
ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
-- 3.添加主鍵
-- ①列級約束
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
-- ②表級約束
ALTER TABLE stuinfo ADD PRIMARY KEY(id);

修改表時刪除約束 

-- 1.刪除非空約束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;

-- 2.刪除默認約束
ALTER TABLE stuinfo MODIFY COLUMN age INT ;

-- 3.刪除主鍵
ALTER TABLE stuinfo DROP PRIMARY KEY;

-- 4.刪除唯一
ALTER TABLE stuinfo DROP INDEX seat;

-- 5.刪除外鍵
ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;

案例       

-- 1.向表emp2的id列中添加PRIMARY KEY約束(my_emp_id_pk)

ALTER TABLE emp2 MODIFY COLUMN id INT PRIMARY KEY;
ALTER TABLE emp2 ADD CONSTRAINT my_emp_id_pk PRIMARY KEY(id);

-- 2.向表dept2的id列中添加PRIMARY KEY約束(my_dept_id_pk)

-- 3.向表emp2中添加列dept_id,並在其中定義FOREIGN KEY約束,與之相關聯的列是dept2表中的id列。
ALTER TABLE emp2 ADD COLUMN dept_id INT;
ALTER TABLE emp2 ADD CONSTRAINT fk_emp2_dept2 FOREIGN KEY(dept_id) REFERENCES dept2(id);

		位置		支持的約束類型			是否可以起約束名
列級約束:	列的後面	語法都支持,但外鍵沒有效果	不可以
表級約束:	所有列的下面	默認和非空不支持,其他支持	可以(主鍵沒有效果)

標識列

又稱爲自增長列
含義:可以不用手動的插入值,系統提供默認的序列值   

特點:
1、標識列必須和主鍵搭配嗎?不一定,但要求是一個key
2、一個表可以有幾個標識列?至多一個!
3、標識列的類型只能是數值型
4、標識列可以通過 SET auto_increment_increment=3;設置步長
可以通過 手動插入值,設置起始值

DROP TABLE IF EXISTS tab_identity;
CREATE TABLE tab_identity(
	id INT PRIMARY KEY AUTO_INCREMENT ,
	NAME VARCHAR(20),
	seat INT 
);

INSERT INTO tab_identity(NAME) VALUES('lucy');
INSERT INTO tab_identity(id,NAME) VALUES(NULL,'john');  -- 多次插入

     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章