MySQL(3) – 數據庫表的相關操作
- 2022 年 5 月 5 日
- 筆記
- MySQL, Python數據庫開發, 測試開發 - python, 測試高級進階 - Mysql
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位元組就是為了存儲實際使用了多大的長度