1. 程式人生 > 其它 >MySQL(3) - 資料庫表的相關操作

MySQL(3) - 資料庫表的相關操作

1.資料庫表的建立

邏輯庫

1)建立邏輯庫:CREATE DATABASE 邏輯庫名稱;
2)顯示邏輯庫:SHOW DATABASES;
3)刪除邏輯庫:DROP DATABASE 邏輯庫名稱;

資料表

1)顯示邏輯庫有哪些表:SHOW TABLES;
2)檢視student表具體資訊:DESC student;
3)檢視當時建立student表的SQL:SHOW CREATE TABLE student;
4)刪除student表:DROP TABLE student;
5)建立資料表(中括號內容非必須項):
CREATE TABLE 資料表(
    列名1 資料型別 【約束】 【COMMENT 註釋】,
    列名2 資料型別 【約束】 【COMMENT 註釋】,   
    ......   
)【COMMENT
=註釋】; #例項: #UNSIGNED :不帶-號的整數; PRIMARY KEY 主鍵 use test; CREATE TABLE student( id INT UNSIGNED PRIMARY KEY, name VARCHAR(20) NOT NULL, sex CHAR(1) NOT NULL, birthday DATE NOT NULL, tel CHAR(11) NOT NULL, remark VARCHAR(200) ); #插入資料校驗 INSERT INTO student VALUES(1,'張三','','2000-02-22
','11111111111',NULL);
6)資料表新增欄位:
ALTER TABLE 表名稱
ADD 列1 資料型別 【約束】 【COMMENT 註釋】,
ADD 列1 資料型別 【約束】 【COMMENT 註釋】,
……;
#例項:
ALTER TABLE student ADD address VARCHAR(200) NOT NULL, ADD home_tel CHAR(11) NOT NULL;
7)修改表字段型別和約束
ALTER TABLE 表名稱
MODIFY 列1 資料型別 【約束】【COMMENT 註釋】,
MODIFY 列2 資料型別 【約束】【COMMENT 註釋】,
……;
#例項
ALTER TABLE student MODIFY home_tel VARCHAR(20) NOT NULL; DESC student;#查看錶資訊,核對欄位是否已修改過來
8)修改表字段名稱
ALTER TABLE 表名稱
CHANGE 列1 新列名1 資料型別 【約束】【COMMENT 註釋】,
CHANGE 列2 新列名2 資料型別 【約束】【COMMENT 註釋】,
……;
#例項
ALTER TABLE student CHANGE address home_address VARCHAR(200) NOT NULL; DESC student;#查看錶資訊,核對欄位是否已修改過來
9)表刪除欄位
ALTER TABLE 表名稱
DROP 列1,
DROP 列2,
……;

#例項
ALTER TABLE student
DROP home_address,
DROP home_tel;

DESC student;#查看錶資訊,核對欄位是否已修改過來

2.不同的資料型別


3.資料庫表字段約束

前置知識

設計資料表要符合第三正規化,下面是欄位約束的講解

CREATE TABLE t_teacher(
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,        #int型別,不能取負整數(UNSIGNED),約束條件:主鍵約束(PRIMARY KEY),id自增(AUTO_INCREMENT)
    name VARCHAR(20) NOT NULL,    #約束條件:非空約束(NOT NULL)
    tel CHAR(11) NOT NULL UNIQUE, #約束條件:非空約束(NOT NULL),唯一約束(UNIQUE)
    married BOOLEAN NOT NULL DEFAULT FALSE    #約束條件:非空約束(NOT NULL),預設值為FALSE(DEFAULT FALSE)
#父表;
CREATE TABLE t_dept(
    deptno INT UNSIGNED PRIMARY KEY,
    dname VARCHAR(20) NOT NULL UNIQUE,
    tel CHAR(4) UNIQUE
);

#子表
CREATE TABLE t_emp(
    empno INT UNSIGNED PRIMARY KEY,
    ename VARCHAR(20) NOT NULL,
    sex ENUM("男","女") NOT NULL,
    deptno INT UNSIGNED,
    hiredate DATE NOT NULL,
    FOREIGN KEY (deptno) REFERENCES t_dept(deptno)    #外來鍵約束
);

4.資料庫的索引機制

檢視資料表有哪些索引

SHOW INDEX FROM 表名;

建立資料表同時建立索引

CREATE TABLE(
    ......,
    INDEX [索引名稱] (欄位),   #[索引名稱]不填時,索引名稱預設就是欄位名稱
    ......
);

#例項
CREATE TABLE t_message(
    id INT UNSIGNED PRIMARY KEY,
    content VARCHAR(200) NOT NULL,
    type ENUM("公告","通知","個人通知"),
    create_time TIMESTAMP NOT NULL,
    INDEX idx_type (type)
);

資料表已經存在,新增索引

#方式一
CREATE INDEX 索引名稱 ON 表名(欄位);

#方式二
ALTER TABLE 表名稱 ADD INDEX [索引名](欄位);

資料表已經存在,刪除索引

DROP INDEX 索引名稱 ON 表名;
DROP INDEX idx_type ON t_message;
CREATE INDEX idx_type ON t_message(type);
SHOW INDEX FROM t_message;

5.MySQL中的相似方法

5.1.DESC和SHOW CREATE TABLE的區別

  • DESC 表名:用來顯示錶的狀態,包括列名(column name),各個列的型別(Type),各個列的值型別,主外來鍵(Key),預設值等;
  • SHOW CREATE TABLE 表名:顯示建立表時的sql語句

5.2.MODIFY和CHANGE的區別

  • CHANGE可以重新命名列名,也可以修改列的資料型別,而MODIFY只能修改列的資料型別。
  • 在使用CHANGE修改資料型別時,CHANGE語法要寫原列名稱和新列名稱,即使原列名稱和新列名稱是一樣的。這種情況下就可以使用MODIFY來改變列的資料型別,不需要重新命名。

5.3.TIME和TIMESTAMP的區別

  • TIME是儲存一天的時間:時分秒
  • TIMESTAMP既有日期也有時間,但是儲存的時間只能是1970-1-1日之後的,在資料庫中儲存格式如下圖所示:

 5.4. CHAR和VARCHAR的區別

  • CHAR儲存定長資料很方便,比如定義CHAR (10),那麼不論你儲存的資料是否達到了10個位元組,都要佔去10個位元組的空間
  • VARCHAR儲存變長資料,若一個欄位值是不固定長度的,我們只知道它不可能超過10個字元,把它定義為 VARCHAR (10)是最合適的。VARCHAR型別的實際長度是它的值的實際長度+1。所加的1位元組就是為了儲存實際使用了多大的長度