MySQL 基礎+高級篇- 數據庫 -sql -尚硅谷 111-128章

USE vain;
CREATE TABLE copy LIKE stu;#僅僅只能複製表的結構
CREATE TABLE copy2 (SELECT * FROM stu);#複製表的結構+數據
CREATE TABLE copy3 (SELECT sno,sname FROM stu WHERE 1=0);#只複製部分結構不復制數據
ALTER TABLE copy3 DROP COLUMN sname;
/*
數值型:
整形
浮點型
定點型
字符型:
較短的
*/
/*日期型
date只保存日期
time 只保存時間
year 只保存年
datetime 保存日期+時間
timestamp保存日期+時間

特點:
             字節        範圍     時區等影響
datetime      8           1000-9999     不受     
timestamp     4           1970-2038     受
*/
CREATE TABLE tab_data(
t1 DATETIME,
t2 TIMESTAMP
);
INSERT INTO tab_data VALUES(NOW(),NOW());
SELECT * FROM tab_data;
#常見約束
/*
含義:一種限制,用於限制表中的數據,爲了最終保證表中的數據的準確性
分類:六大約束
      NOT NULL: 非空,用於包裝
      比如姓名,學號等
      default:默認,用於保證該字段有默認值
      比如性別
      primary key:主鍵約束,用於保證該字段值具有唯一性,並且非空
      比如學號,員工編號等
      unique:唯一,用於保證該字段的值具有唯一性,可以爲空
      比如座位號
      check:檢查約束【mysql中不支持】
      比如年齡性別
      foreign key外鍵:用於限制兩個表的關係,用於保證該字段的值必須來自於主表的關聯列的值
      在從表加個外鍵約束,用於引用主表中某列的值
      比如學生表的專業編號,員工表的部門編號
*/


#創建表時添加約束
#1.添加列級約束
USE vain;
CREATE TABLE stuinfo (
  id INT PRIMARY KEY,
  #主鍵
  stuName VARCHAR (20) NOT NULL,
  #非空
  gender CHAR(2) CHECK (gender = '男' 
    OR gender = '女'),
  #檢查約束
  seat INT UNIQUE,
  #唯一
  age INT DEFAULT 18
  #默認約束
) ;
#2.添加表級約束
/*
語法:在各個字段的最下面
【constraint 約束名(約束名可以不起)】 + 約束類型 (約束字段)
*/
DROP TABLE IF EXISTS `stuinfo`;
CREATE TABLE major
(
   id INT PRIMARY KEY,
   majorName VARCHAR(20)
);
CREATE TABLE IF NOT EXISTS stuinfo (
  id INT,
  stuname VARCHAR (20),
  gender CHAR(2),
  seat INT,
  age INT,
  majorid INT,
  CONSTRAINT pk PRIMARY KEY (id),
  #主鍵
  CONSTRAINT uq UNIQUE (seat),
  #唯一
  CONSTRAINT ck CHECK (gender = '男' 
    OR gender = '女'),
  #檢查
  CONSTRAINT fk FOREIGN KEY (majorid) REFERENCES major (id) #外鍵
) ;

SHOW INDEX FROM stuinfo;
#主鍵和唯一的區別
/*        保證唯一性 是否爲空 一個表中可以有多少個 是否運行組合
主鍵        1           0        至多有一個          可以,但不推薦
唯一        1           1        可以有多個          可以,但不推薦
*/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章