1_MySQL基礎之數據類型

注:App端的代碼塊區可能會因爲內容過多而顯示不全,請雙擊代碼塊區查看內容!

-- 1*****************************************************************************************************

-- 創建慕課網數據庫 imooc
CREATE DATABASE IF NOT EXISTS imooc DEFAULT CHARACTER SET 'UTF8';
-- 打開數據庫
USE imooc;
-- 用戶表 user
CREATE TABLE IF NOT EXISTS imooc_user(
id INT,
username VARCHAR(20),
password CHAR(32),
email VARCHAR(50),
age TINYINT,
card CHAR(18),
tel CHAR(11),
salary FLOAT(8,2),
married TINYINT(1),
addr VARCHAR(100),
sex ENUM('男','女','保密')
)ENGINE=INNODB CHARSET=UTF8;

-- 2*****************************************************************************************************

-- INSERT [INTO] tbl_name(id,username,...) VALUES(1,'KING',...);
-- 向imooc_user表中插入一條數據
INSERT INTO imooc_user(id,username,password,email,age,card,tel,salary,married,addr,sex)
VALUES(1,'KING','123456','[email protected]',22,'123456789123','12345678911',888888.88,0,'北京','男');
-- 查詢表中所有字段 SELECT * FROM tbl_name;
SELECT * FROM imooc_user;

-- 3*****************************************************************************************************

--測試整型
CREATE TABLE test_int(
	a tinyint,
	b smallint,
	c mediumint,
	d int,
	e bigint
);
-- 插入測試
INSERT test_int(a) VALUES(-128);
INSERT test_int(a) VALUES(-129);-- 超出範圍,報錯
INSERT test_int(a) VALUES(127);
INSERT test_int(a) VALUES(128);--超出範圍,報錯


CREATE TABLE test_unsigned(
	a tinyint,
	b tinyint unsigned
);

INSERT test_unsigned(a,b) VALUES(-12,-12);-- 超出範圍,報錯
INSERT test_unsigned(a,b) VALUES(0,0);
INSERT test_unsigned(a,b) VALUES(0,256);-- 超出範圍,報錯,b的最大值爲255

-- 4*****************************************************************************************************

-- 測試零填充,ZEROFILL
CREATE TABLE test_int1(
	a tinyint ZEROFILL,
	b smallint ZEROFILL,
	c mediumint ZEROFILL,
	d int ZEROFILL,
	e bigint ZEROFILL
);

INSERT INTO test_int1(a,b,c,d,e)VALUES(1,1,1,1,1);

CREATE TABLE test_int2(
	a tinyint(2),
	b smallint(2)
);

INSERT test_int2(a,b) VALUES(123,45678);-- 超出範圍,報錯

-- 5*****************************************************************************************************

-- 測試浮點型
CREATE TABLE test_float(
	a FLOAT(6,2),
	b DOUBLE(6,2),
	c DECIMAL(6,2)
);
INSERT test_float(a,b,c)VALUES(4.142,4.146,4.149);

CREATE TABLE test_float1(
	a FLOAT,
	b DOUBLE,
	c DECIMAL-- 會進行四捨五入
);
INSERT test_float1(a,b,c)VALUES(4.142,4.146,4.149);-- c的值爲4,若c的值爲4.649,則會對c進行四捨五入,c的值爲5

-- 6*****************************************************************************************************

-- 測試char 和varchar
CREATE TABLE test_str(
	a CHAR(5),
	B VARCHAR(5)
);

INSERT test_str(a,b) VALUES('','');
INSERT test_str(a,b) VALUES('a','a');
INSERT test_str(a,b) VALUES('ab','ab');
INSERT test_str(a,b) VALUES('abc','abc');
INSERT test_str(a,b) VALUES('abcd','abcd');
INSERT test_str(a,b) VALUES('abcde','abcde');
INSERT test_str(a,b) VALUES('abcdef','abcdef');-- 插入失敗,原因是字符長度超出範圍
INSERT test_str(a,b) VALUES(' 123 ',' 123 ');-- char類型字符後面的空格會去掉,而varchar會保留該空格

SELECT CONCAT('*',a,'*'),CONCAT('*',b,'*') FROM test_str;

-- 測試TEXT不能有默認值
CREATE TABLE test_str1(
	content TEXT DEFAULT 'This is a Text'
);-- 報錯

-- 測試ENUM
CREATE TABLE test_enum(
	sex ENUM('男','女','保密')
);
INSERT test_enum(sex) VALUES('男');
INSERT test_enum(sex) VALUES(NULL);
INSERT test_enum(sex) VALUES(1);-- 插入'男',結論:編號從1開始

-- 測試ENUM中的空格
CREATE TABLE test_enum1(
	sex ENUM('男   ','女','保密')
);
INSERT test_enum1(sex) VALUES('男');
-- 結論:枚舉類型會自動過濾掉空格

-- 測試SET	應用:在給用戶賦權限時可用
CREATE TABLE test_set(
	a SET('A','B','C','D','E','F')
);

INSERT test_set(a) VALUES('A');
INSERT test_set(a) VALUES('C');
INSERT test_set(a) VALUES('C,D,E');
INSERT test_set(a) VALUES('C,F,A');

INSERT test_set(a) VALUES('C,F,A,H');-- 報錯
INSERT test_set(a) VALUES(2);-- 輸出B

-- 7*****************************************************************************************************

-- HH:MM:SS [D HH:MM:SS] D表示天數 0~34
-- 測試TIME類型
CREATE TABLE test_time(
	a TIME
);
INSERT test_time(a) VALUES('12:23:45');
INSERT test_time(a) VALUES('2 12:23:45');--輸出602345
INSERT test_time(a) VALUES('22:22');--輸出22:22:00
INSERT test_time(a) VALUES('22');-- 輸出00:00:22
INSERT test_time(a) VALUES('2 22');-- 70:00:00
INSERT test_time(a) VALUES('121212');--相當於HHMMSS;c輸出12:12:12
INSERT test_time(a) VALUES('0');--輸出0
INSERT test_time(a) VALUES(0);-- 輸出0
INSERT test_time(a) VALUES('787878');--報錯,提示不符合規範

INSERT test_time(a) VALUES(NOW());-- 插入當前時間
INSERT test_time(a) VALUES(CURRENT_TIME);-- 插入當前時間
-- 補充:得到當前的時間
SELECT CURRENT_TIME;
SELECT CURTIME();

--測試DATE類型 YY-MM-DD 或 YYYYMMDD
CREATE TABLE test_date(
	a DATE
);
INSERT test_date VALUES('2017-03-04');
INSERT test_date VALUES('2017-2-13');
INSERT test_date VALUES('4007-03-23');
INSERT test_date VALUES('40071212');
INSERT test_date VALUES('4007@12@12');
INSERT test_date VALUES('4007#12#13');
INSERT test_date VALUES('4009.8.14');

-- YY-MM-DD YYMMDD
-- YY:70~90 轉換成1970~1999	YY:00~69 2000~2069
INSERT test_date(a) VALUES('780902');
INSERT test_date(a) VALUES('650902');
INSERT test_date(a) VALUES(NOW());
INSERT test_date(a) VALUES(CURRENT_DATE);

--測試DATETIME
CREATE TABLE test_datetime(
a DATETIME
);
INSERT test_datetime(a) VALUES('1004-09-12 13:23:56');
INSERT test_datetime(a) VALUES('720303121212');

--測試TIMESTAMP
CREATE TABLE test_timestamp(
	a TIMESTAMP
);
INSERT test_timestamp(a) VALUES('1978-10-23 12:12:12');
--插入CURRENT_IIMESTAMP、NULL、什麼也不寫,均得到當前系統日期和時間
INSERT test_timestamp VALUES(CURRENT_TIMESTAMP);
INSERT test_timestamp VALUES(NULL);
INSERT test_timestamp VALUES();

--測試YEAR 範圍1901~2155
CREATE TABLE test_year(
	a YEAR
);
INSERT test_year(a) VALUES(1901);
INSERT test_year(a) VALUES(2155);

--00~69 2000~2069 70~99 1970~1999
-- 0 插入的結果是0000
-- '0' 插入的結果是2000

-- 8*****************************************************************************************************

--測試主鍵	注意:表中只能有一個字段是主鍵,但可以有複合主鍵
CREATE TABLE test_primary_key(
	id INT PRIMARY KEY,
	username VARCHAR(20)
);
INSERT test_primary_key(id,username)VALUES(1,'KING');
INSERT test_primary_key(id,username)VALUES(1,'KING123');-- 報錯
INSERT test_primary_key(id,username)VALUES('QUEEN');-- 報錯

--也可以這樣寫
CREATE TABLE test_primary_key1(
	id INT UNSIGNED KEY,
	username VARCHAR(20)
);

CREATE TABLE test_primary_key2(
	id INT UNSIGNED,
	username VARCHAR(20),
	PRIMARY KEY(id)
);

--複合主鍵
CREATE TABLE test_primary_key3(
	id INT UNSIGNED,
	courseId VARCHAR(20),
	username VARCHAR(20),
	email varchar(50),
	PRIMARY KEY(id,courseId)
);
-- 複合主鍵是兩個整體構成的,只要整體不相同,就不會報錯
-- 1-a
INSERT test_primary_key3()VALUES(1,'a','king','[email protected]');
INSERT test_primary_key3()VALUES(1,'b','king','[email protected]');
INSERT test_primary_key3()VALUES(2,'a','king','[email protected]');
INSERT test_primary_key3()VALUES(2,'b','king','[email protected]');

--測試AUTO_INCREMENT
--有AUTO_INCREMENT必須有KEY
CREATE TABLE test_auto_increment(
	id INT UNSIGNED KEY AUTO_INCREMENT,
	username VARCHAR(20)
);

INSERT test_auto_increment(username)VALUES('A');
INSERT test_auto_increment(username)VALUES('B');
INSERT test_auto_increment(username)VALUES('C');
INSERT test_auto_increment(id,username)VALUES(NULL,'E');
INSERT test_auto_increment(id,username)VALUES(DEFAULT,'F');

INSERT test_auto_increment(id,username)VALUES(15,'G');--下次自動增長變爲16

-- 9*****************************************************************************************************

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,NULL);--報錯

--測試默認值
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]'-- NOT NULL一般與DEFAULT搭配
);

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,NULL);--報錯,email不能爲null
INSERT test_default(username,age,email) VALUES('E',NUll,DEFAULT);
INSERT test_default(username,age,email) VALUES('F',NUll,' ');

--枚舉類型與DEFAULT搭配使用
CREATE TABLE test_default1(
	id INT UNSIGNED AUTO_INCREMENT KEY,
	sex ENUM('a','b','c') NOT NULL DEFAULT 'a'
);

INSERT test_default1(sex) VALUES(DEFAULT);
INSERT test_default1(id) VALUES(2);

-- 測試UNIQUE KEY
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');
INSERT test_unique(username,email,card) VALUES('A','[email protected]','11');-- 報錯
INSERT test_unique(username,email,card) VALUES('B',NULL,NULL);
INSERT test_unique(username,email,card) VALUES('C',NULL,NULL);

-- 10*****************************************************************************************************
--用戶表imooc_user1
CREATE TABLE IF NOT EXISTS imooc_user1(
id INT UNSIGNED AUTO_INCREMENT KEY COMMENT '用戶編號',
username VARCHAR(20) NOT NULL UNIQUE COMMENT '用戶名',
password CHAR(32) 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 CHARSET=UTF8;

-- 複習:查看創建的表的結構
DESC imooc_user1;
SHOW CREATE TABLE imooc_user1;
SHOW CREATE TABLE imooc_user1\G
















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章