1. 程式人生 > >MySQL資料庫(五)__2018.11.13

MySQL資料庫(五)__2018.11.13

Not NULL:非空

標誌欄位不能為空值。

CREATE TABLE test_not_null(
	a VARCHAR(20),
	b VARCHAR(20) NOT NULL
);

INSERT test_not_null(a,b)VALUES('','');
INSERT test_not_null(a,b)VALUES(NULL,'');
INSERT test_not_null(a,b)VALUES(NULL,NULL);

b欄位是不能為空值的。在插入的時候,一定要給他一個值,且不能為空值。

非空約束。

如果在插入值的時候沒有給值,有預設值的話,則使用預設值。

--測試預設值

CREATE TABLE test_default(
	id INT UNSIGNED AUTO_INCREMENT KEY,
	username VARCHAR(20)NOT NULL,
	age TINYINT UNSIGNED DEFAULT 18,
	email VARCHAR(50) NOT NULL DEFAULT '[email protected]'
);

你賦值的話,就會用你賦的值,不會使用預設值。

INSERT test_default(username)VALUES('A');

INSERT test_default(username,age,email)VALUES('B',30,'
[email protected]
'); INSERT test_default(username,age,email)VALUES('C',NULL,'[email protected]'); INSERT test_default(username,age,email)VALUES('D',NULL,DEFAULT);

default配合not null使用。

測試列舉型別的預設值設定:

CREATE TABLE test_default1(
	id INT UNSIGNED AUTO_INCREMENT KEY,
	sex ENUM('a','b','c')NOT NULL DEFAULT 'a'
);

會使用到預設值。

不能使用‘’因為值不在列舉範圍內。

unique key唯一性索引,可以插入NULL並且不算重複。

一個表中可以出現多個唯一欄位。

指定一個欄位的唯一性。

CREATE TABLE test_unique(
	id INT UNSIGNED AUTO_INCREMENT KEY,
	username VARCHAR(20)NOT NULL UNIQUE key,
	#我想讓它是一個唯一欄位
	email VARCHAR(50)UNIQUE,
	card CHAR(18)UNIQUE
);

INSERT test_unique(username,email,card)VALUES('A','[email protected]','1');

被標誌著唯一性的欄位,值不能重複。

一個表中可以有多個欄位為唯一性索引。

這裡的NULL值不算重複。

有了這些完整性約束條件,我們把之前的使用者表重新寫一下,看看真正的建表語句是什麼樣子的。

#使用者表imooc_user
#用反引號把表名括起來,防止和MySQL關鍵字重複
#用comment對欄位加註釋,養成良好的習慣
CREATE TABLE IF NOT EXISTS `imooc_user`(
	`id` INT UNSIGNED AUTO_INCREMENT KEY COMMENT '使用者編號',
	#可以省略unique Key的key
	`username` VARCHAR(20)NOT NULL UNIQUE COMMENT '使用者名稱',
	#使用定長字串
	`password` CHAR(20) NOT NULL COMMENT '密碼',
	`email` VARCHAR(50) NOT NULL UNIQUE COMMENT '郵箱',
	`age` TINYINT UNSIGNED NOT NULL DEFAULT 18 COMMENT '年齡',
	`sex` ENUM('男','女','保密')NOT NULL DEFAULT '保密' COMMENT '性別',
	#電話號是唯一的不可能重複
	`tel` CHAR(11) NOT NULL UNIQUE COMMENT '電話',
	`addr` VARCHAR(50) NOT NULL DEFAULT '北京' COMMENT '地址',
	`card` CHAR(18) NOT NULL UNIQUE COMMENT '身份證號',
	`married` TINYINT(1) NOT NULL DEFAULT 0 COMMENT'0代表未結婚,1代表已結婚',
	`salary` FLOAT(8,2) NOT NULL DEFAULT 0 COMMENT '薪水'
)ENGINE=INNODB DEFAULT CHARSET=utf8;

查看錶結構:

檢視詳細的建表資訊:

married是一個bool型別。

CREATE TABLE test_bool(
	id INT,
	married BOOL
);

bool全稱boolen。

括號裡面表示的是顯示字長度。

修改資料表。

動態修改表結構。

表結構操作(alter)

指定位置。

增加欄位:alter table_name add 欄位名稱 欄位屬性 (完整性約束條件);

刪除欄位:drop 欄位名稱;

--測試新增和刪除欄位。

CREATE TABLE IF NOT EXISTS user1(
	id INT UNSIGNED AUTO_INCREMENT KEY
);

--新增使用者名稱欄位。

ALTER TABLE user1 ADD username VARCHAR(20);

--新增密碼欄位 password char(32) not null(預設新增到所有欄位之後)

ALTER TABLE user1 ADD PASSWORD CHAR(32) NOT NULL;

--新增有限欄位Email varchar(50)not NULL unique加到username之後。

ALTER TABLE user1 ADD email VARCHAR(50) NOT NULL UNIQUE AFTER username;

新增測試欄位test tinyint(1) not null default 0;加到首位

ALTER TABLE user1 ADD test TINYINT(1) NOT NULL DEFAULT 0 FIRST;

--刪除test欄位

ALTER TABLE user1 DROP test;

--一次新增多個欄位,刪除多個欄位:

#一次選中表,完成多次操作。對效能也是有提升的。
ALTER TABLE user1
ADD age TINYINT UNSIGNED NOT NULL DEFAULT 18,
ADD addr VARCHAR(100) NOT NULL DEFAULT '北京',
ADD email VARCHAR(50) NOT NULL DEFAULT '[email protected]',
DROP eamil;