MySQL資料庫(五)__2018.11.13
阿新 • • 發佈:2018-11-14
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;